Chemical State¶
Class providing the chemical state of gas, specifically the free electron number density (in cm\(^{-3}\)) and its logarithmic gradients with respect to temperature and total density, as functions of hydrogen number density, temperature, elemental abundances, and an ambient radiation field. The electron density enters cooling rates, recombination rates, and the Jeans mass, while the logarithmic slopes are needed for implicit solvers and stability analyses. Implementations range from collisional ionization equilibrium (CIE) tables to non-equilibrium photoionization models.
Default implementation: chemicalStateAtomicCIECloudy
Methods¶
electronDensity→double precisionReturn the electron density at the given temperature and hydrogen density for the specified set of abundances and radiation field. Units of the returned electron density are cm\(^-3\).
double precision numberDensityHydrogen[in]double precision temperature[in]type(abundances) gasAbundances[in]class(radiationFieldClass) radiation[inout]
electronDensityTemperatureLogSlope→double precisionReturn the logarithmic gradient of electron density with temperature at the given temperature and hydrogen density for the specified set of abundances and radiation field.
double precision numberDensityHydrogen[in]double precision temperature[in]type(abundances) gasAbundances[in]class(radiationFieldClass) radiation[inout]
electronDensityDensityLogSlope→double precisionReturn the logarithmic gradient of electron density with respect to density at the given temperature and hydrogen density for the specified set of abundances and radiation field.
double precision numberDensityHydrogen[in]double precision temperature[in]type(abundances) gasAbundances[in]class(radiationFieldClass) radiation[inout]
chemicalDensitiesReturn the densities of chemical species at the given temperature and hydrogen density for the specified set of abundances and radiation field. Units of the returned electron density are cm\(^-3\).
type(chemicalAbundances) chemicalDensities[inout]double precision numberDensityHydrogen[in]double precision temperature[in]type(abundances) gasAbundances[in]class(radiationFieldClass) radiation[inout]
chemicalStateAtomicCIECloudy¶
A chemical state class that computes the chemical state using the Cloudy code and under the assumption of collisional ionization equilibrium with no molecular contribution. Abundances are Solar, except for zero metallicity calculations which use Cloudy’s “primordial” metallicity. The helium abundance for non-zero metallicity is scaled between primordial and Solar values linearly with metallicity. The Cloudy code will be downloaded and run to compute the cooling function as needed, which will then be stored for future use. As this process is slow, a precomputed table is provided with Galacticus. If metallicities outside the range tabulated in this file are required it will be regenerated with an appropriate range.
(Default implementation)
Methods
tabulateRun Cloudy to tabulate chemical state as necessary.
type(abundances) gasAbundances[in]
Parameters
[fileName](string) — The name of the file containing a tabulation of the collisional ionization equilibrium chemical state. (inherited fromchemicalStateCIEFile)
chemicalStateCIEFile¶
A chemical state class providing chemical state via interpolation of tabulated values read from file. The HDF5 file containing the table should have the following form:
HDF5 "chemicalState.hdf5" {
GROUP "/" {
ATTRIBUTE "fileFormat" {
DATATYPE H5T_STRING {
STRSIZE 1;
STRPAD H5T_STR_NULLTERM;
CSET H5T_CSET_ASCII;
CTYPE H5T_C_S1;
}
DATASPACE SCALAR
DATA {
(0): "1"
}
}
DATASET "electronDensity" {
DATATYPE H5T_IEEE_F64LE
DATASPACE SIMPLE { ( 7, 8 ) / ( 7, 8 ) }
}
DATASET "hiDensity" {
DATATYPE H5T_IEEE_F64LE
DATASPACE SIMPLE { ( 7, 8 ) / ( 7, 8 ) }
}
DATASET "hiiDensity" {
DATATYPE H5T_IEEE_F64LE
DATASPACE SIMPLE { ( 7, 8 ) / ( 7, 8 ) }
}
DATASET "metallicity" {
DATATYPE H5T_IEEE_F64LE
DATASPACE SIMPLE { ( 8 ) / ( 8 ) }
ATTRIBUTE "extrapolateHigh" {
DATATYPE H5T_STRING {
STRSIZE 3;
STRPAD H5T_STR_NULLTERM;
CSET H5T_CSET_ASCII;
CTYPE H5T_C_S1;
}
DATASPACE SCALAR
DATA {
(0): "fix"
}
}
ATTRIBUTE "extrapolateLow" {
DATATYPE H5T_STRING {
STRSIZE 3;
STRPAD H5T_STR_NULLTERM;
CSET H5T_CSET_ASCII;
CTYPE H5T_C_S1;
}
DATASPACE SCALAR
DATA {
(0): "fix"
}
}
}
DATASET "temperature" {
DATATYPE H5T_IEEE_F64LE
DATASPACE SIMPLE { ( 7 ) / ( 7 ) }
ATTRIBUTE "extrapolateHigh" {
DATATYPE H5T_STRING {
STRSIZE 3;
STRPAD H5T_STR_NULLTERM;
CSET H5T_CSET_ASCII;
CTYPE H5T_C_S1;
}
DATASPACE SCALAR
DATA {
(0): "fix"
}
}
ATTRIBUTE "extrapolateLow" {
DATATYPE H5T_STRING {
STRSIZE 3;
STRPAD H5T_STR_NULLTERM;
CSET H5T_CSET_ASCII;
CTYPE H5T_C_S1;
}
DATASPACE SCALAR
DATA {
(0): "fix"
}
}
}
}
}
The temperature dataset should specify temperature (in Kelvin), while the metallicity dataset should give the logarithmic metallicity relative to Solar (a value of -999 or less is taken to imply zero metallicity). The electronDensity dataset should specify the number density of electrons relative to hydrogen at each temperature/metallicity pair. Optionally hiDensity and hiiDensity datasets may be added giving the number densities of H i and H ii relative to hydrogen respectively The extrapolateLow and extrapolateHigh attributes of the temperature and metallicity datasets specify how the cooling rate should be extrapolated in the low and high vale limits. Allowed options for these attributes are:
zeroThe electron density is set to zero beyond the relevant limit.
fixedThe electron density is held fixed at the value at the relevant limit.
power lawThe electron density is extrapolated assuming a power-law dependence beyond the relevant limit. This option is only allowed if the electron density is everywhere positive.
If the electron density is everywhere positive the interpolation will be done in the logarithmic of temperature, metallicity[1] and electron density. Otherwise, interpolation is linear in these quantities. The electron density is scaled assuming a linear dependence on hydrogen density.
Methods
readFileRead the named chemical state file.
character(len=*) fileName[in]
interpolatingFactorsCompute interpolating factors in a CIE chemical state file.
double precision temperature[in]double precision metallicity[in]integer(c_size_t) iTemperature[out]double precision hTemperature[out]integer(c_size_t) iMetallicity[out]double precision hMetallicity[out]
interpolate→double precisionInterpolate in the given density table.
integer(c_size_t) iTemperature[in]double precision hTemperature[in]integer(c_size_t) iMetallicity[in]double precision hMetallicity[in]double precision(:,:) density[in]
Parameters
[fileName](string) — The name of the file containing a tabulation of the collisional ionization equilibrium chemical state.