atm_profileFitNonLTE

Workspace.atm_profileFitNonLTE(self, atm_profile: ArrayOfAtmPoint = self.atm_profile, abs_bands: AbsorptionBands = self.abs_bands, spectral_propmat_agenda: Agenda = self.spectral_propmat_agenda, surf_field: SurfaceField = self.surf_field, freq_grid: AscendingGrid = self.freq_grid, alt_grid: AscendingGrid = self.alt_grid, lat: Numeric = self.lat, lon: Numeric = self.lon, collision_data: QuantumIdentifierGriddedField1Map, levels: ArrayOfQuantumLevelIdentifier, pol: Stokvec = [1, 0, 0, 0], azi: Numeric = 0, dzen: Numeric = 5, convergence_limit: Numeric = 1e-06, iteration_limit: Index = 100, consider_limb: Index = 1) → None

Fits non-LTE distributions to the level data.

The spectral flux is computed from the pseudo-2D assumption.

This method fits non-LTE distributions to the level data in the atmospheric field. It only works for absorption band data that is separated by single-lines-per-band, and will produce nonsense for overlapping line data. If the lines overlap, the method will keep introducing more-and-more energy into the system, meaning that the method will not converge or turn to some extreme stable state.

The statistical equilibrium equation is given by finding valid set of energy level distribution \(n\) such that for all valid energy level combination of upper levels \(i\) and lower levels \(j\) the rate of change is zero for some \(n\) that satisfies the equation

\[\frac{d n_i}{dt} = \sum_{j > i} \left[ n_j A_{ji} - \left( n_i B_{ij} - n_j B_{ji} \right) J_{ij} \right] - \sum_{j < i} \left[ n_i A_{ij} - \left( n_j B_{ji} - n_i B_{ij} \right) J_{ij} \right] + \sum_{j} \left[ n_j C_{ji} - n_i C_{ij} \right],\]

where \(A_{ij}\) is the spontaneous emission rate, \(B_{ij}\) is the stimulated emission rate, \(B_{ij}\) is the photon absorption rate, \(J_{ij}\) is the line-integrated flux, and \(C_{ij}\) is the collisional rate.

Generally, you need \(n\) to compute \(J_{ij}\), making the problem non-linear. Thus an iterative process is used to find the solution. The iteration is considered converged when the relative change in the energy level distribution is below the convergence criterion. Alternatively, the iteration is halted if the iteration count limit is breached.

The method used here is based on Yamada, T. et al. [43]

Author: Richard Larsson

Used by wrapper method

Parameters:
  • atm_profile (~pyarts3.arts.ArrayOfAtmPoint, optional) – A special case atmospheric profile in ARTS for 1D/2D calculations, see atm_field for the common interface. Defaults to self.atm_profile. [INOUT]

  • abs_bands (~pyarts3.arts.AbsorptionBands, optional) – Bands of absorption lines for line-by-line (LBL) calculations. Defaults to self.abs_bands. [IN]

  • spectral_propmat_agenda (~pyarts3.arts.Agenda, optional) – Computes the propagation matrix, the non-LTE source vector, and their derivatives. Defaults to self.spectral_propmat_agenda. [IN]

  • surf_field (~pyarts3.arts.SurfaceField, optional) – The surface field. Defaults to self.surf_field. [IN]

  • freq_grid (~pyarts3.arts.AscendingGrid, optional) – A frequency grid. Unit: Hz. Defaults to self.freq_grid. [IN]

  • alt_grid (~pyarts3.arts.AscendingGrid, optional) – An ascending list of alt. Often related to a field or a profile. Defaults to self.alt_grid. [IN]

  • lat (~pyarts3.arts.Numeric, optional) – A single latitude. Defaults to self.lat. [IN]

  • lon (~pyarts3.arts.Numeric, optional) – A single longitude. Defaults to self.lon. [IN]

  • collision_data (QuantumIdentifierGriddedField1Map) – Collision data for the transitions - for \(C_{ij}\) and \(C_{ji}\). [IN]

  • levels (ArrayOfQuantumLevelIdentifier) – The order of the energy levels. [IN]

  • pol (~pyarts3.arts.Stokvec, optional) – The polarization selection vector (use the default unless you know what you are doing). Defaults to 1 0 0 0 [IN]

  • azi (~pyarts3.arts.Numeric, optional) – The azimuth of the radiation. Defaults to 0 [IN]

  • dzen (~pyarts3.arts.Numeric, optional) – The zenith angle limit for the internal call to zen_gridProfilePseudo2D(). Defaults to 5 [IN]

  • convergence_limit (~pyarts3.arts.Numeric, optional) – Convergence criterion for the energy level distribution. Defaults to 1e-06 [IN]

  • iteration_limit (~pyarts3.arts.Index, optional) – Maximum number of iterations. Defaults to 100 [IN]

  • consider_limb (~pyarts3.arts.Index, optional) – Whether to add extra limb points in zen_gridProfilePseudo2D(). Defaults to 1 [IN]