Fast Methods for Cosmological Simulations
FastSim serves as a tool for quick N-body simulations in modified gravity.
spectra.c File Reference
#include "common.h"
Include dependency graph for spectra.c:

Go to the source code of this file.

Classes

struct  IntClPar
 
struct  IntWtPar
 

Functions

static double cl_integrand (double lk, void *params)
 
static double spectra (char *tr1, char *tr2, int l, RunParams *par)
 
void compute_spectra (RunParams *par)
 
static double wt_integrand (double l, void *params)
 
static void compute_wt_single (RunParams *par, double *cl, double *wt, double *llist, int bessel_order)
 
void compute_w_theta (RunParams *par)
 

Function Documentation

static double cl_integrand ( double  lk,
void *  params 
)
static

Definition at line 10 of file spectra.c.

References RunParams::cpar, IntClPar::l, p, IntClPar::par, pow(), IntClPar::tr1, IntClPar::tr2, and transfer_wrap().

Referenced by spectra().

11 {
12  double d1,d2;
14  double k=pow(10.,lk);
15  double pk=csm_Pk_linear_0(p->par->cpar,k);
16  d1=transfer_wrap(p->l,k,p->par,p->tr1,0);
17  d2=transfer_wrap(p->l,k,p->par,p->tr2,1);
18 
19  return k*d1*d2*pk;
20 }
Csm_params * cpar
Definition: common.h:33
int l
Definition: spectra.c:4
char * tr2
Definition: spectra.c:7
dictionary params
Definition: halomod_bm.py:27
RunParams * par
Definition: spectra.c:5
static int p
Definition: ccl_emu17.c:25
float pow(float base, unsigned long int exp)
Definition: precision.hpp:39
char * tr1
Definition: spectra.c:6
static double transfer_wrap(int il, double lk, ccl_cosmology *cosmo, CCL_ClWorkspace *w, CCL_ClTracer *clt, int *status)
Definition: ccl_cls.c:795
void compute_spectra ( RunParams par)

Definition at line 40 of file spectra.c.

References RunParams::cl_cc, RunParams::cl_ci, RunParams::cl_d1l2, RunParams::cl_d2l1, RunParams::cl_dc, RunParams::cl_dd, RunParams::cl_di, RunParams::cl_ii, RunParams::cl_lc, RunParams::cl_li, RunParams::cl_ll, RunParams::do_cmblens, RunParams::do_isw, RunParams::do_nc, RunParams::do_shear, cl_cmbl_bm::l, RunParams::lmax, and spectra().

Referenced by main().

41 {
42  printf("Computing power spectra\n");
43 #ifdef _HAS_OMP
44 #pragma omp parallel default(none) shared(par)
45  {
46 #endif //_HAS_OMP
47  int l;
48 #ifdef _HAS_OMP
49 #pragma omp for
50 #endif //_HAS_OMP
51  for(l=0;l<=par->lmax;l++) {
52 #ifdef _DEBUG
53  printf("%d \n",l);
54 #endif //_DEBUG
55  if(par->do_nc) {
56  par->cl_dd[l]=spectra("nc","nc",l,par);
57  if(par->do_shear) {
58  par->cl_d1l2[l]=spectra("nc","shear",l,par);
59  par->cl_d2l1[l]=spectra("shear","nc",l,par);
60  }
61  if(par->do_cmblens)
62  par->cl_dc[l]=spectra("nc","cmblens",l,par);
63  if(par->do_isw)
64  par->cl_di[l]=spectra("nc","isw",l,par);
65  }
66  if(par->do_shear) {
67  par->cl_ll[l]=spectra("shear","shear",l,par);
68  if(par->do_cmblens)
69  par->cl_lc[l]=spectra("shear","cmblens",l,par);
70  if(par->do_isw)
71  par->cl_li[l]=spectra("shear","isw",l,par);
72  }
73  if(par->do_cmblens) {
74  par->cl_cc[l]=spectra("cmblens","cmblens",l,par);
75  if(par->do_isw)
76  par->cl_ci[l]=spectra("cmblens","isw",l,par);
77  }
78  if(par->do_isw)
79  par->cl_ii[l]=spectra("isw","isw",l,par);
80  } //end omp for
81 #ifdef _HAS_OMP
82  } //end omp parallel
83 #endif //_HAS_OMP
84 }
double * cl_ci
Definition: common.h:65
double * cl_d1l2
Definition: common.h:57
int do_isw
Definition: common.h:41
int lmax
Definition: common.h:32
int do_cmblens
Definition: common.h:40
static double spectra(char *tr1, char *tr2, int l, RunParams *par)
Definition: spectra.c:22
double * cl_cc
Definition: common.h:64
double * cl_di
Definition: common.h:60
double * cl_d2l1
Definition: common.h:58
double * cl_ll
Definition: common.h:61
int do_shear
Definition: common.h:39
int do_nc
Definition: common.h:38
double * cl_dd
Definition: common.h:56
double * cl_li
Definition: common.h:63
double * cl_ii
Definition: common.h:66
double * cl_dc
Definition: common.h:59
double * cl_lc
Definition: common.h:62
void compute_w_theta ( RunParams par)

