CLASSpp Manual
Cosmology reference and developer manual
Loading...
Searching...
No Matches
idm_drmd_idr_drmd_species.h
1#pragma once
2#include <string_view>
3
4#include "background.h"
5#include "composite_species.h"
6#include "idm_drmd.h"
7#include "idr_drmd.h"
8#include "species_build_context.h"
9
10class IDM_DRMD_IDR_DRMD_Species : public CompositeSpecies {
11 public:
12 static constexpr std::string_view kTypeName = "idm_drmd_idr_drmd";
13
14 // Uses the generic CompositeSpecies::PerturbLayout (one owning sub-layout per
15 // child in children_ order): the base-class child loops — including the
16 // TallyStressEnergy/DelegateTally hot path — index child_layouts, so every
17 // composite layout must carry it (#358). Typed views below.
18 enum ChildIndex { kIdmDrmd = 0, kIdrDrmd = 1 }; // children_ order, set in the ctor
19 static const IDM_DRMDSpecies::PerturbLayout& idm_drmd_layout(
21 return static_cast<const IDM_DRMDSpecies::PerturbLayout&>(
22 *static_cast<const CompositeSpecies::PerturbLayout&>(my).child_layouts[kIdmDrmd]);
23 }
24 static const IDR_DRMDSpecies::PerturbLayout& idr_drmd_layout(
26 return static_cast<const IDR_DRMDSpecies::PerturbLayout&>(
27 *static_cast<const CompositeSpecies::PerturbLayout&>(my).child_layouts[kIdrDrmd]);
28 }
29
30 IDM_DRMD_IDR_DRMD_Species(const background& pba,
31 double omega0_idm_drmd,
32 double omega0_idr_drmd,
33 double f_idm_drmd,
34 double G_over_aH_drmd,
35 double delta_Neff_drmd,
36 double z_stop);
37
38 double f_idm_drmd() const {
39 return f_idm_drmd_;
40 }
41 double G_over_aH_drmd() const {
42 return G_over_aH_drmd_;
43 }
44 double delta_Neff_drmd() const {
45 return delta_Neff_drmd_;
46 }
47 double z_stop() const {
48 return z_stop_;
49 }
50
51 IDM_DRMDSpecies& idm_drmd() {
52 return *idm_drmd_;
53 }
54 IDR_DRMDSpecies& idr_drmd() {
55 return *idr_drmd_;
56 }
57 const IDM_DRMDSpecies& idm_drmd() const {
58 return *idm_drmd_;
59 }
60 const IDR_DRMDSpecies& idr_drmd() const {
61 return *idr_drmd_;
62 }
63
67 bool has_idm_drmd() const {
68 return has_idm_drmd_;
69 }
70 bool has_idr_drmd() const {
71 return has_idr_drmd_;
72 }
73
74 int bg_G_over_aH_index() const {
75 return index_bg_G_over_aH_drmd_;
76 }
77 double f_idr_drmd() const {
78 return f_idr_drmd_;
79 }
80 double Gamma0_drmd_ic() const {
81 return Gamma0_drmd_ic_;
82 }
83 double z_dec_drmd() const {
84 return z_dec_drmd_;
85 }
86
87 void RegisterBackgroundIndices(int& index_bg) override;
88 void ComputeIdmDrmd(
89 double a, double rho_idm_over_rho_idr, double* Rint, double* csp2, double* Gint) const;
90 void InitializeDrmdBackground(double rho_tot, double H, double a, const double* pvecback);
91 void FinalizeBackground(double a, double H, const double* pvecback_B, double* pvecback) override;
92 void ProcessBackgroundTable(const double* background_table,
93 int n_rows,
94 int row_stride,
95 const double* z_table) override;
96
98 void WriteBackgroundData(const double* pvecback, BackgroundColumnWriter& w) const override;
99
100 void RegisterTransferSourceIndices(int& index_tp, const SourceRequestContext& ctx) override;
101
102 // ── Perturbations ──────────────────────────────────────────────────────────
103 // Registration, derivs (children + AddCouplingDerivs), stress-energy,
104 // sync->Newtonian and approximation-switch copies all use the generic
105 // CompositeSpecies child loops. Only composite-specific logic is overridden.
107 double* y,
108 const PerturbIcContext& ctx) override;
109
110 void FillSources(const BaseSpecies::PerturbLayout& layout,
111 const double* y,
112 const double* dy,
113 PerturbSourceContext& ctx) const override;
115 PerturbColumnWriter& writer,
116 const PerturbationsModule& mod,
117 file_format fmt,
118 TransferColumnSection section = TransferColumnSection::all) const override;
119
121 double tau,
122 const double* y,
123 const PerturbationsModule& mod,
124 const perturb_workspace* ppw) const override;
125
126 static std::vector<Named> CreateAll(const SpeciesBuildContext& ctx);
127
128 protected:
129 void AddCouplingDerivs(double tau,
130 const double* y,
131 double* dy,
132 const perturb_parameters_and_workspace& ppaw) const override;
133
134 void SetBackgroundModule(const BackgroundModule* bgm) override {
135 bgm_ = bgm;
137 }
138
139 private:
140 IDM_DRMDSpecies* idm_drmd_ = nullptr;
141 IDR_DRMDSpecies* idr_drmd_ = nullptr;
142 const background& pba_;
143 const BackgroundModule* bgm_ = nullptr;
144 bool has_idm_drmd_ = false;
145 bool has_idr_drmd_ = false;
146 double f_idm_drmd_ = 0.;
147 double G_over_aH_drmd_ = 0.;
148 double delta_Neff_drmd_ = 0.;
149 double z_stop_ = 0.;
150
151 int index_tp_delta_idm_drmd_ = -1; // #309 transfer-source slots (composite-owned)
152 int index_tp_theta_idm_drmd_ = -1;
153 int index_tp_delta_idr_drmd_ = -1;
154 int index_tp_theta_idr_drmd_ = -1;
155
156 int index_bg_G_over_aH_drmd_ = -1; // bg-table slot (this species owns it)
157 double Gamma0_drmd_ic_ = 0.; // interaction rate today, computed at IC time
158 double f_idr_drmd_ = 0.; // idr/rho_tot fraction at IC (verbose diagnostic)
159 double z_dec_drmd_ = -1.0; // decoupling redshift (G_over_aH closest to 1); -1 = none
160 double G_over_aH_tmp_ = 1e20; // running |G_over_aH - 1| scan tracker
161};
Definition base_species.h:32
virtual void PrintVariables(PerturbColumnWriter &, double, const double *, const PerturbationsModule &, const perturb_workspace *) const
Definition base_species.h:419
virtual void WriteBackgroundData(const double *, BackgroundColumnWriter &) const
Definition base_species.h:244
virtual void WriteBackgroundColumnTitles(BackgroundColumnWriter &) const
Definition base_species.h:236
virtual void ProcessBackgroundTable(const double *, int, int, const double *)
Definition base_species.h:251
virtual void WriteOutputColumns(PerturbColumnWriter &, const PerturbationsModule &, file_format, TransferColumnSection=TransferColumnSection::all) const
Definition base_species.h:406
Definition composite_species.h:26
void FinalizeBackground(double a, double H, const double *pvecback_B, double *pvecback) override
Definition composite_species.cpp:54
virtual void AddCouplingDerivs(double tau, const double *y, double *dy, const perturb_parameters_and_workspace &ppaw) const
Definition composite_species.cpp:196
void RegisterTransferSourceIndices(int &index_tp, const SourceRequestContext &ctx) override
Definition composite_species.cpp:15
void RegisterBackgroundIndices(int &index_bg) override
Definition composite_species.cpp:5
void FillSources(const BaseSpecies::PerturbLayout &layout, const double *y, const double *dy, PerturbSourceContext &ctx) const override
Definition composite_species.cpp:164
void SetBackgroundModule(const BackgroundModule *bgm) override
Definition composite_species.cpp:21
void ApplyInitialConditions(const BaseSpecies::PerturbLayout &layout, double *y, const PerturbIcContext &ctx) override
Definition composite_species.cpp:112
Definition idm_drmd.h:9
Definition idr_drmd.h:9
Definition perturb_source_context.h:63
Definition perturbations.h:344
file_format
Definition precision.h:40
Definition base_species.h:89
Definition composite_species.h:36
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