FML
Public Member Functions | Data Fields
FML::COSMOLOGY::HALOMODEL::HaloModel Class Reference

Class for computing the standard halomodel predictions for \(P(k,z)\) plus \(n(M,z)\) or just doing spherical collapse. More...

#include <Halomodel.h>

Public Member Functions

 HaloModel (const HaloModel &)=default
 
HaloModel & operator= (const HaloModel &)=default
 
 HaloModel ()=default
 
 HaloModel (SphericalCollapseModel spcmodel, Spline logDelta_of_logk_spline, double xinput_pofk=0.0, bool hmcode=false, bool verbose=false, double xini=std::log(1e-5), int npts=1000)
 
 ~HaloModel ()=default
 
void init ()
 
void compute_at_redshift (double zcollapse)
 
void output_pofk (std::string filename, double kmin=1e-5, double kmax=100, int npts_k=1000) const
 
void output_deltac (std::string filename, double zmin=0.0, double zmax=10.0, int npts_z=100) const
 
void output_nofM (std::string filename, double Mmin=1e8, double Mmax=1e16, int npts_M=100) const
 
void info () const
 
double get_DeltaVir_hmcode (double x) const
 
double get_deltac_hmcode (double x) const
 
double get_eta_hmcode (double x) const
 
double get_kstar_hmcode (double x) const
 
double get_f_hmcode (double x) const
 
double get_cmin_hmcode (double x) const
 
double get_alpha_hmcode () const
 

Data Fields

Timer timer
 
SphericalCollapseModel spcmodel
 
double OmegaM {}
 
double fnu {}
 
Spline logDelta_of_logk_spline {"logDelta_lin"}
 
double xinput_pofk {}
 
double DeltaVir {}
 
double deltac {}
 
double sigma8 {}
 
double sigmav {}
 
double sigmav100 {}
 
double xcollapse {std::numeric_limits<double>::quiet_NaN()}
 
double rnl_nu {}
 
double neff {}
 
std::string halo_massfunction = "ShethTormen1999"
 
HaloMultiplicityFunction halo_multiplicity_function = get_sheth_tormen_halo_multiplicity_function()
 
HaloBiasFunction halo_bias_function = get_sheth_tormen_halo_bias_function()
 
double p_ST = 0.3
 
double a_ST = 0.707
 
double A_ST = 0.2162
 
std::string halo_profile = "NFW"
 
std::string cofM_model = "Bullock2001"
 
RhoFunction halo_density_profile = get_nfw_halo_density_profile()
 
cofMFunction halo_mass_concentration_relation = get_nfw_halo_mass_concentration_relation()
 
double kmin_pofk = 1e-5
 
double kmax_pofk = 100.0
 
int npts_pofk = 1000
 
bool hmcode {true}
 
bool verbose {true}
 
double hmcode_kstar = 0.01
 
double hmcode_alpha = 1.0
 
double hmcode_eta = 0.0
 
double hmcode_cmin = 4.0
 
double hmcode_f = 0.0
 
double cofM_0 = 4.75
 
double cofM_M0 = 1e14
 
double cofM_beta = 0.13
 
double xini_spherical_collapse = std::log(1e-5)
 
int npts_spherical_collapse = 1000
 
std::shared_ptr< DVector > fiducial_logR_array {nullptr}
 
std::shared_ptr< DVector > fiducial_logk_array {nullptr}
 
double DeltaVir_multiplier = 1.0
 
double cofM_multiplier = 1.0
 
double deltac_multiplier = 1.0
 
Spline growthfactor_of_x_spline {"Growthfactor"}
 
Spline growthrate_of_x_spline {"Growthrate"}
 
Spline deltac_of_x_spline {"deltac"}
 
Spline DeltaVir_of_x_spline {"DeltaVir"}
 
Spline xta_of_x_spline {"xta"}
 
Spline xnl_of_x_spline {"xnl"}
 
Spline xvir_of_x_spline {"xvir"}
 
Spline delta_ini_of_x_spline {"deltaini"}
 
Spline logsigma_of_logR_spline {"logsigma"}
 
Spline formationredshift_of_logM_spline {"zf"}
 
Spline lognu_of_logR_spline {"lognuoflogR"}
 
Spline lognu_of_logM_spline {"lognuoflogM"}
 
Spline logR_of_lognu_spline {"logRoflognu"}
 
Spline dndlogM_of_logM_spline {"dndlogM"}
 
Spline n_of_logM_spline {"nofM"}
 
Spline logDeltaHM_onehalo_of_logk_spline {"logDelta_1h"}
 
Spline logDeltaHM_twohalo_of_logk_spline {"logDelta_2h"}
 
Spline logDeltaHM_full_of_logk_spline {"logDelta"}
 
Spline2D y_of_logR_and_logk_spline {"y"}
 
WindowFunction fourier_window_function = get_tophat_window_fourier()
 

Detailed Description

Class for computing the standard halomodel predictions for \(P(k,z)\) plus \(n(M,z)\) or just doing spherical collapse.

Contains the HMCode modifications so one can run both the standard halomodel and HMCode by setting a flag. The mass-consentration relation, PDF and bias and halo density profile can easily be modified if wanted by providing a lambda functions defining these functions..

The cosmology/gravity model is specified through the spherical-collapse model. This currently only handles scale-independent growth.

Definition at line 62 of file Halomodel.h.

Constructor & Destructor Documentation

◆ HaloModel() [1/3]

FML::COSMOLOGY::HALOMODEL::HaloModel::HaloModel ( const HaloModel &  )
default

◆ HaloModel() [2/3]

FML::COSMOLOGY::HALOMODEL::HaloModel::HaloModel ( )
default

◆ HaloModel() [3/3]

