Grid of line radiative transfer models for isothermal semi-infinite slabs

The following switch in Parameter.in:

.true.   ! slab_escape

will call directly the escape probability module stateq_it.f to compute a grid of LTE and NLTE population semi-infinite slab models. This mode of ProDiMo provides the same functionalities than Radex with the addition of treating LTE population.

The computed line fluxes are in units of erg/s/cm2/sr. ProDiMo will write two special output files called SlabResults.out and SlabLineCoolings.out. No ProDiMo disk model is run in this mode.

Input files (page under development)

Slab models need two input files, Parameter.in and SlabInput.in (also requires LineSelection.in if you specify line selection for hitran molecules outside Parameter.in).

You need to provide three other standard ProDiMo input files: Species.in, Elements.in, Reactions.in, but they are not relevant for the results.

Including the switch .true. ! slab_escape in Parameter.in tells ProDiMo to run slab models instead of full disk models. Parameter.in also defines the common parameters across the slab models such as dust composition, HITRAN data version, basic molecule line selection.

SlabInput.in defines the physical parameters of the slab models. This can include multiple slab model setups. The physical parameters are column density, slab gas and dust temperature, densities of collision partners, broadening parameter etc.

Example Parameter.in file for water slab model (with minimum required common parameters)

------------------------------------------
***  Parameter Input-File for ProDiMo  ***
------------------------------------------

------- minimum common parameters -----------
2.2         ! Mstar     [Msun]   : stellar mass 
32.0        ! Lstar     [Lsun]   : stellar luminosity
8600.0      ! Teff      [K]      : stellar effective temperature
1.E-2       ! Mdisk     [Msun]   : disk mass
1.0         ! Rin       [AU]     : inner disk radius
300.0       ! Rout      [AU]     : outer disk radius 
0.01        ! dust_to_gas
.true.      ! Xrays       [-]    : use Xray chemistry and heating?
.true.      ! solve_temp         : solve the heating/cooling balance?
.false.     ! restart            : restart from checkpoint file?
onlyadd     ! handle_UMIST       : handle UMIST-data (erase/overwrite/onlyadd)
0           ! num_noerase        : exceptions from erasing UMIST data

----- dust size and composition -----
0.05        ! amin      [mic]    : minimum dust particle size  
1000.0      ! amax      [mic]    : maximum dust particle size
3.5         ! apow      [-]      : dust size distr power index f(a)~a^-apow

---- line selection and collision rates ----
.true. ! H2O_rovib_Lambda   ! rovib from lamda database default

----- slab model switch -----
.true.       ! slab_escape

For CO you can customize the molecules (which electronic states to use, how many vibrational, rotational levels in each etc.), for water you can decide which collision cross section to use. The above example selects the the default water lines and collision rates used in ProDiMo models. The values of minimum common parameters do not affect the slab results, but are required for running prodimo.

Example SlabInput.in file for two water slab models combined in one input file

***********************************************************
*** Input file for slab escape probability with ProDiMo ***
***********************************************************
*** nmodels should follow output_filename ***
SlabResults.out ! output_filename
2               ! nmodels
-------------------------------------------------------
*** model 1 ***
1e19      ! NHtot       [cm^-2]  total gas column density
1e-1      ! nH+         [cm^-3]  proton number density
1e6       ! nHI         [cm^-3]  atomic hydrogen
1e6       ! nH2         [cm^-3]  molecular hydrogen
1e6       ! nHe         [cm^-3]  Helium
1e3       ! nelec       [cm^-3]  electron number density
600.      ! Tgas        [K]      gas temperature
5.        ! Tdust       [K]      dust temperature
1.0       ! vturb       [kms/s]  turbulent velocity
1e-2      ! dust_to_gas 
1         ! Nspecies             number of species for that model
o-H2O      1e-2                   
          ! end
-------------------------------------------------------
*** model 2 ***
1e20      ! NHtot       [cm^-2]  total gas column density
1e-1      ! nH+         [cm^-3]  proton number density
1e6       ! nHI         [cm^-3]  atomic hydrogen
1e6       ! nH2         [cm^-3]  molecular hydrogen
1e6       ! nHe         [cm^-3]  Helium
1e3       ! nelec       [cm^-3]  electron number density
800.      ! Tgas        [K]      gas temperature
5.        ! Tdust       [K]      dust temperature
1.0       ! vturb       [kms/s]  turbulent velocity
1e-2      ! dust_to_gas 
1         ! Nspecies             number of species for that model
o-H2O      1e-2                   
! end

