6 #include <gsl/gsl_errno.h> 7 #include <gsl/gsl_spline.h> 8 #include <gsl/gsl_integration.h> 9 #include <gsl/gsl_const_mksa.h> 10 #include <gsl/gsl_roots.h> 25 double rat=*((
double*)(r));
26 return sqrt(x*x+rat*rat)/(exp(x)+1.0)*x*
x;
47 "ccl_neutrinos.c: Failed to read config file.");
52 int stat=0, gslstatus;
53 gsl_integration_cquad_workspace * workspace = \
58 double mnut_=exp(mnut[i]);
60 gslstatus = gsl_integration_cquad(&F, 0, 1000.0,
63 workspace,&y[i], NULL, NULL);
64 if(gslstatus != GSL_SUCCESS) {
69 gsl_integration_cquad_workspace_free(workspace);
70 double renorm=1./y[0];
73 gsl_spline* spl = gsl_spline_alloc(
A_SPLINE_TYPE, CCL_NU_MNUT_N);
74 stat |= gsl_spline_init(spl, mnut, y, CCL_NU_MNUT_N);
100 double integral_value =0.;
107 return 0.2776566337*mnuOT;
111 int gslstatus = gsl_spline_eval_e(
nu_spline, log(mnuOT),accel, &integral_value);
112 if(gslstatus != GSL_SUCCESS) {
114 *status |= gslstatus;
116 return integral_value*7./8.;
125 double ccl_Omeganuh2 (
double a,
int N_nu_mass,
double*
mnu,
double T_CMB, gsl_interp_accel* accel,
int* status)
127 double Tnu, a4, prefix_massless, mnuone, OmNuh2;
128 double Tnu_eff, mnuOT, intval, prefix_massive;
132 if (N_nu_mass==0)
return 0.0;
134 Tnu=T_CMB*
pow(4./11.,1./3.);
137 if (mnu[0] < 0.00017) {
138 prefix_massless =
NU_CONST * Tnu * Tnu * Tnu * Tnu;
139 return N_nu_mass*prefix_massless*7./8./a4;
144 Tnu_eff = Tnu *
TNCDM / (
pow(4./11.,1./3.));
147 prefix_massive =
NU_CONST * Tnu_eff * Tnu_eff * Tnu_eff * Tnu_eff;
150 for(
int i=0; i<N_nu_mass; i++){
157 OmNuh2 = intval*prefix_massive/a4 + OmNuh2;
172 sumnu = 93.14 * OmNuh2;
179 mnu = malloc(3*
sizeof(
double));
187 if (mnu[0]<0 || mnu[1]<0 || mnu[2]<0){
203 mnu = malloc(3*
sizeof(
double));
209 if(mnu[0]<0 || mnu[1]<0 || mnu[2]<0){
225 mnu = malloc(3*
sizeof(
double));
235 mnu = malloc(
sizeof(
double));
243 printf(
"WARNING: mass option = %d not yet supported\n continuing with normal hierarchy\n", mass_split);
245 mnu = malloc(3*
sizeof(
double));
248 mnu[0] = (sumnu - 0.59) / 3.;
249 mnu[1] = mnu[0] + 0.009;
250 mnu[2] = mnu[0] + 0.05;
double INTEGRATION_NU_EPSREL
void ccl_raise_gsl_warning(int gslstatus, const char *msg,...)
#define CCL_ERROR_MISSING_CONFIG_FILE
static double nu_integrand(double x, void *r)
double nu_phasespace_intg(gsl_interp_accel *accel, double mnuOT, int *status)
ccl_spline_params * ccl_splines
CCL_BEGIN_DECLS double * ccl_linear_spacing(double xmin, double xmax, int N)
double INTEGRATION_NU_EPSABS
Grid< NDIM, T > sqrt(Grid< NDIM, T > lhs)
static CCL_BEGIN_DECLS double x[111][8]
void ccl_cosmology_read_config(void)
double * ccl_nu_masses(double OmNuh2, ccl_neutrino_mass_splits mass_split, double T_CMB, int *status)
void ccl_check_status_nocosmo(int *status)
#define CCL_ERROR_MNU_UNPHYSICAL
float pow(float base, unsigned long int exp)
gsl_spline * calculate_nu_phasespace_spline(int *status)
void ccl_raise_exception(int err, const char *msg,...)
double ccl_Omeganuh2(double a, int N_nu_mass, double *mnu, double T_CMB, gsl_interp_accel *accel, int *status)