CLASS MANUAL
fourier.h
Go to the documentation of this file.
1 
3 #include "primordial.h"
4 #include "trigonometric_integrals.h"
5 
6 #ifndef __FOURIER__
7 #define __FOURIER__
8 
9 #define _M_EV_TOO_BIG_FOR_HALOFIT_ 10.
11 #define _M_SUN_ 1.98847e30
13 #define _MAX_NUM_EXTRAPOLATION_ 100000
14 
15 enum non_linear_method {nl_none,nl_halofit,nl_HMcode};
16 enum pk_outputs {pk_linear,pk_nonlinear,pk_numerical_nowiggle,pk_analytic_nowiggle};
17 
18 enum source_extrapolation {extrap_zero,extrap_only_max,extrap_only_max_units,extrap_max_scaled,extrap_hmcode,extrap_user_defined};
19 
20 enum hmcode_baryonic_feedback_model {hmcode_emu_dmonly, hmcode_owls_dmonly, hmcode_owls_ref, hmcode_owls_agn, hmcode_owls_dblim, hmcode_user_defined};
21 enum hmcode_version {hmcode_version_2015, hmcode_version_2020, hmcode_version_2020_unfitted, hmcode_version_2020_baryonic};
22 
23 enum out_sigmas {out_sigma,out_sigma_prime,out_sigma_disp};
24 
33 struct fourier {
34 
41 
42  enum non_linear_method method;
44  enum source_extrapolation extrapolation_method;
46  enum hmcode_baryonic_feedback_model feedback;
49  enum hmcode_version hm_version;
51  double c_min;
52  double eta_0;
53  double z_infinity;
55  short has_pk_eq;
57  int nk_wiggle;
75 
79 
83  int ic_size;
84  int ic_ic_size;
85  short * is_non_zero;
88 
92 
93  short has_pk_m;
94  short has_pk_cb;
96  int index_pk_m;
99  /* and two redundant but useful indices: */
100 
106  int pk_size;
109 
113 
116  int k_size;
117  int k_size_pk;
118  double * k;
119  double * ln_k;
121  double * ln_tau;
130  double ** ln_pk_ic_l;
146  double ** ddln_pk_ic_l;
156  double ** ln_pk_l;
161  double ** ddln_pk_l;
163  double ** ln_pk_nl;
168  double ** ddln_pk_nl;
170  double * sigma8;
173 
177 
178  int k_size_extra;
180  double ** ln_pk_l_extra;
184  double ** ddln_pk_l_extra;
186  double * ln_pk_l_an_extra;
194  double * ln_pk_l_nw_extra;
202 
206 
207  int tau_size;
208  double * tau;
211  double ** nl_corr_density;
212  double ** k_nl;
218 
222 
229  double * pk_eq_tau;
230  double * pk_eq_w_and_Omega;
234 
238 
241  ErrorMsg error_message;
243  short is_allocated;
246 };
247 
248 /********************************************************************************/
249 
250 /* @cond INCLUDE_WITH_DOXYGEN */
251 /*
252  * Boilerplate for C++
253  */
254 #ifdef __cplusplus
255 extern "C" {
256 #endif
257 
258  /* external functions (meant to be called from other modules) */
259 
260  int fourier_pk_at_z(
261  struct background * pba,
262  struct fourier *pfo,
263  enum linear_or_logarithmic mode,
264  enum pk_outputs pk_output,
265  double z,
266  int index_pk,
267  double * out_pk,
268  double * out_pk_ic
269  );
270 
271  int fourier_pks_at_z(
272  struct background * pba,
273  struct fourier *pfo,
274  enum linear_or_logarithmic mode,
275  enum pk_outputs pk_output,
276  double z,
277  double * out_pk,
278  double * out_pk_ic,
279  double * out_pk_cb,
280  double * out_pk_cb_ic
281  );
282 
284  struct background * pba,
285  struct primordial * ppm,
286  struct fourier *pfo,
287  enum pk_outputs pk_output,
288  double k,
289  double z,
290  int index_pk,
291  double * out_pk,
292  double * out_pk_ic
293  );
294 
295  int fourier_pks_at_k_and_z(
296  struct background * pba,
297  struct primordial * ppm,
298  struct fourier *pfo,
299  enum pk_outputs pk_output,
300  double k,
301  double z,
302  double * out_pk,
303  double * out_pk_ic,
304  double * out_pk_cb,
305  double * out_pk_cb_ic
306  );
307 
309  struct background * pba,
310  struct fourier * pfo,
311  enum pk_outputs pk_output,
312  double * kvec,
313  int kvec_size,
314  double * zvec,
315  int zvec_size,
316  double * out_pk,
317  double * out_pk_cb
318  );
319 
321  struct precision * ppr,
322  struct background * pba,
323  struct fourier * pfo,
324  double R,
325  double z,
326  int index_pk,
327  enum out_sigmas sigma_output,
328  double * result
329  );
330 
332  struct background * pba,
333  struct primordial * ppm,
334  struct fourier * pfo,
335  enum pk_outputs pk_output,
336  double k,
337  double z,
338  int index_pk,
339  double * pk_tilt
340  );
341 
342  int fourier_k_nl_at_z(
343  struct background *pba,
344  struct fourier * pfo,
345  double z,
346  double * k_nl,
347  double * k_nl_cb
348  );
349 
350  /* internal functions */
351 
352  int fourier_init(
353  struct precision *ppr,
354  struct background *pba,
355  struct thermodynamics *pth,
356  struct perturbations *ppt,
357  struct primordial *ppm,
358  struct fourier *pfo
359  );
360 
361  int fourier_free(
362  struct fourier *pfo
363  );
364 
365  int fourier_indices(
366  struct precision *ppr,
367  struct background *pba,
368  struct perturbations * ppt,
369  struct primordial * ppm,
370  struct fourier * pfo
371  );
372 
373  int fourier_get_k_list(
374  struct precision *ppr,
375  struct primordial *ppm,
376  struct perturbations * ppt,
377  struct fourier * pfo
378  );
379 
381  struct perturbations * ppt,
382  struct fourier * pfo
383  );
384 
385  int fourier_get_source(
386  struct background * pba,
387  struct perturbations * ppt,
388  struct fourier * pfo,
389  int index_k,
390  int index_ic,
391  int index_tp,
392  int index_tau,
393  double ** sources,
394  double * source);
395 
396  int fourier_pk_linear(
397  struct background *pba,
398  struct perturbations *ppt,
399  struct primordial *ppm,
400  struct fourier *pfo,
401  int index_pk,
402  int index_tau,
403  int k_size,
404  double * lnpk,
405  double * lnpk_ic
406  );
407 
409  struct precision *ppr,
410  struct background *pba,
411  struct primordial * ppm,
412  struct fourier *pfo
413  );
414 
415  int fourier_wnw_split(
416  struct precision *ppr,
417  struct background *pba,
418  struct primordial * ppm,
419  struct fourier *pfo
420  );
421 
422  int fourier_sigmas(
423  struct fourier * pfo,
424  double R,
425  double *lnpk_l,
426  double *ddlnpk_l,
427  int k_size,
428  double k_per_decade,
429  enum out_sigmas sigma_output,
430  double * result
431  );
432 
433  int fourier_sigma_at_z(
434  struct background * pba,
435  struct fourier * pfo,
436  double R,
437  double z,
438  int index_pk,
439  double k_per_decade,
440  double * result
441  );
442 
443 #ifdef __cplusplus
444 }
445 #endif
446 
447 #endif
448 /* @endcond */
Definition: common.h:406
int fourier_pks_at_kvec_and_zvec(struct background *pba, struct fourier *pfo, enum pk_outputs pk_output, double *kvec, int kvec_size, double *zvec, int zvec_size, double *out_pk, double *out_pk_cb)
Definition: fourier.c:818
int fourier_sigma_at_z(struct background *pba, struct fourier *pfo, double R, double z, int index_pk, double k_per_decade, double *result)
Definition: fourier.c:2760
int fourier_k_nl_at_z(struct background *pba, struct fourier *pfo, double z, double *k_nl, double *k_nl_cb)
Definition: fourier.c:1179
int fourier_pk_tilt_at_k_and_z(struct background *pba, struct primordial *ppm, struct fourier *pfo, enum pk_outputs pk_output, double k, double z, int index_pk, double *pk_tilt)
Definition: fourier.c:1029
int fourier_get_source(struct background *pba, struct perturbations *ppt, struct fourier *pfo, int index_k, int index_ic, int index_tp, int index_tau, double **sources, double *source)
Definition: fourier.c:2177
int fourier_sigmas_at_z(struct precision *ppr, struct background *pba, struct fourier *pfo, double R, double z, int index_pk, enum out_sigmas sigma_output, double *result)
Definition: fourier.c:1103
int fourier_wnw_split(struct precision *ppr, struct background *pba, struct primordial *ppm, struct fourier *pfo)
Definition: fourier.c:2537
int fourier_free(struct fourier *pfo)
Definition: fourier.c:1812
int fourier_pk_at_k_and_z(struct background *pba, struct primordial *ppm, struct fourier *pfo, enum pk_outputs pk_output, double k, double z, int index_pk, double *out_pk, double *out_pk_ic)
Definition: fourier.c:448
int fourier_indices(struct precision *ppr, struct background *pba, struct perturbations *ppt, struct primordial *ppm, struct fourier *pfo)
Definition: fourier.c:1898
int fourier_get_tau_list(struct perturbations *ppt, struct fourier *pfo)
Definition: fourier.c:2127
int fourier_pk_at_z(struct background *pba, struct fourier *pfo, enum linear_or_logarithmic mode, enum pk_outputs pk_output, double z, int index_pk, double *out_pk, double *out_pk_ic)
Definition: fourier.c:70
int fourier_pk_analytic_nowiggle(struct precision *ppr, struct background *pba, struct primordial *ppm, struct fourier *pfo)
Definition: fourier.c:2492
int fourier_pk_linear(struct background *pba, struct perturbations *ppt, struct primordial *ppm, struct fourier *pfo, int index_pk, int index_tau, int k_size, double *lnpk, double *lnpk_ic)
Definition: fourier.c:2330
int fourier_get_k_list(struct precision *ppr, struct primordial *ppm, struct perturbations *ppt, struct fourier *pfo)
Definition: fourier.c:2056
int fourier_init(struct precision *ppr, struct background *pba, struct thermodynamics *pth, struct perturbations *ppt, struct primordial *ppm, struct fourier *pfo)
Definition: fourier.c:1265
int fourier_sigmas(struct fourier *pfo, double R, double *lnpk_l, double *ddlnpk_l, int k_size, double k_per_decade, enum out_sigmas sigma_output, double *result)
Definition: fourier.c:2584
double * pk_eq_w_and_Omega
Definition: fourier.h:230
int index_md_scalars
Definition: fourier.h:80
short has_pk_m
Definition: fourier.h:93
double ** nl_corr_density
Definition: fourier.h:211
int ln_tau_size_nl
Definition: fourier.h:128
int * pk_l_nw_index
Definition: fourier.h:192
double ** ddln_pk_nl
Definition: fourier.h:168
int index_tau_min_nl
Definition: fourier.h:214
double * k
Definition: fourier.h:118
short has_pk_analytic_nowiggle
Definition: fourier.h:60
int pk_eq_size
Definition: fourier.h:225
int pk_eq_tau_size
Definition: fourier.h:227
double ** ddln_pk_ic_l
Definition: fourier.h:146
double * tau
Definition: fourier.h:208
double * ddln_pk_l_an_extra
Definition: fourier.h:190
short is_allocated
Definition: fourier.h:243
double ** ddln_pk_l
Definition: fourier.h:161
enum hmcode_version hm_version
Definition: fourier.h:49
int index_pk_eq_w
Definition: fourier.h:223
enum source_extrapolation extrapolation_method
Definition: fourier.h:44
int pk_size
Definition: fourier.h:106
enum non_linear_method method
Definition: fourier.h:42
int ic_ic_size
Definition: fourier.h:84
ErrorMsg error_message
Definition: fourier.h:241
int k_size
Definition: fourier.h:116
int index_pk_eq_Omega_m
Definition: fourier.h:224
double eta_0
Definition: fourier.h:52
double * ddln_pk_l_nw_extra
Definition: fourier.h:199
double z_infinity
Definition: fourier.h:53
int k_size_pk
Definition: fourier.h:117
short has_pk_numerical_nowiggle
Definition: fourier.h:67
int index_pk_total
Definition: fourier.h:101
short has_pk_eq
Definition: fourier.h:55
double ** ln_pk_nl
Definition: fourier.h:163
double * ln_pk_l_an_extra
Definition: fourier.h:186
double ** ln_pk_ic_l
Definition: fourier.h:130
double ** ln_pk_l
Definition: fourier.h:156
short * is_non_zero
Definition: fourier.h:85
double ** k_nl
Definition: fourier.h:212
short has_pk_cb
Definition: fourier.h:94
double log10T_heat_hmcode
Definition: fourier.h:58
int tau_size
Definition: fourier.h:207
double * pk_eq_tau
Definition: fourier.h:229
double * ln_pk_l_nw_extra
Definition: fourier.h:194
int index_pk_cb
Definition: fourier.h:97
int ic_size
Definition: fourier.h:83
double ** ln_pk_l_extra
Definition: fourier.h:180
double * ln_k
Definition: fourier.h:119
short fourier_verbose
Definition: fourier.h:239
double * pk_eq_ddw_and_ddOmega
Definition: fourier.h:231
int ln_tau_size
Definition: fourier.h:127
double * sigma8
Definition: fourier.h:170
short has_pk_matter
Definition: fourier.h:114
double ** ddln_pk_l_extra
Definition: fourier.h:184
int index_pk_cluster
Definition: fourier.h:103
int index_pk_m
Definition: fourier.h:96
double * ln_tau
Definition: fourier.h:121
Definition: fourier.h:33
Definition: perturbations.h:98
linear_or_logarithmic
Definition: primordial.h:21
Definition: primordial.h:79
Definition: background.h:44
Definition: thermodynamics.h:59