Other example

Another example where the second model will compute emission lines for two species H2O and CO. For H2O one needs to specify either it is ortho-water or para-water:

***********************************************************
*** Input file for slab escape probability with ProDiMo ***
***********************************************************
*** nmodels should follow output_filename ***
SlabResults.out ! output_filename
1              ! nmodels
-------------------------------------------------------
*** model 1 ***
4e21     ! NHtot  [cm^-2] total gas column density
10.      ! nH+    [cm^-3] proton number density
5e8      ! nHI    [cm^-3] atomic hydrogen
5e8      ! nH2    [cm^-3] molecular hydrogen
1e6      ! nHe    [cm^-3] Helium
1e2      ! nelec  [cm^-3] electron number density
800.     ! Tgas   [K]     gas temperature
300.     ! Tdust  [K]     dust temperature
0.1      ! vturb  [kms/s] turbulent velocity
1e-2     ! dust_to_gas
1        ! Nspecies       number of species for that model
CO      1e-4
! end
-------------------------------------------------------
*** model 2 ***
1e21    ! NHtot   [cm^-2] total gas column density
10.     ! nH+     [cm^-3]
1e4     ! nHI     [cm^-3]
1e4     ! nH2     [cm^-3]
1e2     ! nHe     [cm^-3]
1e2     ! nelec   [cm^-3]
700.    ! Tgas    [K]
400.    ! Tdust   [K]
0.1     ! vturb   [kms/]
1e-2    ! dust_to_gas
2       ! Nspecies
CO      3e-4
o-H2O   1e-4
! end
-------------------------------------------------------

Output

Running ProDiMo will produce an output file SlabResults.out. In that output file, all models are stored. The general format of the output is:

  • number of models
  • model 1
  • model 1 parameters
  • species 1
    • species 1 level data
    • species 1 line data with LTE and NLTE fluxes
  • species 2
  • ...
  • model 2
  • model 2 parameters
  • species 1
    • species 1 level data
    • species 1 line data with LTE and NLTE fluxes
  • species 2
  • ...
  • ...

It is possible to produce one output file per slab model by including the following in SlabInput.in:

"H2O_"    ! output_filename
.true.    ! separate_op_files

This will produce H2O_0001.out, H2O_0002.out, ... If you require prodimo to output the files in a folder you can include it in the output filename, for example "folder1/H2O_" ! output_filename.

There is an idl script slabplot-H2O.pro, which reads the output file and makes two types of figures: (1) Boltzmann diagram and (2) flux diagram. It plots the LTE (black) and NLTE (red) results, so you can see whether or not your line fluxes are in LTE. In LTE and for optically thin conditions, you find a Boltzmann diagram with a straight line. Both NLTE and optical depth will lead to curvature (deviations from a straight line) in this diagram. Note that the normalization constant for the y-axis is arbitray. The xmin and xmax keywords allow you to select levels/lines to be shown. For now it selects the energy range to be plotted in the Boltzmann diagram, but you can change this.

IDL> .r slabplot-H2O.pro
IDL> slabplot, xmin=0., xmax=5000., fname='SlabResults.out'

Choice of escape probability law

Instead of a semi-infinite slab (i.e. escape probablity beta>=0.5), one can choose to model a sphere, then ProDiMo will use the same escape probability model than in the Radex code as derived by Osterbrock in 1974. For that in Parameter.in:

.true. ! escape_sphere

Different implementation of the escape probability can be used

.true. ! escape_Radex_slab

uses the De Jong's formulation as used in the RADEX code. The escape probability is between 0 and 1, i.e. it models a slab where the photons can escape by both sides.

.true. ! escape_radex_sphere

uses the RADEX spherical escape probability formulation. The formula is an updated version of the Osterbrock 1974 implementation. As such using either spherical escape should give similar results. The escape probability can vary from 0 to 1 in that case.

Other switches are available for checking. If one wants the starting level population at a given excitation temperature Tex then

10. ! Tex_subthermal

If one wants this starting population to be random:

.true. ! random_initial_population

One can force the level population solver to perform a minimum number of iterations (default = 3):

5           ! stateq_min_iter

Those switches make tests of the level population convergence possible. One should arrive at the same population whatever the initial guess population.

The input file that describes the grid of model is called SlabInput.in. The inputs are self-explanatory. Example files are given in ../examples/SlabModels/.

