Пример #1
0
/// Transfer function a'la Eisenstein and Hu, k should be supplied in Mpc^{-1}
double cosmology::TF_EH(double kpassed)
{

    //double k = h*kpassed;
    double k = kpassed;
    if (!bool_initPS) 
    {
	if(verbose){
        std::cout<<"# "<<" Power spectrum varibles were not initialised. Now initialising. "<<std::endl;
	}
        double init = initPS_EH(); 

	if(verbose){
        std::cout<<"# "<<init<<std::endl;
	}
    }

    double q=k/(keq*13.41);
    // Eq. 21 first part
    double befj0= T0master_EH(q,1.,1.)/(1.+pow(k*sd/5.2,2.)) + alphab/(1.+pow(betab/(k*sd),3.))*exp(-pow(k/ksilk,1.4) );
    // Eq. 22
    double stilde=sd/pow((1.+pow(betanode/(k*sd),3.)),1./3.);
    // Eq. 21 remaining part
    double Tb=befj0*gsl_sf_bessel_j0(k*stilde);

    // Eq. 18
    double f= 1./(1.+pow(k*sd/5.4,4.));
    // Eq. 17
    double TC=f*T0master_EH(q,1.,1./betacinv)+(1-f)*T0master_EH(q,alphac,1./betacinv);
    double TF=Omegab/Omega0*Tb + (Omega0-Omegab)/Omega0*TC;
    return TF;

    //return Omegab/Omega0*Tb_EH(k) + (Omega0-Omegab)/Omega0*TCold_EH(k);
}
Пример #2
0
static foreign_t
pl_gsl_sf_bessel_J0(term_t x_term, term_t out_term)
{ 
  double x;
  double y;
  int rval;

  if ( PL_get_float(x_term, &x) )
    { 
      y = gsl_sf_bessel_j0(x);
      rval = PL_unify_float(out_term, y);
      return rval;
    }

  PL_fail;
}