Fast Methods for Cosmological Simulations
FastSim serves as a tool for quick N-body simulations in modified gravity.
io.c
Go to the documentation of this file.
1 #include "common.h"
2 
3 static void write_wt_single(int n_th,int n_th_logint,int th_min,int th_max,int do_logbin,
4  double *wt,char *prefix,char *suffix)
5 {
6  int ith;
7  FILE *fo;
8  char fname[256];
9 
10  sprintf(fname,"%s_wt_%s.txt",prefix,suffix);
11  fo=dam_fopen(fname,"w");
12  for(ith=0;ith<n_th;ith++) {
13  double th;
14  if(do_logbin)
15  th=th_max*pow(10.,(ith+0.5-n_th)/n_th_logint);
16  else
17  th=th_min+(th_max-th_min)*(ith+0.5)/n_th;
18  fprintf(fo,"%lE %lE\n",th,wt[ith]);
19  }
20  fclose(fo);
21 }
22 
23 static void write_cl_single(int lmax,double *cl,char *prefix,char *suffix)
24 {
25  int l;
26  FILE *fo;
27  char fname[256];
28 
29  sprintf(fname,"%s_cl_%s.txt",prefix,suffix);
30  fo=dam_fopen(fname,"w");
31  for(l=0;l<=lmax;l++)
32  fprintf(fo,"%d %lE\n",l,cl[l]);
33  fclose(fo);
34 }
35 
37 {
38  if(par->do_nc) {
39  write_cl_single(par->lmax,par->cl_dd,par->prefix_out,"dd");
40  if(par->do_shear) {
41  write_cl_single(par->lmax,par->cl_d1l2,par->prefix_out,"d1l2");
42  write_cl_single(par->lmax,par->cl_d2l1,par->prefix_out,"d2l1");
43  }
44  if(par->do_cmblens)
45  write_cl_single(par->lmax,par->cl_dc,par->prefix_out,"dc");
46  if(par->do_isw)
47  write_cl_single(par->lmax,par->cl_di,par->prefix_out,"di");
48  }
49  if(par->do_shear) {
50  write_cl_single(par->lmax,par->cl_ll,par->prefix_out,"ll");
51  if(par->do_cmblens)
52  write_cl_single(par->lmax,par->cl_lc,par->prefix_out,"lc");
53  if(par->do_isw)
54  write_cl_single(par->lmax,par->cl_li,par->prefix_out,"li");
55  }
56  if(par->do_cmblens) {
57  write_cl_single(par->lmax,par->cl_cc,par->prefix_out,"cc");
58  if(par->do_isw)
59  write_cl_single(par->lmax,par->cl_ci,par->prefix_out,"ci");
60  }
61  if(par->do_isw)
62  write_cl_single(par->lmax,par->cl_ii,par->prefix_out,"ii");
63 
64  if(par->do_w_theta) {
65  if(par->do_nc) {
66  write_wt_single(par->n_th,par->n_th_logint,par->th_min,par->th_max,
67  par->do_w_theta_logbin,par->wt_dd,par->prefix_out,"dd");
68  if(par->do_shear) {
69  write_wt_single(par->n_th,par->n_th_logint,par->th_min,par->th_max,
70  par->do_w_theta_logbin,par->wt_d1l2,par->prefix_out,"d1l2");
71  write_wt_single(par->n_th,par->n_th_logint,par->th_min,par->th_max,
72  par->do_w_theta_logbin,par->wt_d2l1,par->prefix_out,"d2l1");
73  }
74  if(par->do_cmblens) {
75  write_wt_single(par->n_th,par->n_th_logint,par->th_min,par->th_max,
76  par->do_w_theta_logbin,par->wt_dc,par->prefix_out,"dc");
77  }
78  if(par->do_isw) {
79  write_wt_single(par->n_th,par->n_th_logint,par->th_min,par->th_max,
80  par->do_w_theta_logbin,par->wt_di,par->prefix_out,"di");
81  }
82  }
83  if(par->do_shear) {
84  write_wt_single(par->n_th,par->n_th_logint,par->th_min,par->th_max,
85  par->do_w_theta_logbin,par->wt_ll_pp,par->prefix_out,"ll_pp");
86  write_wt_single(par->n_th,par->n_th_logint,par->th_min,par->th_max,
87  par->do_w_theta_logbin,par->wt_ll_mm,par->prefix_out,"ll_mm");
88  if(par->do_cmblens) {
89  write_wt_single(par->n_th,par->n_th_logint,par->th_min,par->th_max,
90  par->do_w_theta_logbin,par->wt_lc,par->prefix_out,"lc");
91  }
92  if(par->do_isw) {
93  write_wt_single(par->n_th,par->n_th_logint,par->th_min,par->th_max,
94  par->do_w_theta_logbin,par->wt_li,par->prefix_out,"li");
95  }
96  }
97  if(par->do_cmblens) {
98  write_wt_single(par->n_th,par->n_th_logint,par->th_min,par->th_max,
99  par->do_w_theta_logbin,par->wt_cc,par->prefix_out,"cc");
100  if(par->do_isw) {
101  write_wt_single(par->n_th,par->n_th_logint,par->th_min,par->th_max,
102  par->do_w_theta_logbin,par->wt_ci,par->prefix_out,"ci");
103  }
104  }
105  if(par->do_isw) {
106  write_wt_single(par->n_th,par->n_th_logint,par->th_min,par->th_max,
107  par->do_w_theta_logbin,par->wt_ii,par->prefix_out,"ii");
108  }
109  }
110 }
111 
112 int read_parameter_file(char *fname,RunParams *par)
113 {
114  FILE *fi;
115  int n_lin,ii;
116 
117  //Read parameters from file
118  fi=dam_fopen(fname,"r");
119  n_lin=dam_linecount(fi); rewind(fi);
120  for(ii=0;ii<n_lin;ii++) {
121  char s0[512],s1[64],s2[256];
122  if(fgets(s0,sizeof(s0),fi)==NULL)
123  dam_report_error(1,"Error reading line %d, file %s\n",ii+1,fname);
124  if((s0[0]=='#')||(s0[0]=='\n')||(s0[0]==' ')) continue;
125  int sr=sscanf(s0,"%s %s",s1,s2);
126  if(sr!=2)
127  dam_report_error(1,"Error reading line %d, file %s\n",ii+1,fname);
128 
129  if(!strcmp(s1,"omega_m="))
130  par->om=atof(s2);
131  else if(!strcmp(s1,"omega_l="))
132  par->ol=atof(s2);
133  else if(!strcmp(s1,"omega_b="))
134  par->ob=atof(s2);
135  else if(!strcmp(s1,"w0="))
136  par->w0=atof(s2);
137  else if(!strcmp(s1,"wa="))
138  par->wa=atof(s2);
139  else if(!strcmp(s1,"h="))
140  par->h0=atof(s2);
141  else if(!strcmp(s1,"ns="))
142  par->ns=atof(s2);
143  else if(!strcmp(s1,"s8="))
144  par->s8=atof(s2);
145  else if(!strcmp(s1,"d_chi="))
146  par->dchi=atof(s2);
147  else if(!strcmp(s1,"l_max="))
148  par->lmax=atoi(s2);
149  else if(!strcmp(s1,"do_nc="))
150  par->do_nc=atoi(s2);
151  else if(!strcmp(s1,"has_nc_dens="))
152  par->has_dens=atoi(s2);
153  else if(!strcmp(s1,"has_nc_rsd="))
154  par->has_rsd=atoi(s2);
155  else if(!strcmp(s1,"has_nc_lensing="))
156  par->has_lensing=atoi(s2);
157  else if(!strcmp(s1,"do_shear="))
158  par->do_shear=atoi(s2);
159  else if(!strcmp(s1,"do_cmblens="))
160  par->do_cmblens=atoi(s2);
161  else if(!strcmp(s1,"do_isw="))
162  par->do_isw=atoi(s2);
163  else if(!strcmp(s1,"do_w_theta="))
164  par->do_w_theta=atoi(s2);
165  else if(!strcmp(s1,"use_logbin="))
166  par->do_w_theta_logbin=atoi(s2);
167  else if(!strcmp(s1,"theta_min="))
168  par->th_min=atof(s2);
169  else if(!strcmp(s1,"theta_max="))
170  par->th_max=atof(s2);
171  else if(!strcmp(s1,"n_bins_theta="))
172  par->n_th=atof(s2);
173  else if(!strcmp(s1,"n_bins_decade="))
174  par->n_th_logint=atof(s2);
175  else if(!strcmp(s1,"window_1_fname="))
176  sprintf(par->fname_window[0],"%s",s2);
177  else if(!strcmp(s1,"window_2_fname="))
178  sprintf(par->fname_window[1],"%s",s2);
179  else if(!strcmp(s1,"bias_fname="))
180  sprintf(par->fname_bias,"%s",s2);
181  else if(!strcmp(s1,"sbias_fname="))
182  sprintf(par->fname_sbias,"%s",s2);
183  else if(!strcmp(s1,"pk_fname="))
184  sprintf(par->fname_pk,"%s",s2);
185  else if(!strcmp(s1,"prefix_out="))
186  sprintf(par->prefix_out,"%s",s2);
187  else
188  dam_report_error(0,"Unknown parameter %s\n",s1);
189  }
190  fclose(fi);
191 
192  if(par->do_w_theta==0)
193  par->do_w_theta_logbin=0;
194 
195  par->has_bg=1;
196 
197  return 0;
198 }
double * cl_ci
Definition: common.h:65
double * wt_d1l2
Definition: common.h:74
double * wt_di
Definition: common.h:77
double * wt_li
Definition: common.h:81
void dam_report_error(int level, char *fmt,...)
Definition: common.c:39
double * cl_d1l2
Definition: common.h:57
int do_isw
Definition: common.h:41
double ns
Definition: common.h:26
double * wt_dc
Definition: common.h:76
int lmax
Definition: common.h:32
double * wt_lc
Definition: common.h:80
double w0
Definition: common.h:25
double * wt_ll_pp
Definition: common.h:78
int do_cmblens
Definition: common.h:40
double th_max
Definition: common.h:70
FILE * dam_fopen(const char *path, const char *mode)
Definition: common.c:20
double om
Definition: common.h:24
char fname_bias[256]
Definition: common.h:28
double * cl_cc
Definition: common.h:64
int n_th
Definition: common.h:71
double * cl_di
Definition: common.h:60
int n_th_logint
Definition: common.h:72
char fname_pk[256]
Definition: common.h:30
static void write_wt_single(int n_th, int n_th_logint, int th_min, int th_max, int do_logbin, double *wt, char *prefix, char *suffix)
Definition: io.c:3
char prefix_out[256]
Definition: common.h:31
double ob
Definition: common.h:24
double * cl_d2l1
Definition: common.h:58
double dchi
Definition: common.h:37
double * cl_ll
Definition: common.h:61
char fname_sbias[256]
Definition: common.h:29
double h0
Definition: common.h:25
int do_shear
Definition: common.h:39
int do_nc
Definition: common.h:38
double * cl_dd
Definition: common.h:56
int has_rsd
Definition: common.h:44
double * wt_cc
Definition: common.h:82
int has_dens
Definition: common.h:43
double th_min
Definition: common.h:69
double * cl_li
Definition: common.h:63
double wa
Definition: common.h:25
double * wt_d2l1
Definition: common.h:75
float pow(float base, unsigned long int exp)
Definition: precision.hpp:39
void write_output(RunParams *par)
Definition: io.c:36
int has_bg
Definition: common.h:42
char ** fname_window
Definition: common.h:27
double * cl_ii
Definition: common.h:66
double * wt_ii
Definition: common.h:84
int has_lensing
Definition: common.h:45
double * wt_ll_mm
Definition: common.h:79
double * cl_dc
Definition: common.h:59
double * wt_dd
Definition: common.h:73
double s8
Definition: common.h:26
int read_parameter_file(char *fname, RunParams *par)
Definition: io.c:112
double ol
Definition: common.h:24
int do_w_theta
Definition: common.h:67
static void write_cl_single(int lmax, double *cl, char *prefix, char *suffix)
Definition: io.c:23
int do_w_theta_logbin
Definition: common.h:68
double * wt_ci
Definition: common.h:83
double * cl_lc
Definition: common.h:62
int dam_linecount(FILE *f)
Definition: common.c:29