CLASSpp Manual
Cosmology reference and developer manual
Loading...
Searching...
No Matches
dcdm.h
1#pragma once
2#include <memory>
3
4#include "../species/base_species.h"
5#include "background.h"
6
7class BackgroundModule;
8
13class DCDMSpecies : public BaseSpecies {
14 public:
15 struct PerturbLayout : BaseSpecies::PerturbLayout {
16 int idx_delta = -1;
17 int idx_theta = -1;
18 };
19
20 std::unique_ptr<BaseSpecies::PerturbLayout> CreatePerturbLayout() const override {
21 return std::make_unique<PerturbLayout>();
22 }
23
24 DCDMSpecies(const background& pba,
25 double omega0_dcdmdr,
26 double Gamma_dcdm,
27 double Omega_ini_dcdm);
28
29 double GetOmega0() const override {
30 return Omega0_dcdmdr_;
31 }
32
33 double Gamma_dcdm() const {
34 return Gamma_dcdm_;
35 }
36 double Omega_ini_dcdm() const {
37 return Omega_ini_dcdm_;
38 }
39
40 // ── Background ─────────────────────────────────────────────────────────────
41 void SetBackgroundModule(const BackgroundModule* bgm) override {
42 bgm_ = bgm;
43 }
44 void RegisterBackgroundIndices(int& index_bg) override;
45 void RegisterIntegrationIndices(int& index_bi) override;
47 void ComputeBackground(double a, const double* pvecback_B, double* pvecback) override;
48
49 int bi_rho_index() const {
50 return index_bi_rho_dcdm_;
51 }
52 void BackgroundDerivs(double tau, const double* y, double* dy, const double* pvecback) override;
53 double Rho(const double* pvecback) const override;
54 double P(const double* pvecback) const override;
55 double RhoDotOverRho(const double* pvecback, double a_prime_over_a) const override;
56
57 // ── Perturbations ──────────────────────────────────────────────────────────
58 void RegisterPerturbationIndices(BaseSpecies::PerturbLayout& layout,
60 const precision* ppr,
61 int& index_pt,
62 const perturb_workspace* ppw,
63 int gauge) override;
65 double tau,
66 const double* y,
67 double* dy,
68 const perturb_parameters_and_workspace& ppaw) const override;
69
70 StressEnergyContribution StressEnergy(const BaseSpecies::PerturbLayout& layout,
71 const perturb_vector* pv,
72 const double* y,
73 const double* pvecback,
74 const perturb_workspace* ppw) const override;
75
77 double* y,
78 const PerturbIcContext& ctx) override;
79
81 double* y,
82 const PerturbIcContext& ctx) override;
83
85 const BaseSpecies::PerturbLayout& new_layout,
86 const double* old_y,
87 double* new_y,
88 const PerturbSwitchContext& ctx) const override;
89
90 void RegisterTransferSourceIndices(int& index_tp, const SourceRequestContext& ctx) override;
91 int transfer_delta_index() const {
92 return index_tp_delta_;
93 }
94 int transfer_theta_index() const {
95 return index_tp_theta_;
96 }
97
99 PerturbColumnWriter& writer,
100 const PerturbationsModule& mod,
101 file_format fmt,
102 TransferColumnSection section = TransferColumnSection::all) const override;
104 double tau,
105 const double* y,
106 const PerturbationsModule& mod,
107 const perturb_workspace* ppw) const override;
108
109 private:
110 const background& pba_;
111 const BackgroundModule* bgm_ = nullptr;
112 double Omega0_dcdmdr_;
113 double Gamma_dcdm_ = 0.;
114 double Omega_ini_dcdm_ = 0.;
115
116 // Integration indices
117 int index_bi_rho_dcdm_ = -1;
118
119 // Background indices
120 int index_bg_rho_dcdm_ = -1;
121
122 int index_tp_delta_ = -1; // #309 transfer-source slot
123 int index_tp_theta_ = -1;
124};
Definition base_species.h:76
Definition dcdm.h:13
void RegisterBackgroundIndices(int &index_bg) override
Definition dcdm.cpp:15
double GetOmega0() const override
Definition dcdm.h:29
StressEnergyContribution StressEnergy(const BaseSpecies::PerturbLayout &layout, const perturb_vector *pv, const double *y, const double *pvecback, const perturb_workspace *ppw) const override
Definition dcdm.cpp:87
double RhoDotOverRho(const double *pvecback, double a_prime_over_a) const override
Definition dcdm.cpp:52
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 dcdm.cpp:122
void RegisterTransferSourceIndices(int &index_tp, const SourceRequestContext &ctx) override
Definition dcdm.cpp:135
double P(const double *pvecback) const override
Definition dcdm.cpp:48
void SetBackgroundModule(const BackgroundModule *bgm) override
Definition dcdm.h:41
void ApplyInitialConditions(const BaseSpecies::PerturbLayout &layout, double *y, const PerturbIcContext &ctx) override
Definition dcdm.cpp:104
void ComputeBackground(double a, const double *pvecback_B, double *pvecback) override
Definition dcdm.cpp:29
void PerturbSynchronousToNewtonian(const BaseSpecies::PerturbLayout &layout, double *y, const PerturbIcContext &ctx) override
Definition dcdm.cpp:114
void SetBackgroundInitialConditions(const BackgroundICContext &ctx) override
Definition dcdm.cpp:24
std::unique_ptr< BaseSpecies::PerturbLayout > CreatePerturbLayout() const override
Definition dcdm.h:20
double Rho(const double *pvecback) const override
Definition dcdm.cpp:44
void BackgroundDerivs(double tau, const double *y, double *dy, const double *pvecback) override
Definition dcdm.cpp:33
void PerturbDerivs(const BaseSpecies::PerturbLayout &layout, double tau, const double *y, double *dy, const perturb_parameters_and_workspace &ppaw) const override
Definition dcdm.cpp:73
void RegisterIntegrationIndices(int &index_bi) override
Definition dcdm.cpp:20
void PrintVariables(PerturbColumnWriter &writer, double tau, const double *y, const PerturbationsModule &mod, const perturb_workspace *ppw) const override
Definition dcdm.cpp:154
void WriteOutputColumns(PerturbColumnWriter &writer, const PerturbationsModule &mod, file_format fmt, TransferColumnSection section=TransferColumnSection::all) const override
Definition dcdm.cpp:140
Definition perturb_source_context.h:63
Definition perturbations.h:250
Definition perturbations.h:344
file_format
Definition precision.h:40
Definition background_ic_context.h:11
Definition base_species.h:89
Definition perturb_source_context.h:125
Definition perturb_source_context.h:159
Definition perturb_source_context.h:48
Definition perturbations_module.h:341
Definition precision.h:63