CLASSpp Manual
Cosmology reference and developer manual
Loading...
Searching...
No Matches
cdm.h
1#pragma once
2
3#include <string_view>
4
5#include "base_species.h"
6#include "species_build_context.h"
7
8struct background;
9
18class CDMSpecies : public BaseSpecies {
19 public:
20 static constexpr std::string_view kTypeName = "cdm";
21
22 struct PerturbLayout : BaseSpecies::PerturbLayout {
23 int idx_delta = -1;
24 int idx_theta = -1; // newtonian gauge, or synchronous when coupled
25 };
26
27 std::unique_ptr<BaseSpecies::PerturbLayout> CreatePerturbLayout() const override {
28 return std::make_unique<PerturbLayout>();
29 }
30
31 explicit CDMSpecies(const background& pba, double omega0_cdm, bool coupled = false);
32
33 bool coupled() const {
34 return coupled_;
35 }
36
37 double GetOmega0() const override {
38 return Omega0_cdm_;
39 }
40
41 // ── Background ─────────────────────────────────────────────────────────────
42 void RegisterBackgroundIndices(int& index_bg) override;
44 void WriteBackgroundData(const double* pvecback, BackgroundColumnWriter& w) const override;
45 void ComputeBackground(double a, const double* pvecback_B, double* pvecback) override;
46 double Rho(const double* pvecback) const override;
47 double P(const double* pvecback) const override;
48
49 // ── Perturbations ──────────────────────────────────────────────────────────
50 void RegisterTransferSourceIndices(int& index_tp, const SourceRequestContext& ctx) override;
51 void RegisterPerturbationIndices(BaseSpecies::PerturbLayout& layout,
53 const precision* ppr,
54 int& index_pt,
55 const perturb_workspace* ppw,
56 int gauge) override;
58 double tau,
59 const double* y,
60 double* dy,
61 const perturb_parameters_and_workspace& ppaw) const override;
63 PerturbColumnWriter& writer,
64 const PerturbationsModule& mod,
65 file_format fmt,
66 TransferColumnSection section = TransferColumnSection::all) const override;
68 double tau,
69 const double* y,
70 const PerturbationsModule& mod,
71 const perturb_workspace* ppw) const override;
72 StressEnergyContribution StressEnergy(const BaseSpecies::PerturbLayout& layout,
73 const perturb_vector* pv,
74 const double* y,
75 const double* pvecback,
76 const perturb_workspace* ppw) const override;
77 void FillSources(const BaseSpecies::PerturbLayout& layout,
78 const double* y,
79 const double* dy,
80 PerturbSourceContext& ctx) const override;
82 double* y,
83 const PerturbIcContext& ctx) override;
85 double* y,
86 const PerturbIcContext& ctx) override;
88 const BaseSpecies::PerturbLayout& new_layout,
89 const double* old_y,
90 double* new_y,
91 const PerturbSwitchContext& ctx) const override;
92
93 static std::vector<Named> CreateAll(const SpeciesBuildContext& ctx);
94
95 private:
96 double Omega0_cdm_;
97 double H0_;
98 bool coupled_ = false;
99 int index_bg_rho_cdm_ = -1;
100
101 int index_tp_delta_ = -1; // #309 transfer-source slot
102 int index_tp_theta_ = -1; // registered only when gauge != synchronous (or when coupled)
103};
Definition base_species.h:32
Definition base_species.h:76
Definition cdm.h:18
void RegisterBackgroundIndices(int &index_bg) override
Definition cdm.cpp:12
void PerturbSynchronousToNewtonian(const BaseSpecies::PerturbLayout &layout, double *y, const PerturbIcContext &ctx) override
Definition cdm.cpp:223
void WriteOutputColumns(PerturbColumnWriter &writer, const PerturbationsModule &mod, file_format fmt, TransferColumnSection section=TransferColumnSection::all) const override
Definition cdm.cpp:166
double GetOmega0() const override
Definition cdm.h:37
StressEnergyContribution StressEnergy(const BaseSpecies::PerturbLayout &layout, const perturb_vector *pv, const double *y, const double *pvecback, const perturb_workspace *ppw) const override
Definition cdm.cpp:89
void PerturbDerivs(const BaseSpecies::PerturbLayout &layout, double tau, const double *y, double *dy, const perturb_parameters_and_workspace &ppaw) const override
Definition cdm.cpp:68
void WriteBackgroundColumnTitles(BackgroundColumnWriter &w) const override
Definition cdm.cpp:29
void ComputeBackground(double a, const double *pvecback_B, double *pvecback) override
Definition cdm.cpp:17
void FillSources(const BaseSpecies::PerturbLayout &layout, const double *y, const double *dy, PerturbSourceContext &ctx) const override
Definition cdm.cpp:131
void PrintVariables(PerturbColumnWriter &writer, double tau, const double *y, const PerturbationsModule &mod, const perturb_workspace *ppw) const override
Definition cdm.cpp:184
std::unique_ptr< BaseSpecies::PerturbLayout > CreatePerturbLayout() const override
Definition cdm.h:27
double Rho(const double *pvecback) const override
Definition cdm.cpp:21
double P(const double *pvecback) const override
Definition cdm.cpp:25
void ApplyInitialConditions(const BaseSpecies::PerturbLayout &layout, double *y, const PerturbIcContext &ctx) override
Definition cdm.cpp:104
void WriteBackgroundData(const double *pvecback, BackgroundColumnWriter &w) const override
Definition cdm.cpp:33
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 cdm.cpp:230
void RegisterTransferSourceIndices(int &index_tp, const SourceRequestContext &ctx) override
Definition cdm.cpp:37
Definition perturb_source_context.h:63
Definition perturbations.h:250
Definition perturbations.h:344
file_format
Definition precision.h:40
Definition base_species.h:89
Definition perturb_source_context.h:125
Definition perturb_source_context.h:103
Definition perturb_source_context.h:159
Definition perturb_source_context.h:48
Definition species_build_context.h:58
Definition perturbations_module.h:341
Definition precision.h:63