The LTE model fluxes will also depend on the escape probability method because only the population is at LTE, the photon escape is still accounted for. In NLTE (non-LTE), both the level population and the fluxes are computed using the escape probability for each line.

More on line selection for HITRAN molecules

Molecules from HITRAN data can be used in LTE (no NLTE as the HITRAN database does not provide collision rates). The molecules already included in ProDiMo have associated corresponding switches:

Molecule Switch Source
C2H2 ! C2H2_LTE_cooling HITRAN
CH4 ! CH4_LTE_cooling HITRAN
CO2 ! CO2_LTE_cooling HITRAN
NH3 ! NH3rovib_LTE_cooling HITRAN
HCN ! HCNrovib_LTE_cooling HITRAN
H2CO ! H2COrovib_LTE_cooling HITRAN
CH3OH ! CH3OHrovib_LTE_cooling HITRAN
NO ! NOrovib_LTE_cooling HITRAN
O2 ! O2rovib_LTE_cooling HITRAN
SO2 ! SO2rovib_LTE_cooling HITRAN
CS ! CSrovib_LTE_cooling HITRAN
CH3CN ! CH3CNrovib_LTE_cooling HITRAN
OH ! OHrovib_LTE_cooling HITRAN
H2S ! H2Srovib_LTE_cooling HITRAN
CH3 !CH3_LTE_cooling Ahmad+2019
C2H4 !C2H4_LTE_cooling HITRAN
C2H6 !C2H6_LTE_cooling HITRAN
C3H4 !C3H4_LTE_cooling HITRAN
C4H2 !C4H2_LTE_cooling HITRAN
C6H6 !C6H6_LTE_cooling HITRAN

The default line selections for these molecules are explained in mid_IR_lines.

One can use HITRAN 2020 version of the line data by using the switch .true. ! hitran2020in Parameter.in. The above HITRAN line selection using LTE_cooling switches goes in the Parameter.in file, but one can simply skip this and make a detailed line selection using a LineSelection.in file. For example, the LineSelection.in can be:

***********************************************************
******** Input file for line selection with ProDiMo *******
***********************************************************
C2H2_H      ! name
CO2_H       ! name
HCN_H       ! name
NH3_H       ! name

For advanced line selection, one needs to describe, in the LineSelection.in input file, the line selection rules per molecule as described in mid_IR_lines.

N.B. for CH3, please cite the paper Ahmad et al. 2019

The LineSelection.in is an optional file to be created by the user and located in the model directory if supplementary transitions are required.

Custom Molecules

It is also possible to include so called custom molecules in the slab models, meaning one can load the required line date from a file that is not included in ProDiMo by default. For details see Custom Lines/Molecules.

References

  • Adam Ahmad et al. J. Phys. Chem. A 2019, 123, 22, 4755–4763
  • Barklem, P. S., Collet, R., 2016 "Partition functions and equilibrium constants for diatomic molecules and atoms of astrophysical interest", A&A 588, A96
  • Changala et al. 2023 A&A, 680, A19
  • Barklem, P. S., Collet, R., 2016 "Partition functions and equilibrium constants for diatomic molecules and atoms of astrophysical interest", A&A 588, A96
  • Bernath, P.F., 2020, "MoLLIST: Molecular Line Lists, Intensities and Spectra", Journal of Quantitative Spectroscopy and Radiative Transfer 240, 106687
  • Hodges, J. N., Bernath, P. F., 2017, "Fourier transform spectroscopy of the A3Π - X3Σ- transition of OH+", The astrophysical journal 840, 81-88
  • Masseron, T., Plez, B., Van Eck, S., Colin, R., Daoutidis, I., Godefroid, M., Coheur, P. -F., Bernath, P., Jorissen, A., Christlieb, N., 2014 "CH in stellar atmospheres: an extensive linelist", A&A 571, A47
  • Mizus, I. I., Alijah, A., Zobov, N. F., Lodi, L., Kyuberis, A. A., Yurchenko, S. N., Tennyson, J., Polyansky, O. L., 2017 "ExoMol molecular line lists – XX. A comprehensive line list for H3+", 2017, MNRAS, 468 (2), 1717
  • Pearce, O., Yurchenko, S.N., Tennyson, J., "ExoMol line lists - LII. Line Lists for the Methylidyne Cation (CH+)"
  • Yurchenko, S.N., Tennyson, J., Syme, A.M., Adam, A.Y. Clark, V.H.J, Cooper, B., Dobney, C.P., Donnelly, S.T.E., Gorman, M.N., Lynas-Gray, A.E., Meltzer, T. Owens, A., Qu, Q. Semenov, M., Somogyi, W., Upadhyay, A., Wright, S., Zapata Trujillo, J.C., 2021"ExoMol line lists - XLIV. IR and UV line list of silicon monoxide (28Si16O)", MNRAS 510, 903-919

