2 #include <gsl/gsl_integration.h>
3 #include <gsl/gsl_errno.h>
4 #include <gsl/gsl_odeiv2.h>
11 #define STEFAN_BOLTZMANN 5.670373e-5
71 hubble_a +=
CP->
OmegaG / (a * a * a * a);
76 hubble_a =
CP->
Hubble * sqrt(hubble_a);
87 int growth_ode(
double a,
const double yy[],
double dyda[],
void * params)
91 dyda[0] = yy[1]/pow(a,3)/hub;
113 gsl_odeiv2_system FF;
118 gsl_odeiv2_driver * drive = gsl_odeiv2_driver_alloc_standard_new(&FF,gsl_odeiv2_step_rkf45, 1e-5, 1e-8,1e-8,1,1);
120 double curtime = 1e-5;
132 int stat = gsl_odeiv2_driver_apply(drive, &curtime,a, yinit);
133 if (stat != GSL_SUCCESS) {
134 endrun(1,
"gsl_odeiv in growth: %d. Result at %g is %g %g\n",stat, curtime, yinit[0], yinit[1]);
136 gsl_odeiv2_driver_free(drive);
152 return a / D1 * dD1da;
175 const double R = params->
R;
176 double kr, kr3, kr2, w, x;
185 w = 3 * (sin(kr) / kr3 - cos(kr) / kr2);
202 if(k < fk->
table[m].k)
216 if(p1 == 0 || p2 == 0 || k1 == 0 || k2 == 0) {
218 double p = (k - k1) * p2 + (k2 - k) * p1;
227 double p = (k - k1) * p2 + (k2 - k) * p1;
235 gsl_integration_workspace * w = gsl_integration_workspace_alloc (1000);
237 double result,abserr;
243 gsl_integration_qags (&F, 0, 500. /
R, 0, 1e-4,1000,w,&result, &abserr);
245 gsl_integration_workspace_free (w);
252 for(i = 0; i <
fk->
size; i ++) {
265 endrun(5,
"Bad cosmology: H0 = %g OL = %g Ob = %g Og = %g Ocdm = %g\n",
286 message(0,
"Radiation is enabled in Hubble(a). "
287 "Following CAMB convention: Omega_Tot - 1 = %g\n", OmegaTot - 1);
static double OmegaFLD(const Cosmology *CP, const double a)
static double sigma2_int(double k, void *p)
double function_of_k_eval(FunctionOfK *fk, double k)
void check_units(const Cosmology *CP, const struct UnitSystem units)
void function_of_k_normalize_sigma(FunctionOfK *fk, double R, double sigma)
double GrowthFactor(Cosmology *CP, double astart, double aend)
static double growth(Cosmology *CP, double a, double *dDda)
int hybrid_nu_tracer(const Cosmology *CP, double atime)
double hubble_function(const Cosmology *CP, double a)
double function_of_k_tophat_sigma(FunctionOfK *fk, double R)
void init_cosmology(Cosmology *CP, const double TimeBegin, const struct UnitSystem units)
double F_Omega(Cosmology *CP, double a)
int growth_ode(double a, const double yy[], double dyda[], void *params)
void message(int where, const char *fmt,...)
void endrun(int where, const char *fmt,...)
void init_hybrid_nu(_hybrid_nu *const hybnu, const double mnu[], const double vcrit, const double light, const double nu_crit_time, const double kBtnu)
void init_omega_nu(_omega_nu *omnu, const double MNu[], const double a0, const double HubbleParam, const double tcmb0)
double get_omega_nu(const _omega_nu *const omnu, const double a)
struct FunctionOfK::@2 table[]
double UnitDensity_in_cgs
double UnitVelocity_in_cm_per_s