29 static const double f92g2[
NEXACT] = {5.758e-11, 2.909e-11, 1.440e-11, 6.971e-12,3.282e-12, 1.489e-12, 6.43e-13, 2.588e-13, 9.456e-14, 3.069e-14, 8.793e-15, 2.245e-15, 5.190e-16, 1.107e-16, 2.221e-17, 4.267e-18, 7.960e-19, 1.457e-19,2.636e-20, 4.737e-21};
31 static const double f92n1[
NEXACT] = {9.258e-12, 5.206e-12, 2.927e-12, 1.646e-12, 9.246e-13, 5.184e-13, 2.890e-13, 1.582e-13, 8.255e-14, 3.882e-14, 1.545e-14, 5.058e-15, 1.383e-15, 3.276e-16, 7.006e-17, 1.398e-17, 2.665e-18, 4.940e-19, 9.001e-20, 1.623e-20};
32 static const double tt[
NEXACT] = {3.16227766e+00, 1.0e+01, 3.16227766e+01, 1.0e+02, 3.16227766e+02, 1.00e+03, 3.16227766e+03, 1.e+04, 3.16227766e+04, 1.e+05, 3.16227766e+05, 1.e+06, 3.16227766e+06, 1.0e+07, 3.16227766e+07, 1.0e+08, 3.16227766e+08, 1.0e+09, 3.16227766e+09, 1.0e+10};
38 coolpar.PhotoIonizeFactor = 1;
39 coolpar.SelfShieldingOn = 1;
41 coolpar.PhotoIonizationOn = 1;
44 coolpar.UVRedshiftThreshold = -1;
45 coolpar.MinGasTemp = 100;
46 coolpar.HeliumHeatOn = 0;
47 coolpar.HydrogenHeatAmp = 0;
56 const char * TreeCool = GADGET_TESTDATA_ROOT
"/examples/TREECOOL_ep_2018p";
74 for(i=4; i< 12; i++) {
84 const char * TreeCool = GADGET_TESTDATA_ROOT
"/examples/TREECOOL_ep_2018p";
94 assert_true(uvbg.
epsH0 == 0);
96 assert_true(uvbg.
gJH0 == 0);
99 assert_true(fabs(uvbg.
epsH0/3.65296e-25 -1) < 1e-5);
100 assert_true(fabs(uvbg.
epsHe0/3.98942e-25 -1) < 1e-5);
101 assert_true(fabs(uvbg.
epsHep/3.33253e-26 -1) < 1e-5);
102 assert_true(fabs(uvbg.
gJH0/6.06e-14 -1) < 1e-5);
103 assert_true(fabs(uvbg.
gJHe0/3.03e-14 -1) < 1e-5);
104 assert_true(fabs(uvbg.
gJHep/1.1e-15 -1) < 1e-5);
109 assert_true(fabs(uvbg.
epsH0/5.96570906168362e-24 -1) < 1e-5);
110 assert_true(fabs(uvbg.
epsHe0/4.466976578202419e-24 -1) < 1e-5);
111 assert_true(fabs(uvbg.
epsHep/2.758535690259892e-26 -1) < 1e-5);
112 assert_true(fabs(uvbg.
gJH0/1.0549960730284017e-12 -1) < 1e-5);
113 assert_true(fabs(uvbg.
gJHe0/4.759025257653999e-13 -1) < 1e-5);
114 assert_true(fabs(uvbg.
gJHep/2.270599708640625e-16 -1) < 1e-5);
122 const char * TreeCool = GADGET_TESTDATA_ROOT
"/examples/TREECOOL_ep_2018p";
138 assert_true( fabs(
get_equilib_ne(1e-6, 200.*1e10, 0.24, &logt, &uvbg, 1) / (1e-6*0.76) - (1 + 2* 0.24/(1-0.24)/4)) < 3e-5);
139 assert_true( fabs(
get_equilib_ne(1e-6, 200.*1e10, 0.12, &logt, &uvbg, 1) / (1e-6*0.88) - (1 + 2* 0.12/(1-0.12)/4)) < 3e-5);
140 assert_true( fabs(
get_equilib_ne(1e-5, 200.*1e10, 0.24, &logt, &uvbg, 1) / (1e-5*0.76) - (1 + 2* 0.24/(1-0.24)/4)) < 3e-4);
141 assert_true( fabs(
get_equilib_ne(1e-4, 200.*1e10, 0.24, &logt, &uvbg, 1) / (1e-4*0.76) - (1 + 2* 0.24/(1-0.24)/4)) < 2e-3);
144 double temp =
get_temp(1e-4, 200.*1e10,0.24, &uvbg, &ne);
145 assert_true(9500 < temp);
146 assert_true(temp < 9510);
148 assert_true(fabs(
get_temp(1e-4, 400.*1e10,0.24, &uvbg, &ne) /
get_temp(1e-4, 200.*1e10,0.24, &uvbg, &ne) - 2.) < 1e-3);
150 assert_true(fabs(
get_temp(1, 200.*1e10,0.24, &uvbg, &ne) - 14700) < 200);
153 double dens[3] = {1e-4, 1e-5, 1e-6};
155 for(i = 0; i < 3; i++) {
181 const char * TreeCool = GADGET_TESTDATA_ROOT
"/examples/TREECOOL_ep_2018p";
185 double HubbleParam = 0.697;
186 double UnitDensity_in_cgs = 6.76991e-22;
187 double UnitTime_in_s = 3.08568e+16;
188 double UnitMass_in_g = 1.989e+43;
190 double UnitEnergy_in_cgs = UnitMass_in_g * pow(
UnitLength_in_cm, 2) / pow(UnitTime_in_s, 2);
206 double egyhot = 2104.92;
210 double dens = 0.027755;
214 struct UVBG uvbg = {0};
221 double tcool = egyhot / (- LambdaNet);
230 assert_true(fabs(tcool / 4.68906e-06 - 1) < 1e-3);
235 assert_true(uvbg.
epsHep > 0);
236 assert_true(uvbg.
gJHe0 > 0);
241 assert_true(fabs(LambdaNet / (-0.0410059) - 1) < 1e-3);
244 assert_true(LambdaNet > 0);
251 assert_false(LambdaNet > 0);
252 assert_true(fabs(LambdaNet/ (-1.64834) - 1) < 1e-3);
258 static void test_heatingcooling_rate_sherwood(
void ** state)
269 const char * TreeCool = GADGET_TESTDATA_ROOT
"/examples/TREECOOL_ep_2018p";
273 double HubbleParam = 0.679;
289 double ienergy = 2.105e12;
292 FILE * fd = fopen(
"cooling_rates_sherwood.txt",
"w");
293 fprintf(fd,
"#density = %g temp = %g\n", rhocb, temp);
294 fprintf(fd,
"#zz LambdaNet Heat FF Collis Recomb Cmptn temp ne\n");
295 FILE * fd2 = fopen(
"ion_state.txt",
"w");
296 fprintf(fd2,
"#zz nhcgs nH0 nHe0 nHep nHepp\n");
297 for(i = 0; i < 500; i++)
299 double zz = i * 6./ 500.;
301 double dens = rhocb * pow(1+zz,3);
309 fprintf(fd,
"%g %g %g %g %g %g %g %g %g\n",zz, LambdaNet, Heat, LambdaFF, LambdaCollis, LambdaRecomb, LambdaCmptn, temp, ne);
314 fprintf(fd2,
"%g %g %g %g %g %g\n", zz, dens *
HYDROGEN_MASSFRAC, nH0, He0, Hep, Hepp);
322 const struct CMUnitTest tests[] = {
328 return cmocka_run_group_tests_mpi(tests, NULL, NULL);
static struct cooling_units coolunits
double get_temp(double density, double ienergy, double helium, const struct UVBG *uvbg, double *ne_init)
struct UVBG get_global_UVBG(double redshift)
double get_compton_cooling(double density, double ienergy, double helium, double redshift, double nebynh)
double get_equilib_ne(double density, double ienergy, double helium, double *logt, const struct UVBG *uvbg, double ne_init)
double get_helium_ion_phys_cgs(int ion, double density, double ienergy, double helium, const struct UVBG *uvbg, double ne_init)
double get_heatingcooling_rate(double density, double ienergy, double helium, double redshift, double metallicity, const struct UVBG *uvbg, double *ne_equilib)
void set_coolpar(struct cooling_params cp)
double get_neutral_fraction_phys_cgs(double density, double ienergy, double helium, const struct UVBG *uvbg, double *ne_init)
void init_cooling_rates(const char *TreeCoolFile, const char *MetalCoolFile, Cosmology *CP)
double get_individual_cooling(enum CoolProcess process, double density, double ienergy, double helium, const struct UVBG *uvbg, double *ne_equilib)
#define HYDROGEN_MASSFRAC
static double UnitLength_in_cm
double density_in_phys_cgs
double recomb_alphaHp(double temp)
static void test_heatingcooling_rate(void **state)
static const double tt[NEXACT]
static struct cooling_params get_test_coolpar(void)
static const double f92n1[NEXACT]
static void test_recomb_rates(void **state)
int during_helium_reionization(double redshift)
static void test_rate_network(void **state)
static void test_uvbg_loader(void **state)
static const double f92g2[NEXACT]