Exemple #1
0
/// Get comoving virial radius from virial mass
double cosmology::getRvirfromMvir(double Mvir, double z){

    double Rvir=pow(Mvir/(Delta_crit(z)*1.E4*pow(Eofz(z),2.)/2./gee), 1./3.);
    Rvir=Rvir*(1.+z);

    return Rvir;
}
Exemple #2
0
double cosmology::rvir_from_mvir(double Mvir, double z)
{

    double Rvir=0.169*pow(Mvir/1.e12,1./3.);
    Rvir*=pow(Delta_crit(z)/178.0,-1.0/3.0);
    Rvir*=pow(Eofz(z),-2./3.);

    Rvir=Rvir*(1.+z);
    return Rvir;
}
Exemple #3
0
/// Radii are in physical units here, so be careful
void cosmology::modelNFWhalo(double m200,double z,double &Mvir, double &Rvir, double &cvir, double &R200, double &c200)
{
    Mvir=getMvir(m200,z);

    Rvir=0.169*pow(Mvir/1.e12,1./3.);
    Rvir*=pow(Delta_crit(z)/178.0,-1.0/3.0);
    Rvir*=pow(Eofz(z),-2./3.);

    double Delta=200.;
    R200=pow( 1.0e12/(4./3.*Delta*3e4*0.3/(8*gee)),1./3.);
    R200*=pow(m200/1.e12,1./3.);
    R200*=pow(Omega(z)/0.3,-1.0/3.0);
    R200*=pow(Eofz(z),-2./3.);

    cvir=conc(Mvir,z);

    c200=getc200(cvir,z);

}
Exemple #4
0
/// Radii are in comoving units here
void cosmology::modelNFWhalo_com(double m200,double z,double &Mvir, double &Rvir, double &cvir)
{
    Mvir=getMvir(m200,z);

    Rvir=0.169*pow(Mvir/1.e12,1./3.);
    Rvir*=pow(Delta_crit(z)/178.0,-1.0/3.0);
    Rvir*=pow(Eofz(z),-2./3.);

    cvir=conc(Mvir,z);

    Rvir=Rvir*(1.+z);

}
Exemple #5
0
/// Radii are in comoving units here
void cosmology::modelNFWhalo_com_ext(double mDel,double z,double &Mvir,
double &Rvir, double &cvir, double &RDel, double &cDel,double Del)
{
    //std::cout<<Delta_crit(z)<<std::endl;exit(0);
    Mvir=getMvir(mDel,z,Del);

    Rvir=0.169*pow(Mvir/1.e12,1./3.);
    Rvir*=pow(Delta_crit(z)/178.0,-1.0/3.0);
    Rvir*=pow(Eofz(z),-2./3.);

    double Delta=Del;
    RDel=pow( 1.0e12/(4./3.*Delta*3e4*0.3/(8*gee)),1./3.);
    RDel*=pow(mDel/1.e12,1./3.);
    RDel*=pow(Omega(z)/0.3,-1.0/3.0);
    RDel*=pow(Eofz(z),-2./3.);

    cvir=conc(Mvir,z);

    cDel=getcDel(cvir,z,Delta);

    Rvir=Rvir*(1.+z);
    RDel=RDel*(1.+z);

}
Exemple #6
0
/// Omega(z)
double cosmology::Omega(double z)
{
    return Omega0*pow(1+z,3.)/pow(Eofz(z),2.);
}
Exemple #7
0
void cosmology::pevolve_fixed(double cdel, int opt, double z, double
&cdelz, double &fdelz, double zstart){

    double fac;
    if(opt==1){
        fac=pow(cdel*(1.+zstart)/(1.+z),3)/mu(cdel);
    }else if(opt==2){
        fac=pow(cdel,3)/mu(cdel);
        fac=fac*pow(Eofz(zstart)/Eofz(z),2);
        fac=fac*Delta_crit(zstart)/Delta_crit(z);
    }else if(opt==3){
        fac=pow(cdel,3)/mu(cdel);
        fac=fac*pow(Eofz(zstart)/Eofz(z),2);
    }else{
        fprintf(stderr,"Option %d not supported yet, bailing out...",opt);
        exit(100);
    }

    int status;
    int iter = 0, max_iter = 100;
    double res;

    const gsl_root_fsolver_type *T;
    gsl_root_fsolver *s;

    double c_lo = 0.01*cdel, c_hi = 100000.0*cdel;

    gsl_function F;
    march_params p;
    p.fac = fac;

    F.function = &findcmarch;
    F.params = &p;
   
    T = gsl_root_fsolver_brent;
    s = gsl_root_fsolver_alloc (T);
    gsl_root_fsolver_set (s, &F, c_lo, c_hi);

    do
    {
        iter++;
        status = gsl_root_fsolver_iterate (s);
        res = gsl_root_fsolver_root (s);
        c_lo = gsl_root_fsolver_x_lower (s);
        c_hi = gsl_root_fsolver_x_upper (s);
        status = gsl_root_test_interval (c_lo, c_hi,0, 1e-6);

        if (status == GSL_SUCCESS)
        {
            //std::cout<<"# "<<"zcollapse:Brent converged after "<< iter<<" iterations"<<std::endl;
        }


    }while (status == GSL_CONTINUE && iter < max_iter);

    gsl_root_fsolver_free (s);

    cdelz=res;
    fdelz=mu(cdelz)/mu(cdel);

}