CLASSpp Manual
Cosmology reference and developer manual
Loading...
Searching...
No Matches
idr_drmd.h
1#pragma once
2#include "background.h"
3#include "base_species.h"
4#include "perturbations.h"
5
10 public:
11 IDR_DRMDSpecies(const background& pba, double omega0_idr_drmd)
12 : BaseSpecies("IDR_DRMD", EnergyType::Radiation), pba_(pba),
13 Omega0_idr_drmd_(omega0_idr_drmd) {}
14
15 double GetOmega0() const override {
16 return Omega0_idr_drmd_;
17 }
18
20 double GetRadiationOmega0() const override {
21 return Omega0_idr_drmd_;
22 }
23
24 bool IsFreestreaming() const override {
25 return true;
26 }
27
28 void RegisterBackgroundIndices(int& index_bg) override {
29 index_bg_rho_ = index_bg++;
30 }
31
32 void ComputeBackground(double a, const double* /*pvecback_B*/, double* pvecback) override {
33 pvecback[index_bg_rho_] = Omega0_idr_drmd_ * pba_.H0 * pba_.H0 / (a * a * a * a);
34 }
35
36 double Rho(const double* pvecback) const override {
37 return pvecback[index_bg_rho_];
38 }
39 double P(const double* pvecback) const override {
40 return pvecback[index_bg_rho_] / 3.;
41 }
42 double PPrime(double a,
43 double H,
44 const double* /*pvecback_B*/,
45 const double* pvecback) const override {
46 return a * H * (-4. / 3. * pvecback[index_bg_rho_]);
47 }
48
49 // ── PerturbLayout ──────────────────────────────────────────────────────────
50
51 struct PerturbLayout : BaseSpecies::PerturbLayout {
52 int idx_delta = -1;
53 int idx_theta = -1;
54 };
55
56 std::unique_ptr<BaseSpecies::PerturbLayout> CreatePerturbLayout() const override {
57 return std::make_unique<PerturbLayout>();
58 }
59
60 // ── Perturbation index registration ────────────────────────────────────────
61
62 void RegisterPerturbationIndices(BaseSpecies::PerturbLayout& layout,
64 const precision* ppr,
65 int& index_pt,
66 const perturb_workspace* ppw,
67 int gauge) override;
68
69 // ── PerturbDerivs ──────────────────────────────────────────────────────────
70
72 double tau,
73 const double* y,
74 double* dy,
75 const perturb_parameters_and_workspace& ppaw) const override;
76
77 // ── Stress-energy observables ───────────────────────────────────────────────
78
79 StressEnergyContribution StressEnergy(const BaseSpecies::PerturbLayout& layout,
80 const perturb_vector* pv,
81 const double* y,
82 const double* pvecback,
83 const perturb_workspace* ppw) const override;
84
86 double* y,
87 const PerturbIcContext& ctx) override;
88
89 // ── Switch-copy hook ────────────────────────────────────────────────────────
90
92 const BaseSpecies::PerturbLayout& new_layout,
93 const double* old_y,
94 double* new_y,
95 const PerturbSwitchContext& ctx) const override;
96
97 private:
98 const background& pba_;
99 double Omega0_idr_drmd_;
100};
Definition base_species.h:76
Definition idr_drmd.h:9
std::unique_ptr< BaseSpecies::PerturbLayout > CreatePerturbLayout() const override
Definition idr_drmd.h:56
void RegisterBackgroundIndices(int &index_bg) override
Definition idr_drmd.h:28
double PPrime(double a, double H, const double *, const double *pvecback) const override
Definition idr_drmd.h:42
bool IsFreestreaming() const override
Definition idr_drmd.h:24
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:424
void PerturbSynchronousToNewtonian(const BaseSpecies::PerturbLayout &layout, double *y, const PerturbIcContext &ctx) override
Definition interacting_species.cpp:451
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:408
double P(const double *pvecback) const override
Definition idr_drmd.h:39
void ComputeBackground(double a, const double *, double *pvecback) override
Definition idr_drmd.h:32
double GetOmega0() const override
Definition idr_drmd.h:15
double Rho(const double *pvecback) const override
Definition idr_drmd.h:36
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:460
double GetRadiationOmega0() const override
Definition idr_drmd.h:20
Definition perturbations.h:250
Definition perturbations.h:344
Definition base_species.h:89
Definition perturb_source_context.h:125
Definition perturb_source_context.h:159
Definition perturbations_module.h:341
Definition precision.h:63