Fast Methods for Cosmological Simulations
FastSim serves as a tool for quick N-body simulations in modified gravity.
ccl_test_params.c
Go to the documentation of this file.
1 #include <math.h>
2 #include "ccl.h"
3 #include "ctest.h"
4 
5 // We can define any constants we want to use in a set of tests here.
6 // They are accessible as data->Omega_c, etc., in the tests themselves below.
7 // "params" is the name of the whole suite of tests.
8 CTEST_DATA(parameters) {
9  double Omega_c;
10  double Omega_b;
11  double Omega_k;
12  double Neff;
13  double mnu[3];
14  double h;
15  double A_s;
16  double n_s;
17  double wa;
18  double w0;
19  double bcm_log10Mc;
20  double bcm_etab;
21  double bcm_ks;
22  int status;
23 };
24 
25 // This function is one before each test defined below with CTEST2 in the suite.
26 // It is used to set up any values needed by the tests. The data
27 // that can be passed to the tests are always in a struct called "data"
28 // and defined above.
29 CTEST_SETUP(parameters) {
30  data->Omega_c = 0.25;
31  data->Omega_b = 0.05;
32  data->Omega_k = 0.1;
33  data->Neff = 3.046;
34  data->mnu[0] = 0.1;
35  data->mnu[1] = 0.01;
36  data->mnu[2] = 0.003;
37  data->h = 0.7;
38  data->A_s = 2.1e-9;
39  data->n_s = 0.96;
40  data->wa = 0.01;
41  data->w0 = -0.8;
42  data->bcm_log10Mc = 2.0;
43  data->bcm_etab = 80.0;
44  data->bcm_ks = 1.1,
45  data->status=0;
46 }
47 
48 // The 2 on the end of CTEST2 means that for this test we use
49 // the data defined above in CTEST_DATA and given values in CTEST_SETUP function.
50 // We could also define CTEST_TEARDOWN(params) that would be run after the tests.
51 
52 // This adds a new test called "create_lcdm" to the suite called "params".
53 // There are a variety of different assertions available.
54 
55 // If you wanted to you could call other functions in here too and use these
56 // assertions there also.
57 CTEST2(parameters, create_lcdm) {
59  data->Omega_c, data->Omega_b, data->h, data->A_s, data->n_s, &(data->status));
60 
61  ASSERT_DBL_NEAR_TOL(params.Omega_c, data->Omega_c, 1e-10);
62  ASSERT_DBL_NEAR_TOL(params.Omega_b, data->Omega_b, 1e-10);
63  ASSERT_DBL_NEAR_TOL(params.Omega_m, data->Omega_b + data->Omega_c, 1e-10);
64  ASSERT_DBL_NEAR_TOL(params.Omega_k, 0.0, 1e-10);
65  ASSERT_DBL_NEAR_TOL(params.sqrtk, 0.0, 1e-10);
66  ASSERT_DBL_NEAR_TOL(params.k_sign, 0.0, 1e-10);
67  ASSERT_DBL_NEAR_TOL(params.w0, -1.0, 1e-10);
68  ASSERT_DBL_NEAR_TOL(params.wa, 0.0, 1e-10);
69  ASSERT_DBL_NEAR_TOL(params.H0, 70.0, 1e-10);
70  ASSERT_DBL_NEAR_TOL(params.h, 0.7, 1e-10);
71  ASSERT_DBL_NEAR_TOL(params.A_s, data->A_s, 1e-10);
72  ASSERT_DBL_NEAR_TOL(params.n_s, data->n_s, 1e-10);
73  ASSERT_TRUE(isnan(params.sigma8));
74  ASSERT_TRUE(isnan(params.z_star));
75  ASSERT_DBL_NEAR_TOL(params.Neff, 3.046, 1e-10);
76  ASSERT_EQUAL(params.N_nu_mass, 0);
77  ASSERT_DBL_NEAR_TOL(params.N_nu_rel, 3.046, 1e-10);
78  ASSERT_DBL_NEAR_TOL(params.sum_nu_masses, 0.0, 1e-10);
79  ASSERT_DBL_NEAR_TOL(params.mnu[0], 0.0, 1e-10);
80  ASSERT_DBL_NEAR_TOL(params.Omega_n_mass, 0.0, 1e-10);
81  ASSERT_DBL_NEAR_TOL(params.T_CMB, TCMB, 1e-10);
82 
83  ASSERT_DBL_NEAR_TOL(params.bcm_ks, 55.0, 1e-10);
84  ASSERT_DBL_NEAR_TOL(params.bcm_log10Mc, log10(1.2e14), 1e-10);
85  ASSERT_DBL_NEAR_TOL(params.bcm_etab, 0.5, 1e-10);
86 
87  ASSERT_FALSE(params.has_mgrowth);
88  ASSERT_EQUAL(params.nz_mgrowth, 0);
89  ASSERT_NULL(params.z_mgrowth);
90  ASSERT_NULL(params.df_mgrowth);
91 
92  /* these are defined in the code via some constants - going to test the total
93  Omega_n_rel
94  Omega_g
95  Omega_l
96  */
98  params.Omega_l + params.Omega_m +
99  params.Omega_g + params.Omega_n_rel +
100  params.Omega_n_mass + params.Omega_k,
101  1.,
102  1e-10);
103 }
104 
105 // This adds a second test in the same suite. It uses the same setup function as the
106 // previous one (though the setup function is run afresh for each test).
108  ASSERT_DBL_NEAR_TOL(params.Omega_c, data->Omega_c, 1e-10);
109  ASSERT_DBL_NEAR_TOL(params.Omega_b, data->Omega_b, 1e-10);
110  ASSERT_DBL_NEAR_TOL(params.Omega_m, data->Omega_b + data->Omega_c, 1e-10);
111  ASSERT_DBL_NEAR_TOL(params.Omega_k, data->Omega_k, 1e-10);
112  ASSERT_DBL_NEAR_TOL(params.sqrtk, sqrt(fabs(data->Omega_k))*data->h/CLIGHT_HMPC, 1e-10);
113  ASSERT_DBL_NEAR_TOL(params.k_sign, -1.0, 1e-10);
114  ASSERT_DBL_NEAR_TOL(params.w0, data->w0, 1e-10);
115  ASSERT_DBL_NEAR_TOL(params.wa, data->wa, 1e-10);
116  ASSERT_DBL_NEAR_TOL(params.H0, data->h * 100.0, 1e-10);
117  ASSERT_DBL_NEAR_TOL(params.h, data->h, 1e-10);
118  ASSERT_DBL_NEAR_TOL(params.A_s, data->A_s, 1e-10);
119  ASSERT_DBL_NEAR_TOL(params.n_s, data->n_s, 1e-10);
120  ASSERT_TRUE(isnan(params.sigma8));
121  ASSERT_TRUE(isnan(params.z_star));
122  ASSERT_DBL_NEAR_TOL(params.Neff, data->Neff, 1e-10);
123  ASSERT_DBL_NEAR_TOL(params.T_CMB, TCMB, 1e-10);
124 
125  ASSERT_DBL_NEAR_TOL(params.bcm_ks, data->bcm_ks, 1e-10);
126  ASSERT_DBL_NEAR_TOL(params.bcm_log10Mc, data->bcm_log10Mc, 1e-10);
127  ASSERT_DBL_NEAR_TOL(params.bcm_etab, data->bcm_etab, 1e-10);
128 
129  ASSERT_FALSE(params.has_mgrowth);
130  ASSERT_EQUAL(params.nz_mgrowth, 0);
131  ASSERT_NULL(params.z_mgrowth);
132  ASSERT_NULL(params.df_mgrowth);
133 
134  /* these are defined in the code via some constants - going to test the total
135  Omega_n_mass
136  Omega_n_rel
137  Omega_g
138  Omega_l
139  */
141  params.Omega_l + params.Omega_m + params.Omega_g + params.Omega_n_rel + params.Omega_n_mass + params.Omega_k,
142  1.,
143  1e-10);
144 
145 }
146 
147 CTEST2(parameters, create_general_nu_list) {
148  int status = 0;
149 
152  data->Omega_c,
153  data->Omega_b,
154  data->Omega_k,
155  data->Neff,
156  data->mnu,
157  ccl_mnu_list,
158  data->w0,
159  data->wa,
160  data->h,
161  data->A_s,
162  data->n_s,
163  data->bcm_log10Mc,
164  data->bcm_etab,
165  data->bcm_ks,
166  -1,
167  NULL,
168  NULL,
169  &status);
170 
171  ASSERT_EQUAL(status, 0);
172 
173  test_general(params, data);
174 
175  ASSERT_EQUAL(params.N_nu_mass, 3);
176  ASSERT_DBL_NEAR_TOL(params.sum_nu_masses, data->mnu[0] + data->mnu[1] + data->mnu[2], 1e-10);
177  ASSERT_DBL_NEAR_TOL(params.mnu[0], 0.1, 1e-10);
178  ASSERT_DBL_NEAR_TOL(params.mnu[1], 0.01, 1e-10);
179  ASSERT_DBL_NEAR_TOL(params.mnu[2], 0.003, 1e-10);
180 }
181 
182 CTEST2(parameters, create_general_nu_sum) {
183  int status = 0;
184 
187  data->Omega_c,
188  data->Omega_b,
189  data->Omega_k,
190  data->Neff,
191  data->mnu,
192  ccl_mnu_sum,
193  data->w0,
194  data->wa,
195  data->h,
196  data->A_s,
197  data->n_s,
198  data->bcm_log10Mc,
199  data->bcm_etab,
200  data->bcm_ks,
201  -1,
202  NULL,
203  NULL,
204  &status);
205 
206  ASSERT_EQUAL(status, 0);
207 
208  test_general(params, data);
209 
210  ASSERT_EQUAL(params.N_nu_mass, 3);
211  ASSERT_DBL_NEAR_TOL(params.sum_nu_masses, data->mnu[0], 1e-10);
212 }
213 
214 CTEST2(parameters, create_general_nu_sum_inverted) {
215  int status = 0;
216 
219  data->Omega_c,
220  data->Omega_b,
221  data->Omega_k,
222  data->Neff,
223  data->mnu,
224  ccl_mnu_sum,
225  data->w0,
226  data->wa,
227  data->h,
228  data->A_s,
229  data->n_s,
230  data->bcm_log10Mc,
231  data->bcm_etab,
232  data->bcm_ks,
233  -1,
234  NULL,
235  NULL,
236  &status);
237 
238  ASSERT_EQUAL(status, 0);
239 
240  test_general(params, data);
241 
242  ASSERT_EQUAL(params.N_nu_mass, 3);
243  ASSERT_DBL_NEAR_TOL(params.sum_nu_masses, data->mnu[0], 1e-10);
244 }
245 
246 CTEST2(parameters, create_general_nu_sum_equal) {
247  int status = 0;
248 
251  data->Omega_c,
252  data->Omega_b,
253  data->Omega_k,
254  data->Neff,
255  data->mnu,
257  data->w0,
258  data->wa,
259  data->h,
260  data->A_s,
261  data->n_s,
262  data->bcm_log10Mc,
263  data->bcm_etab,
264  data->bcm_ks,
265  -1,
266  NULL,
267  NULL,
268  &status);
269 
270  ASSERT_EQUAL(status, 0);
271 
272  test_general(params, data);
273 
274  ASSERT_EQUAL(params.N_nu_mass, 3);
275  ASSERT_DBL_NEAR_TOL(params.sum_nu_masses, data->mnu[0], 1e-10);
276  ASSERT_DBL_NEAR_TOL(params.mnu[0], data->mnu[0]/3, 1e-10);
277  ASSERT_DBL_NEAR_TOL(params.mnu[1], data->mnu[0]/3, 1e-10);
278  ASSERT_DBL_NEAR_TOL(params.mnu[2], data->mnu[0]/3, 1e-10);
279 }
280 
281 
282 CTEST2(parameters, read_write) {
283  char filename[32];
284  snprintf(filename, 32, "ccl_test_params_rw_XXXXXX");
285  mkstemp(filename);
286  ccl_parameters params = ccl_parameters_create_flat_lcdm(data->Omega_c, data->Omega_b, data->h, data->A_s, data->n_s, &(data->status));
287  int status = 0;
288  ccl_parameters_write_yaml(&params, filename, &status);
289  ASSERT_EQUAL(status, 0);
290  ccl_parameters params2 = ccl_parameters_read_yaml(filename, &status);
291  ASSERT_EQUAL(status, 0);
292  ASSERT_DBL_NEAR_TOL(params2.Omega_c, data->Omega_c, 1e-10);
293  ASSERT_DBL_NEAR_TOL(params2.Omega_k, 0.0, 1e-10);
294  ASSERT_DBL_NEAR_TOL(params2.w0, -1.0, 1e-10);
295  ASSERT_DBL_NEAR_TOL(params2.wa, 0.0, 1e-10);
296  remove(filename);
297 }
double Omega_g
Definition: ccl_core.h:53
double * df_mgrowth
Definition: ccl_core.h:70
double * mnu
Definition: ccl_core.h:40
bool has_mgrowth
Definition: ccl_core.h:67
double Omega_b
Definition: ccl_core.h:20
double N_nu_rel
Definition: ccl_core.h:39
double H0
Definition: ccl_core.h:32
#define ASSERT_TRUE(real)
Definition: ctest.h:142
#define CLIGHT_HMPC
Definition: ccl_constants.h:33
void test_general(ccl_parameters params, struct parameters_data *data)
#define CTEST_SETUP(sname)
Definition: ctest.h:73
#define CTEST_DATA(sname)
Definition: ctest.h:71
double Omega_n_mass
Definition: ccl_core.h:42
double n_s
Definition: ccl_core.h:50
double h
Definition: ccl_core.h:33
double w0
Definition: ccl_core.h:28
double Omega_l
Definition: ccl_core.h:63
double bcm_ks
Definition: ccl_core.h:59
double * z_mgrowth
Definition: ccl_core.h:69
double Neff
Definition: ccl_core.h:37
#define ASSERT_NULL(real)
Definition: ctest.h:136
double sum_nu_masses
Definition: ccl_core.h:41
ccl_parameters ccl_parameters_read_yaml(const char *filename, int *status)
Definition: ccl_core.c:624
double A_s
Definition: ccl_core.h:49
Grid< NDIM, T > sqrt(Grid< NDIM, T > lhs)
Definition: grid.h:231
void ccl_parameters_write_yaml(ccl_parameters *params, const char *filename, int *status)
Definition: ccl_core.c:531
double sqrtk
Definition: ccl_core.h:23
#define TCMB
Definition: ccl_constants.h:95
double Omega_n_rel
Definition: ccl_core.h:43
double T_CMB
Definition: ccl_core.h:54
dictionary params
Definition: halomod_bm.py:27
#define ASSERT_DBL_NEAR_TOL(exp, real, tol)
Definition: ctest.h:152
double sigma8
Definition: ccl_core.h:62
double bcm_etab
Definition: ccl_core.h:58
double Omega_c
Definition: ccl_core.h:19
#define ASSERT_EQUAL(exp, real)
Definition: ctest.h:121
#define ASSERT_FALSE(real)
Definition: ctest.h:145
int nz_mgrowth
Definition: ccl_core.h:68
double bcm_log10Mc
Definition: ccl_core.h:57
double Omega_k
Definition: ccl_core.h:22
ccl_parameters ccl_parameters_create_flat_lcdm(double Omega_c, double Omega_b, double h, double norm_pk, double n_s, int *status)
Definition: ccl_core.c:505
double Omega_m
Definition: ccl_core.h:21
ccl_parameters ccl_parameters_create(double Omega_c, double Omega_b, double Omega_k, double Neff, double *mnu, ccl_mnu_convention mnu_type, double w0, double wa, double h, double norm_pk, double n_s, double bcm_log10Mc, double bcm_etab, double bcm_ks, int nz_mgrowth, double *zarr_mgrowth, double *dfarr_mgrowth, int *status)
Definition: ccl_core.c:294
double z_star
Definition: ccl_core.h:64
#define CTEST2(sname, tname)
Definition: ctest.h:107
double wa
Definition: ccl_core.h:29