5#include "base_species.h"
8class ThermodynamicsModule;
18 bool has_sibling_idm_dr =
false,
23 std::vector<double> alpha_idm_dr = {},
24 std::vector<double> beta_idr = {})
25 :
BaseSpecies(
"IDR", EnergyType::Radiation), pba_(pba), Omega0_idr_(omega0_idr),
26 has_sibling_idm_dr_(has_sibling_idm_dr), T_idr_(T_idr), l_max_idr_(l_max_idr),
27 b_idr_(b_idr), idr_nature_(idr_nature), alpha_idm_dr_(std::move(alpha_idm_dr)),
28 beta_idr_(std::move(beta_idr)) {}
30 bool has_sibling_idm_dr()
const {
31 return has_sibling_idm_dr_;
34 double T_idr()
const {
37 int l_max_idr()
const {
41 double b_idr()
const {
44 int idr_nature()
const {
47 const std::vector<double>& alpha_idm_dr()
const {
50 const std::vector<double>& beta_idr()
const {
75 index_bg_rho_ = index_bg++;
79 pvecback[index_bg_rho_] = Omega0_idr_ * pba_.H0 * pba_.H0 / (a * a * a * a);
82 double Rho(
const double* pvecback)
const override {
83 return pvecback[index_bg_rho_];
85 double P(
const double* pvecback)
const override {
86 return pvecback[index_bg_rho_] / 3.;
91 const double* pvecback)
const override {
92 return a * H * (-4. / 3. * pvecback[index_bg_rho_]);
116 return std::make_unique<PerturbLayout>();
155 const double* pvecback,
178 const background& pba_;
180 bool has_sibling_idm_dr_;
183 const ThermodynamicsModule* thm_ =
nullptr;
187 std::vector<double> alpha_idm_dr_;
188 std::vector<double> beta_idr_;
Definition base_species.h:76
void RegisterBackgroundIndices(int &index_bg) override
Definition idr.h:74
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 interacting_species.cpp:254
double P(const double *pvecback) const override
Definition idr.h:85
double PPrime(double a, double H, const double *, const double *pvecback) const override
Definition idr.h:88
std::unique_ptr< BaseSpecies::PerturbLayout > CreatePerturbLayout() const override
Definition idr.h:115
double Rho(const double *pvecback) const override
Definition idr.h:82
void ComputeBackground(double a, const double *, double *pvecback) override
Definition idr.h:78
void SetThermodynamicsModule(const ThermodynamicsModule *thm) override
Definition idr.h:54
void SetPerturbs(const perturbs *ppt) override
Definition idr.h:57
void PerturbDerivs(const BaseSpecies::PerturbLayout &layout, double tau, const double *y, double *dy, const perturb_parameters_and_workspace &ppaw) const override
Definition interacting_species.cpp:141
double GetOmega0() const override
Definition idr.h:61
bool IsFreestreaming() const override
Definition idr.h:70
StressEnergyContribution StressEnergy(const BaseSpecies::PerturbLayout &layout, const perturb_vector *pv, const double *y, const double *pvecback, const perturb_workspace *ppw) const override
Definition interacting_species.cpp:205
void PerturbSynchronousToNewtonian(const BaseSpecies::PerturbLayout &layout, double *y, const PerturbIcContext &ctx) override
Definition interacting_species.cpp:243
double GetRadiationOmega0() const override
Definition idr.h:66
double TcaShearIdr(const PerturbLayout &layout, const double *y, const perturb_workspace *ppw) const
Definition interacting_species.cpp:284
Definition perturbations.h:250
Definition perturbations.h:344
Definition perturbations.h:100
Definition base_species.h:89
int idx_delta
index_pt_delta_idr
Definition idr.h:108
int idx_shear
index_pt_shear_idr (free-streaming + tca_off only)
Definition idr.h:110
int l_max
IDRSpecies::l_max_idr() when full hierarchy, else -1.
Definition idr.h:112
int idx_l3
index_pt_l3_idr (free-streaming + tca_off + l_max>=3)
Definition idr.h:111
int idx_theta
index_pt_theta_idr
Definition idr.h:109
Definition perturb_source_context.h:125
Definition perturb_source_context.h:159
Definition perturbations_module.h:341
Definition precision.h:63