FML::COSMOLOGY::HALOMODEL::HaloModel::HaloModel ( SphericalCollapseModel  spcmodel,
Spline  logDelta_of_logk_spline,
double  xinput_pofk = 0.0,
bool  hmcode = false,
bool  verbose = false,
double  xini = std::log(1e-5),
int  npts = 1000 
)

◆ ~HaloModel()

FML::COSMOLOGY::HALOMODEL::HaloModel::~HaloModel ( )
default

Member Function Documentation

◆ compute_at_redshift()

void FML::COSMOLOGY::HALOMODEL::HaloModel::compute_at_redshift ( double  zcollapse)

Definition at line 752 of file Halomodel.cpp.

752 {
753 xcollapse = std::log(1.0/(1.0 + zcollapse));
754
755 if(verbose){
756 std::cout << "\n#=====================================================\n";
757 std::cout << "# Compute at z = " << zcollapse << "\n";
758 std::cout << "#=====================================================\n";
759 }
760
761 //=====================================================
762 // Functions related to the variance of the smoothed
763 // density field: smoothing filter and P(k)
764 //=====================================================
765 const double pofk_scaling_factor = std::pow(growthfactor_of_x_spline(xcollapse) / growthfactor_of_x_spline(xinput_pofk), 2);
766 const Func1 logDeltaLin_of_logk = [&](double logk){
767 return logDelta_of_logk_spline(logk) + std::log(pofk_scaling_factor);
768 };
769
770 //=====================================================
771 // Density field variance when smoothed: sigma(logR)
772 //=====================================================
773 timer.StartTiming("sigma");
774 if(verbose){
775 std::cout << "Computing sigmas\n";
776 }
778 logDeltaLin_of_logk,
782 fiducial_logk_array.get());
783 timer.EndTiming("sigma");
784
785 //=====================================================
786 // Set OmegaM and sigma8 at current redshift
787 //=====================================================
788 sigma8 = std::exp(logsigma_of_logR_spline(std::log(8.0)));
789 sigmav = compute_sigmav(logDeltaLin_of_logk, fourier_window_function, 0.0);
790 sigmav100 = compute_sigmav(logDeltaLin_of_logk, fourier_window_function, 100.0);
791
792 //=====================================================
793 // Extract deltac and DeltaVir
794 // If HMCode we use their fits
795 //=====================================================
796 if(verbose){
797 std::cout << "Computing DeltaVir and deltac\n";
798 }
799 if(hmcode){
802 } else {
805 }
808
809 //=====================================================
810 // nu(R) relation and the non-linear scale nu(R)==1
811 //=====================================================
812 if(verbose){
813 std::cout << "Computing nu-R relation\n";
814 }
815 timer.StartTiming("nu");
817 deltac,
821 fiducial_logR_array.get());
822 timer.EndTiming("nu");
823
825 rnl_nu = neff_data.first;
826 neff = neff_data.second;
827
828 //=====================================================
829 // Set the HMCode parameters
830 //=====================================================
831 if(hmcode){
832 if(verbose)
833 std::cout << "# Applying HMCode fits\n";
834 cofM_model = "Bullock2001";
840 }
843
844 if(verbose) {
845 std::cout << "# f = " << hmcode_f << "\n";
846 std::cout << "# kstar = " << hmcode_kstar << "\n";
847 std::cout << "# eta = " << hmcode_eta << "\n";
848 std::cout << "# alpha = " << hmcode_alpha << "\n";
849 std::cout << "# cmin = " << hmcode_cmin << "\n";
850 std::cout << "# deltac = " << deltac << "\n";
851 std::cout << "# DeltaVir = " << DeltaVir << "\n";
852 }
853
854 //=====================================================
855 // The mass consentration relation as in Bullock 2001
856 // needed if we want this NFW c(M,z) relation
857 //=====================================================
858 if(verbose)
859 std::cout << "Computing formation redshifts\n";
864 deltac,
865 OmegaM,
866 xcollapse);
867
868 //=====================================================
869 // The halo density profile
870 // The dimensionless combination 4pi r^3 rho(r,M) / M
871 //=====================================================
872 const Func2 rho_function = [&](double r, double M){
873 return halo_density_profile(r, M, this);
874 };
875
876 //=====================================================
877 // Fourier transform of halo density profiles
878 //=====================================================
879 if(verbose){
880 std::cout << "Computing fourier transform of rho\n";
881 }
882 timer.StartTiming("rho");
884 rho_function,
886 DeltaVir,
887 OmegaM,
888 xcollapse,
890 fiducial_logk_array.get());
891 timer.EndTiming("rho");
892
893 //=====================================================
894 // Functions related to the mass-function
895 //=====================================================
896 const Func1 pdf_of_nu = [&](double nu){
897 return halo_multiplicity_function(nu, this);
898 };
899 const Func1 bias_of_nu = [&](double nu){
900 return halo_bias_function(nu, this);
901 };
902
903 //=====================================================
904 // Prediction for the mass-function
905 //=====================================================
906 if(verbose){
907 std::cout << "Computing massfunction\n";
908 }
909 timer.StartTiming("n");
915 pdf_of_nu,
916 OmegaM,
917 xcollapse);
918 timer.EndTiming("n");
919
920 //=====================================================
921 // Prediction for the power-spectrum
922 //=====================================================
923 if(verbose){
924 std::cout << "Computing halomodel pofk\n";
925 }
926 timer.StartTiming("Pofk");
933 logDeltaLin_of_logk,
934 pdf_of_nu,
935 bias_of_nu,
937 kmin_pofk,
938 kmax_pofk,
939 npts_pofk);
940 timer.EndTiming("Pofk");
941
942 //=====================================================
943 // Process these in case of modifications
944 //=====================================================
945 if(hmcode or hmcode_f != 0.0 or hmcode_kstar > 0.0 or hmcode_alpha != 1.0){
947 DVector logDeltaHM_onehalo_of_logk, logDeltaHM_twohalo_of_logk, logDeltaHM_full_of_logk;
948 if(verbose)
949 std::cout << "Adjusting haloterms: kstar = " << hmcode_kstar << " alpha = " << hmcode_alpha << " f = " << hmcode_f << "\n";
950 for(auto logk : logk_array){
951 const double k = std::exp(logk);
952 double Delta_onehalo = std::exp(logDeltaHM_onehalo_of_logk_spline(logk));
953 double Delta_twohalo = std::exp(logDeltaHM_twohalo_of_logk_spline(logk));
954 double Delta_full = std::exp(logDeltaHM_full_of_logk_spline(logk));
955 double Delta_lin = std::exp(logDeltaLin_of_logk(logk));
956
957 // In HMCode we just use the linear power-spectrum as the twohalo term
958 if(hmcode)
959 Delta_twohalo = Delta_lin;
960
961 // (BAO) damping of twohalo term
962 if(hmcode_f != 0.0){
963 Delta_twohalo *= std::max(1e-12,(1.0 - hmcode_f * std::pow( std::tanh(k * sigmav / std::sqrt(hmcode_f)), 2) ));
964 }
965
966 // Damping of onehalo term at low k
967 if(hmcode_kstar > 0.0){
968 double k_over_kstar = std::min(k/hmcode_kstar, 20.0);
969 double factor = k_over_kstar < 1e-5 ? k_over_kstar*k_over_kstar : 1.0 - std::exp(-k_over_kstar*k_over_kstar);
970 Delta_onehalo *= factor;
971 }
972
973 // Set a minimum value as we are going to spline the log of this shit
974 if(Delta_onehalo < 1e-30) Delta_onehalo = 1e-30;
975 if(Delta_twohalo < 1e-30) Delta_twohalo = 1e-30;
976 if(Delta_full< 1e-30) Delta_full = 1e-30;
977
978 // Combine two terms using an l_alpha norm
979 if(hmcode_alpha != 1.0)
980 Delta_full = std::pow(std::pow(Delta_onehalo, hmcode_alpha) + std::pow(Delta_twohalo, hmcode_alpha), 1.0/hmcode_alpha);
981 else
982 Delta_full = Delta_onehalo + Delta_twohalo;
983
984 logDeltaHM_onehalo_of_logk.push_back(std::log(Delta_onehalo));
985 logDeltaHM_twohalo_of_logk.push_back(std::log(Delta_twohalo));
986 logDeltaHM_full_of_logk.push_back(std::log(Delta_full));
987 }
988
989 // Remake splines
990 logDeltaHM_onehalo_of_logk_spline = Spline(logk_array, logDeltaHM_onehalo_of_logk, "logDelta1h(logk)");
991 logDeltaHM_twohalo_of_logk_spline = Spline(logk_array, logDeltaHM_twohalo_of_logk, "logDelta2h(logk)");
992 logDeltaHM_full_of_logk_spline = Spline(logk_array, logDeltaHM_full_of_logk, "logDelta(logk)");
993 }
994
995 }
FML::COSMOLOGY::SPHERICALCOLLAPSE::Func1 Func1
Definition: Main.cpp:6
FML::INTERPOLATION::SPLINE::DVector DVector
Definition: Simulation.h:39
HaloBiasFunction halo_bias_function
Definition: Halomodel.h:96
double get_f_hmcode(double x) const
Definition: Halomodel.cpp:1232
double get_DeltaVir_hmcode(double x) const
Definition: Halomodel.cpp:1219
std::shared_ptr< DVector > fiducial_logR_array
Definition: Halomodel.h:146
double get_cmin_hmcode(double x) const
Definition: Halomodel.cpp:1246
HaloMultiplicityFunction halo_multiplicity_function
Definition: Halomodel.h:95
double get_deltac_hmcode(double x) const
Definition: Halomodel.cpp:1209
std::shared_ptr< DVector > fiducial_logk_array
Definition: Halomodel.h:147
double get_kstar_hmcode(double x) const
Definition: Halomodel.cpp:1239
double get_eta_hmcode(double x) const
Definition: Halomodel.cpp:1225
DVector get_x_data()
Get the raw GSL data for x used to create the spline.
Definition: Spline.h:165
void StartTiming(const char *name)
Start timing.
Definition: Timings.h:63
double EndTiming(const char *name, bool print=false)
End timing.
Definition: Timings.h:83
void compute_lognu_of_logR(const double deltac, const Spline &logsigma_of_logR_spline, Spline &lognu_of_logR_spline, Spline &logR_of_lognu_spline, const DVector *fiducial_logR_array)
Definition: Halomodel.cpp:376
void compute_sigma(const Func1 logDelta_of_logk, const WindowFunction window_of_kR, Spline &logsigma_of_logR_spline, const DVector *fiducial_logR_array, const DVector *fiducial_logk_array)
Definition: Halomodel.cpp:149
double compute_sigmav(const Func1 logDelta_of_logk, const WindowFunction window_of_kR, double R, const DVector *fiducial_logk_array)
Definition: Halomodel.cpp:121
std::pair< double, double > compute_neff(const Spline &logsigma_of_logR_spline, const Spline &lognu_of_logR_spline)
Definition: Halomodel.cpp:101
void compute_one_and_two_halo_terms(const Spline &logR_of_lognu_spline, const Spline2D &y_of_logR_and_logk_spline, Spline &logDelta_onehalo_of_logk_spline, Spline &logDelta_twohalo_of_logk_spline, Spline &logDelta_full_of_logk_spline, const Func1 &logDeltaLin_of_logk, const Func1 &pdf_of_nu, const Func1 &bias_of_nu, const double eta_hmcode, const double kmin, const double kmax, const int npts_k)
Definition: Halomodel.cpp:458
void compute_formation_redshift_factor(const Spline &growthfactor_of_x_spline, const Spline &logsigma_of_logR_spline, Spline &formationredshift_of_logM_spline, double deltac, double OmegaM, double xcollapse, double massfraction)
Definition: Halomodel.cpp:580
FML::INTERPOLATION::SPLINE::Spline Spline
Definition: Halomodel.h:29
void compute_rho_fourier(const Func2 &rho_function, Spline2D &y_of_logR_and_logk_spline, const double DeltaVir, const double OmegaM, const double x, const DVector *fiducial_logR_array, const DVector *fiducial_logk_array)
Definition: Halomodel.cpp:325
void compute_massfunction(const Spline &logR_of_lognu_spline, const Spline &lognu_of_logR_spline, Spline &dndlogM_of_logM_spline, Spline &n_of_logM_spline, const Func1 &pdf_of_nu, const double OmegaM, const double x)
Definition: Halomodel.cpp:408
std::function< double(double, double)> Func2
Definition: Halomodel.h:32
const double exp
Definition: Global.h:259