Definition at line 149 of file spectra.c.

References RunParams::cl_cc, RunParams::cl_ci, RunParams::cl_d1l2, RunParams::cl_d2l1, RunParams::cl_dc, RunParams::cl_dd, RunParams::cl_di, RunParams::cl_ii, RunParams::cl_lc, RunParams::cl_li, RunParams::cl_ll, compute_wt_single(), dam_malloc(), RunParams::do_cmblens, RunParams::do_isw, RunParams::do_nc, RunParams::do_shear, RunParams::do_w_theta, cl_cmbl_bm::l, RunParams::lmax, RunParams::wt_cc, RunParams::wt_ci, RunParams::wt_d1l2, RunParams::wt_d2l1, RunParams::wt_dc, RunParams::wt_dd, RunParams::wt_di, RunParams::wt_ii, RunParams::wt_lc, RunParams::wt_li, RunParams::wt_ll_mm, and RunParams::wt_ll_pp.

Referenced by main().

150 {
151  if(par->do_w_theta) {
152  int l;
153  double *llist;
154 
155  printf("Computing correlation functions\n");
156 
157  llist=dam_malloc((par->lmax+1)*sizeof(double));
158  for(l=0;l<=par->lmax;l++)
159  llist[l]=(float)l;
160 
161  if(par->do_nc) {
162  compute_wt_single(par,par->cl_dd,par->wt_dd,llist,0);
163  if(par->do_shear) {
164  compute_wt_single(par,par->cl_d1l2,par->wt_d1l2,llist,0);
165  compute_wt_single(par,par->cl_d2l1,par->wt_d2l1,llist,0);
166  }
167  if(par->do_cmblens)
168  compute_wt_single(par,par->cl_dc,par->wt_dc,llist,0);
169  if(par->do_isw)
170  compute_wt_single(par,par->cl_di,par->wt_di,llist,0);
171  }
172  if(par->do_shear) {
173  compute_wt_single(par,par->cl_ll,par->wt_ll_pp,llist,0);
174  compute_wt_single(par,par->cl_ll,par->wt_ll_mm,llist,4);
175  if(par->do_cmblens)
176  compute_wt_single(par,par->cl_lc,par->wt_lc,llist,0);
177  if(par->do_isw)
178  compute_wt_single(par,par->cl_li,par->wt_li,llist,0);
179  }
180  if(par->do_cmblens) {
181  compute_wt_single(par,par->cl_cc,par->wt_cc,llist,0);
182  if(par->do_isw)
183  compute_wt_single(par,par->cl_ci,par->wt_ci,llist,0);
184  }
185  if(par->do_isw)
186  compute_wt_single(par,par->cl_ii,par->wt_ii,llist,0);
187  free(llist);
188  }
189  else {
190  printf("Skipping correlation functions\n");
191  }
192 }
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
double * cl_d1l2
Definition: common.h:57
int do_isw
Definition: common.h:41
double * wt_dc
Definition: common.h:76
static void compute_wt_single(RunParams *par, double *cl, double *wt, double *llist, int bessel_order)
Definition: spectra.c:110
int lmax
Definition: common.h:32
double * wt_lc
Definition: common.h:80
double * wt_ll_pp
Definition: common.h:78
int do_cmblens
Definition: common.h:40
double * cl_cc
Definition: common.h:64
double * cl_di
Definition: common.h:60
double * cl_d2l1
Definition: common.h:58
double * cl_ll
Definition: common.h:61
void * dam_malloc(size_t size)
Definition: common.c:3
int do_shear
Definition: common.h:39
int do_nc
Definition: common.h:38
double * cl_dd
Definition: common.h:56
double * wt_cc
Definition: common.h:82
double * cl_li
Definition: common.h:63
double * wt_d2l1
Definition: common.h:75
double * cl_ii
Definition: common.h:66
double * wt_ii
Definition: common.h:84
double * wt_ll_mm
Definition: common.h:79
double * cl_dc
Definition: common.h:59
double * wt_dd
Definition: common.h:73
int do_w_theta
Definition: common.h:67
double * wt_ci
Definition: common.h:83
double * cl_lc
Definition: common.h:62
static void compute_wt_single ( RunParams par,
double cl,
double wt,
double llist,
int  bessel_order 
)
static

Definition at line 110 of file spectra.c.

References IntWtPar::cl, IntWtPar::clsp, RunParams::do_w_theta_logbin, DTOR, IntWtPar::i_bessel, RunParams::lmax, M_PI, RunParams::n_th, RunParams::n_th_logint, IntWtPar::par, pow(), spline_free(), spline_init(), IntWtPar::th, RunParams::th_max, RunParams::th_min, w, and wt_integrand().

Referenced by compute_w_theta().

111 {
112 #ifdef _HAS_OMP
113 #pragma omp parallel default(none) \
114  shared(par,cl,wt,llist,bessel_order)
115  {
116 #endif //_HAS_OMP
117  int ith;
118  double result,eresult;
119  gsl_function F;
120  gsl_integration_workspace *w=gsl_integration_workspace_alloc(1000);
121  SplPar *clsp=spline_init((par->lmax+1),llist,cl,0,0);
122  IntWtPar ipar;
123 
124  ipar.i_bessel=bessel_order;
125  ipar.par=par;
126  ipar.clsp=clsp;
127  ipar.cl=cl;
128 
129 #ifdef _HAS_OMP
130 #pragma omp for
131 #endif //_HAS_OMP
132  for(ith=0;ith<par->n_th;ith++) {
133  if(par->do_w_theta_logbin)
134  ipar.th=DTOR*par->th_max*pow(10.,(ith+0.5-par->n_th)/par->n_th_logint);
135  else
136  ipar.th=DTOR*(par->th_min+(par->th_max-par->th_min)*(ith+0.5)/par->n_th);
137  F.function=&wt_integrand;
138  F.params=&ipar;
139  gsl_integration_qag(&F,llist[0],llist[par->lmax],0,1E-4,1000,GSL_INTEG_GAUSS41,w,&result,&eresult);
140  wt[ith]=result/(2*M_PI);
141  }//end omp for
142  gsl_integration_workspace_free(w);
143  spline_free(clsp);
144 #ifdef _HAS_OMP
145  } //end omp parallel
146 #endif //_HAS_OMP
147 }
int i_bessel
Definition: spectra.c:87
SplPar * clsp
Definition: spectra.c:90
double * cl
Definition: spectra.c:91
int lmax
Definition: common.h:32
RunParams * par
Definition: spectra.c:88
SplPar * spline_init(int n, double *x, double *y, double y0, double yf)
Definition: common.c:57
double th_max
Definition: common.h:70
#define M_PI
Definition: ccl_constants.h:22
int n_th
Definition: common.h:71
int n_th_logint
Definition: common.h:72
double th
Definition: spectra.c:89
static double wt_integrand(double l, void *params)
Definition: spectra.c:94
void spline_free(SplPar *spl)
Definition: common.c:81
double th_min
Definition: common.h:69
float pow(float base, unsigned long int exp)
Definition: precision.hpp:39
static double w[2][28][111]
Definition: ccl_emu17.c:33
int do_w_theta_logbin
Definition: common.h:68
#define DTOR
Definition: common.h:14
static double spectra ( char *  tr1,
char *  tr2,
int  l,
RunParams par 
)
static

Definition at line 22 of file spectra.c.

References cl_integrand(), D_LKMAX, D_LKMIN, IntClPar::l, cl_cmbl_bm::l, IntClPar::par, IntClPar::tr1, IntClPar::tr2, and w.

Referenced by ccl_cosmology_compute_power_class(), ccl_cosmology_compute_power_emu(), ccl_cosmology_write_power_class_z(), ccl_get_class_As(), and compute_spectra().

23 {
24  IntClPar ipar;
25  double result=0,eresult;
26  gsl_function F;
27  gsl_integration_workspace *w=gsl_integration_workspace_alloc(1000);
28  ipar.l=l;
29  ipar.par=par;
30  ipar.tr1=tr1;
31  ipar.tr2=tr2;
32  F.function=&cl_integrand;
33  F.params=&ipar;
34  gsl_integration_qag(&F,D_LKMIN,D_LKMAX,0,1E-4,1000,GSL_INTEG_GAUSS41,w,&result,&eresult);
35  gsl_integration_workspace_free(w);
36 
37  return M_LN10*2*result/(2*l+1.);
38 }
int l
Definition: spectra.c:4
static double cl_integrand(double lk, void *params)
Definition: spectra.c:10
#define D_LKMIN
Definition: params.h:7
char * tr2
Definition: spectra.c:7
RunParams * par
Definition: spectra.c:5
char * tr1
Definition: spectra.c:6
#define D_LKMAX
Definition: params.h:8
static double w[2][28][111]
Definition: ccl_emu17.c:33
static double wt_integrand ( double  l,
void *  params 
)
static

Definition at line 94 of file spectra.c.

References IntWtPar::cl, IntWtPar::i_bessel, p, IntWtPar::th, and x.

Referenced by compute_wt_single().

95 {
97  double x=l*p->th;
98  // double cl=spline_eval(l,p->clsp);
99  double cl=p->cl[(int)l];
100  double jbes;
101 
102  if(p->i_bessel)
103  jbes=gsl_sf_bessel_Jn(p->i_bessel,x);
104  else
105  jbes=gsl_sf_bessel_J0(x);
106 
107  return l*jbes*cl;
108 }
int i_bessel
Definition: spectra.c:87
double * cl
Definition: spectra.c:91
static CCL_BEGIN_DECLS double x[111][8]
double th
Definition: spectra.c:89
dictionary params
Definition: halomod_bm.py:27
static int p
Definition: ccl_emu17.c:25