CLASSpp Manual
Cosmology reference and developer manual
Loading...
Searching...
No Matches
composite_species.h
1#pragma once
2#include <memory>
3#include <string>
4#include <vector>
5
6#include "base_species.h"
7
27 public:
28 CompositeSpecies(std::string name, EnergyType energy_type)
29 : BaseSpecies(std::move(name), energy_type) {
30 delegates_tally_ = true;
31 }
32
37 std::vector<std::unique_ptr<BaseSpecies::PerturbLayout>> child_layouts;
38 };
39
40 std::unique_ptr<BaseSpecies::PerturbLayout> CreatePerturbLayout() const override;
41
42 void RegisterPerturbationIndices(BaseSpecies::PerturbLayout& layout,
44 const precision* ppr,
45 int& index_pt,
46 const perturb_workspace* ppw,
47 int gauge) override;
49 double* y,
50 const PerturbIcContext& ctx) override;
52 const perturb_vector* pv,
53 const double* y,
54 const double* pvecback,
55 const perturb_workspace* ppw) const override;
56 void DelegateTally(const BaseSpecies::PerturbLayout& layout,
57 const perturb_vector* pv,
58 const double* y,
59 const double* pvecback,
60 const perturb_workspace* ppw,
62 StressEnergyContribution& total_cold,
63 StressEnergyContribution& total_warm) const override;
65 double tau,
66 const double* y,
67 double* dy,
68 const perturb_parameters_and_workspace& ppaw) const override;
69 void FillSources(const BaseSpecies::PerturbLayout& layout,
70 const double* y,
71 const double* dy,
72 PerturbSourceContext& ctx) const override;
74 double* y,
75 const PerturbIcContext& ctx) override;
77 const BaseSpecies::PerturbLayout& new_layout,
78 const double* old_y,
79 double* new_y,
80 const PerturbSwitchContext& ctx) const override;
81
82 // ── Registration ────────────────────────────────────────────────────────
83 void RegisterBackgroundIndices(int& index_bg) override;
84 void RegisterIntegrationIndices(int& index_bi) override;
85 void RegisterTransferSourceIndices(int& index_tp, const SourceRequestContext& ctx) override;
86 // ── Omega0 (closure) ────────────────────────────────────────────────────
88 double GetOmega0() const override {
89 double sum = 0.0;
90 for (const auto& c : children_)
91 sum += c->GetOmega0();
92 return sum;
93 }
94
98 void AppendBudgetLines(const double* pvecback_today,
99 double rho_crit,
100 std::vector<BudgetLine>& out) const {
101 for (const auto& c : children_)
102 out.push_back({c->name(), c->Rho(pvecback_today) / rho_crit, BudgetBucketOf(*c)});
103 }
104
107 double GetRadiationOmega0() const override {
108 double sum = 0.0;
109 for (const auto& c : children_)
110 sum += c->GetRadiationOmega0();
111 return sum;
112 }
113
115 double DarkRadiationRhoToday(const double* pvecback_integration) const override {
116 double sum = 0.0;
117 for (const auto& c : children_)
118 sum += c->DarkRadiationRhoToday(pvecback_integration);
119 return sum;
120 }
121
123 double NeutrinoOmega0() const override {
124 double sum = 0.0;
125 for (const auto& c : children_)
126 sum += c->NeutrinoOmega0();
127 return sum;
128 }
129
131 double NeffContribution(double z) const override {
132 double sum = 0.0;
133 for (const auto& c : children_)
134 sum += c->NeffContribution(z);
135 return sum;
136 }
137
138 void PrintNeffInfo() const override {
139 for (const auto& c : children_)
140 c->PrintNeffInfo();
141 }
142 void PrintMassInfo() const override {
143 for (const auto& c : children_)
144 c->PrintMassInfo();
145 }
146
147 double TensorMasslessRelativisticRho(const double* pvecback) const override {
148 double sum = 0.0;
149 for (const auto& c : children_)
150 sum += c->TensorMasslessRelativisticRho(pvecback);
151 return sum;
152 }
153 void CheckUltraRelativisticAtIc(const double* pvecback, double tol) const override {
154 for (const auto& c : children_)
155 c->CheckUltraRelativisticAtIc(pvecback, tol);
156 }
157 bool IsUltraRelativisticAtIc(const double* pvecback, double tol) const override {
158 for (const auto& c : children_)
159 if (!c->IsUltraRelativisticAtIc(pvecback, tol))
160 return false;
161 return true;
162 }
163 void WarnIfTooHeavyForHalofit(double m_ev_threshold) const override {
164 for (const auto& c : children_)
165 c->WarnIfTooHeavyForHalofit(m_ev_threshold);
166 }
167
170 double BackgroundAIni(double a_proposed, double tol) const override {
171 for (const auto& c : children_)
172 a_proposed = c->BackgroundAIni(a_proposed, tol);
173 return a_proposed;
174 }
175
176 // ── Background ──────────────────────────────────────────────────────────
177 void SetBackgroundModule(const BackgroundModule* bgm) override;
178 void SetThermodynamicsModule(const ThermodynamicsModule* thm) override;
179 void SetPerturbs(const perturbs* ppt) override;
180 void SetBackgroundInitialConditions(const BackgroundICContext& ctx) override;
181 void ComputeBackground(double a, const double* pvecback_B, double* pvecback) override;
182 void BackgroundDerivs(double tau, const double* y, double* dy, const double* pvecback) override;
183 void FinalizeBackground(double a, double H, const double* pvecback_B, double* pvecback) override;
184 double Rho(const double* pvecback) const override;
185 double P(const double* pvecback) const override;
186 double PPrime(double a,
187 double H,
188 const double* pvecback_B,
189 const double* pvecback) const override;
190 double FreestreamingRho(const double* pvecback) const override;
191
192 // ── Matter tally ────────────────────────────────────────────────────────
193 bool ClustersAsMatter() const override;
194 bool IsColdMatterSpecies() const override;
195 bool HasWarmMatter() const override;
196 void FinalizeMatterClassification() override;
197
198 protected:
199 std::vector<std::unique_ptr<BaseSpecies>> children_;
200
206 virtual void AddCouplingDerivs(double tau,
207 const double* y,
208 double* dy,
209 const perturb_parameters_and_workspace& ppaw) const;
210};
Definition base_species.h:76
EnergyType
Definition base_species.h:79
Definition composite_species.h:26
void PrintMassInfo() const override
Definition composite_species.h:142
void CheckUltraRelativisticAtIc(const double *pvecback, double tol) const override
Definition composite_species.h:153
void RegisterIntegrationIndices(int &index_bi) override
Definition composite_species.cpp:10
std::unique_ptr< BaseSpecies::PerturbLayout > CreatePerturbLayout() const override
Definition composite_species.cpp:93
void WarnIfTooHeavyForHalofit(double m_ev_threshold) const override
Definition composite_species.h:163
double BackgroundAIni(double a_proposed, double tol) const override
Definition composite_species.h:170
void RegisterTransferSourceIndices(int &index_tp, const SourceRequestContext &ctx) override
Definition composite_species.cpp:15
double NeutrinoOmega0() const override
Definition composite_species.h:123
void PerturbSynchronousToNewtonian(const BaseSpecies::PerturbLayout &layout, double *y, const PerturbIcContext &ctx) override
Definition composite_species.cpp:173
void RegisterBackgroundIndices(int &index_bg) override
Definition composite_species.cpp:5
bool IsUltraRelativisticAtIc(const double *pvecback, double tol) const override
Definition composite_species.h:157
void PrintNeffInfo() const override
Definition composite_species.h:138
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 composite_species.cpp:181
double DarkRadiationRhoToday(const double *pvecback_integration) const override
Definition composite_species.h:115
double GetRadiationOmega0() const override
Definition composite_species.h:107
void FillSources(const BaseSpecies::PerturbLayout &layout, const double *y, const double *dy, PerturbSourceContext &ctx) const override
Definition composite_species.cpp:164
double GetOmega0() const override
Definition composite_species.h:88
StressEnergyContribution StressEnergy(const BaseSpecies::PerturbLayout &layout, const perturb_vector *pv, const double *y, const double *pvecback, const perturb_workspace *ppw) const override
Definition composite_species.cpp:120
void PerturbDerivs(const BaseSpecies::PerturbLayout &layout, double tau, const double *y, double *dy, const perturb_parameters_and_workspace &ppaw) const override
Definition composite_species.cpp:153
void AppendBudgetLines(const double *pvecback_today, double rho_crit, std::vector< BudgetLine > &out) const
Definition composite_species.h:98
double TensorMasslessRelativisticRho(const double *pvecback) const override
Definition composite_species.h:147
double NeffContribution(double z) const override
Definition composite_species.h:131
void ApplyInitialConditions(const BaseSpecies::PerturbLayout &layout, double *y, const PerturbIcContext &ctx) override
Definition composite_species.cpp:112
Definition perturbations.h:250
Definition perturbations.h:344
Definition perturbations.h:100
Definition background_ic_context.h:11
Definition base_species.h:89
Definition base_species.h:332
Definition composite_species.h:36
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 perturbations_module.h:341
Definition precision.h:63