Fast Methods for Cosmological Simulations
FastSim serves as a tool for quick N-body simulations in modified gravity.
ccl_sample_angpow.cc
Go to the documentation of this file.
1 #include <stdlib.h>
2 #include <stdio.h>
3 #include <math.h>
4 #include <ccl.h>
5 #include <time.h>
6 
7 #define OC 0.25
8 #define OB 0.05
9 #define OK 0.00
10 #define ON 0.00
11 #define HH 0.70
12 #define W0 -1.0
13 #define WA 0.00
14 #define NS 0.96
15 //#define NORMPS 0.80
16 #define NORMPS 2.215e-9
17 #define ZD 0.5
18 #define NZ 1024
19 #define Z1_GC 1.0
20 #define SZ1_GC 0.02
21 #define Z0_GC 1.0
22 #define SZ_GC 0.02
23 #define Z0_SH 0.65
24 #define SZ_SH 0.05
25 #define NL 499
26 #define PS 0.1
27 #define NEFF 3.046
28 
29 void print_params(int l_limber,const char *fname_params,const char *prefix_out)
30 {
31  FILE *fl=fopen(fname_params,"w");
32  fprintf(fl,"omega_m= %lf\n",OC+OB);
33  fprintf(fl,"omega_l= %lf\n",1-OC-OB);
34  fprintf(fl,"omega_b= %lf\n",OB);
35  fprintf(fl,"w0= %lf\n",W0);
36  fprintf(fl,"wa= %lf\n",WA);
37  fprintf(fl,"h= %lf\n",HH);
38  fprintf(fl,"ns= %lf\n",NS);
39  fprintf(fl,"s8= %lf\n",NORMPS);
40  fprintf(fl,"l_limber_min= %d\n",l_limber);
41  fprintf(fl,"d_chi= 3.\n");
42  fprintf(fl,"z_kappa= 20.\n");
43  fprintf(fl,"z_isw= 20.\n");
44  fprintf(fl,"l_max= %d\n",NL);
45  fprintf(fl,"do_nc= 1\n");
46  fprintf(fl,"has_nc_dens= 1\n");
47  fprintf(fl,"has_nc_rsd= 0\n");
48  fprintf(fl,"has_nc_lensing= 0\n");
49  fprintf(fl,"do_shear= 0\n");
50  fprintf(fl,"has_sh_intrinsic= 0\n");
51  fprintf(fl,"do_cmblens= 0\n");
52  fprintf(fl,"do_isw= 0\n");
53  fprintf(fl,"do_w_theta= 0\n");
54  fprintf(fl,"use_logbin= 0\n");
55  fprintf(fl,"theta_min= 0\n");
56  fprintf(fl,"theta_max= 0\n");
57  fprintf(fl,"n_bins_theta= 0\n");
58  fprintf(fl,"n_bins_decade= 0\n");
59  fprintf(fl,"window_1_fname= nz.txt\n");
60  fprintf(fl,"window_2_fname= nz.txt\n");
61  fprintf(fl,"bias_fname= bz.txt\n");
62  fprintf(fl,"sbias_fname= nothing\n");
63  fprintf(fl,"abias_fname= nothing\n");
64  fprintf(fl,"pk_fname= pk.txt\n");
65  fprintf(fl,"prefix_out= %s\n",prefix_out);
66  fclose(fl);
67 }
68 
69 using namespace std;
70 int main(int argc,char **argv)
71 {
72  //status flag
73  int status =0;
74  // Initialize cosmological parameters
78 
79  // Set neutrino masses
80  double* MNU;
81  double mnuval = 0.;
82  MNU = &mnuval;
84  ccl_parameters params = ccl_parameters_create(OC, OB, OK, NEFF, MNU, MNUTYPE, W0, WA, HH, NORMPS, NS,-1,-1,-1,-1,NULL,NULL, &status);
85 
86  // Initialize cosmology object given cosmo params
88 
89  //Create tracers for angular power spectra
90  FILE *fn=fopen("nz.txt","w");
91  FILE *fb=fopen("bz.txt","w");
92  double z_arr_gc[NZ],nz_arr_gc[NZ],bz_arr[NZ];
93  double z1_arr_gc[NZ],nz1_arr_gc[NZ],bz1_arr[NZ];
94  for(int i=0;i<NZ;i++) {
95  z_arr_gc[i]=Z0_GC-5*SZ_GC+10*SZ_GC*(i+0.5)/NZ;
96  nz_arr_gc[i]=exp(-0.5*pow((z_arr_gc[i]-Z0_GC)/SZ_GC,2))/sqrt(2*3.1415926536*SZ_GC*SZ_GC);
97  z1_arr_gc[i]=Z1_GC-5*SZ1_GC+10*SZ1_GC*(i+0.5)/NZ;
98  nz1_arr_gc[i]=exp(-0.5*pow((z1_arr_gc[i]-Z1_GC)/SZ1_GC,2))/sqrt(2*3.1415926536*SZ1_GC*SZ1_GC);
99  bz_arr[i]=1.;//+z_arr_gc[i];
100  fprintf(fn,"%lE %lE\n",z_arr_gc[i],nz_arr_gc[i]);
101  fprintf(fb,"%lE %lE\n",z_arr_gc[i],bz_arr[i]);
102  }
103  fclose(fn);
104  fclose(fb);
105 
106  FILE *fp=fopen("pk.txt","w");
107  for(int i=0;i<1024;i++) {
108  double lk=-4.+5*(i+0.5)/1024.;
109  double kk=pow(10.,lk);
110  double pk=ccl_nonlin_matter_power(cosmo,kk,1.,&status);
111  fprintf(fp,"%lE %lE\n",kk,pk);
112  }
113  fclose(fp);
114 
115  print_params(-1,"params_lj_limber.ini","out_lj_limber");
116  print_params(NL,"params_lj_nonlimber.ini","out_lj_nonlimber");
117 
118  //Galaxy clustering tracer
119  CCL_ClTracer *ct_gc_A=ccl_cl_tracer_number_counts(cosmo,1,0,NZ,z_arr_gc,nz_arr_gc,
120  NZ,z_arr_gc,bz_arr,-1,NULL,NULL,&status);
121  CCL_ClTracer *ct_gc_B=ccl_cl_tracer_number_counts(cosmo,1,0,NZ,z_arr_gc,nz_arr_gc,
122  NZ,z_arr_gc,bz_arr,-1,NULL,NULL,&status);
123  int ells[NL];
124  double cells_gg_angpow[NL];
125  double cells_gg_native[NL];
126  double cells_gg_limber[NL];
127  for(int ii=0;ii<NL;ii++)
128  ells[ii]=ii;
129 
130  double linstep = 40;
131  double logstep = 1.3;
132  double dchi = (ct_gc_A->chimax-ct_gc_A->chimin)/500.; // must be below 3 to converge toward limber computation at high ell
133  double dlk = 0.003;
134  double zmin = 0.05;
135  CCL_ClWorkspace *wyl=ccl_cl_workspace_default(NL+1,-1 ,CCL_NONLIMBER_METHOD_ANGPOW,logstep,linstep,dchi,dlk,zmin,&status);
136  CCL_ClWorkspace *wnl=ccl_cl_workspace_default(NL+1,2*ells[NL-1],CCL_NONLIMBER_METHOD_NATIVE,logstep,linstep,dchi,dlk,zmin,&status);
137  CCL_ClWorkspace *wap=ccl_cl_workspace_default(NL+1,2*ells[NL-1],CCL_NONLIMBER_METHOD_ANGPOW,logstep,linstep,dchi,dlk,zmin,&status);
138  double start = clock();
139  ccl_angular_cls(cosmo,wyl,ct_gc_A,ct_gc_A,NL,ells,cells_gg_limber,&status);
140  double end = clock();
141  printf("Limber: %.6f seconds\n", (end-start)/CLOCKS_PER_SEC);
142  start = clock();
143  ccl_angular_cls(cosmo,wnl,ct_gc_B,ct_gc_B,NL,ells,cells_gg_native,&status);
144  end = clock();
145  printf("Native: %.6f seconds\n", (end-start)/CLOCKS_PER_SEC);
146  start = clock();
147  ccl_angular_cls(cosmo,wap,ct_gc_A,ct_gc_A,NL,ells,cells_gg_angpow,&status);
148  end = clock();
149  printf("Angpow: %.6f seconds\n", (end-start)/CLOCKS_PER_SEC);
150  printf("Done\n");
151 
152  FILE *fo=fopen("cls_val.txt","w");
153  for(int ii=0;ii<NL;ii++) {
154  double cl_gg_yl=cells_gg_limber[ii];
155  double cl_gg_nl=cells_gg_native[ii];
156  double cl_gg_ap=cells_gg_angpow[ii];
157  fprintf(fo,"%d %lE %lE %lE\n",ells[ii],cl_gg_yl,cl_gg_nl,cl_gg_ap);
158  }
159  fclose(fo);
160 
161  //Free up tracers
162  ccl_cl_tracer_free(ct_gc_A);
163  ccl_cl_tracer_free(ct_gc_B);
167 
168  //Always clean up!!
169  ccl_cosmology_free(cosmo);
170 
171  return 0;
172 }
#define HH
not_this_one end(...)
#define Z0_GC
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 NORMPS
Definition: json.hpp:20160
#define WA
void ccl_cl_tracer_free(CCL_ClTracer *clt)
Definition: ccl_cls.c:592
transfer_function_t transfer_function_method
Definition: ccl_config.h:111
#define OK
void ccl_angular_cls(ccl_cosmology *cosmo, CCL_ClWorkspace *w, CCL_ClTracer *clt1, CCL_ClTracer *clt2, int nl_out, int *l, double *cl, int *status)
Definition: ccl_cls.c:943
#define NS
Grid< NDIM, T > sqrt(Grid< NDIM, T > lhs)
Definition: grid.h:231
ccl_cosmology * ccl_cosmology_create(ccl_parameters params, ccl_configuration config)
Definition: ccl_core.c:173
#define NL
ccl_mnu_convention
Definition: ccl_core.h:142
#define NZ
void ccl_cosmology_free(ccl_cosmology *cosmo)
Definition: ccl_core.c:829
void print_params(int l_limber, const char *fname_params, const char *prefix_out)
dictionary params
Definition: halomod_bm.py:27
int main(int argc, char **argv)
#define NEFF
#define OC
#define W0
CCL_ClTracer * ccl_cl_tracer_number_counts(ccl_cosmology *cosmo, int has_rsd, int has_magnification, int nz_n, double *z_n, double *n, int nz_b, double *z_b, double *b, int nz_s, double *z_s, double *s, int *status)
Definition: ccl_cls.c:622
const ccl_configuration default_config
Definition: ccl_core.c:21
float pow(float base, unsigned long int exp)
Definition: precision.hpp:39
void ccl_cl_workspace_free(CCL_ClWorkspace *w)
Definition: ccl_cls.c:59
#define SZ_GC
#define Z1_GC
double chimax
Definition: ccl_cls.h:34
double chimin
Definition: ccl_cls.h:35
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 SZ1_GC
#define MNU
#define OB