◆ get_alpha_hmcode()

double FML::COSMOLOGY::HALOMODEL::HaloModel::get_alpha_hmcode ( ) const

Definition at line 1250 of file Halomodel.cpp.

1250 {
1251 // NB: this is only at the current redshift
1252 return 3.24*std::pow(1.85,neff);
1253 }

◆ get_cmin_hmcode()

double FML::COSMOLOGY::HALOMODEL::HaloModel::get_cmin_hmcode ( double  x) const

Definition at line 1246 of file Halomodel.cpp.

1246 {
1247 return 3.13;
1248 }

◆ get_deltac_hmcode()

double FML::COSMOLOGY::HALOMODEL::HaloModel::get_deltac_hmcode ( double  x) const

Definition at line 1209 of file Halomodel.cpp.

1209 {
1210 double Dofx_over_Dofx_sigma = growthfactor_of_x_spline(x)/growthfactor_of_x_spline(xcollapse);
1211 double sigma8ofx = sigma8 * Dofx_over_Dofx_sigma;
1212 double OmegaMofx = spcmodel.OmegaMofx(x);
1213 double deltacofx = 1.59 + 0.0314*std::log(sigma8ofx);
1214 deltacofx *= 1.0 + 0.0123*std::log10(OmegaMofx);
1215 deltacofx *= (1.+0.262*fnu);
1216 return deltacofx;
1217 }
x
Definition: test.py:18

