CLASSpp Manual
Cosmology reference and developer manual
Loading...
Searching...
No Matches
baryons.h
1#pragma once
2#include <string_view>
3
4#include "../species/base_species.h"
5#include "background.h"
6#include "perturbations.h"
7#include "species_build_context.h"
8
11 public:
12 static constexpr std::string_view kTypeName = "baryons";
13
14 explicit BaryonsSpecies(const background& pba)
15 : BaseSpecies("Baryons", EnergyType::Matter), pba_(pba) {}
16
17 // ── PerturbLayout ──────────────────────────────────────────────────────────
18
19 struct PerturbLayout : BaseSpecies::PerturbLayout {
20 int idx_delta = -1;
21 int idx_theta = -1;
22 };
23
24 std::unique_ptr<BaseSpecies::PerturbLayout> CreatePerturbLayout() const override {
25 return std::make_unique<PerturbLayout>();
26 }
27
28 static std::vector<Named> CreateAll(const SpeciesBuildContext& ctx);
29
30 double GetOmega0() const override {
31 return pba_.Omega0_b;
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_] = pba_.Omega0_b * 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
50 w.Add("(.)rho_b", 0.);
51 }
52 void WriteBackgroundData(const double* pvecback, BackgroundColumnWriter& w) const override {
53 w.Add("(.)rho_b", pvecback[index_bg_rho_]);
54 }
55
56 // ── Perturbation index registration ────────────────────────────────────────
57
58 void RegisterTransferSourceIndices(int& index_tp, const SourceRequestContext& ctx) override;
59
60 void RegisterPerturbationIndices(BaseSpecies::PerturbLayout& layout,
62 const precision* ppr,
63 int& index_pt,
64 const perturb_workspace* ppw,
65 int gauge) override;
66
67 void RegisterVectorPerturbationIndices(BaseSpecies::PerturbLayout& layout,
69 const precision* ppr,
70 int& index_pt,
71 const perturb_workspace* ppw,
72 int gauge) override;
73
74 // ── PerturbDerivs ──────────────────────────────────────────────────────────
75
77 double tau,
78 const double* y,
79 double* dy,
80 const perturb_parameters_and_workspace& ppaw) const override;
81
82 // ── Source filling and initial conditions ──────────────────────────────────
83
84 void FillSources(const BaseSpecies::PerturbLayout& layout,
85 const double* y,
86 const double* dy,
87 PerturbSourceContext& ctx) const override;
88
90 double* y,
91 const PerturbIcContext& ctx) override;
92
94 double* y,
95 const PerturbIcContext& ctx) override;
96
98 const BaseSpecies::PerturbLayout& new_layout,
99 const double* old_y,
100 double* new_y,
101 const PerturbSwitchContext& ctx) const override;
102
104 PerturbColumnWriter& writer,
105 const PerturbationsModule& mod,
106 file_format fmt,
107 TransferColumnSection section = TransferColumnSection::all) const override;
109 double tau,
110 const double* y,
111 const PerturbationsModule& mod,
112 const perturb_workspace* ppw) const override;
113
114 // ── Stress-energy observables ───────────────────────────────────────────────
115
116 StressEnergyContribution StressEnergy(const BaseSpecies::PerturbLayout& layout,
117 const perturb_vector* pv,
118 const double* y,
119 const double* pvecback,
120 const perturb_workspace* ppw) const override;
121
122 void SetThermodynamicsModule(const ThermodynamicsModule* thm) override {
123 thm_ = thm;
124 }
125 void SetPerturbs(const perturbs* ppt) override {
126 ppt_ = ppt;
127 }
128
129 private:
130 const background& pba_;
131 const ThermodynamicsModule* thm_ = nullptr;
132 const perturbs* ppt_ = nullptr;
133
134 int index_tp_delta_ = -1; // #309 transfer-source slot
135 int index_tp_theta_ = -1;
136};
Definition base_species.h:32
Definition baryons.h:10
void WriteBackgroundColumnTitles(BackgroundColumnWriter &w) const override
Definition baryons.h:49
double Rho(const double *pvecback) const override
Definition baryons.h:42
void RegisterBackgroundIndices(int &index_bg) override
Definition baryons.h:34
void ComputeBackground(double a, const double *, double *pvecback) override
Definition baryons.h:38
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 baryons.cpp:238
void PerturbDerivs(const BaseSpecies::PerturbLayout &layout, double tau, const double *y, double *dy, const perturb_parameters_and_workspace &ppaw) const override
Definition baryons.cpp:37
void ApplyInitialConditions(const BaseSpecies::PerturbLayout &layout, double *y, const PerturbIcContext &ctx) override
Definition baryons.cpp:113
void WriteBackgroundData(const double *pvecback, BackgroundColumnWriter &w) const override
Definition baryons.h:52
std::unique_ptr< BaseSpecies::PerturbLayout > CreatePerturbLayout() const override
Definition baryons.h:24
void PrintVariables(PerturbColumnWriter &writer, double tau, const double *y, const PerturbationsModule &mod, const perturb_workspace *ppw) const override
Definition baryons.cpp:197
void WriteOutputColumns(PerturbColumnWriter &writer, const PerturbationsModule &mod, file_format fmt, TransferColumnSection section=TransferColumnSection::all) const override
Definition baryons.cpp:184
void SetPerturbs(const perturbs *ppt) override
Definition baryons.h:125
void SetThermodynamicsModule(const ThermodynamicsModule *thm) override
Definition baryons.h:122
StressEnergyContribution StressEnergy(const BaseSpecies::PerturbLayout &layout, const perturb_vector *pv, const double *y, const double *pvecback, const perturb_workspace *ppw) const override
Definition baryons.cpp:91
void RegisterTransferSourceIndices(int &index_tp, const SourceRequestContext &ctx) override
Definition baryons.cpp:179
double GetOmega0() const override
Definition baryons.h:30
void PerturbSynchronousToNewtonian(const BaseSpecies::PerturbLayout &layout, double *y, const PerturbIcContext &ctx) override
Definition baryons.cpp:231
void FillSources(const BaseSpecies::PerturbLayout &layout, const double *y, const double *dy, PerturbSourceContext &ctx) const override
Definition baryons.cpp:145
double P(const double *) const override
Definition baryons.h:45
Definition base_species.h:76
Definition perturb_source_context.h:63
Definition perturbations.h:250
Definition perturbations.h:344
Definition perturbations.h:100
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