10#include "../species/ncdm_base_species.h"
11#include "../species/species_build_context.h"
15class BackgroundModule;
24 static constexpr std::string_view kTypeName =
"ncdm_decay_dr";
29 const std::string& instance_name,
30 const NcdmSettings& settings,
31 const background* pba,
32 const BackgroundModule* bgm);
35 const std::optional<double>& Omega_ini_pending()
const {
36 return Omega_ini_pending_;
38 const std::optional<double>& Neff_ini_pending()
const {
39 return Neff_ini_pending_;
41 const std::optional<double>& Omega_dncdmdr_pending()
const {
42 return Omega_dncdmdr_pending_;
49 return Omega_ini_pending_.has_value() || Neff_ini_pending_.has_value();
58 SetOmega0(
Rho(pvecback_today) / (H0 * H0), h);
65 double Omega_target)
const;
69 std::unique_ptr<DNCDMSpecies> species;
78 void ComputeBackground(
double a,
const double* pvecback_B,
double* pvecback)
override;
79 void BackgroundDerivs(
double tau,
const double* y,
double* dy,
const double* pvecback)
override;
81 double Rho(
const double* pvecback)
const override {
82 return pvecback[index_bg_rho_];
84 double P(
const double* pvecback)
const override {
85 return pvecback[index_bg_p_];
90 const double* pvecback)
const override {
91 return a * H * (pvecback[index_bg_pseudo_p_] - 5. * pvecback[index_bg_p_]);
121 const double* pvecback,
131 int bg_number_index()
const {
132 return index_bg_number_;
134 int bg_pseudo_p_index()
const {
135 return index_bg_pseudo_p_;
137 int bg_lnf_index()
const {
138 return index_bg_lnf_decay_dr1_;
140 int bg_dlnfdlnq_index()
const {
141 return index_bg_dlnfdlnq_decay_;
143 int bg_dlnfdlnq_sep_index()
const {
144 return index_bg_dlnfdlnq_sep_;
146 int bi_lnf_index()
const {
147 return index_bi_lnf_decay_dr1_;
149 int bi_dlnfdlnq_sep_index()
const {
150 return index_bi_dlnfdlnq_separate_decay_;
153 double Gamma()
const {
156 const std::vector<double>& dq()
const {
159 double GetMass()
const {
162 const std::vector<double>& GetQ()
const {
167 std::tuple<double, double> GetRescaledParameters(
double a,
168 const double* lnf_array)
const override;
190 return pvecback[index_bg_dlnfdlnq_decay_ + iq];
193 return dq_[iq] * std::exp(pvecback[index_bg_lnf_decay_dr1_ + iq]);
197 const background* pba_;
202 std::optional<double> Omega_ini_pending_;
203 std::optional<double> Neff_ini_pending_;
205 std::optional<double> Omega_dncdmdr_pending_;
209 std::vector<double> dq_;
212 int index_bg_number_ = -1;
213 int index_bg_pseudo_p_ = -1;
215 int index_bi_lnf_decay_dr1_ = -1;
216 int index_bi_dlnfdlnq_separate_decay_ = -1;
218 int index_bg_lnf_decay_dr1_ = -1;
219 int index_bg_dlnfdlnq_decay_ = -1;
220 int index_bg_dlnfdlnq_sep_ = -1;
223 int index_pt_psi0_ = -1;
Definition base_species.h:32
Definition dncdm_species.h:22
void BackfillOmega0FromToday(const double *pvecback_today, double H0, double h)
Definition dncdm_species.h:57
std::tuple< double, double, double > RescaledPerturbations(const NCDMBaseSpecies::PerturbLayout &layout, double a, double k, const perturb_workspace *ppw) const
Definition dncdm_species.cpp:578
double PPrime(double a, double H, const double *, const double *pvecback) const override
Definition dncdm_species.h:87
void WriteBackgroundData(const double *pvecback, BackgroundColumnWriter &w) const override
Definition dncdm_species.cpp:431
void WriteBackgroundColumnTitles(BackgroundColumnWriter &w) const override
Definition dncdm_species.cpp:418
void SetBackgroundInitialConditions(const BackgroundICContext &ctx) override
Definition dncdm_species.cpp:337
double GetDlnf0Dlnq(int iq, const double *pvecback) const override
Definition dncdm_species.h:189
void ApplyInitialConditions(const BaseSpecies::PerturbLayout &layout, double *y, const PerturbIcContext &ctx) override
Definition dncdm_species.cpp:514
void RegisterIntegrationIndices(int &index_bi) override
Definition dncdm_species.cpp:330
double Rho(const double *pvecback) const override
Definition dncdm_species.h:81
StressEnergyContribution StressEnergy(const BaseSpecies::PerturbLayout &layout, const perturb_vector *pv, const double *y, const double *pvecback, const perturb_workspace *ppw) const override
Definition dncdm_species.cpp:543
bool IsFreestreaming() const override
Definition dncdm_species.h:124
void RegisterBackgroundIndices(int &index_bg) override
Definition dncdm_species.cpp:316
void BackgroundDerivs(double tau, const double *y, double *dy, const double *pvecback) override
Definition dncdm_species.cpp:400
double P(const double *pvecback) const override
Definition dncdm_species.h:84
void ComputeBackground(double a, const double *pvecback_B, double *pvecback) override
Definition dncdm_species.cpp:349
bool InitialAbundanceMode() const
Definition dncdm_species.h:48
void PerturbDerivs(const BaseSpecies::PerturbLayout &layout, double tau, const double *y, double *dy, const perturb_parameters_and_workspace &ppaw) const override
Definition dncdm_species.cpp:471
double GetW0ForGwSource(int iq, const double *pvecback) const override
Definition dncdm_species.h:192
Definition ncdm_base_species.h:42
Definition perturbations.h:250
Definition perturbations.h:344
Definition background_ic_context.h:11
Definition base_species.h:89
Definition ncdm_base_species.h:50
Definition species_build_context.h:90
Definition perturb_source_context.h:125
Definition species_build_context.h:58
Definition perturbations_module.h:341
Definition precision.h:63