◆ get_DeltaVir_hmcode()

double FML::COSMOLOGY::HALOMODEL::HaloModel::get_DeltaVir_hmcode ( double  x) const

Definition at line 1219 of file Halomodel.cpp.

1219 {
1220 double DeltaVirofx = 418.0 * std::pow(spcmodel.OmegaMofx(x),-0.352);
1221 DeltaVirofx *= (1.+0.916*fnu);
1222 return DeltaVirofx;
1223 }

◆ get_eta_hmcode()

double FML::COSMOLOGY::HALOMODEL::HaloModel::get_eta_hmcode ( double  x) const

Definition at line 1225 of file Halomodel.cpp.

1225 {
1226 double Dofx_over_Dofx_sigma = growthfactor_of_x_spline(x)/growthfactor_of_x_spline(xcollapse);
1227 double sigma8ofx = sigma8 * Dofx_over_Dofx_sigma;
1228 double etaofx = 0.603-0.3*sigma8ofx;
1229 return etaofx;
1230 }

◆ get_f_hmcode()

double FML::COSMOLOGY::HALOMODEL::HaloModel::get_f_hmcode ( double  x) const

Definition at line 1232 of file Halomodel.cpp.

1232 {
1233 double Dofx_over_Dofx_sigma = growthfactor_of_x_spline(x)/growthfactor_of_x_spline(xcollapse);
1234 double sigmav100ofx = sigmav100 * Dofx_over_Dofx_sigma;
1235 double fofx = std::max(std::min(0.0095*std::pow(sigmav100ofx, 1.37), 0.99), 1e-3);
1236 return fofx;
1237 }

◆ get_kstar_hmcode()

double FML::COSMOLOGY::HALOMODEL::HaloModel::get_kstar_hmcode ( double  x) const

Definition at line 1239 of file Halomodel.cpp.

1239 {
1240 double Dofx_over_Dofx_sigma = growthfactor_of_x_spline(x)/growthfactor_of_x_spline(xcollapse);
1241 double sigmavofx = sigmav * Dofx_over_Dofx_sigma;
1242 double kstarofx = 0.584/sigmavofx;
1243 return kstarofx;
1244 }

◆ info()

void FML::COSMOLOGY::HALOMODEL::HaloModel::info ( ) const

Definition at line 1144 of file Halomodel.cpp.

