CLASSpp Manual
Cosmology reference and developer manual
Loading...
Searching...
No Matches
idm_dr.h
1#pragma once
2#include "background.h"
3#include "base_species.h"
4#include "perturbations.h"
5
10class IDM_DRSpecies : public BaseSpecies {
11 public:
12 IDM_DRSpecies(const background& pba,
13 double omega0_idm_dr,
14 double a_idm_dr = 0.,
15 double nindex_idm_dr = 4.,
16 double m_idm = 1.e11)
17 : BaseSpecies("IDM_DR", EnergyType::Matter), pba_(pba), Omega0_idm_dr_(omega0_idm_dr),
18 a_idm_dr_(a_idm_dr), nindex_idm_dr_(nindex_idm_dr), m_idm_(m_idm) {}
19
20 double a_idm_dr() const {
21 return a_idm_dr_;
22 }
23 double nindex_idm_dr() const {
24 return nindex_idm_dr_;
25 }
26 double m_idm() const {
27 return m_idm_;
28 }
29
30 double GetOmega0() const override {
31 return Omega0_idm_dr_;
32 }
33
34 void RegisterBackgroundIndices(int& index_bg) override {
35 index_bg_rho_ = index_bg++;
36 }
37
38 void ComputeBackground(double a, const double* /*pvecback_B*/, double* pvecback) override {
39 pvecback[index_bg_rho_] = Omega0_idm_dr_ * pba_.H0 * pba_.H0 / (a * a * a);
40 }
41
42 double Rho(const double* pvecback) const override {
43 return pvecback[index_bg_rho_];
44 }
45 double P(const double* /*pvecback*/) const override {
46 return 0.;
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_idm_dr_;
100 double a_idm_dr_ = 0.;
101 double nindex_idm_dr_ = 4.;
102 double m_idm_ = 1.e11;
103};
Definition base_species.h:76
Definition idm_dr.h:10
void PerturbSynchronousToNewtonian(const BaseSpecies::PerturbLayout &layout, double *y, const PerturbIcContext &ctx) override
Definition interacting_species.cpp:71
void ComputeBackground(double a, const double *, double *pvecback) override
Definition idm_dr.h:38
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:52
double Rho(const double *pvecback) const override
Definition idm_dr.h:42
void RegisterBackgroundIndices(int &index_bg) override
Definition idm_dr.h:34
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:34
std::unique_ptr< BaseSpecies::PerturbLayout > CreatePerturbLayout() const override
Definition idm_dr.h:56
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:80
double GetOmega0() const override
Definition idm_dr.h:30
double P(const double *) const override
Definition idm_dr.h:45
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