Top |
gdouble | (*NcRecombSeagerKHI2p2Pmean) () |
gdouble | (*NcRecombSeagerKHeI2p) () |
void | (*NcRecombSeagerKHeI2pGrad) () |
NcRecombSeager * | nc_recomb_seager_new () |
NcRecombSeager * | nc_recomb_seager_new_full () |
NcRecombSeager * | nc_recomb_seager_ref () |
void | nc_recomb_seager_free () |
void | nc_recomb_seager_clear () |
void | nc_recomb_seager_set_options () |
void | nc_recomb_seager_set_switch () |
NcRecombSeagerOpt | nc_recomb_seager_get_options () |
gdouble | nc_recomb_seager_pequignot_HI_case_B () |
gdouble | nc_recomb_seager_pequignot_HI_case_B_dTm () |
gdouble | nc_recomb_seager_hummer_HeI_case_B () |
gdouble | nc_recomb_seager_hummer_HeI_case_B_dTm () |
gdouble | nc_recomb_seager_hummer_HeI_case_B_trip () |
gdouble | nc_recomb_seager_hummer_HeI_case_B_trip_dTm () |
Cosmic recobination as initally describe in Seager (1999) and Seager (2000). The code includes now all modifications as in recfast 1.5.2, which includes the modifications discussed in Wong (2008). Nonetheless, we do not include the modification for the matter temperature evolution as describe in Scott (2009). Since we use a more robust integration method such modification for the temperature evolution is simply unnecessary.
See NcRecomb for symbol definitions.
$ \newcommand{\He}{\text{He}} \newcommand{\HeI}{\text{HeI}} \newcommand{\HeII}{\text{HeII}} \newcommand{\HeIII}{\text{HeIII}} \newcommand{\Hy}{\text{H}} \newcommand{\HyI}{\text{HI}} \newcommand{\HyII}{\text{HII}} \newcommand{\e}{{\text{e}^-}} $
This code solves the system of equations for the singly ionized hydrogen $X_\HyII$ and helium $X_\HeII$ as well as for the baryon temperature $T_m$.
The equations are: \begin{align} \frac{\mathrm{d}X_\HyII}{\mathrm{d}x} &= \frac{X_\HyII X_\e n_\Hy - X_\HyI B_{\HyI, 1s\,{}^2\!S_{1/2}}(T_m)}{H x}\left[\alpha_\Hy(T_m)\frac{n_\Hy K_{\HyI} X_\HyI \Lambda_\Hy + 1}{n_\Hy K_{\HyI} X_\HyI \left[\Lambda_\Hy + B_{\HyI, 2s\,{}^2\!S_{1/2}}(T_m) \alpha_\Hy(T_m)\right] + 1}\right], \\ \frac{\mathrm{d}T_m}{\mathrm{d}x} &= \frac{c}{Hx}\frac{8\sigma_\mathrm{T}a_\mathrm{R} T^4_r}{3m_\mathrm{e}c^2} \frac{X_\e(T_m - T_r)}{1 + X_\He + X_\e} + \frac{2T_m}{x}, \\ \frac{\mathrm{d}X_\HeII}{\mathrm{d}x} &= \frac{X_\HeII X_\e n_\Hy - X_\HeI B_{\HeI, 1s\,{}^1\!S_{0}}(T_m)}{H x}\Bigg\{\left[\alpha_\He(T_m)\frac{n_\Hy K_{\HeI} X_\HeI \Lambda_\He + B^{\HeI, 2s\,{}^1\!S_{0}}_{\HeI, 2p\,{}^1\!P_{1}}(T_m)}{n_H K_{\HeI} X_\HeI \left[\Lambda_\He + B_{\HeI, 2s\,{}^1\!S_{0}}(T_m) \alpha_\He(T_m)\right] + B^{\HeI, 2s\,{}^1\!S_{0}}_{\HeI, 2p\,{}^1\!P_{1}}(T_m)}\right] \nonumber\\ &+ \alpha_\He^\mathrm{t}(T_m)\frac{1}{n_H K_{\HeI}^\mathrm{t} X_\HeI B_{\HeI, 2p\,{}^3\!P_\mathrm{mean}}(T_m) \alpha_\He^\mathrm{t}(T_m) + 1} \Bigg\}, \end{align}
The Boltzmann factor for hydrogen levels are given by
$$B_{\HyI, l}(T_m) = k_\mathrm{e}^3(T_m)\,\exp\left[-E_{\HyI, l} / (k_\mathrm{B}T_m)\right],$$
for $l = 1s\,{}^2\!S_{1/2}, 2s\,{}^2\!S_{1/2}$, see ncm_c_boltzmann_factor_HI_1s_2S0_5()
,
ncm_c_boltzmann_factor_HI_2s_2S0_5()
and ncm_c_thermal_wn_e()
for the definition
of the electron thermal wavenumber $k_\mathrm{e}$.
For the helium-I levels the Boltzmann factors are
$$B_{\HeI, l}(T_m) = 4 k_\mathrm{e}^3(T_m)\,\exp\left[-E_{\HeI, l} / (k_\mathrm{B}T_m)\right],$$
where the levels $l$ used are $1s\,{}^1\!S_{0}$, $2s\,{}^1\!S_{0}$ and $2p\,{}^1\!P_{1}$,
see ncm_c_HeI_ion_wn_1s_1S0()
, ncm_c_HeI_ion_wn_2s_1S0()
,
ncm_c_HeI_ion_wn_2p_1P1()
. The symbol $B^{\HeI, 2s\,{}^1\!S_{0}}_{\HeI, 2p\,{}^1\!P_{1}}(T_m)$
represents the ratio of two Boltzmann factors, i.e.,
$$B^{\HeI, 2s\,{}^1\!S_{0}}_{\HeI, 2p\,{}^1\!P_{1}}(T_m) =
\exp\left[-(E_{\HeI, 2s\,{}^1\!S_{0}} - E_{\HeI, 2p\,{}^1\!P_{1}})/ (k_\mathrm{B}T_m)\right].$$
The two photon decaying rates for $\Hy$ is $\Lambda_\Hy$ and is given by ncm_c_decay_H_rate_2s_1s()
,
and for helium-I is $\Lambda_\He$ given by ncm_c_decay_He_rate_2s_1s()
.
The Case B coefficient for $\Hy$, $\alpha_\Hy$ is calculated by nc_recomb_seager_pequignot_HI_case_B()
,
while the Case B coefficient for $\He$, $\alpha_\He$ and $\alpha_\He^\mathrm{t}$ are given
respectively by nc_recomb_seager_hummer_HeI_case_B()
and nc_recomb_seager_hummer_HeI_case_B_trip()
.
The flags in NcRecombSeagerOpt define which are the $K$ factors to be used and whether to include triplets factors in the $\He$ rate.
The code uses nc_recomb_HeII_ion_saha_x_by_HeIII_He()
to obtain the value of $\lambda$
where the numerical integration will start. The integration is performed considering all
components without any switching or approximation.
gdouble (*NcRecombSeagerKHI2p2Pmean) (NcRecombSeager *recomb_seager
,NcHICosmo *cosmo
,const gdouble x
,const gdouble H
);
gdouble (*NcRecombSeagerKHeI2p) (NcRecombSeager *recomb_seager
,NcHICosmo *cosmo
,const gdouble x
,const gdouble XHI
,const gdouble T
,const gdouble XHeI
,const gdouble H
,const gdouble n_H
);
void (*NcRecombSeagerKHeI2pGrad) (NcRecombSeager *recomb_seager
,NcHICosmo *cosmo
,const gdouble x
,const gdouble XHI
,const gdouble T
,const gdouble XHeI
,const gdouble H
,const gdouble n_H
,gdouble grad[3]
);
NcRecombSeager *
nc_recomb_seager_new (void
);
Creates a new NcRecombSeager using default properties.
NcRecombSeager * nc_recomb_seager_new_full (gdouble init_frac
,gdouble zi
,gdouble prec
);
Creates a new NcRecombSeager using init_frac
, zi
and prec
.
NcRecombSeager *
nc_recomb_seager_ref (NcRecombSeager *recomb_seager
);
Increases the reference count of recomb_seager
.
void
nc_recomb_seager_free (NcRecombSeager *recomb_seager
);
Decreases the reference count of recomb_seager
.
void
nc_recomb_seager_clear (NcRecombSeager **recomb_seager
);
Decreases the reference count of *recomb_seager
if
*recomb_seager
is not NULL, then sets *recomb_seager
to NULL.
void nc_recomb_seager_set_options (NcRecombSeager *recomb_seager
,NcRecombSeagerOpt opts
);
Sets integration options NcRecombSeagerOpt. To set the integration
options using the recfast compatible flags use nc_recomb_seager_set_switch()
.
void nc_recomb_seager_set_switch (NcRecombSeager *recomb_seager
,guint H_switch
,guint He_switch
);
Sets integration options NcRecombSeagerOpt using the following map:
H_switch
== 0 => NC_RECOM_SEAGER_OPT_HII_FUDGE;
H_switch
== 1 => NC_RECOM_SEAGER_OPT_HII_FUDGE_GAUSS_COR;
He_switch
== 0 => no additional flag;
He_switch
== 1 => NC_RECOM_SEAGER_OPT_HEII_SOBOLEV_1P1;
He_switch
== 2 => NC_RECOM_SEAGER_OPT_HEII_SOBOLEV_1P1 | NC_RECOM_SEAGER_OPT_HEII_SOBOLEV_1P1_CO;
He_switch
== 3 => NC_RECOM_SEAGER_OPT_HEII_SOBOLEV_1P1 | NC_RECOM_SEAGER_OPT_HEII_SOBOLEV_3P012;
He_switch
== 4 => NC_RECOM_SEAGER_OPT_HEII_SOBOLEV_1P1 | NC_RECOM_SEAGER_OPT_HEII_SOBOLEV_3P012 | NC_RECOM_SEAGER_OPT_HEII_SOBOLEV_3P012_CO;
He_switch
== 5 => NC_RECOM_SEAGER_OPT_HEII_SOBOLEV_1P1 | NC_RECOM_SEAGER_OPT_HEII_SOBOLEV_1P1_CO | NC_RECOM_SEAGER_OPT_HEII_SOBOLEV_3P012;
He_switch
== 6 => NC_RECOM_SEAGER_OPT_HEII_SOBOLEV_1P1 | NC_RECOM_SEAGER_OPT_HEII_SOBOLEV_1P1_CO | NC_RECOM_SEAGER_OPT_HEII_SOBOLEV_3P012 | NC_RECOM_SEAGER_OPT_HEII_SOBOLEV_3P012_CO;
NcRecombSeagerOpt
nc_recomb_seager_get_options (NcRecombSeager *recomb_seager
);
Gets integration options.
gdouble nc_recomb_seager_pequignot_HI_case_B (NcRecombSeager *recomb_seager
,NcHICosmo *cosmo
,const gdouble Tm
);
The case B $\HyII$ recombination coefficient.
The fitting formula of the case B recombination coefficient for $\HyII$ as in Pequignot (1991).
gdouble nc_recomb_seager_pequignot_HI_case_B_dTm (NcRecombSeager *recomb_seager
,NcHICosmo *cosmo
,const gdouble Tm
);
The case B $\HyII$ recombination coefficient derivative with respect to $T_m$.
The derivative of the fitting formula of the case B recombination coefficient for $\HyII$
nc_recomb_seager_pequignot_HI_case_B()
.
gdouble nc_recomb_seager_hummer_HeI_case_B (NcRecombSeager *recomb_seager
,NcHICosmo *cosmo
,const gdouble Tm
);
The case B $\HeII$ recombination coefficient.
The fitting formula of the case B recombination coefficient for $\HeII$ as in Hummer (1998).
gdouble nc_recomb_seager_hummer_HeI_case_B_dTm (NcRecombSeager *recomb_seager
,NcHICosmo *cosmo
,const gdouble Tm
);
The case B $\HeII$ recombination coefficient derivative with respect to Tm.
The derivative of the fitting formula of the case B recombination coefficient for $\HeII$
nc_recomb_seager_hummer_HeI_case_B()
.
gdouble nc_recomb_seager_hummer_HeI_case_B_trip (NcRecombSeager *recomb_seager
,NcHICosmo *cosmo
,const gdouble Tm
);
The case B via triplets $\HeII$ recombination coefficient.
The fitting formula of the case B via triplets recombination coefficient for $\HeII$ as in Hummer (1998).
gdouble nc_recomb_seager_hummer_HeI_case_B_trip_dTm (NcRecombSeager *recomb_seager
,NcHICosmo *cosmo
,const gdouble Tm
);
The case B via triplets $\HeII$ recombination coefficient derivative with respect to Tm.
The derivative of the fitting formula of the case B via triplets recombination coefficient for $\HeII$
nc_recomb_seager_hummer_HeI_case_B_trip()
.
FIXME
Includes fudge factor in the case_B recombination fitting formulas. |
||
Includes gaussian correction in the case_B recombination fitting formulas. |
||
Includes Sobolev scape probability for the $2p\,{}^1\!P_{1} \to 1s\,{}^1\!S_{0}$. |
||
Also includes the continum opacity effect due to H. |
||
Includes Sobolev scape probability for the $2p\,{}^3\!P_{0,1,2} \to 1s\,{}^1\!S_{0}$. |
||
Also includes the continum opacity effect due to H. |
||
All options. |
#define NC_RECOMB_SEAGER_HUMMER_HEI_CASE_B_T1 (pow (10.0, 5.114))
#define NC_RECOMB_SEAGER_HUMMER_HEI_CASE_B_T2 (pow (10.0, 0.477121))
#define NC_RECOMB_SEAGER_HUMMER_HEI_CASE_B_Q (pow (10.0, -16.744))
“options”
property“options” NcRecombSeagerOpt
Integration options.
Owner: NcRecombSeager
Flags: Read / Write / Construct
Default value: NC_RECOM_SEAGER_OPT_HII_FUDGE | NC_RECOM_SEAGER_OPT_HII_FUDGE_GAUSS_COR | NC_RECOM_SEAGER_OPT_HEII_SOBOLEV_1P1 | NC_RECOM_SEAGER_OPT_HEII_SOBOLEV_1P1_CO | NC_RECOM_SEAGER_OPT_HEII_SOBOLEV_3P012 | NC_RECOM_SEAGER_OPT_HEII_SOBOLEV_3P012_CO