1144 {
1145 const bool extraverbose = true;
1146
1147 std::cout << "\n#=====================================================\n";
1148 std::cout << "# Halomodel info ( z = " << (isnan(xcollapse) ? " not yet set " : std::to_string(std::exp(-xcollapse)-1.0)) << " )\n";
1149 std::cout << "#=====================================================\n";
1150 std::cout << "# OmegaM : " << OmegaM << "\n";
1151 std::cout << "# fnu : " << fnu << "\n";
1152 std::cout << "# DeltaVirModifier : " << DeltaVir_multiplier << "\n";
1153 std::cout << "# cofMModifier : " << cofM_multiplier << "\n";
1154 std::cout << "# deltacModifier : " << deltac_multiplier << "\n";
1155 std::cout << "# Massfunction : " << halo_massfunction << "\n";
1156 if(halo_massfunction == "ShethTormen1999")
1157 std::cout << "# with a : " << a_ST << " p : " << p_ST << "\n";
1158 std::cout << "# Density profile : " << halo_profile << "\n";
1159 if(halo_profile == "NFW")
1160 std::cout << "# with c(M) : " << cofM_model << "\n";
1161 if(hmcode)
1162 std::cout << "# Running with HMCode settings\n";
1163
1164 if(isnan(xcollapse)){
1165 // Compute sigma8 to be able to output it for debug purposes
1166 const Func1 logDeltaLin_of_logk = [&](double logk){
1167 return logDelta_of_logk_spline(logk);
1168 };
1169 Spline _logsigma_of_logR_spline;
1171 logDeltaLin_of_logk,
1173 _logsigma_of_logR_spline,
1174 fiducial_logR_array.get(),
1175 fiducial_logk_array.get());
1176 double sigma8ic = std::exp(_logsigma_of_logR_spline(std::log(8.0)));
1177 std::cout << "# sigma8 of provided Plin at z = " << std::exp(-xinput_pofk)-1 << " is " << sigma8ic << "\n";
1178 std::cout << "# NB: compute_at_redshift has not yet been run so not much more computed\n";
1179 return;
1180 }
1181
1182 std::cout << "# Current z : " << std::exp(-xcollapse)-1.0 << "\n";
1183 std::cout << "# deltaC : " << deltac << "\n";
1184 std::cout << "# DeltaVir : " << DeltaVir << "\n";
1185
1187 std::cout << "# znl : " << std::exp(-xnl_of_x_spline(xcollapse))-1.0 << "\n";
1188 std::cout << "# zturnaround : " << std::exp(-xta_of_x_spline(xcollapse))-1.0 << "\n";
1189 std::cout << "# zvir : " << std::exp(-xvir_of_x_spline(xcollapse))-1.0 << "\n";
1190 }
1191
1193 std::cout << "# sigma8 : " << std::exp(logsigma_of_logR_spline(std::log(8.0))) << "\n";
1194 std::cout << "# sigmav : " << sigmav << " (Mpc/h)\n";
1195 std::cout << "# sigmav100 : " << sigmav100 << " (Mpc/h)\n";
1196 std::cout << "# rnl_nu : " << rnl_nu << " (Mpc/h)\n";
1197 std::cout << "# knl_nu : " << 1.0/rnl_nu << " (h/Mpc)\n";
1198 std::cout << "# neff : " << neff << "\n";
1199
1200 if(extraverbose){
1201 spcmodel.info();
1203 }
1204 }
This is a wrapper class for easy use of GSL splines It is (OpenMP) thread safe as long as splines are...
Definition: Spline.h:80
void PrintAllTimings() const
Output all the recorded timings.
Definition: Timings.h:41

◆ init()

void FML::COSMOLOGY::HALOMODEL::HaloModel::init ( )

Definition at line 687 of file Halomodel.cpp.

