CCL
ccl_core.h
Go to the documentation of this file.
1 
2 #ifdef __cplusplus
3 extern "C" {
4 #endif
5 
6 #pragma once
7 #include "gsl/gsl_spline.h"
8 #include "gsl/gsl_interp2d.h"
9 #include "gsl/gsl_spline2d.h"
10 #include "ccl_config.h"
11 #include "ccl_constants.h"
12 #include <stdbool.h>
13 
14 // Macros for replacing relative paths
15 #define EXPAND_STR(s) STRING(s)
16 #define STRING(s) #s
17 
21 typedef struct ccl_parameters {
22 
23  // Densities: CDM, baryons, total matter, neutrinos, curvature
24  double Omega_c;
25  double Omega_b;
26  double Omega_m;
27  double Omega_k;
28  double sqrtk; //TODO check
29  int k_sign;
32  // Dark Energy
33  double w0;
34  double wa;
35 
36  // Hubble parameters
37  double H0;
38  double h;
39 
40  // Neutrino properties
41  // At the moment, only support equal-mass massive neutrinos (cannot have two different masses)
42  double N_nu_mass; // Number of different species of massive neutrinos
43  double N_nu_rel; // Neff massless
44  double mnu; // total mass of massive neutrinos
45  double Omega_n_mass; // Omega_nu for MASSIVE neutrinos
46  double Omega_n_rel; // Omega_nu for MASSLESS neutrinos
47 
48  //double Neff_partial[CCL_MAX_NU_SPECIES];
49  //double mnu[CCL_MAX_NU_SPECIES];
50 
51  // Primordial power spectra
52  double A_s;
53  double n_s;
54 
55  // Radiation parameters
56  double Omega_g;
57  double T_CMB;
58 
59  // BCM baryonic model parameters
60  double bcm_log10Mc;
61  double bcm_etab;
62  double bcm_ks;
63 
64  // Derived parameters
65  double sigma_8;
66  double Omega_l;
67  double z_star;
68 
69  //Modified growth rate
72  double *z_mgrowth;
73  double *df_mgrowth;
75 
76 
80 typedef struct ccl_data{
81  // These are all functions of the scale factor a.
82 
83  // Distances are defined in Mpc
84  double growth0;
85  gsl_spline * chi;
86  gsl_spline * growth;
87  gsl_spline * fgrowth;
88  gsl_spline * E;
89  gsl_spline * achi;
90 
91  // All these splines use the same accelerator so that
92  // if one calls them successively with the same a value
93  // they will be much faster.
94  gsl_interp_accel *accelerator;
95  gsl_interp_accel *accelerator_achi;
96  gsl_interp_accel *accelerator_m;
97  gsl_interp_accel *accelerator_d;
98  //TODO: it seems like we're not really using this accelerator, and we should
99  gsl_interp_accel *accelerator_k;
100 
101  // Function of Halo mass M
102 
103  gsl_spline * logsigma;
104  gsl_spline * dlnsigma_dlogm;
105 
106  // splines for halo mass function
107  gsl_spline * alphahmf;
108  gsl_spline * betahmf;
109  gsl_spline * gammahmf;
110  gsl_spline * phihmf;
111  gsl_spline * etahmf;
112 
113  // These are all functions of the wavenumber k and the scale factor a.
114  gsl_spline2d * p_lin;
115  gsl_spline2d * p_nl;
116  double k_min; //k_min [1/Mpc] <- minimum wavenumber that the power spectrum has been computed to
117 
118 } ccl_data;
119 
123 typedef struct ccl_cosmology
124 {
128 
134 
135  int status;
136  //this is optional - less tedious than tracking all numerical values for status in error handler function
137  char status_message[500];
138 
139  // other flags?
140 } ccl_cosmology;
141 
142 
143 // Initialization and life cycle of objects
144 void ccl_cosmology_read_config(void);
146 
147 
148 // Helper functions to create ccl_cosmology structs directly given a set of params
150  double Omega_c, double Omega_b, double Omega_k, double N_nu_rel, double N_nu_mass, double mnu,
151  double w0, double wa, double h, double norm_pk, double n_s,
152  double bcm_log10Mc, double bcm_etab, double bcm_ks,
153  int nz_mgrowth, double *zarr_mgrowth, double *dfarr_mgrowth,
154  ccl_configuration config, int *status);
155 
157  double Omega_c, double Omega_b, double Omega_k, double h,
158  double norm_pk, double n_s,
159  ccl_configuration config, int *status);
160 
161 // User-facing creation routines
185 ccl_parameters ccl_parameters_create(double Omega_c, double Omega_b, double Omega_k, double N_nu_rel, double N_nu_mass, double mnu, 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);
186 
187 // Specific sub-models
199 ccl_parameters ccl_parameters_create_flat_lcdm(double Omega_c, double Omega_b, double h, double norm_pk, double n_s, int *status);
200 
216  double norm_pk, double n_s, double bcm_log10Mc,
217  double bcm_etab, double bcm_ks, int *status);
218 
231 ccl_parameters ccl_parameters_create_flat_wcdm(double Omega_c, double Omega_b, double w0, double h, double norm_pk, double n_s, int *status);
232 
246 ccl_parameters ccl_parameters_create_flat_wacdm(double Omega_c, double Omega_b, double w0,double wa, double h, double norm_pk, double n_s, int *status);
247 
262 ccl_parameters ccl_parameters_create_lcdm(double Omega_c, double Omega_b, double Omega_k, double h, double norm_pk, double n_s, int *status);
263 
264 ccl_parameters ccl_parameters_create_flat_lcdm_nu(double Omega_c, double Omega_b, double h, double norm_pk, double n_s, double N_nu_rel, double N_nu_mass, double mnu, int *status);
265 ccl_parameters ccl_parameters_create_flat_wcdm_nu(double Omega_c, double Omega_b, double w0, double h, double norm_pk, double n_s, double N_nu_rel, double N_nu_mass, double mnu, int *status);
266 ccl_parameters ccl_parameters_create_flat_wacdm_nu(double Omega_c, double Omega_b, double w0,double wa, double h, double norm_pk, double n_s, double N_nu_rel, double N_nu_mass, double mnu, int *status);
267 ccl_parameters ccl_parameters_create_lcdm_nu(double Omega_c, double Omega_b, double Omega_k, double h, double norm_pk, double n_s, double N_nu_rel, double N_nu_mass, double mnu, int *status);
268 
274 void ccl_cosmology_free(ccl_cosmology * cosmo);
275 
284 void ccl_cosmology_compute_distances(ccl_cosmology * cosmo,int *status);
285 
294 void ccl_cosmology_compute_growth(ccl_cosmology * cosmo, int * status);
295 
304 void ccl_cosmology_compute_power(ccl_cosmology * cosmo, int* status);
305 
306 #ifdef __cplusplus
307 }
308 #endif
gsl_interp_accel * accelerator_m
Definition: ccl_core.h:96
bool computed_power
Definition: ccl_core.h:131
Definition: ccl_config.h:87
double Omega_g
Definition: ccl_core.h:56
double N_nu_mass
Definition: ccl_core.h:42
void ccl_cosmology_compute_power(ccl_cosmology *cosmo, int *status)
Definition: ccl_power.c:1002
double * df_mgrowth
Definition: ccl_core.h:73
double growth0
Definition: ccl_core.h:84
ccl_parameters ccl_parameters_create_lcdm_nu(double Omega_c, double Omega_b, double Omega_k, double h, double norm_pk, double n_s, double N_nu_rel, double N_nu_mass, double mnu, int *status)
Definition: ccl_core.c:441
bool has_mgrowth
Definition: ccl_core.h:70
double Omega_b
Definition: ccl_core.h:25
ccl_parameters params
Definition: ccl_core.h:125
double N_nu_rel
Definition: ccl_core.h:43
double H0
Definition: ccl_core.h:37
Definition: ccl_core.h:80
ccl_parameters ccl_parameters_create_flat_lcdm_bar(double Omega_c, double Omega_b, double h, double norm_pk, double n_s, double bcm_log10Mc, double bcm_etab, double bcm_ks, int *status)
Definition: ccl_core.c:384
double k_min
Definition: ccl_core.h:116
double Omega_n_mass
Definition: ccl_core.h:45
int k_sign
Definition: ccl_core.h:29
Definition: ccl_core.h:21
double n_s
Definition: ccl_core.h:53
double h
Definition: ccl_core.h:38
struct ccl_cosmology ccl_cosmology
ccl_parameters ccl_parameters_create(double Omega_c, double Omega_b, double Omega_k, double N_nu_rel, double N_nu_mass, double mnu, 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:288
double w0
Definition: ccl_core.h:33
double Omega_l
Definition: ccl_core.h:66
double bcm_ks
Definition: ccl_core.h:62
gsl_spline * betahmf
Definition: ccl_core.h:108
double mnu
Definition: ccl_core.h:44
double * z_mgrowth
Definition: ccl_core.h:72
ccl_parameters ccl_parameters_create_flat_wcdm(double Omega_c, double Omega_b, double w0, double h, double norm_pk, double n_s, int *status)
Definition: ccl_core.c:459
gsl_spline * alphahmf
Definition: ccl_core.h:107
gsl_interp_accel * accelerator_d
Definition: ccl_core.h:97
ccl_parameters ccl_parameters_create_flat_lcdm_nu(double Omega_c, double Omega_b, double h, double norm_pk, double n_s, double N_nu_rel, double N_nu_mass, double mnu, int *status)
Definition: ccl_core.c:405
void ccl_cosmology_compute_distances(ccl_cosmology *cosmo, int *status)
Definition: ccl_background.c:280
ccl_cosmology * ccl_cosmology_create_with_lcdm_params(double Omega_c, double Omega_b, double Omega_k, double h, double norm_pk, double n_s, ccl_configuration config, int *status)
Definition: ccl_core.c:205
gsl_spline2d * p_lin
Definition: ccl_core.h:114
double A_s
Definition: ccl_core.h:52
ccl_cosmology * ccl_cosmology_create(ccl_parameters params, ccl_configuration config)
Definition: ccl_core.c:103
gsl_interp_accel * accelerator_achi
Definition: ccl_core.h:95
ccl_parameters ccl_parameters_create_flat_wacdm_nu(double Omega_c, double Omega_b, double w0, double wa, double h, double norm_pk, double n_s, double N_nu_rel, double N_nu_mass, double mnu, int *status)
Definition: ccl_core.c:512
gsl_spline * chi
Definition: ccl_core.h:85
double sqrtk
Definition: ccl_core.h:28
void ccl_cosmology_read_config(void)
Definition: ccl_core.c:29
ccl_cosmology * ccl_cosmology_create_with_params(double Omega_c, double Omega_b, double Omega_k, double N_nu_rel, double N_nu_mass, double mnu, 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, ccl_configuration config, int *status)
Definition: ccl_core.c:168
gsl_spline * E
Definition: ccl_core.h:88
gsl_spline * phihmf
Definition: ccl_core.h:110
double Omega_n_rel
Definition: ccl_core.h:46
gsl_spline2d * p_nl
Definition: ccl_core.h:115
double T_CMB
Definition: ccl_core.h:57
void ccl_cosmology_free(ccl_cosmology *cosmo)
Definition: ccl_core.c:579
gsl_spline * achi
Definition: ccl_core.h:89
gsl_interp_accel * accelerator_k
Definition: ccl_core.h:99
ccl_parameters ccl_parameters_create_lcdm(double Omega_c, double Omega_b, double Omega_k, double h, double norm_pk, double n_s, int *status)
Definition: ccl_core.c:423
gsl_spline * logsigma
Definition: ccl_core.h:103
gsl_interp_accel * accelerator
Definition: ccl_core.h:94
ccl_parameters ccl_parameters_create_flat_wcdm_nu(double Omega_c, double Omega_b, double w0, double h, double norm_pk, double n_s, double N_nu_rel, double N_nu_mass, double mnu, int *status)
Definition: ccl_core.c:478
gsl_spline * fgrowth
Definition: ccl_core.h:87
bool computed_growth
Definition: ccl_core.h:130
double bcm_etab
Definition: ccl_core.h:61
gsl_spline * gammahmf
Definition: ccl_core.h:109
bool computed_hmfparams
Definition: ccl_core.h:133
double Omega_c
Definition: ccl_core.h:24
void ccl_cosmology_compute_growth(ccl_cosmology *cosmo, int *status)
Definition: ccl_background.c:439
Definition: ccl_core.h:123
gsl_spline * dlnsigma_dlogm
Definition: ccl_core.h:104
int status
Definition: ccl_core.h:135
ccl_parameters ccl_parameters_create_flat_wacdm(double Omega_c, double Omega_b, double w0, double wa, double h, double norm_pk, double n_s, int *status)
Definition: ccl_core.c:495
int nz_mgrowth
Definition: ccl_core.h:71
bool computed_distances
Definition: ccl_core.h:129
ccl_configuration config
Definition: ccl_core.h:126
double bcm_log10Mc
Definition: ccl_core.h:60
double Omega_k
Definition: ccl_core.h:27
gsl_spline * etahmf
Definition: ccl_core.h:111
ccl_parameters ccl_parameters_create_flat_lcdm(double Omega_c, double Omega_b, double h, double norm_pk, double n_s, int *status)
Definition: ccl_core.c:363
double Omega_m
Definition: ccl_core.h:26
struct ccl_parameters ccl_parameters
gsl_spline * growth
Definition: ccl_core.h:86
struct ccl_data ccl_data
ccl_data data
Definition: ccl_core.h:127
double sigma_8
Definition: ccl_core.h:65
double z_star
Definition: ccl_core.h:67
bool computed_sigma
Definition: ccl_core.h:132
double wa
Definition: ccl_core.h:34