7#include "../species/base_species.h"
10#include "quadrature.h"
12class BackgroundModule;
16 1.2020569031595942853997381615114499907649862923404988817922
20 1.0369277551433699263313654864570341680570809195019128119741
22#ifndef _PSD_DERIVATIVE_EXP_MIN_
23#define _PSD_DERIVATIVE_EXP_MIN_ -30
25#ifndef _PSD_DERIVATIVE_EXP_MAX_
26#define _PSD_DERIVATIVE_EXP_MAX_ 2
53 std::vector<int> index_per_q;
54 int total_size()
const {
55 return q_size * (l_max + 1);
60 return std::make_unique<PerturbLayout>();
65 double GetNeff(
double z)
const;
66 double GetMassInElectronvolt()
const {
69 double GetDeg()
const {
84 double GetIni(
double a,
double tol_ncdm_initial_w)
const;
88 return GetIni(a_proposed, tol);
91 double GetRescalingFactor(
const double* lnf_array)
const;
92 virtual std::tuple<double, double> GetRescaledParameters(
double a,
const double* lnf_array)
const;
96 double z,
double* n,
double* rho,
double* p,
double* drho_dM,
double* pseudo_p)
const;
99 return static_cast<int>(q_.size());
101 int q_size_bg()
const {
102 return static_cast<int>(q_bg_.size());
106 const std::vector<double>& q()
const {
109 const std::vector<double>& w()
const {
112 const std::vector<double>& dlnf0_dlnq()
const {
118 double factor()
const {
132 return 3. *
P(pvecback);
138 void SetDeg_from_Omega_ini(
double z_ini,
double H0,
double Omega_ini);
180 int* used_in_sources)
const override;
201 int index_tp_delta_ = -1;
202 int index_tp_theta_ = -1;
232 const std::string& instance_name,
233 const NcdmSettings& settings);
243 const std::string& instance_name,
244 const NcdmSettings& settings,
252 void InitQuadrature(
const NcdmSettings& settings);
254 void SetOmega0(
double Omega0,
double h);
255 void SetDegAndFactor(
double deg);
258 void ComputeMomentaDeg(
double deg,
264 double* pseudo_p)
const;
267 double MFromOmega(
double H0,
double Omega0,
double tol_M_ncdm)
const;
271 std::vector<double> ComputeDq()
const;
274 std::vector<double> q_;
275 std::vector<double> w_;
276 std::vector<double> dlnf0_dlnq_;
279 std::vector<double> q_bg_;
280 std::vector<double> w_bg_;
285 double m_in_eV_ = 0.;
291 const BackgroundModule* bgm_ =
nullptr;
298 struct DistributionParams {
302 std::vector<double> q, f0, d2f0;
307 const std::string& instance_name,
308 const NcdmSettings& settings);
309 void InitDistribution(
FileContent* pfc,
int species_index);
311 void ComputeMomentaMass(
double M,
317 double* pseudo_p)
const;
319 static void DistributionFunction(
void* params,
double q,
double* f0);
320 static void TestFunction(
void* params,
double q,
double* test);
322 int quadrature_strategy_ = 0;
323 int input_q_size_ = 5;
324 int input_q_size_bg_ = 5;
326 bool got_file_ =
false;
327 std::string psd_file_;
329 double rho_nu_rel_ = 0.;
Definition base_species.h:76
virtual double P(const double *pvecback) const =0
EnergyType
Definition base_species.h:79
Definition ncdm_base_species.h:42
void SetPerturbs(const perturbs *ppt) override
Definition ncdm_base_species.h:144
double TensorMasslessRelativisticRho(const double *pvecback) const override
Definition ncdm_base_species.h:131
void CopyPerturbationsAcrossSwitch(const BaseSpecies::PerturbLayout &old_layout, const BaseSpecies::PerturbLayout &new_layout, const double *old_y, double *new_y, const PerturbSwitchContext &ctx) const override
Definition ncdm_base_species.cpp:729
void WarnIfTooHeavyForHalofit(double m_ev_threshold) const override
Definition ncdm_base_species.cpp:626
virtual void FillQuadratureParams(GBQuadParams &) const
Definition ncdm_base_species.h:226
void PerturbSynchronousToNewtonian(const BaseSpecies::PerturbLayout &layout, double *y, const PerturbIcContext &ctx) override
Definition ncdm_base_species.cpp:695
double NeffContribution(double z) const override
Definition ncdm_base_species.h:128
bool ClustersAsMatter() const override
Definition ncdm_base_species.h:77
bool IsUltraRelativisticAtIc(const double *pvecback, double tol) const override
Definition ncdm_base_species.cpp:622
virtual double EvaluatePsdAnalytic(double q) const
Definition ncdm_base_species.cpp:271
virtual double GetW0ForGwSource(int iq, const double *pvecback) const
Definition ncdm_base_species.cpp:799
std::unique_ptr< BaseSpecies::PerturbLayout > CreatePerturbLayout() const override
Definition ncdm_base_species.h:59
double NeutrinoOmega0() const override
Definition ncdm_base_species.h:125
void RegisterTransferSourceIndices(int &index_tp, const SourceRequestContext &ctx) override
Definition ncdm_base_species.cpp:836
void CheckUltraRelativisticAtIc(const double *pvecback, double tol) const override
Definition ncdm_base_species.cpp:609
double BackgroundAIni(double a_proposed, double tol) const override
Definition ncdm_base_species.h:87
void ContributeTensorGwSource(const BaseSpecies::PerturbLayout &layout, double a, const double *y, perturb_workspace *ppw) const override
Definition ncdm_base_species.cpp:809
bool IsColdMatterSpecies() const override
Definition ncdm_base_species.h:80
virtual double GetDlnf0Dlnq(int iq, const double *pvecback) const =0
void BuildQuadratureAndMass(const NcdmSettings &settings)
Definition ncdm_base_species.cpp:39
void PerturbTensorDerivs(const BaseSpecies::PerturbLayout &layout, double tau, const double *y, double *dy, const perturb_parameters_and_workspace &ppaw) const override
Definition ncdm_base_species.cpp:754
void PrintNeffInfo() const override
Definition ncdm_base_species.cpp:589
void MarkUsedInSources(const BaseSpecies::PerturbLayout &layout, const perturb_workspace *ppw, int *used_in_sources) const override
Definition ncdm_base_species.cpp:672
double GetOmega0() const override
Definition ncdm_base_species.cpp:499
void SetBackgroundModule(const BackgroundModule *bgm) override
Definition ncdm_base_species.h:141
void PrintMassInfo() const override
Definition ncdm_base_species.cpp:603
virtual quadrature_method DefaultQuadratureStrategy() const
Definition ncdm_base_species.h:221
Definition ncdm_base_species.h:238
Definition perturbations.h:250
Definition perturbations.h:344
Definition perturbations.h:100
Definition base_species.h:89
Definition quadrature.h:30
Definition ncdm_base_species.h:50
Definition perturb_source_context.h:125
Definition perturb_source_context.h:159
Definition perturb_source_context.h:48
Definition perturbations_module.h:341
Definition precision.h:63