CLASSpp Manual
Cosmology reference and developer manual
Loading...
Searching...
No Matches
ultra_relativistic.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
21 public:
22 static constexpr std::string_view kTypeName = "ur";
23
24 UltraRelativisticSpecies(const background& pba, double omega0_ur);
25
26 double GetOmega0() const override {
27 return Omega0_ur_;
28 }
29
31 double GetRadiationOmega0() const override {
32 return Omega0_ur_;
33 }
34
35 // ── Background ─────────────────────────────────────────────────────────────
36 void RegisterBackgroundIndices(int& index_bg) override;
37 void ComputeBackground(double a, const double* pvecback_B, double* pvecback) override;
38 double Rho(const double* pvecback) const override;
39 double P(const double* pvecback) const override;
40 double PPrime(double a,
41 double H,
42 const double* pvecback_B,
43 const double* pvecback) const override;
44
45 bool IsFreestreaming() const override {
46 return true;
47 }
49 void WriteBackgroundData(const double* pvecback, BackgroundColumnWriter& w) const override;
50
51 // ── Perturbations ──────────────────────────────────────────────────────────
52
53 void RegisterTransferSourceIndices(int& index_tp, const SourceRequestContext& ctx) override;
54
57 int idx_delta = -1;
58 int idx_theta = -1;
59 int idx_shear = -1;
60 int idx_l3 = -1;
61 int l_max = -1;
62 };
63
64 std::unique_ptr<BaseSpecies::PerturbLayout> CreatePerturbLayout() const override {
65 return std::make_unique<PerturbLayout>();
66 }
67
72 const precision* ppr,
73 int& index_pt,
74 const perturb_workspace* ppw,
75 int gauge) override;
77 double tau,
78 const double* y,
79 double* dy,
80 const perturb_parameters_and_workspace& ppaw) const override;
81
82 StressEnergyContribution StressEnergy(const BaseSpecies::PerturbLayout& layout,
83 const perturb_vector* pv,
84 const double* y,
85 const double* pvecback,
86 const perturb_workspace* ppw) const override;
87
88 void FillSources(const BaseSpecies::PerturbLayout& layout,
89 const double* y,
90 const double* dy,
91 PerturbSourceContext& ctx) const override;
92
94 double* y,
95 const PerturbIcContext& ctx) override;
96
98 double* y,
99 const PerturbIcContext& ctx) override;
100
103 const perturb_workspace* ppw,
104 int* used_in_sources) const override;
105
108 const BaseSpecies::PerturbLayout& new_layout,
109 const double* old_y,
110 double* new_y,
111 const PerturbSwitchContext& ctx) const override;
112
113 // ── Tensor mode ────────────────────────────────────────────────────────────
114 //
115 // The tensor "relativistic neutrino" hierarchy is NOT a UR-species concern: it
116 // is a single hierarchy sourced by the gravitational waves and shared by ur and
117 // massless-approximated ncdm. perturb_vector owns it (pv->tensor_ur_layout) and
118 // the perturbations module registers/evolves it directly, so URSpecies has no
119 // tensor index-registration or tensor-derivs overrides.
120
121 static std::vector<Named> CreateAll(const SpeciesBuildContext& ctx);
122
124 PerturbColumnWriter& writer,
125 const PerturbationsModule& mod,
126 file_format fmt,
127 TransferColumnSection section = TransferColumnSection::all) const override;
129 double tau,
130 const double* y,
131 const PerturbationsModule& mod,
132 const perturb_workspace* ppw) const override;
133
134 private:
135 double Omega0_ur_;
136 double H0_;
137
138 int index_tp_delta_ = -1; // #309 transfer-source slot
139 int index_tp_theta_ = -1;
140};
Definition base_species.h:32
Definition base_species.h:76
Definition perturb_source_context.h:63
Definition ultra_relativistic.h:20
bool IsFreestreaming() const override
Definition ultra_relativistic.h:45
double Rho(const double *pvecback) const override
Definition ultra_relativistic.cpp:29
void PrintVariables(PerturbColumnWriter &writer, double tau, const double *y, const PerturbationsModule &mod, const perturb_workspace *ppw) const override
Definition ultra_relativistic.cpp:343
std::unique_ptr< BaseSpecies::PerturbLayout > CreatePerturbLayout() const override
Definition ultra_relativistic.h:64
void WriteBackgroundColumnTitles(BackgroundColumnWriter &w) const override
Definition ultra_relativistic.cpp:44
void MarkUsedInSources(const BaseSpecies::PerturbLayout &layout, const perturb_workspace *ppw, int *used_in_sources) const override
Definition ultra_relativistic.cpp:386
void WriteBackgroundData(const double *pvecback, BackgroundColumnWriter &w) const override
Definition ultra_relativistic.cpp:48
void FillSources(const BaseSpecies::PerturbLayout &layout, const double *y, const double *dy, PerturbSourceContext &ctx) const override
Definition ultra_relativistic.cpp:251
void PerturbDerivs(const BaseSpecies::PerturbLayout &layout, double tau, const double *y, double *dy, const perturb_parameters_and_workspace &ppaw) const override
Definition ultra_relativistic.cpp:103
double GetOmega0() const override
Definition ultra_relativistic.h:26
double P(const double *pvecback) const override
Definition ultra_relativistic.cpp:33
void RegisterTransferSourceIndices(int &index_tp, const SourceRequestContext &ctx) override
Definition ultra_relativistic.cpp:55
double PPrime(double a, double H, const double *pvecback_B, const double *pvecback) const override
Definition ultra_relativistic.cpp:37
void PerturbSynchronousToNewtonian(const BaseSpecies::PerturbLayout &layout, double *y, const PerturbIcContext &ctx) override
Definition ultra_relativistic.cpp:290
void RegisterBackgroundIndices(int &index_bg) override
Definition ultra_relativistic.cpp:18
StressEnergyContribution StressEnergy(const BaseSpecies::PerturbLayout &layout, const perturb_vector *pv, const double *y, const double *pvecback, const perturb_workspace *ppw) const override
Definition ultra_relativistic.cpp:215
double GetRadiationOmega0() const override
Definition ultra_relativistic.h:31
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 ultra_relativistic.cpp:298
void RegisterPerturbationIndices(BaseSpecies::PerturbLayout &layout, perturb_vector *pv, const precision *ppr, int &index_pt, const perturb_workspace *ppw, int gauge) override
Definition ultra_relativistic.cpp:61
void WriteOutputColumns(PerturbColumnWriter &writer, const PerturbationsModule &mod, file_format fmt, TransferColumnSection section=TransferColumnSection::all) const override
Definition ultra_relativistic.cpp:324
void ApplyInitialConditions(const BaseSpecies::PerturbLayout &layout, double *y, const PerturbIcContext &ctx) override
Definition ultra_relativistic.cpp:237
void ComputeBackground(double a, const double *pvecback_B, double *pvecback) override
Definition ultra_relativistic.cpp:22
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 ultra_relativistic.h:56
int l_max
2 when ufa_on, else ppr->l_max_ur
Definition ultra_relativistic.h:61
int idx_l3
index_pt_l3_ur (only when ufa_off and l_max>=3)
Definition ultra_relativistic.h:60
int idx_delta
index_pt_delta_ur
Definition ultra_relativistic.h:57
int idx_shear
index_pt_shear_ur
Definition ultra_relativistic.h:59
int idx_theta
index_pt_theta_ur
Definition ultra_relativistic.h:58
Definition perturbations_module.h:341
Definition precision.h:63