Options in slab models

By default ProDiMo solves the slab models line-by-line, in which each line is totally independent of the line width of neighbouring lines. i.e., no mutual line absorption is taken into account. However, by using the switch .true. ! line_overlap in Parameter.in, ProDiMo will calculate models accounting for mutual line overlap. For models with large column densities leading to large optical depths, the mutual line overlap becomes very important as the lines start to get very broad and interact with neighbouring lines. With the line overlap mode, the final output is a spectra at high spectral resolving power (by default R=1e6) instead of line fluxes for individual transistions. Further, using line overlap, allows calculating slab models with mutual line interactions between different species. The individual line-by-line solution can be skipped by setting .true. ! no_individual_lines.

ProDiMo provides two solutions for line calculations in slab models: 1) Escape probability approach 2) Radiative transfer solution.

1) Escape probability approach (.false. ! slab_RT): It is a simplified approach based on approximating the line radiative transfer equation with an escape probability recipe from Sobolev (1947, 1957). The line intensities are calculated on a line-by-line approach using the following equation:

I0=hνAul4πNHϵspbuβesc(τ0) I_0=\frac{h\nu A_{ul}}{4\pi}N_H\epsilon_{sp}b_u\beta_{esc}(\tau_0)

where, h is the planck constant, ν is the line frequency, Aul is the Einstein A coefficient of transition from upper (u) to lower (l) levels, NH is the total gas column density, ϵsp is the abundance of the gas species sp, bu is the normalised level population such that NHϵspbu is the total level population column density of the species. Here βesc(τ0) is the Sobolev escape probability with τ0 being the line central optical depth. It is defined as the probability that a photon emitted from a point at a given optical depth will escape the medium in a single flight without suffering absorption or scattering on its way. The escape probability approximation changes based on the geometry chosen. [Current geometry/approximation options: default ProDiMo, Radex slab (de Jong formula), Radex_sphere (Osterbrock)]

2) Radiative transfer solution (.true. ! slab_RT, default): This is based on the radiative transfer equation assuming the slab models are a single point along the ray path and no background radiation field. In this option, the dust opacity is not considered. The line shapes are assumed to be Gaussian.

Running a grid of slab models

For a detailed study of molecular spectra, it becomes important to run a grid of models for one or multiple molecules at a time. This might make it cumbersome to manually write the SlabInput.in file as it requires the definition of each model. For this, the prodimopy slab routines can be used. Prodimopy also includes routines to plot slab model lines, convolve and plot spectrum, plot the level diagram of a selected wavelength range, and read slab output files.

NOTE: Running large grids of slab models produces lots of redundant output. For example, the same level list is repeated for every model. This leads to huge memory and storage requirements and also slows down, say, the chi2 fit using these outputs.

Howevever, the switch

.true. ! short_format

allows storing minimal data (skips the level block. And the line block, only stores the line fluxes and frequency).

Output options

The default ProDiMo slab output file is an ASCII file and has a .out extension. This contains level data and line data. By default, the output of all models in the SlabInput.in are stored in a single output file. This can lead to an extremely large output file if you run a large grid of slab models. In such cases, .true. ! separate_op_files as described above. Similar to the ! output_filename (shown above), the file name for an overlap model can also be specified using ! overlap_filename.

Summary switches

(Molecular switches are explained elsewhere)

Switch What? Where? Default Comments
slab_escape Tells ProDiMo to run slab models Parameter.in .false.
line_overlap Initiates mutual line overlap calculations Parameter.in .false.
separate_op_files Produces one file per model specified in SlabInput.in SlabInput.in .false.
fits_op_files Produces FITS format output instead of ASCII SlabInput.in .false.
slab_rt Radiative transfer line solution SlabInput.in .true.
no_individual_lines Skip line-by-line calculations SlabInput.in .false.
short_format Produce smaller output files SlabInput.in .false.
slab_1D Initiate 1D slab models SlabInput.in .false.