CLASSpp Manual
Cosmology reference and developer manual
Loading...
Searching...
No Matches
idm_dr_idr_species.h
1#pragma once
2#include <string_view>
3
4#include "background.h"
5#include "composite_species.h"
6#include "idm_dr.h"
7#include "idr.h"
8#include "species_build_context.h"
9
17 public:
18 static constexpr std::string_view kTypeName = "idm_dr_idr";
19
20 // Uses the generic CompositeSpecies::PerturbLayout (one owning sub-layout per
21 // child in children_ order): the base-class child loops — including the
22 // TallyStressEnergy/DelegateTally hot path — index child_layouts, so every
23 // composite layout must carry it (#358). Typed views below.
24 enum ChildIndex { kIdmDr = 0, kIdr = 1 }; // children_ order, set in the ctor
25 static const IDM_DRSpecies::PerturbLayout& idm_dr_layout(const BaseSpecies::PerturbLayout& my) {
26 return static_cast<const IDM_DRSpecies::PerturbLayout&>(
27 *static_cast<const CompositeSpecies::PerturbLayout&>(my).child_layouts[kIdmDr]);
28 }
29 static const IDRSpecies::PerturbLayout& idr_layout(const BaseSpecies::PerturbLayout& my) {
30 return static_cast<const IDRSpecies::PerturbLayout&>(
31 *static_cast<const CompositeSpecies::PerturbLayout&>(my).child_layouts[kIdr]);
32 }
33
34 IDM_DR_IDR_Species(const background& pba,
35 double omega0_idm_dr,
36 double omega0_idr,
37 double T_idr,
38 int l_max_idr,
39 double a_idm_dr,
40 double nindex_idm_dr,
41 double m_idm,
42 double b_idr,
43 int idr_nature,
44 std::vector<double> alpha_idm_dr,
45 std::vector<double> beta_idr);
46
47 IDM_DRSpecies& idm_dr() {
48 return *idm_dr_;
49 }
50 IDRSpecies& idr() {
51 return *idr_;
52 }
53 const IDM_DRSpecies& idm_dr() const {
54 return *idm_dr_;
55 }
56 const IDRSpecies& idr() const {
57 return *idr_;
58 }
59
63 bool has_idm_dr() const {
64 return has_idm_dr_;
65 }
66 bool has_idr() const {
67 return has_idr_;
68 }
69
70 void RegisterTransferSourceIndices(int& index_tp, const SourceRequestContext& ctx) override;
71
72 void SetPerturbs(const perturbs* ppt) override {
73 ppt_ = ppt;
75 }
76
80 const perturb_workspace* ppw,
81 int* used_in_sources) const override;
82
83 std::optional<double> GetParam(const std::string& name) const override;
84
86 void WriteBackgroundData(const double* pvecback, BackgroundColumnWriter& w) const override;
87
88 // ── Perturbations ──────────────────────────────────────────────────────────
89 // Registration, derivs (children + AddCouplingDerivs), stress-energy,
90 // sync->Newtonian and approximation-switch copies all use the generic
91 // CompositeSpecies child loops. Only composite-specific logic is overridden.
93 double* y,
94 const PerturbIcContext& ctx) override;
95
96 void FillSources(const BaseSpecies::PerturbLayout& layout,
97 const double* y,
98 const double* dy,
99 PerturbSourceContext& ctx) const override;
101 PerturbColumnWriter& writer,
102 const PerturbationsModule& mod,
103 file_format fmt,
104 TransferColumnSection section = TransferColumnSection::all) const override;
105
107 double tau,
108 const double* y,
109 const PerturbationsModule& mod,
110 const perturb_workspace* ppw) const override;
111
112 static std::vector<Named> CreateAll(const SpeciesBuildContext& ctx);
113
114 protected:
115 void AddCouplingDerivs(double tau,
116 const double* y,
117 double* dy,
118 const perturb_parameters_and_workspace& ppaw) const override;
119
120 private:
121 IDM_DRSpecies* idm_dr_ = nullptr;
122 IDRSpecies* idr_ = nullptr;
123 const background& pba_;
124 bool has_idm_dr_ = false;
125 bool has_idr_ = false;
126 const perturbs* ppt_ = nullptr;
127
128 int index_tp_delta_idm_dr_ = -1; // #309 transfer-source slots (composite-owned)
129 int index_tp_theta_idm_dr_ = -1;
130 int index_tp_delta_idr_ = -1;
131 int index_tp_theta_idr_ = -1;
132};
Definition base_species.h:32
Definition composite_species.h:26
void SetPerturbs(const perturbs *ppt) override
Definition composite_species.cpp:31
Definition idm_dr.h:10
Definition idm_dr_idr_species.h:16
void WriteBackgroundColumnTitles(BackgroundColumnWriter &w) const override
Definition idm_dr_idr_species.cpp:31
void ApplyInitialConditions(const BaseSpecies::PerturbLayout &layout, double *y, const PerturbIcContext &ctx) override
Definition idm_dr_idr_species.cpp:42
void WriteBackgroundData(const double *pvecback, BackgroundColumnWriter &w) const override
Definition idm_dr_idr_species.cpp:36
void SetPerturbs(const perturbs *ppt) override
Definition idm_dr_idr_species.h:72
void FillSources(const BaseSpecies::PerturbLayout &layout, const double *y, const double *dy, PerturbSourceContext &ctx) const override
Definition idm_dr_idr_species.cpp:75
void WriteOutputColumns(PerturbColumnWriter &writer, const PerturbationsModule &mod, file_format fmt, TransferColumnSection section=TransferColumnSection::all) const override
Definition idm_dr_idr_species.cpp:126
void PrintVariables(PerturbColumnWriter &writer, double tau, const double *y, const PerturbationsModule &mod, const perturb_workspace *ppw) const override
Definition idm_dr_idr_species.cpp:147
bool has_idm_dr() const
Definition idm_dr_idr_species.h:63
void RegisterTransferSourceIndices(int &index_tp, const SourceRequestContext &ctx) override
Definition idm_dr_idr_species.cpp:15
std::optional< double > GetParam(const std::string &name) const override
Definition idm_dr_idr_species.cpp:23
void AddCouplingDerivs(double tau, const double *y, double *dy, const perturb_parameters_and_workspace &ppaw) const override
Definition idm_dr_idr_species.cpp:248
void MarkUsedInSources(const BaseSpecies::PerturbLayout &layout, const perturb_workspace *ppw, int *used_in_sources) const override
Definition idm_dr_idr_species.cpp:564
Definition idr.h:14
Definition perturb_source_context.h:63
Definition perturbations.h:344
Definition perturbations.h:100
file_format
Definition precision.h:40
Definition base_species.h:89
Definition composite_species.h:36
Definition idr.h:107
Definition perturb_source_context.h:125
Definition perturb_source_context.h:103
Definition perturb_source_context.h:48
Definition species_build_context.h:58
Definition perturbations_module.h:341