CLASSpp Manual
Cosmology reference and developer manual
Loading...
Searching...
No Matches
photons.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 = "photons";
13
14 explicit PhotonsSpecies(const background& pba)
15 : BaseSpecies("Photons", EnergyType::Radiation), pba_(pba) {}
16
17 // ── PerturbLayout ──────────────────────────────────────────────────────────
18
19 struct PerturbLayout : BaseSpecies::PerturbLayout {
20 // Scalar / vector / tensor — same struct holds whichever mode this pv is for.
21 int idx_delta = -1, idx_theta = -1, idx_shear = -1, idx_l3 = -1;
22 int idx_pol0 = -1, idx_pol1 = -1, idx_pol2 = -1, idx_pol3 = -1;
23 int l_max = -1;
24 int l_max_pol = -1;
25 };
26
27 std::unique_ptr<BaseSpecies::PerturbLayout> CreatePerturbLayout() const override {
28 return std::make_unique<PerturbLayout>();
29 }
30
31 static std::vector<Named> CreateAll(const SpeciesBuildContext& ctx);
32
33 double GetOmega0() const override {
34 return pba_.Omega0_g;
35 }
36
37 void RegisterBackgroundIndices(int& index_bg) override {
38 index_bg_rho_ = index_bg++;
39 }
40
41 void ComputeBackground(double a, const double* /*pvecback_B*/, double* pvecback) override {
42 pvecback[index_bg_rho_] = pba_.Omega0_g * pba_.H0 * pba_.H0 / (a * a * a * a);
43 }
44
45 double Rho(const double* pvecback) const override {
46 return pvecback[index_bg_rho_];
47 }
48 double P(const double* pvecback) const override {
49 return pvecback[index_bg_rho_] / 3.;
50 }
51 double PPrime(double a,
52 double H,
53 const double* /*pvecback_B*/,
54 const double* pvecback) const override {
55 return a * H * (-4. / 3. * pvecback[index_bg_rho_]);
56 }
57
59 w.Add("(.)rho_g", 0.);
60 }
61 void WriteBackgroundData(const double* pvecback, BackgroundColumnWriter& w) const override {
62 w.Add("(.)rho_g", pvecback[index_bg_rho_]);
63 }
64
65 // ── Perturbation index registration ────────────────────────────────────────
66
67 void RegisterTransferSourceIndices(int& index_tp, const SourceRequestContext& ctx) override;
68
69 void RegisterPerturbationIndices(BaseSpecies::PerturbLayout& layout,
71 const precision* ppr,
72 int& index_pt,
73 const perturb_workspace* ppw,
74 int gauge) override;
75
76 void RegisterVectorPerturbationIndices(BaseSpecies::PerturbLayout& layout,
78 const precision* ppr,
79 int& index_pt,
80 const perturb_workspace* ppw,
81 int gauge) override;
82
83 void RegisterTensorPerturbationIndices(BaseSpecies::PerturbLayout& layout,
85 const precision* ppr,
86 int& index_pt,
87 const perturb_workspace* ppw,
88 int gauge) override;
89
90 // ── PerturbDerivs ──────────────────────────────────────────────────────────
91
93 double tau,
94 const double* y,
95 double* dy,
96 const perturb_parameters_and_workspace& ppaw) const override;
97
99 double tau,
100 const double* y,
101 double* dy,
102 const perturb_parameters_and_workspace& ppaw) const override;
103
105 double tau,
106 const double* y,
107 double* dy,
108 const perturb_parameters_and_workspace& ppaw) const override;
109
110 // ── Source filling and initial conditions ──────────────────────────────────
111
112 void FillSources(const BaseSpecies::PerturbLayout& layout,
113 const double* y,
114 const double* dy,
115 PerturbSourceContext& ctx) const override;
116
118 double* y,
119 const PerturbIcContext& ctx) override;
120
122 double* y,
123 const PerturbIcContext& ctx) override;
124
125 // ── MarkUsedInSources ──────────────────────────────────────────────────────
126
131 const perturb_workspace* ppw,
132 int* used_in_sources) const override;
133
137 const perturb_workspace* ppw,
138 int* used_in_sources) const override;
139
140 // ── Switch-copy hook ────────────────────────────────────────────────────────
141
143 const BaseSpecies::PerturbLayout& new_layout,
144 const double* old_y,
145 double* new_y,
146 const PerturbSwitchContext& ctx) const override;
147
149 PerturbColumnWriter& writer,
150 const PerturbationsModule& mod,
151 file_format fmt,
152 TransferColumnSection section = TransferColumnSection::all) const override;
154 double tau,
155 const double* y,
156 const PerturbationsModule& mod,
157 const perturb_workspace* ppw) const override;
158
159 // ── Stress-energy observables ───────────────────────────────────────────────
160
161 StressEnergyContribution StressEnergy(const BaseSpecies::PerturbLayout& layout,
162 const perturb_vector* pv,
163 const double* y,
164 const double* pvecback,
165 const perturb_workspace* ppw) const override;
166
167 void SetThermodynamicsModule(const ThermodynamicsModule* thm) override {
168 thm_ = thm;
169 }
170 void SetPerturbs(const perturbs* ppt) override {
171 ppt_ = ppt;
172 }
173
174 private:
175 const background& pba_;
176 const ThermodynamicsModule* thm_ = nullptr;
177 const perturbs* ppt_ = nullptr;
178
179 int index_tp_delta_ = -1; // #309 transfer-source slot
180 int index_tp_theta_ = -1;
181};
Definition base_species.h:32
Definition base_species.h:76
Definition perturb_source_context.h:63
Definition photons.h:10
void PrintVariables(PerturbColumnWriter &writer, double tau, const double *y, const PerturbationsModule &mod, const perturb_workspace *ppw) const override
Definition photons.cpp:577
void PerturbSynchronousToNewtonian(const BaseSpecies::PerturbLayout &layout, double *y, const PerturbIcContext &ctx) override
Definition photons.cpp:512
StressEnergyContribution StressEnergy(const BaseSpecies::PerturbLayout &layout, const perturb_vector *pv, const double *y, const double *pvecback, const perturb_workspace *ppw) const override
Definition photons.cpp:411
double PPrime(double a, double H, const double *, const double *pvecback) const override
Definition photons.h:51
void RegisterTransferSourceIndices(int &index_tp, const SourceRequestContext &ctx) override
Definition photons.cpp:558
double P(const double *pvecback) const override
Definition photons.h:48
void PerturbDerivs(const BaseSpecies::PerturbLayout &layout, double tau, const double *y, double *dy, const perturb_parameters_and_workspace &ppaw) const override
Definition photons.cpp:128
void MarkUsedInSources(const BaseSpecies::PerturbLayout &layout, const perturb_workspace *ppw, int *used_in_sources) const override
Definition photons.cpp:640
void WriteBackgroundData(const double *pvecback, BackgroundColumnWriter &w) const override
Definition photons.h:61
void SetPerturbs(const perturbs *ppt) override
Definition photons.h:170
void MarkTensorUsedInSources(const BaseSpecies::PerturbLayout &layout, const perturb_workspace *ppw, int *used_in_sources) const override
Definition photons.cpp:661
void WriteBackgroundColumnTitles(BackgroundColumnWriter &w) const override
Definition photons.h:58
void RegisterBackgroundIndices(int &index_bg) override
Definition photons.h:37
void WriteOutputColumns(PerturbColumnWriter &writer, const PerturbationsModule &mod, file_format fmt, TransferColumnSection section=TransferColumnSection::all) const override
Definition photons.cpp:563
void ApplyInitialConditions(const BaseSpecies::PerturbLayout &layout, double *y, const PerturbIcContext &ctx) override
Definition photons.cpp:442
void PerturbTensorDerivs(const BaseSpecies::PerturbLayout &layout, double tau, const double *y, double *dy, const perturb_parameters_and_workspace &ppaw) const override
Definition photons.cpp:333
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 photons.cpp:521
double Rho(const double *pvecback) const override
Definition photons.h:45
double GetOmega0() const override
Definition photons.h:33
void PerturbVectorDerivs(const BaseSpecies::PerturbLayout &layout, double tau, const double *y, double *dy, const perturb_parameters_and_workspace &ppaw) const override
Definition photons.cpp:237
void SetThermodynamicsModule(const ThermodynamicsModule *thm) override
Definition photons.h:167
void ComputeBackground(double a, const double *, double *pvecback) override
Definition photons.h:41
void FillSources(const BaseSpecies::PerturbLayout &layout, const double *y, const double *dy, PerturbSourceContext &ctx) const override
Definition photons.cpp:474
std::unique_ptr< BaseSpecies::PerturbLayout > CreatePerturbLayout() const override
Definition photons.h:27
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