687 {
688
689 /*
690 // Make a linear logR-array we can use (to ensure we have range and accuracy set just one place)
691 const double Rmin = 1e-8, Rmax = 1e5;
692 const int npts_R = 150 * _ACCURACY_BOOST;
693 DVector logR_array = FML::MATH::linspace(std::log(Rmin), std::log(Rmax), npts_R);
694 fiducial_logR_array = std::make_shared<DVector>(logR_array);
695
696 // Make a linear logk-array we can use (to ensure we have range and accuracy set just one place)
697 const double kmin = 1e-5, kmax = 1e6;
698 const int npts_k = 150 * _ACCURACY_BOOST;
699 DVector logk_array = FML::MATH::linspace(std::log(kmin), std::log(kmax), npts_k);
700 fiducial_logk_array = std::make_shared<DVector>(logk_array);
701 */
702
703 if(verbose){
704 std::cout << "\n#=====================================================\n";
705 std::cout << "# Initializing the halomodel\n";
706 std::cout << "#=====================================================\n";
707 std::cout << "# OmegaM " << OmegaM << "\n";
708 std::cout << "# HMCode? " << std::boolalpha << hmcode << "\n";
709 }
710
711 //=====================================================
712 // Spherical collapse evolution
713 //=====================================================
714 if(not hmcode){
715 if(verbose)
716 std::cout << "Performing spherical collapse and computing growth\n";
717 timer.StartTiming("SphericalCollapse");
718
720 spcmodel,
721 verbose,
724
725 sc.run_at_all_redshifts(
734
735 timer.EndTiming("SphericalCollapse");
736 } else {
737 if(verbose)
738 std::cout << "Computing growth\n";
740 spcmodel,
743 }
744
745 }
Class for doing general spherical collapse calculations, i.e.
void compute_growthfactor(const SphericalCollapseModel &model, Spline &growthfactor_of_x_spline, Spline &growthrate_of_x_spline, const double xini, const double xend, const int npts)
Computes the growth factor (not normalized) and growth rate for a given model and returns splines wit...

◆ operator=()

HaloModel & FML::COSMOLOGY::HALOMODEL::HaloModel::operator= ( const HaloModel &  )
default

◆ output_deltac()

void FML::COSMOLOGY::HALOMODEL::HaloModel::output_deltac ( std::string  filename,
double  zmin = 0.0,
double  zmax = 10.0,
int  npts_z = 100 
) const

Definition at line 1038 of file Halomodel.cpp.

1042 {
1043
1044 const auto x_array = FML::MATH::linspace(std::log(1.0/(1.0+zmax)), std::log(1.0/(1.0+zmin)), npts_z);;
1045 std::ofstream fp(filename);
1046
1047 if(hmcode){
1048
1049 fp << "# z deltaC(z) DeltaVir(z) kstar(z) fdamp(z) eta(z) cmin(z) [HMCode]\n";
1050 for(const auto x : x_array){
1051 const double z = std::exp(-x)-1;
1052 fp << std::setw(10) << z << " ";
1053 fp << std::setw(10) << get_deltac_hmcode(x) << " ";
1054 fp << std::setw(10) << get_DeltaVir_hmcode(x) << " ";
1055 fp << std::setw(10) << get_kstar_hmcode(x) << " ";
1056 fp << std::setw(10) << get_f_hmcode(x) << " ";
1057 fp << std::setw(10) << get_eta_hmcode(x) << " ";
1058 fp << std::setw(10) << get_cmin_hmcode(x) << " ";
1059 fp << "\n";
1060
1061 }
1062
1063 } else {
1064
1065 fp << "# z deltaC(z) DeltaVir(z)\n";
1066 for(const auto x : x_array){
1067 const double z = std::exp(-x)-1;
1068 fp << std::setw(10) << z << " ";
1069 fp << std::setw(10) << deltac_of_x_spline(x) << " ";
1070 fp << std::setw(10) << DeltaVir_of_x_spline(x) << " ";
1071 fp << "\n";
1072 }
1073
1074 }
1075 }
const std::string filename
Definition: Main.cpp:63
DVector linspace(double xmin, double xmax, int num)
Python linspace. Generate a lineary spaced array.
Definition: Math.cpp:269
float z
Definition: example.py:56

◆ output_nofM()

void FML::COSMOLOGY::HALOMODEL::HaloModel::output_nofM ( std::string  filename,
double  Mmin = 1e8,
double  Mmax = 1e16,
int  npts_M = 100 
) const

Definition at line 1080 of file Halomodel.cpp.

1084 {
1085 const auto logM_array = FML::MATH::linspace(std::log(Mmin), std::log(Mmax), npts_M);;
1086 std::ofstream fp(filename);
1087 fp << "# M (Msun/h) dlogndlogM n (h/Mpc)^3 R (Mpc/h) Rvir (Mpc/h) nu [z = " << std::to_string(std::exp(-xcollapse)-1) << "]\n";
1088 for(const auto logM : logM_array){
1089 const double M = std::exp(logM);
1090 const double R = RofM(M, this->OmegaM, xcollapse);
1091 const double Rvir = RvirofM(M, DeltaVir, this->OmegaM, xcollapse);
1092 const double logR = std::log(R);
1093 const double lognu = lognu_of_logR_spline(logR);
1094 const double nu = std::exp(lognu);
1095 const double dlogndlogM = dndlogM_of_logM_spline(logM);
1096 const double n = n_of_logM_spline(logM);
1097 fp << std::setw(10) << M << " ";
1098 fp << std::setw(10) << dlogndlogM << " ";
1099 fp << std::setw(10) << n << " ";
1100 fp << std::setw(10) << R << " ";
1101 fp << std::setw(10) << Rvir << " ";
1102 fp << std::setw(10) << nu << " ";
1103 fp << "\n";
1104 }
1105 }
double RofM(double M, double OmegaM, double x)
Definition: Halomodel.cpp:216
double RvirofM(double M, double DeltaVir, double OmegaM, double x)
Definition: Halomodel.cpp:205

◆ output_pofk()

void FML::COSMOLOGY::HALOMODEL::HaloModel::output_pofk ( std::string  filename,
double  kmin = 1e-5,
double  kmax = 100,
int  npts_k = 1000 
) const

Definition at line 1110 of file Halomodel.cpp.

1114 {
1115
1116#ifdef HMCODETESTING
1117 Spline logDeltaNL_of_logk_spline;
1118 read_pofk_file("pofk_nl_hmcode.txt",logDeltaNL_of_logk_spline);
1119#endif
1120
1121 //const auto logk_array = logDeltaHM_full_of_logk_spline.get_x_data();
1122 const auto logk_array = FML::MATH::linspace(std::log(kmin),std::log(kmax), npts_k);
1123 std::ofstream fp(filename);
1124 fp << "# k (h/Mpc) P_NL(k) P_Lin(k) P_1h(k) P_2h(k) (Mpc/h)^3 [z = " << std::to_string(std::exp(-xcollapse)-1) << "]\n";
1125 for(const auto logk : logk_array){
1126 const double k = std::exp(logk);
1127 const double Delta_over_P = 2.0 * M_PI * M_PI / (k*k*k);
1128 const double scaling = std::pow(growthfactor_of_x_spline(xcollapse) / growthfactor_of_x_spline(xinput_pofk), 2);
1129 fp << std::setw(10) << k << " ";
1130 fp << std::setw(10) << Delta_over_P * std::exp(logDeltaHM_full_of_logk_spline(logk)) << " ";
1131 fp << std::setw(10) << Delta_over_P * std::exp(logDelta_of_logk_spline(logk)) * scaling << " ";
1132 fp << std::setw(10) << Delta_over_P * std::exp(logDeltaHM_onehalo_of_logk_spline(logk)) << " ";
1133 fp << std::setw(10) << Delta_over_P * std::exp(logDeltaHM_twohalo_of_logk_spline(logk)) << " ";
1134#ifdef HMCODETESTING
1135 fp << std::exp(logDeltaHM_full_of_logk_spline(logk))/std::exp(logDeltaNL_of_logk_spline(logk)) << " ";
1136#endif
1137 fp << "\n";
1138 }
1139 }
void read_pofk_file(const std::string filename_pofk, Spline &logDelta_of_logk_spline, double normalization, int col_k, int col_pofk)
Definition: Halomodel.cpp:61

Field Documentation

◆ a_ST

double FML::COSMOLOGY::HALOMODEL::HaloModel::a_ST = 0.707

Definition at line 100 of file Halomodel.h.

◆ A_ST

double FML::COSMOLOGY::HALOMODEL::HaloModel::A_ST = 0.2162

Definition at line 101 of file Halomodel.h.

◆ cofM_0

double FML::COSMOLOGY::HALOMODEL::HaloModel::cofM_0 = 4.75

Definition at line 131 of file Halomodel.h.

◆ cofM_beta

double FML::COSMOLOGY::HALOMODEL::HaloModel::cofM_beta = 0.13

Definition at line 133 of file Halomodel.h.

◆ cofM_M0

double FML::COSMOLOGY::HALOMODEL::HaloModel::cofM_M0 = 1e14

Definition at line 132 of file Halomodel.h.

◆ cofM_model

std::string FML::COSMOLOGY::HALOMODEL::HaloModel::cofM_model = "Bullock2001"

Definition at line 110 of file Halomodel.h.

◆ cofM_multiplier

double FML::COSMOLOGY::HALOMODEL::HaloModel::cofM_multiplier = 1.0

Definition at line 155 of file Halomodel.h.

◆ delta_ini_of_x_spline

Spline FML::COSMOLOGY::HALOMODEL::HaloModel::delta_ini_of_x_spline {"deltaini"}

Definition at line 168 of file Halomodel.h.

◆ deltac

double FML::COSMOLOGY::HALOMODEL::HaloModel::deltac {}

Definition at line 82 of file Halomodel.h.

◆ deltac_multiplier

double FML::COSMOLOGY::HALOMODEL::HaloModel::deltac_multiplier = 1.0

Definition at line 156 of file Halomodel.h.

◆ deltac_of_x_spline

Spline FML::COSMOLOGY::HALOMODEL::HaloModel::deltac_of_x_spline {"deltac"}

Definition at line 163 of file Halomodel.h.

◆ DeltaVir

double FML::COSMOLOGY::HALOMODEL::HaloModel::DeltaVir {}

Definition at line 81 of file Halomodel.h.

◆ DeltaVir_multiplier

double FML::COSMOLOGY::HALOMODEL::HaloModel::DeltaVir_multiplier = 1.0

Definition at line 154 of file Halomodel.h.

◆ DeltaVir_of_x_spline

Spline FML::COSMOLOGY::HALOMODEL::HaloModel::DeltaVir_of_x_spline {"DeltaVir"}

Definition at line 164 of file Halomodel.h.

◆ dndlogM_of_logM_spline

Spline FML::COSMOLOGY::HALOMODEL::HaloModel::dndlogM_of_logM_spline {"dndlogM"}

Definition at line 174 of file Halomodel.h.

◆ fiducial_logk_array

std::shared_ptr<DVector> FML::COSMOLOGY::HALOMODEL::HaloModel::fiducial_logk_array {nullptr}

Definition at line 147 of file Halomodel.h.

◆ fiducial_logR_array

std::shared_ptr<DVector> FML::COSMOLOGY::HALOMODEL::HaloModel::fiducial_logR_array {nullptr}

Definition at line 146 of file Halomodel.h.

◆ fnu

double FML::COSMOLOGY::HALOMODEL::HaloModel::fnu {}

Definition at line 67 of file Halomodel.h.

◆ formationredshift_of_logM_spline

Spline FML::COSMOLOGY::HALOMODEL::HaloModel::formationredshift_of_logM_spline {"zf"}

Definition at line 170 of file Halomodel.h.

◆ fourier_window_function

WindowFunction FML::COSMOLOGY::HALOMODEL::HaloModel::fourier_window_function = get_tophat_window_fourier()

Definition at line 201 of file Halomodel.h.

◆ growthfactor_of_x_spline

Spline FML::COSMOLOGY::HALOMODEL::HaloModel::growthfactor_of_x_spline {"Growthfactor"}

Definition at line 161 of file Halomodel.h.

◆ growthrate_of_x_spline

Spline FML::COSMOLOGY::HALOMODEL::HaloModel::growthrate_of_x_spline {"Growthrate"}

Definition at line 162 of file Halomodel.h.

◆ halo_bias_function

HaloBiasFunction FML::COSMOLOGY::HALOMODEL::HaloModel::halo_bias_function = get_sheth_tormen_halo_bias_function()

Definition at line 96 of file Halomodel.h.

◆ halo_density_profile

RhoFunction FML::COSMOLOGY::HALOMODEL::HaloModel::halo_density_profile = get_nfw_halo_density_profile()

Definition at line 111 of file Halomodel.h.

◆ halo_mass_concentration_relation

cofMFunction FML::COSMOLOGY::HALOMODEL::HaloModel::halo_mass_concentration_relation = get_nfw_halo_mass_concentration_relation()

Definition at line 112 of file Halomodel.h.

◆ halo_massfunction

std::string FML::COSMOLOGY::HALOMODEL::HaloModel::halo_massfunction = "ShethTormen1999"

Definition at line 94 of file Halomodel.h.

◆ halo_multiplicity_function

HaloMultiplicityFunction FML::COSMOLOGY::HALOMODEL::HaloModel::halo_multiplicity_function = get_sheth_tormen_halo_multiplicity_function()

Definition at line 95 of file Halomodel.h.

◆ halo_profile

std::string FML::COSMOLOGY::HALOMODEL::HaloModel::halo_profile = "NFW"

Definition at line 109 of file Halomodel.h.

◆ hmcode

bool FML::COSMOLOGY::HALOMODEL::HaloModel::hmcode {true}

Definition at line 124 of file Halomodel.h.

◆ hmcode_alpha

double FML::COSMOLOGY::HALOMODEL::HaloModel::hmcode_alpha = 1.0

Definition at line 127 of file Halomodel.h.

◆ hmcode_cmin

double FML::COSMOLOGY::HALOMODEL::HaloModel::hmcode_cmin = 4.0

Definition at line 129 of file Halomodel.h.

◆ hmcode_eta

double FML::COSMOLOGY::HALOMODEL::HaloModel::hmcode_eta = 0.0

Definition at line 128 of file Halomodel.h.

◆ hmcode_f

double FML::COSMOLOGY::HALOMODEL::HaloModel::hmcode_f = 0.0

Definition at line 130 of file Halomodel.h.

◆ hmcode_kstar

double FML::COSMOLOGY::HALOMODEL::HaloModel::hmcode_kstar = 0.01

Definition at line 126 of file Halomodel.h.

◆ kmax_pofk

double FML::COSMOLOGY::HALOMODEL::HaloModel::kmax_pofk = 100.0

Definition at line 118 of file Halomodel.h.

◆ kmin_pofk

double FML::COSMOLOGY::HALOMODEL::HaloModel::kmin_pofk = 1e-5

Definition at line 117 of file Halomodel.h.

◆ logDelta_of_logk_spline

Spline FML::COSMOLOGY::HALOMODEL::HaloModel::logDelta_of_logk_spline {"logDelta_lin"}

Definition at line 74 of file Halomodel.h.

◆ logDeltaHM_full_of_logk_spline

Spline FML::COSMOLOGY::HALOMODEL::HaloModel::logDeltaHM_full_of_logk_spline {"logDelta"}

Definition at line 178 of file Halomodel.h.

◆ logDeltaHM_onehalo_of_logk_spline

Spline FML::COSMOLOGY::HALOMODEL::HaloModel::logDeltaHM_onehalo_of_logk_spline {"logDelta_1h"}

Definition at line 176 of file Halomodel.h.

◆ logDeltaHM_twohalo_of_logk_spline

Spline FML::COSMOLOGY::HALOMODEL::HaloModel::logDeltaHM_twohalo_of_logk_spline {"logDelta_2h"}

Definition at line 177 of file Halomodel.h.

◆ lognu_of_logM_spline

Spline FML::COSMOLOGY::HALOMODEL::HaloModel::lognu_of_logM_spline {"lognuoflogM"}

Definition at line 172 of file Halomodel.h.

◆ lognu_of_logR_spline

Spline FML::COSMOLOGY::HALOMODEL::HaloModel::lognu_of_logR_spline {"lognuoflogR"}

Definition at line 171 of file Halomodel.h.

◆ logR_of_lognu_spline

Spline FML::COSMOLOGY::HALOMODEL::HaloModel::logR_of_lognu_spline {"logRoflognu"}

Definition at line 173 of file Halomodel.h.

◆ logsigma_of_logR_spline

Spline FML::COSMOLOGY::HALOMODEL::HaloModel::logsigma_of_logR_spline {"logsigma"}

Definition at line 169 of file Halomodel.h.

◆ n_of_logM_spline

Spline FML::COSMOLOGY::HALOMODEL::HaloModel::n_of_logM_spline {"nofM"}

Definition at line 175 of file Halomodel.h.

◆ neff

double FML::COSMOLOGY::HALOMODEL::HaloModel::neff {}

Definition at line 88 of file Halomodel.h.

◆ npts_pofk

int FML::COSMOLOGY::HALOMODEL::HaloModel::npts_pofk = 1000

Definition at line 119 of file Halomodel.h.

◆ npts_spherical_collapse

int FML::COSMOLOGY::HALOMODEL::HaloModel::npts_spherical_collapse = 1000

Definition at line 139 of file Halomodel.h.

◆ OmegaM

double FML::COSMOLOGY::HALOMODEL::HaloModel::OmegaM {}

Definition at line 66 of file Halomodel.h.

◆ p_ST

double FML::COSMOLOGY::HALOMODEL::HaloModel::p_ST = 0.3

Definition at line 99 of file Halomodel.h.

◆ rnl_nu

double FML::COSMOLOGY::HALOMODEL::HaloModel::rnl_nu {}

Definition at line 87 of file Halomodel.h.

◆ sigma8

double FML::COSMOLOGY::HALOMODEL::HaloModel::sigma8 {}

Definition at line 83 of file Halomodel.h.

◆ sigmav

double FML::COSMOLOGY::HALOMODEL::HaloModel::sigmav {}

Definition at line 84 of file Halomodel.h.

◆ sigmav100

double FML::COSMOLOGY::HALOMODEL::HaloModel::sigmav100 {}

Definition at line 85 of file Halomodel.h.

◆ spcmodel

SphericalCollapseModel FML::COSMOLOGY::HALOMODEL::HaloModel::spcmodel

Definition at line 65 of file Halomodel.h.

◆ timer

Timer FML::COSMOLOGY::HALOMODEL::HaloModel::timer

Definition at line 64 of file Halomodel.h.

◆ verbose

bool FML::COSMOLOGY::HALOMODEL::HaloModel::verbose {true}

Definition at line 125 of file Halomodel.h.

◆ xcollapse

double FML::COSMOLOGY::HALOMODEL::HaloModel::xcollapse {std::numeric_limits<double>::quiet_NaN()}

Definition at line 86 of file Halomodel.h.

◆ xini_spherical_collapse

double FML::COSMOLOGY::HALOMODEL::HaloModel::xini_spherical_collapse = std::log(1e-5)

Definition at line 138 of file Halomodel.h.

◆ xinput_pofk

double FML::COSMOLOGY::HALOMODEL::HaloModel::xinput_pofk {}

Definition at line 75 of file Halomodel.h.

◆ xnl_of_x_spline

Spline FML::COSMOLOGY::HALOMODEL::HaloModel::xnl_of_x_spline {"xnl"}

Definition at line 166 of file Halomodel.h.

◆ xta_of_x_spline

Spline FML::COSMOLOGY::HALOMODEL::HaloModel::xta_of_x_spline {"xta"}

Definition at line 165 of file Halomodel.h.

◆ xvir_of_x_spline

Spline FML::COSMOLOGY::HALOMODEL::HaloModel::xvir_of_x_spline {"xvir"}

Definition at line 167 of file Halomodel.h.

◆ y_of_logR_and_logk_spline

Spline2D FML::COSMOLOGY::HALOMODEL::HaloModel::y_of_logR_and_logk_spline {"y"}

Definition at line 179 of file Halomodel.h.


The documentation for this class was generated from the following files: