Fast Methods for Cosmological Simulations
FastSim serves as a tool for quick N-body simulations in modified gravity.
transfers.c
Go to the documentation of this file.
1 #include "common.h"
2 
3 #ifdef _NOLIM_CMBL
4 #define N_CHI 1000
5 static double transfer_cmblens_nolim(int l,double k,RunParams *par)
6 {
7  int i;
8  double ret=0;
9  double dchi=par->chi_LSS/N_CHI;
10  for(i=0;i<N_CHI;i++) {
11  double chi=(i+0.5)*dchi;
12  double w=1-chi/par->chi_LSS;
13  double a=spline_eval(chi,par->aofchi);
14  double gf=spline_eval(chi,par->gfofchi);
15  double jl=csm_j_bessel(l,k*chi);
16 
17  ret+=gf*w*jl/(chi*a);
18  }
19 
20  return ret*(par->prefac_lensing)*dchi*l*(l+1)/k*sqrt((2*l+1.)/M_PI);
21 }
22 #endif //_NOLIM_CMBL
23 
24 static double transfer_dens(int l,double k,RunParams *par,int ibin)
25 {
26  double chi=(l+0.5)/k;
27  double gf=spline_eval(chi,par->gfofchi);
28  double h=spline_eval(chi,par->hofchi);
29  double z=spline_eval(chi,par->zofchi);
30  double pz=spline_eval(z,par->wind_0[ibin]);
31  double bz=spline_eval(z,par->bias);
32 
33  return pz*bz*gf*h;
34 }
35 
36 static double transfer_rsd(int l,double k,RunParams *par,int ibin)
37 {
38  double chi0=(l+0.5)/k;
39  double chi1=(l+1.5)/k;
40  double z0=spline_eval(chi0,par->zofchi);
41  double z1=spline_eval(chi1,par->zofchi);
42  double gf0=spline_eval(chi0,par->gfofchi);
43  double gf1=spline_eval(chi1,par->gfofchi);
44  double fg0=spline_eval(chi0,par->fgofchi);
45  double fg1=spline_eval(chi1,par->fgofchi);
46  double h0=spline_eval(chi0,par->hofchi);
47  double h1=spline_eval(chi1,par->hofchi);
48  double pz0=spline_eval(z0,par->wind_0[ibin]);
49  double pz1=spline_eval(z1,par->wind_0[ibin]);
50  double term0=pz0*fg0*gf0*h0*(1+8.*l)/((2*l+1.)*(2*l+1.));
51  double term1=pz1*fg1*gf1*h1*sqrt((l+0.5)/(l+1.5))*4./(2*l+3);
52 
53  return term0-term1;
54 }
55 
56 static double transfer_isw(int l,double k,RunParams *par)
57 {
58  double chi=(l+0.5)/k;
59  double gf=spline_eval(chi,par->gfofchi);
60  double h=spline_eval(chi,par->hofchi);
61  double fg=spline_eval(chi,par->fgofchi);
62 
63  return 2*par->prefac_lensing*h*gf*(1-fg)/(k*k);
64 }
65 
66 static double transfer_magnification(int l,double k,RunParams *par,int ibin)
67 {
68  double chi=(l+0.5)/k;
69  double gf=spline_eval(chi,par->gfofchi);
70  double a=spline_eval(chi,par->aofchi);
71  double w=spline_eval(chi,par->wind_M[ibin]);
72 
73  if(w<=0)
74  return 0;
75  else
76  return -2*par->prefac_lensing*l*(l+1)*gf*w/(a*chi*k*k);
77 }
78 
79 static double transfer_lensing(int l,double k,RunParams *par,int ibin)
80 {
81  double chi=(l+0.5)/k;
82  double gf=spline_eval(chi,par->gfofchi);
83  double a=spline_eval(chi,par->aofchi);
84  double w=spline_eval(chi,par->wind_L[ibin]);
85 
86  if(w<=0)
87  return 0;
88  else
89  return par->prefac_lensing*l*(l+1)*gf*w/(a*chi*k*k);
90 }
91 
92 static double transfer_cmblens(int l,double k,RunParams *par)
93 {
94  double chi=(l+0.5)/k;
95 
96  if(chi>=par->chi_LSS)
97  return 0;
98  else {
99  double gf=spline_eval(chi,par->gfofchi);
100  double a=spline_eval(chi,par->aofchi);
101  double w=1-chi/par->chi_LSS;
102 
103  return par->prefac_lensing*l*(l+1)*gf*w/(a*chi*k*k);
104  }
105 }
106 
107 double transfer_wrap(int l,double k,RunParams *par,char *trtype,int ibin)
108 {
109  if(!strcmp(trtype,"nc")) {
110  if(par->do_nc!=1)
111  dam_report_error(1,"Asked to calculate NC transfer function, but can't!\n");
112  else {
113  double tr=0;
114  if(par->has_dens)
115  tr+=transfer_dens(l,k,par,ibin);
116  if(par->has_rsd)
117  tr+=transfer_rsd(l,k,par,ibin);
118  if(par->has_lensing)
119  tr+=transfer_magnification(l,k,par,ibin);
120  return tr;
121  }
122  }
123  if(!strcmp(trtype,"isw")) {
124  if(par->do_isw!=1)
125  dam_report_error(1,"Asked to calculate ISW transfer function, but can't!\n");
126  else
127  return transfer_isw(l,k,par);
128  }
129  if(!strcmp(trtype,"shear")) {
130  if(par->do_shear!=1)
131  dam_report_error(1,"Asked to calculate shear transfer function, but can't!\n");
132  else
133  return transfer_lensing(l,k,par,ibin);
134  }
135  if(!strcmp(trtype,"cmblens")) {
136  if(par->do_cmblens!=1)
137  dam_report_error(1,"Asked to calculate shear transfer function, but can't!\n");
138  else
139 #ifdef _NOLIM_CMBL
140  return transfer_cmblens_nolim(l,k,par);
141 #else //_NOLIM_CMBL
142  return transfer_cmblens(l,k,par);
143 #endif //_NOLIM_CMBL
144  }
145  else
146  dam_report_error(1,"Unknown transfer type %s\n",trtype);
147  return -1.;
148 }
double prefac_lensing
Definition: common.h:36
void dam_report_error(int level, char *fmt,...)
Definition: common.c:39
int do_isw
Definition: common.h:41
double chi_LSS
Definition: common.h:35
SplPar * hofchi
Definition: common.h:48
static double transfer_rsd(int l, double k, RunParams *par, int ibin)
Definition: transfers.c:36
SplPar * zofchi
Definition: common.h:47
float z1
Definition: mk_bins.py:9
int do_cmblens
Definition: common.h:40
#define M_PI
Definition: ccl_constants.h:22
SplPar * gfofchi
Definition: common.h:49
SplPar ** wind_0
Definition: common.h:51
static double transfer_lensing(int l, double k, RunParams *par, int ibin)
Definition: transfers.c:79
Grid< NDIM, T > sqrt(Grid< NDIM, T > lhs)
Definition: grid.h:231
SplPar * aofchi
Definition: common.h:46
double spline_eval(double x, SplPar *spl)
Definition: common.c:71
SplPar * bias
Definition: common.h:54
int do_shear
Definition: common.h:39
int do_nc
Definition: common.h:38
static double z[8]
int has_rsd
Definition: common.h:44
SplPar ** wind_M
Definition: common.h:52
int has_dens
Definition: common.h:43
static double transfer_isw(int l, double k, RunParams *par)
Definition: transfers.c:56
static double transfer_magnification(int l, double k, RunParams *par, int ibin)
Definition: transfers.c:66
SplPar ** wind_L
Definition: common.h:53
SplPar * fgofchi
Definition: common.h:50
int has_lensing
Definition: common.h:45
double transfer_wrap(int l, double k, RunParams *par, char *trtype, int ibin)
Definition: transfers.c:107
static double transfer_dens(int l, double k, RunParams *par, int ibin)
Definition: transfers.c:24
static double w[2][28][111]
Definition: ccl_emu17.c:33
static double transfer_cmblens(int l, double k, RunParams *par)
Definition: transfers.c:92