CLASSpp Manual
Cosmology reference and developer manual
Loading...
Searching...
No Matches
dark_radiation_species.h
1#pragma once
2#include <memory>
3#include <string>
4
5#include "../species/base_species.h"
6#include "background.h"
7#include "perturbations.h"
8
9class BackgroundModule;
10
20 public:
21 // ── PerturbLayout ──────────────────────────────────────────────────────────
22 struct PerturbLayout : BaseSpecies::PerturbLayout {
23 int idx_F0 = -1;
24 int l_max = -1;
25 };
26
27 std::unique_ptr<BaseSpecies::PerturbLayout> CreatePerturbLayout() const override {
28 return std::make_unique<PerturbLayout>();
29 }
30
31 DarkRadiationSpecies(const std::string& name, const background* pba, const BackgroundModule* bgm)
32 : BaseSpecies(name, EnergyType::Radiation), pba_(pba), bgm_(bgm) {}
33
35 double GetOmega0() const override {
36 return 0.0;
37 }
38
39 bool IsFreestreaming() const override {
40 return true;
41 }
42
43 // ── Background ──────────────────────────────────────────────────────────────
44 void SetBackgroundModule(const BackgroundModule* bgm) override {
45 bgm_ = bgm;
46 }
47 void RegisterBackgroundIndices(int& index_bg) override;
48 void RegisterIntegrationIndices(int& index_bi) override;
49 void ComputeBackground(double a, const double* pvecback_B, double* pvecback) override;
50 void BackgroundDerivs(double tau, const double* y, double* dy, const double* pvecback) override;
51
52 double Rho(const double* pvecback) const override {
53 return pvecback[index_bg_rho_];
54 }
55 double P(const double* pvecback) const override {
56 return pvecback[index_bg_rho_] / 3.;
57 }
58 double PPrime(double a,
59 double H,
60 const double* /*pvecback_B*/,
61 const double* pvecback) const override {
62 return a * H * (-4. / 3. * pvecback[index_bg_rho_]);
63 }
64
65 // ── Perturbations ────────────────────────────────────────────────────────────
66 void RegisterPerturbationIndices(BaseSpecies::PerturbLayout& layout,
68 const precision* ppr,
69 int& index_pt,
70 const perturb_workspace* ppw,
71 int gauge) override;
72
74 double tau,
75 const double* y,
76 double* dy,
77 const perturb_parameters_and_workspace& ppaw) const override;
78
79 StressEnergyContribution StressEnergy(const BaseSpecies::PerturbLayout& layout,
80 const perturb_vector* pv,
81 const double* y,
82 const double* pvecback,
83 const perturb_workspace* ppw) const override;
84
86 double* y,
87 const PerturbIcContext& ctx) override;
88
91 void PerturbNewtonianReseed(const PerturbLayout& layout,
92 double* y,
93 const PerturbIcContext& ctx,
94 double decay_corr) const;
95
97 const BaseSpecies::PerturbLayout& new_layout,
98 const double* old_y,
99 double* new_y,
100 const PerturbSwitchContext& ctx) const override;
101
102 int bg_rho_index() const {
103 return index_bg_rho_;
104 }
105 int bi_rho_index() const {
106 return index_bi_rho_;
107 }
108 double DarkRadiationRhoToday(const double* pvecback_integration) const override {
109 return pvecback_integration[index_bi_rho_];
110 }
111 int pt_F0_index() const {
112 return index_pt_F0_;
113 }
114
115 void RegisterTransferSourceIndices(int& index_tp, const SourceRequestContext& ctx) override;
116 int transfer_delta_index() const {
117 return index_tp_delta_;
118 }
119 int transfer_theta_index() const {
120 return index_tp_theta_;
121 }
122
123 private:
124 const background* pba_;
125 const BackgroundModule* bgm_;
126
127 int index_bi_rho_ = -1;
128 int index_pt_F0_ = -1;
129 int index_tp_delta_ = -1; // #309 transfer-source slot
130 int index_tp_theta_ = -1;
131};
Definition base_species.h:76
EnergyType
Definition base_species.h:79
Definition dark_radiation_species.h:19
void PerturbDerivs(const BaseSpecies::PerturbLayout &layout, double tau, const double *y, double *dy, const perturb_parameters_and_workspace &ppaw) const override
Definition dark_radiation_species.cpp:56
void ApplyInitialConditions(const BaseSpecies::PerturbLayout &layout, double *y, const PerturbIcContext &ctx) override
Definition dark_radiation_species.cpp:137
void RegisterTransferSourceIndices(int &index_tp, const SourceRequestContext &ctx) override
Definition dark_radiation_species.cpp:37
void RegisterIntegrationIndices(int &index_bi) override
Definition dark_radiation_species.cpp:14
void PerturbNewtonianReseed(const PerturbLayout &layout, double *y, const PerturbIcContext &ctx, double decay_corr) const
Definition dark_radiation_species.cpp:160
void BackgroundDerivs(double tau, const double *y, double *dy, const double *pvecback) override
Definition dark_radiation_species.cpp:24
void ComputeBackground(double a, const double *pvecback_B, double *pvecback) override
Definition dark_radiation_species.cpp:18
void RegisterBackgroundIndices(int &index_bg) override
Definition dark_radiation_species.cpp:10
double Rho(const double *pvecback) const override
Definition dark_radiation_species.h:52
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 dark_radiation_species.cpp:179
double DarkRadiationRhoToday(const double *pvecback_integration) const override
Definition dark_radiation_species.h:108
double PPrime(double a, double H, const double *, const double *pvecback) const override
Definition dark_radiation_species.h:58
StressEnergyContribution StressEnergy(const BaseSpecies::PerturbLayout &layout, const perturb_vector *pv, const double *y, const double *pvecback, const perturb_workspace *ppw) const override
Definition dark_radiation_species.cpp:109
bool IsFreestreaming() const override
Definition dark_radiation_species.h:39
double GetOmega0() const override
Definition dark_radiation_species.h:35
void SetBackgroundModule(const BackgroundModule *bgm) override
Definition dark_radiation_species.h:44
double P(const double *pvecback) const override
Definition dark_radiation_species.h:55
std::unique_ptr< BaseSpecies::PerturbLayout > CreatePerturbLayout() const override
Definition dark_radiation_species.h:27
Definition perturbations.h:250
Definition perturbations.h:344
Definition base_species.h:89
Definition perturb_source_context.h:125
Definition perturb_source_context.h:159
Definition perturb_source_context.h:48
Definition perturbations_module.h:341
Definition precision.h:63