CLASSpp Manual
Cosmology reference and developer manual
Loading...
Searching...
No Matches
fluid.h
1#pragma once
2
3#include <string_view>
4
5#include "background.h"
6#include "base_species.h"
7#include "species_build_context.h"
8
9class BackgroundModule;
10
22class FluidSpecies : public BaseSpecies {
23 public:
24 static constexpr std::string_view kTypeName = "fluid";
25
26 struct PerturbLayout : BaseSpecies::PerturbLayout {
27 int idx_delta = -1;
28 int idx_theta = -1;
29 };
30
31 std::unique_ptr<BaseSpecies::PerturbLayout> CreatePerturbLayout() const override {
32 return std::make_unique<PerturbLayout>();
33 }
34
35 FluidSpecies(const background& pba,
36 double omega0_fld,
37 equation_of_state fluid_eos,
38 double w0_fld,
39 double wa_fld,
40 double cs2_fld,
41 double Omega_EDE);
42
43 double GetOmega0() const override {
44 return Omega0_fld_;
45 }
46
47 equation_of_state fluid_eos() const {
48 return fluid_eos_;
49 }
50 double w0_fld() const {
51 return w0_fld_;
52 }
53 double wa_fld() const {
54 return wa_fld_;
55 }
56 double cs2_fld() const {
57 return cs2_fld_;
58 }
59 double Omega_EDE() const {
60 return Omega_EDE_;
61 }
62 // ── Background ─────────────────────────────────────────────────────────────
63 void SetBackgroundModule(const BackgroundModule* bgm) override {
64 bgm_ = bgm;
65 }
66 void RegisterBackgroundIndices(int& index_bg) override;
67 void RegisterIntegrationIndices(int& index_bi) override;
69 void ComputeBackground(double a, const double* pvecback_B, double* pvecback) override;
70 void BackgroundDerivs(double tau, const double* y, double* dy, const double* pvecback) override;
71 double Rho(const double* pvecback) const override;
72 double P(const double* pvecback) const override;
73 double PPrime(double a,
74 double H,
75 const double* pvecback_B,
76 const double* pvecback) const override;
77
79 void WriteBackgroundData(const double* pvecback, BackgroundColumnWriter& w) const override;
80
82 double W(const double* pvecback) const {
83 return pvecback[index_bg_w_fld_];
84 }
85
92 virtual void ComputeWFld(double a,
93 double* w_fld,
94 double* dw_over_da_fld,
95 double* integral_fld) const;
96
100 virtual double Cs2(double /*k2*/, double /*a*/) const {
101 return cs2_fld_;
102 }
103
110 virtual bool ReachesPhantomDivide() const;
111
117 virtual bool HyrecCplApproximation(double* w0, double* wa) const;
118
119 // ── Perturbations ──────────────────────────────────────────────────────────
120
121 void RegisterTransferSourceIndices(int& index_tp, const SourceRequestContext& ctx) override;
122
123 // Layout-based signatures: do the real work.
124 void RegisterPerturbationIndices(BaseSpecies::PerturbLayout& layout,
125 perturb_vector* pv,
126 const precision* ppr,
127 int& index_pt,
128 const perturb_workspace* ppw,
129 int gauge) override;
130 void PerturbDerivs(const BaseSpecies::PerturbLayout& layout,
131 double tau,
132 const double* y,
133 double* dy,
134 const perturb_parameters_and_workspace& ppaw) const override;
135 void FillSources(const BaseSpecies::PerturbLayout& layout,
136 const double* y,
137 const double* dy,
138 PerturbSourceContext& ctx) const override;
140 double* y,
141 const PerturbIcContext& ctx) override;
143 double* y,
144 const PerturbIcContext& ctx) override;
146 const BaseSpecies::PerturbLayout& new_layout,
147 const double* old_y,
148 double* new_y,
149 const PerturbSwitchContext& ctx) const override;
150
151 static std::vector<Named> CreateAll(const SpeciesBuildContext& ctx);
152
153 // Factory branch for fluid_equation_of_state = pheno_axion (AxiCLASS EDE fluid).
154 static std::vector<Named> CreatePhenoAxion(const SpeciesBuildContext& ctx);
155
156 StressEnergyContribution StressEnergy(const BaseSpecies::PerturbLayout& layout,
157 const perturb_vector* pv,
158 const double* y,
159 const double* pvecback,
160 const perturb_workspace* ppw) const override;
161
163 PerturbColumnWriter& writer,
164 const PerturbationsModule& mod,
165 file_format fmt,
166 TransferColumnSection section = TransferColumnSection::all) const override;
167
169 double tau,
170 const double* y,
171 const PerturbationsModule& mod,
172 const perturb_workspace* ppw) const override;
173
174 int bi_rho_index() const {
175 return index_bi_rho_fld_;
176 }
177 int bg_w_index() const {
178 return index_bg_w_fld_;
179 }
180 int bg_dw_over_da_index() const {
181 return index_bg_dw_over_da_fld_;
182 }
183
184 protected:
185 const BackgroundModule* bgm_ = nullptr;
186 int index_bg_rho_fld_ = -1;
187 int index_bg_w_fld_ = -1;
188 int index_bg_dw_over_da_fld_ = -1;
189 double cs2_fld_ = 1.;
190
191 int index_tp_delta_ = -1; // #309 transfer-source slot
192 int index_tp_theta_ = -1;
193
194 private:
195 const background& pba_;
196 double Omega0_fld_;
197
198 equation_of_state fluid_eos_ = CLP;
199 double w0_fld_ = -1.;
200 double wa_fld_ = 0.;
201 double Omega_EDE_ = 0.;
202
203 int index_bi_rho_fld_ = -1;
204};
equation_of_state
Definition background.h:20
Definition base_species.h:32
Definition base_species.h:76
Definition fluid.h:22
void WriteBackgroundData(const double *pvecback, BackgroundColumnWriter &w) const override
Definition fluid.cpp:106
virtual bool ReachesPhantomDivide() const
Definition fluid.cpp:416
void ComputeBackground(double a, const double *pvecback_B, double *pvecback) override
Definition fluid.cpp:64
virtual void ComputeWFld(double a, double *w_fld, double *dw_over_da_fld, double *integral_fld) const
Definition fluid.cpp:299
void BackgroundDerivs(double tau, const double *y, double *dy, const double *pvecback) override
Definition fluid.cpp:73
void ApplyInitialConditions(const BaseSpecies::PerturbLayout &layout, double *y, const PerturbIcContext &ctx) override
Definition fluid.cpp:190
void RegisterBackgroundIndices(int &index_bg) override
Definition fluid.cpp:30
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 fluid.cpp:443
StressEnergyContribution StressEnergy(const BaseSpecies::PerturbLayout &layout, const perturb_vector *pv, const double *y, const double *pvecback, const perturb_workspace *ppw) const override
Definition fluid.cpp:246
void FillSources(const BaseSpecies::PerturbLayout &layout, const double *y, const double *dy, PerturbSourceContext &ctx) const override
Definition fluid.cpp:152
std::unique_ptr< BaseSpecies::PerturbLayout > CreatePerturbLayout() const override
Definition fluid.h:31
double Rho(const double *pvecback) const override
Definition fluid.cpp:84
virtual bool HyrecCplApproximation(double *w0, double *wa) const
Definition fluid.cpp:423
void WriteOutputColumns(PerturbColumnWriter &writer, const PerturbationsModule &mod, file_format fmt, TransferColumnSection section=TransferColumnSection::all) const override
Definition fluid.cpp:211
double W(const double *pvecback) const
Definition fluid.h:82
virtual double Cs2(double, double) const
Definition fluid.h:100
void PrintVariables(PerturbColumnWriter &writer, double tau, const double *y, const PerturbationsModule &mod, const perturb_workspace *ppw) const override
Definition fluid.cpp:225
double GetOmega0() const override
Definition fluid.h:43
void WriteBackgroundColumnTitles(BackgroundColumnWriter &w) const override
Definition fluid.cpp:101
void PerturbDerivs(const BaseSpecies::PerturbLayout &layout, double tau, const double *y, double *dy, const perturb_parameters_and_workspace &ppaw) const override
Definition fluid.cpp:122
void RegisterIntegrationIndices(int &index_bi) override
Definition fluid.cpp:37
void SetBackgroundInitialConditions(const BackgroundICContext &ctx) override
Definition fluid.cpp:46
void PerturbSynchronousToNewtonian(const BaseSpecies::PerturbLayout &layout, double *y, const PerturbIcContext &ctx) override
Definition fluid.cpp:433
void RegisterTransferSourceIndices(int &index_tp, const SourceRequestContext &ctx) override
Definition fluid.cpp:41
double P(const double *pvecback) const override
Definition fluid.cpp:88
double PPrime(double a, double H, const double *pvecback_B, const double *pvecback) const override
Definition fluid.cpp:92
void SetBackgroundModule(const BackgroundModule *bgm) override
Definition fluid.h:63
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: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