Fast Methods for Cosmological Simulations
FastSim serves as a tool for quick N-body simulations in modified gravity.
ccl_core.h
Go to the documentation of this file.
1 
2 #ifndef __CCL_CORE_H_INCLUDED__
3 #define __CCL_CORE_H_INCLUDED__
4 
5 #include <stdbool.h>
6 #include <stdio.h>
7 #include <gsl/gsl_spline.h>
8 #include <gsl/gsl_interp2d.h>
9 #include <gsl/gsl_spline2d.h>
10 
12 
16 typedef struct ccl_parameters {
17 
18  // Densities: CDM, baryons, total matter, neutrinos, curvature
19  double Omega_c;
20  double Omega_b;
21  double Omega_m;
22  double Omega_k;
23  double sqrtk; //TODO check
24  int k_sign;
27  // Dark Energy
28  double w0;
29  double wa;
30 
31  // Hubble parameters
32  double H0;
33  double h;
34 
35  // Neutrino properties
36 
37  double Neff; // Effective number of relativistic neutrino species in the early universe.
38  int N_nu_mass; // Number of species of neutrinos which are nonrelativistic today
39  double N_nu_rel; // Number of species of neutrinos which are relativistic today
40  double *mnu; // total mass of massive neutrinos (This is a pointer so that it can hold multiple masses.)
41  double sum_nu_masses; // sum of the neutrino masses.
42  double Omega_n_mass; // Omega_nu for MASSIVE neutrinos
43  double Omega_n_rel; // Omega_nu for MASSLESS neutrinos
44 
45  //double Neff_partial[CCL_MAX_NU_SPECIES];
46  //double mnu[CCL_MAX_NU_SPECIES];
47 
48  // Primordial power spectra
49  double A_s;
50  double n_s;
51 
52  // Radiation parameters
53  double Omega_g;
54  double T_CMB;
55 
56  // BCM baryonic model parameters
57  double bcm_log10Mc;
58  double bcm_etab;
59  double bcm_ks;
60 
61  // Derived parameters
62  double sigma8;
63  double Omega_l;
64  double z_star;
65 
66  //Modified growth rate
69  double *z_mgrowth;
70  double *df_mgrowth;
72 
73 
77 typedef struct ccl_data{
78  // These are all functions of the scale factor a.
79 
80  // Distances are defined in Mpc
81  double growth0;
82  gsl_spline * chi;
83  gsl_spline * growth;
84  gsl_spline * fgrowth;
85  gsl_spline * E;
86  gsl_spline * achi;
87 
88  // All these splines use the same accelerator so that
89  // if one calls them successively with the same a value
90  // they will be much faster.
91  gsl_interp_accel *accelerator;
92  gsl_interp_accel *accelerator_achi;
93  gsl_interp_accel *accelerator_m;
94  gsl_interp_accel *accelerator_d;
95  //TODO: it seems like we're not really using this accelerator, and we should
96  gsl_interp_accel *accelerator_k;
97 
98  // Function of Halo mass M
99 
100  gsl_spline * logsigma;
101  gsl_spline * dlnsigma_dlogm;
102 
103  // splines for halo mass function
104  gsl_spline * alphahmf;
105  gsl_spline * betahmf;
106  gsl_spline * gammahmf;
107  gsl_spline * phihmf;
108  gsl_spline * etahmf;
109 
110  // These are all functions of the wavenumber k and the scale factor a.
111  gsl_spline2d * p_lin;
112  gsl_spline2d * p_nl;
113  double k_min_lin; //k_min [1/Mpc] <- minimum wavenumber that the power spectrum has been computed to
114  double k_min_nl;
115  double k_max_lin;
116  double k_max_nl;
117 } ccl_data;
118 
122 typedef struct ccl_cosmology
123 {
127 
133 
134  int status;
135  //this is optional - less tedious than tracking all numerical values for status in error handler function
136  char status_message[500];
137 
138  // other flags?
139 } ccl_cosmology;
140 
141 // Label for whether you are passing a pointer to a sum of neutrino masses or a pointer to a list of 3 masses.
142 typedef enum ccl_mnu_convention {
143  ccl_mnu_list=0, // you pass a list of three neutrino masses
144  ccl_mnu_sum =1, // sum, defaults to splitting with normal hierarchy
145  ccl_mnu_sum_inverted = 2, //sum, split with inverted hierarchy
146  ccl_mnu_sum_equal = 3, //sum, split into equal masses
147  // More options could be added here
149 
150 // Initialization and life cycle of objects
151 void ccl_cosmology_read_config(void);
153 
154 /* Internal function to set the status message safely. */
155 void ccl_cosmology_set_status_message(ccl_cosmology * cosmo, const char * status_message, ...);
156 
157 
158 // User-facing creation routines
183  double Neff, double* mnu, ccl_mnu_convention mnu_type,
184  double w0, double wa, double h, double norm_pk,
185  double n_s, double bcm_log10Mc, double bcm_etab, double bcm_ks,
186  int nz_mgrowth,double *zarr_mgrowth,
187  double *dfarr_mgrowth, int *status);
188 
189 
190 /* ------- ROUTINE: ccl_parameters_create_flat_lcdm --------
191 INPUT: some cosmological parameters needed to create a flat LCDM model
192 TASK: call ccl_parameters_create to produce an LCDM model
193 */
195  double norm_pk, double n_s, int *status);
196 
197 
204 
205 
213 void ccl_parameters_write_yaml(ccl_parameters * params, const char * filename, int * status);
214 
221 ccl_parameters ccl_parameters_read_yaml(const char * filename, int *status);
222 
229 
230 
232 
233 #endif
double k_min_nl
Definition: ccl_core.h:114
gsl_interp_accel * accelerator_m
Definition: ccl_core.h:93
bool computed_power
Definition: ccl_core.h:130
double Omega_g
Definition: ccl_core.h:53
double * df_mgrowth
Definition: ccl_core.h:70
double growth0
Definition: ccl_core.h:81
double * mnu
Definition: ccl_core.h:40
bool has_mgrowth
Definition: ccl_core.h:67
double Omega_b
Definition: ccl_core.h:20
ccl_parameters params
Definition: ccl_core.h:124
double N_nu_rel
Definition: ccl_core.h:39
double H0
Definition: ccl_core.h:32
#define CCL_BEGIN_DECLS
Definition: ccl_defs.h:17
double Omega_n_mass
Definition: ccl_core.h:42
double n_s
Definition: ccl_core.h:50
double h
Definition: ccl_core.h:33
struct ccl_cosmology ccl_cosmology
double w0
Definition: ccl_core.h:28
double Omega_l
Definition: ccl_core.h:63
double bcm_ks
Definition: ccl_core.h:59
gsl_spline * betahmf
Definition: ccl_core.h:105
double * z_mgrowth
Definition: ccl_core.h:69
gsl_spline * alphahmf
Definition: ccl_core.h:104
gsl_interp_accel * accelerator_d
Definition: ccl_core.h:94
double Neff
Definition: ccl_core.h:37
gsl_spline2d * p_lin
Definition: ccl_core.h:111
void ccl_cosmology_set_status_message(ccl_cosmology *cosmo, const char *status_message,...)
Definition: ccl_core.c:792
double sum_nu_masses
Definition: ccl_core.h:41
ccl_parameters ccl_parameters_read_yaml(const char *filename, int *status)
Definition: ccl_core.c:624
double A_s
Definition: ccl_core.h:49
ccl_cosmology * ccl_cosmology_create(ccl_parameters params, ccl_configuration config)
Definition: ccl_core.c:173
gsl_interp_accel * accelerator_achi
Definition: ccl_core.h:92
void ccl_parameters_write_yaml(ccl_parameters *params, const char *filename, int *status)
Definition: ccl_core.c:531
gsl_spline * chi
Definition: ccl_core.h:82
double sqrtk
Definition: ccl_core.h:23
void ccl_cosmology_read_config(void)
Definition: ccl_core.c:50
ccl_mnu_convention
Definition: ccl_core.h:142
gsl_spline * E
Definition: ccl_core.h:85
void ccl_parameters_free(ccl_parameters *params)
Definition: ccl_core.c:808
gsl_spline * phihmf
Definition: ccl_core.h:107
double Omega_n_rel
Definition: ccl_core.h:43
gsl_spline2d * p_nl
Definition: ccl_core.h:112
double T_CMB
Definition: ccl_core.h:54
void ccl_cosmology_free(ccl_cosmology *cosmo)
Definition: ccl_core.c:829
dictionary params
Definition: halomod_bm.py:27
gsl_spline * achi
Definition: ccl_core.h:86
gsl_interp_accel * accelerator_k
Definition: ccl_core.h:96
gsl_spline * logsigma
Definition: ccl_core.h:100
gsl_interp_accel * accelerator
Definition: ccl_core.h:91
gsl_spline * fgrowth
Definition: ccl_core.h:84
bool computed_growth
Definition: ccl_core.h:129
double sigma8
Definition: ccl_core.h:62
double k_min_lin
Definition: ccl_core.h:113
double bcm_etab
Definition: ccl_core.h:58
gsl_spline * gammahmf
Definition: ccl_core.h:106
double k_max_nl
Definition: ccl_core.h:116
bool computed_hmfparams
Definition: ccl_core.h:132
double Omega_c
Definition: ccl_core.h:19
gsl_spline * dlnsigma_dlogm
Definition: ccl_core.h:101
double k_max_lin
Definition: ccl_core.h:115
int nz_mgrowth
Definition: ccl_core.h:68
bool computed_distances
Definition: ccl_core.h:128
ccl_configuration config
Definition: ccl_core.h:125
double bcm_log10Mc
Definition: ccl_core.h:57
double Omega_k
Definition: ccl_core.h:22
gsl_spline * etahmf
Definition: ccl_core.h:108
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:505
double Omega_m
Definition: ccl_core.h:21
gsl_spline * growth
Definition: ccl_core.h:83
struct ccl_data ccl_data
ccl_data data
Definition: ccl_core.h:126
ccl_parameters ccl_parameters_create(double Omega_c, double Omega_b, double Omega_k, double Neff, double *mnu, ccl_mnu_convention mnu_type, 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:294
CCL_BEGIN_DECLS struct ccl_parameters ccl_parameters
double z_star
Definition: ccl_core.h:64
#define CCL_END_DECLS
Definition: ccl_defs.h:18
bool computed_sigma
Definition: ccl_core.h:131
double wa
Definition: ccl_core.h:29