7#include "../species/ncdm_base_species.h"
10class BackgroundModule;
36 static constexpr std::string_view kTypeName =
"dcdm_wdm";
37 static constexpr double kQKick = 10.0;
58 static constexpr double kFidOmegaM = 0.31;
59 static constexpr double kFidOmegaR = 9.2e-5;
60 static constexpr double kFidH = 0.674;
61 static double FiducialCosmicTime(
double a);
62 static double FiducialScaleFactorAtTime(
double t_mpc);
65 const std::string& instance_name,
66 const NcdmSettings& settings,
67 const background* pba,
68 const BackgroundModule* bgm);
70 double Gamma()
const {
73 double vkick()
const {
76 double epsilon_retention()
const {
79 const std::vector<double>& dq()
const {
82 const std::vector<double>& u()
const {
85 const std::vector<double>& u_edge()
const {
93 double SigmaAt(
double u_cut)
const;
100 const std::optional<double>& Omega_ini_pending()
const {
101 return Omega_ini_pending_;
103 const std::optional<double>& Omega_combined_pending()
const {
104 return Omega_combined_pending_;
121 void FillInjection(
double a,
double rho_dcdm,
double* J,
double* dJdlnq)
const;
127 void ComputeBackground(
double a,
const double* pvecback_B,
double* pvecback)
override;
129 double Rho(
const double* pvecback)
const override {
130 return pvecback[index_bg_rho_];
132 double P(
const double* pvecback)
const override {
133 return pvecback[index_bg_p_];
137 const double* pvecback_B,
138 const double* pvecback)
const override;
139 double RhoDotOverRho(
const double* pvecback,
double a_prime_over_a)
const override;
188 const double* pvecback,
196 const PerturbationsModule& mod,
198 TransferColumnSection section = TransferColumnSection::all)
const override;
215 int bg_f_index()
const {
218 int bg_dfdlnq_index()
const {
219 return index_bg_dfdlnq_;
221 int bg_inj_index()
const {
222 return index_bg_inj_;
224 int bg_number_index()
const {
225 return index_bg_number_;
227 int bi_f_index()
const {
230 int bi_dfdlnq_index()
const {
231 return index_bi_dfdlnq_;
247 static constexpr double kFSeed = 1e-10;
251 void BuildInjectionAdaptedGrid();
257 void GaussWeights(
double u_cut,
double sigma,
double* w)
const;
259 const background* pba_;
267 double q_edge_tol_ = 1e-3;
269 int l_max_input_ = -1;
270 std::optional<double> q_min_ratio_floor_;
272 static constexpr double kSigmaMin = 0.03;
273 static constexpr double kSigmaMax = 0.25;
277 std::vector<double> u_;
278 std::vector<double> dq_;
279 std::vector<double> u_edge_;
281 std::optional<double> Omega_ini_pending_;
282 std::optional<double> Omega_combined_pending_;
285 int index_bg_number_ = -1;
286 int index_bg_pseudo_p_ = -1;
287 int index_bg_f_ = -1;
288 int index_bg_dfdlnq_ = -1;
289 int index_bg_inj_ = -1;
290 int index_bi_f_ = -1;
291 int index_bi_dfdlnq_ = -1;
293 mutable std::vector<double> scratch_w_;
Definition base_species.h:32
Definition ncdm_base_species.h:42
Definition perturb_source_context.h:63
Definition wdm_decay_product.h:34
void RegisterBackgroundIndices(int &index_bg) override
Definition wdm_decay_product.cpp:420
void WriteBackgroundData(const double *pvecback, BackgroundColumnWriter &w) const override
Definition wdm_decay_product.cpp:509
void CheckUltraRelativisticAtIc(const double *, double) const override
Definition wdm_decay_product.h:163
void PerturbDerivs(const BaseSpecies::PerturbLayout &layout, double tau, const double *y, double *dy, const perturb_parameters_and_workspace &ppaw) const override
Definition wdm_decay_product.cpp:542
void PerturbSynchronousToNewtonian(const BaseSpecies::PerturbLayout &, double *, const PerturbIcContext &) override
Definition wdm_decay_product.h:210
double P(const double *pvecback) const override
Definition wdm_decay_product.h:132
void PrintNeffInfo() const override
Definition wdm_decay_product.cpp:396
void RegisterTensorPerturbationIndices(BaseSpecies::PerturbLayout &, perturb_vector *, const precision *, int &, const perturb_workspace *, int) override
Definition wdm_decay_product.h:202
double PPrime(double a, double H, const double *pvecback_B, const double *pvecback) const override
Definition wdm_decay_product.cpp:472
double NeffContribution(double) const override
Definition wdm_decay_product.h:154
void SetBackgroundInitialConditions(const BackgroundICContext &ctx) override
Definition wdm_decay_product.cpp:440
void SetParent(const DCDMSpecies *dcdm)
Definition wdm_decay_product.h:96
void WriteOutputColumns(PerturbColumnWriter &writer, const PerturbationsModule &mod, file_format fmt, TransferColumnSection section=TransferColumnSection::all) const override
Definition wdm_decay_product.cpp:696
double GetOmega0() const override
Definition wdm_decay_product.h:148
void ComputeBackground(double a, const double *pvecback_B, double *pvecback) override
Definition wdm_decay_product.cpp:450
void FillSources(const BaseSpecies::PerturbLayout &layout, const double *y, const double *dy, PerturbSourceContext &ctx) const override
Definition wdm_decay_product.cpp:641
StressEnergyContribution StressEnergy(const BaseSpecies::PerturbLayout &layout, const perturb_vector *pv, const double *y, const double *pvecback, const perturb_workspace *ppw) const override
Definition wdm_decay_product.cpp:605
void RegisterIntegrationIndices(int &index_bi) override
Definition wdm_decay_product.cpp:433
double GetDlnf0Dlnq(int, const double *) const override
Definition wdm_decay_product.h:236
double RhoDotOverRho(const double *pvecback, double a_prime_over_a) const override
Definition wdm_decay_product.cpp:490
void ApplyInitialConditions(const BaseSpecies::PerturbLayout &layout, double *y, const PerturbIcContext &ctx) override
Definition wdm_decay_product.cpp:587
double Rho(const double *pvecback) const override
Definition wdm_decay_product.h:129
static constexpr double kSparsityFloor
Definition wdm_decay_product.h:51
void FillInjection(double a, double rho_dcdm, double *J, double *dJdlnq) const
Definition wdm_decay_product.cpp:318
bool IsFreestreaming() const override
Definition wdm_decay_product.h:157
bool IsUltraRelativisticAtIc(const double *, double) const override
Definition wdm_decay_product.h:164
void PrintMassInfo() const override
Definition wdm_decay_product.cpp:407
double NeutrinoOmega0() const override
Definition wdm_decay_product.h:151
double SigmaAt(double u_cut) const
Definition wdm_decay_product.cpp:266
double BackgroundAIni(double a_proposed, double) const override
Definition wdm_decay_product.h:160
void WriteBackgroundColumnTitles(BackgroundColumnWriter &w) const override
Definition wdm_decay_product.cpp:501
Definition perturbations.h:250
Definition perturbations.h:344
file_format
Definition precision.h:40
Definition background_ic_context.h:11
Definition base_species.h:89
Definition perturb_source_context.h:125
Definition perturb_source_context.h:103
Definition perturbations_module.h:341
Definition precision.h:63