CLASSpp Manual
Cosmology reference and developer manual
Loading...
Searching...
No Matches
idm_drmd.h
1#pragma once
2#include "background.h"
3#include "base_species.h"
4#include "perturbations.h"
5
10 public:
11 IDM_DRMDSpecies(const background& pba, double omega0_idm_drmd)
12 : BaseSpecies("IDM_DRMD", EnergyType::Matter), pba_(pba), Omega0_idm_drmd_(omega0_idm_drmd) {}
13
14 double GetOmega0() const override {
15 return Omega0_idm_drmd_;
16 }
17
18 void RegisterBackgroundIndices(int& index_bg) override {
19 index_bg_rho_ = index_bg++;
20 }
21
22 void ComputeBackground(double a, const double* /*pvecback_B*/, double* pvecback) override {
23 pvecback[index_bg_rho_] = Omega0_idm_drmd_ * pba_.H0 * pba_.H0 / (a * a * a);
24 }
25
26 double Rho(const double* pvecback) const override {
27 return pvecback[index_bg_rho_];
28 }
29 double P(const double* /*pvecback*/) const override {
30 return 0.;
31 }
32
33 // ── PerturbLayout ──────────────────────────────────────────────────────────
34
35 struct PerturbLayout : BaseSpecies::PerturbLayout {
36 int idx_delta = -1;
37 int idx_theta = -1;
38 };
39
40 std::unique_ptr<BaseSpecies::PerturbLayout> CreatePerturbLayout() const override {
41 return std::make_unique<PerturbLayout>();
42 }
43
44 // ── Perturbation index registration ────────────────────────────────────────
45
46 void RegisterPerturbationIndices(BaseSpecies::PerturbLayout& layout,
48 const precision* ppr,
49 int& index_pt,
50 const perturb_workspace* ppw,
51 int gauge) override;
52
53 // ── PerturbDerivs ──────────────────────────────────────────────────────────
54
56 double tau,
57 const double* y,
58 double* dy,
59 const perturb_parameters_and_workspace& ppaw) const override;
60
61 // ── Stress-energy observables ───────────────────────────────────────────────
62
63 StressEnergyContribution StressEnergy(const BaseSpecies::PerturbLayout& layout,
64 const perturb_vector* pv,
65 const double* y,
66 const double* pvecback,
67 const perturb_workspace* ppw) const override;
68
70 double* y,
71 const PerturbIcContext& ctx) override;
72
73 // ── Switch-copy hook ────────────────────────────────────────────────────────
74
76 const BaseSpecies::PerturbLayout& new_layout,
77 const double* old_y,
78 double* new_y,
79 const PerturbSwitchContext& ctx) const override;
80
81 private:
82 const background& pba_;
83 double Omega0_idm_drmd_;
84};
Definition base_species.h:76
Definition idm_drmd.h:9
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:330
void ComputeBackground(double a, const double *, double *pvecback) override
Definition idm_drmd.h:22
double Rho(const double *pvecback) const override
Definition idm_drmd.h:26
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:374
void RegisterBackgroundIndices(int &index_bg) override
Definition idm_drmd.h:18
double P(const double *) const override
Definition idm_drmd.h:29
double GetOmega0() const override
Definition idm_drmd.h:14
std::unique_ptr< BaseSpecies::PerturbLayout > CreatePerturbLayout() const override
Definition idm_drmd.h:40
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:346
void PerturbSynchronousToNewtonian(const BaseSpecies::PerturbLayout &layout, double *y, const PerturbIcContext &ctx) override
Definition interacting_species.cpp:365
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