Fast Methods for Cosmological Simulations
FastSim serves as a tool for quick N-body simulations in modified gravity.
ccl_test_power_nu.c
Go to the documentation of this file.
1 #include "ccl.h"
2 #include "ctest.h"
3 #include <stdio.h>
4 #include <math.h>
5 
6 #define POWER_NU_TOL 1.0E-3
7 
8 CTEST_DATA(power_nu) {
9  double Omega_c;
10  double Omega_b;
11  double h;
12  double A_s;
13  double n_s;
14  double sigma8;
15  double Neff;
16  double mnu0[3], mnu1[3], mnu2[3];
18  double Omega_v[3];
19  double Omega_k;
20  double w_0[3];
21  double w_a[3];
22 };
23 
24 CTEST_SETUP(power_nu) {
25  data->Omega_c = 0.25;
26  data->Omega_b = 0.05;
27  data->h = 0.7;
28  data->A_s = 2.1e-9;
29  data->n_s = 0.96;
30  data->sigma8=0.8;
31  data->Neff=3.046;
32  data->mnu_type =ccl_mnu_list;
33 
34  double mnu0[3] = {0.04, 0., 0.};
35  double mnu1[3] = {0.05, 0.01, 0.};
36  double mnu2[3] = {0.03, 0.02, 0.04};
37 
38  data->mnu0[0] = mnu0[0];
39  data->mnu1[0] = mnu1[0];
40  data->mnu2[0] = mnu2[0];
41 
42  data->mnu0[1] = mnu0[1];
43  data->mnu1[1] = mnu1[1];
44  data->mnu2[1] = mnu2[1];
45 
46  data->mnu0[2] = mnu0[2];
47  data->mnu1[2] = mnu1[2];
48  data->mnu2[2] = mnu2[2];
49 
50  double Omega_v[3]={0.7, 0.7, 0.7};
51  double w_0[3] = {-1.0, -0.9, -0.9};
52  double w_a[3] = {0.0, 0.0, 0.1};
53 
54  for(int i=0;i<3;i++) {
55  data->Omega_v[i] = Omega_v[i];
56  data->w_0[i] = w_0[i];
57  data->w_a[i] = w_a[i];
58  }
59  data-> Omega_k = 0.;
60 }
61 
62 CTEST_DATA(power_nu_nl) {
63  double Omega_c;
64  double Omega_b;
65  double h;
66  double A_s;
67  double n_s;
68  double sigma8;
69  double Neff;
70  double mnu0[3], mnu1[3], mnu2[3];
72  double Omega_v[3];
73  double Omega_k;
74  double w_0[3];
75  double w_a[3];
76 };
77 
78 CTEST_SETUP(power_nu_nl) {
79  data->Omega_c = 0.25;
80  data->Omega_b = 0.05;
81  data->h = 0.7;
82  data->A_s = 2.1e-9;
83  data->n_s = 0.96;
84  data->sigma8=0.8;
85  data->Neff=3.046;
86  data->mnu_type =ccl_mnu_list;
87 
88  double mnu0[3] = {0.04, 0., 0.};
89  double mnu1[3] = {0.05, 0.01, 0.};
90  double mnu2[3] = {0.03, 0.02, 0.04};
91 
92  data->mnu0[0] = mnu0[0];
93  data->mnu1[0] = mnu1[0];
94  data->mnu2[0] = mnu2[0];
95 
96  data->mnu0[1] = mnu0[1];
97  data->mnu1[1] = mnu1[1];
98  data->mnu2[1] = mnu2[1];
99 
100  data->mnu0[2] = mnu0[2];
101  data->mnu1[2] = mnu1[2];
102  data->mnu2[2] = mnu2[2];
103 
104  double Omega_v[3]={0.7, 0.7, 0.7};
105  double w_0[3] = {-1.0, -0.9, -0.9};
106  double w_a[3] = {0.0, 0.0, 0.1};
107 
108  for(int i=0;i<3;i++) {
109  data->Omega_v[i] = Omega_v[i];
110  data->w_0[i] = w_0[i];
111  data->w_a[i] = w_a[i];;
112  }
113 
114  data->Omega_k = 0.;
115 }
116 
117 static int linecount(FILE *f)
118 {
120  // Counts #lines from file
121  int i0=0;
122  char ch[1000];
123  while((fgets(ch,sizeof(ch),f))!=NULL) {
124  i0++;
125  }
126  return i0;
127 }
128 
129 static void compare_power_nu(int i_model,struct power_nu_data * data)
130 {
131  int nk,i,j;
132  int status=0;
133  char fname[256], fname_nl[256], str[1024];
134  FILE *f;
135  ccl_configuration config_linear = default_config;
137 
139 
140  params = ccl_parameters_create(data->Omega_c, data->Omega_b, data->Omega_k,data->Neff,
141  i_model==1 ? data->mnu0 : i_model==2 ? data->mnu1 : data->mnu2,
142  data->mnu_type,data->w_0[i_model-1], data->w_a[i_model-1],
143  data->h, data->A_s, data->n_s,-1,-1,-1,-1,NULL,NULL, &status);
144 
145  ccl_cosmology * cosmo_linear = ccl_cosmology_create(params, config_linear);
146  ASSERT_NOT_NULL(cosmo_linear);
147 
148  sprintf(fname,"./tests/benchmark/model%d_pk_nu.txt",i_model);
149  f=fopen(fname,"r");
150  if(f==NULL) {
151  fprintf(stderr,"Error opening file %s\n",fname);
152  exit(1);
153  }
154  nk=linecount(f); rewind(f);
155 
156  double k=0.,pk_bench=0.,pk_ccl,err, k_h, pk_h;
157  double z=0.; //Other redshift checks are possible but not currently implemented
158  int stat=0;
159 
160  for(i=0;i<nk;i++) {
161  stat=fscanf(f,"%le %le\n",&k_h, &pk_h);
162  if(stat!=2) {
163  fprintf(stderr,"Error reading file %s, line %d\n",fname,i);
164  exit(1);
165  }
166  k=k_h*data->h;
167  pk_bench=pk_h/pow(data->h,3);
168 
169  pk_ccl=ccl_linear_matter_power(cosmo_linear,k,1./(1+z),&status);
170  if (status) printf("%s\n",cosmo_linear->status_message);
171  err=fabs(pk_ccl/pk_bench-1);
173  }
174 
175  fclose(f);
176 
177  ccl_cosmology_free(cosmo_linear);
178 
179 }
180 
181 static void compare_power_nu_nl(int i_model,struct power_nu_nl_data * data)
182 {
183  int i,j, nk_nl;
184  int status=0;
185  char fname_nl[256], str[1024];
186  FILE *f_nl;
187  ccl_configuration config_nonlinear = default_config;
188  config_nonlinear.matter_power_spectrum_method = ccl_halofit;
189 
191 
192  if (i_model==1){
193 
194  params = ccl_parameters_create(data->Omega_c, data->Omega_b, data->Omega_k,
195  data->Neff, data->mnu0, data-> mnu_type,
196  data->w_0[i_model-1], data->w_a[i_model-1],
197  data->h, data->A_s, data->n_s,-1,-1,-1,-1,NULL,NULL, &status);
198  } else if (i_model==2){
199  params = ccl_parameters_create(data->Omega_c, data->Omega_b, data->Omega_k,
200  data->Neff, data->mnu1, data->mnu_type,
201  data->w_0[i_model-1], data->w_a[i_model-1],
202  data->h, data->A_s, data->n_s,-1,-1,-1,-1,NULL,NULL, &status);
203  } else if (i_model==3){
204  params = ccl_parameters_create(data->Omega_c, data->Omega_b, data->Omega_k,
205  data->Neff, data->mnu2, data->mnu_type,
206  data->w_0[i_model-1], data->w_a[i_model-1],
207  data->h, data->A_s, data->n_s,-1,-1,-1,-1,NULL,NULL, &status);
208  }
209 
210  ccl_cosmology * cosmo_nonlin = ccl_cosmology_create(params, config_nonlinear);
211  ASSERT_NOT_NULL(cosmo_nonlin);
212 
213  sprintf(fname_nl,"./tests/benchmark/model%d_pk_nl_nu.txt",i_model);
214  f_nl=fopen(fname_nl,"r");
215  if(f_nl==NULL) {
216  fprintf(stderr,"Error opening file %s\n",fname_nl);
217  exit(1);
218  }
219  nk_nl=linecount(f_nl); rewind(f_nl);
220 
221  double k=0.,pk_bench=0.,pk_ccl,err, k_h, pk_h;
222  double z=0.; //Other redshift checks are possible but not currently implemented
223  int stat=0;
224 
225  for(i=0;i<nk_nl;i++) {
226  stat=fscanf(f_nl,"%le %le\n",&k_h, &pk_h);
227  if(stat!=2) {
228  fprintf(stderr,"Error reading file %s, line %d\n",fname_nl,i);
229  exit(1);
230  }
231  k=k_h*data->h;
232  pk_bench=pk_h/pow(data->h,3);
233 
234  pk_ccl=ccl_nonlin_matter_power(cosmo_nonlin,k,1./(1+z),&status);
235  if (status) printf("%s\n",cosmo_nonlin->status_message);
236  err=fabs(pk_ccl/pk_bench-1);
238  }
239 
240  fclose(f_nl);
241 
242  ccl_cosmology_free(cosmo_nonlin);
243 }
244 
245 CTEST2(power_nu,model_1) {
246  int model=1;
247  compare_power_nu(model,data);
248 }
249 
250 CTEST2(power_nu,model_2) {
251  int model=2;
252  compare_power_nu(model,data);
253 }
254 
255 CTEST2(power_nu,model_3) {
256  int model=3;
257  compare_power_nu(model,data);
258 }
259 
260 CTEST2(power_nu_nl,model_1) {
261  int model=1;
262  compare_power_nu_nl(model,data);
263 }
264 
265 CTEST2(power_nu_nl,model_2) {
266  int model=2;
267  compare_power_nu_nl(model,data);
268 }
269 
270 CTEST2(power_nu_nl,model_3) {
271  int model=3;
272  compare_power_nu_nl(model,data);
273 }
matter_power_spectrum_t matter_power_spectrum_method
Definition: ccl_config.h:112
double ccl_nonlin_matter_power(ccl_cosmology *cosmo, double k, double a, int *status)
Definition: ccl_power.c:1562
#define POWER_NU_TOL
#define CTEST_SETUP(sname)
Definition: ctest.h:73
#define CTEST_DATA(sname)
Definition: ctest.h:71
ccl_mnu_convention mnu_type
ccl_mnu_convention mnu_type
ccl_cosmology * ccl_cosmology_create(ccl_parameters params, ccl_configuration config)
Definition: ccl_core.c:173
ccl_mnu_convention
Definition: ccl_core.h:142
double ccl_linear_matter_power(ccl_cosmology *cosmo, double k, double a, int *status)
Definition: ccl_power.c:1506
void ccl_cosmology_free(ccl_cosmology *cosmo)
Definition: ccl_core.c:829
static int linecount(FILE *f)
dictionary params
Definition: halomod_bm.py:27
#define ASSERT_DBL_NEAR_TOL(exp, real, tol)
Definition: ctest.h:152
static void compare_power_nu(int i_model, struct power_nu_data *data)
static double z[8]
static void compare_power_nu_nl(int i_model, struct power_nu_nl_data *data)
const ccl_configuration default_config
Definition: ccl_core.c:21
float pow(float base, unsigned long int exp)
Definition: precision.hpp:39
#define ASSERT_NOT_NULL(real)
Definition: ctest.h:139
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
#define CTEST2(sname, tname)
Definition: ctest.h:107
char status_message[500]
Definition: ccl_core.h:136