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:
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. |