CLASSpp Manual
Cosmology reference and developer manual
Loading...
Searching...
No Matches
dcdm_dr_species.h
1#pragma once
2#include <string_view>
3
4#include "background.h"
5#include "composite_species.h"
6#include "dark_radiation_species.h"
7#include "dcdm.h"
8#include "species_build_context.h"
9
10class BackgroundModule;
11
23 public:
24 static constexpr std::string_view kTypeName = "dcdm_dr";
25
26 // Uses the generic CompositeSpecies::PerturbLayout (one owning sub-layout per
27 // child in children_ order): the base-class child loops — including the
28 // TallyStressEnergy/DelegateTally hot path — index child_layouts, so every
29 // composite layout must carry it (#358). Typed views below.
30 enum ChildIndex { kDcdm = 0, kDr = 1 }; // children_ order, set in the ctor
31 static const DCDMSpecies::PerturbLayout& dcdm_layout(const BaseSpecies::PerturbLayout& my) {
32 return static_cast<const DCDMSpecies::PerturbLayout&>(
33 *static_cast<const CompositeSpecies::PerturbLayout&>(my).child_layouts[kDcdm]);
34 }
35 static const DarkRadiationSpecies::PerturbLayout& dr_layout(
37 return static_cast<const DarkRadiationSpecies::PerturbLayout&>(
38 *static_cast<const CompositeSpecies::PerturbLayout&>(my).child_layouts[kDr]);
39 }
40
41 DCDM_DR_Species(const background* pba,
42 const BackgroundModule* bgm,
43 double omega0_dcdmdr,
44 double Gamma_dcdm,
45 double Omega_ini_dcdm);
46
47 void SetBackgroundModule(const BackgroundModule* bgm) override;
49 void WriteBackgroundData(const double* pvecback, BackgroundColumnWriter& w) const override;
51
52 // Override to add DCDM->DR decay source after children
53 void BackgroundDerivs(double tau, const double* y, double* dy, const double* pvecback) override;
54
55 // ── Perturbations ──────────────────────────────────────────────────────────
56 // Registration, derivs (children + AddCouplingDerivs), ICs, stress-energy and
57 // approximation-switch copies all use the generic CompositeSpecies child
58 // loops. Only composite-specific logic is overridden.
60 double* y,
61 const PerturbIcContext& ctx) override;
62
63 void FillSources(const BaseSpecies::PerturbLayout& layout,
64 const double* y,
65 const double* dy,
66 PerturbSourceContext& ctx) const override;
67
69 PerturbColumnWriter& writer,
70 const PerturbationsModule& mod,
71 file_format fmt,
72 TransferColumnSection section = TransferColumnSection::all) const override;
73
74 // Typed accessors so callers can capture child indices
75 DCDMSpecies& dcdm() {
76 return *dcdm_;
77 }
79 return *dr_sp_;
80 }
81 const DCDMSpecies& dcdm() const {
82 return *dcdm_;
83 }
84 const DarkRadiationSpecies& dr() const {
85 return *dr_sp_;
86 }
87
88 static std::vector<Named> CreateAll(const SpeciesBuildContext& ctx);
89
90 std::vector<ShootingTarget> GetShootingTargets() const override;
91 void ComputeShootingGuess(const SpeciesBuildContext& ctx,
92 std::vector<double>& guess,
93 std::vector<double>& dxdy) const override;
94 double ComputeShootingResidual(const ShootingResidualContext& ctx,
95 const ShootingTarget& target) const override;
96
97 protected:
98 void AddCouplingDerivs(double tau,
99 const double* y,
100 double* dy,
101 const perturb_parameters_and_workspace& ppaw) const override;
102
103 private:
104 DCDMSpecies* dcdm_ = nullptr; // non-owning pointer into children_
105 DarkRadiationSpecies* dr_sp_ = nullptr; // non-owning pointer into children_
106 const background* pba_;
107 const BackgroundModule* bgm_ = nullptr;
108
109 ShootingTarget shooting_target_{}; // unknown_param empty => no shooting target
110 bool needs_shooting_ = false; // true iff the direct unknown was absent (we guessed)
111};
Definition base_species.h:32
Definition composite_species.h:26
Definition dcdm.h:13
Definition dcdm_dr_species.h:22
void WriteBackgroundColumnTitles(BackgroundColumnWriter &w) const override
Definition dcdm_dr_species.cpp:28
void SetBackgroundModule(const BackgroundModule *bgm) override
Definition dcdm_dr_species.cpp:23
void WriteBackgroundData(const double *pvecback, BackgroundColumnWriter &w) const override
Definition dcdm_dr_species.cpp:33
void SetBackgroundInitialConditions(const BackgroundICContext &ctx) override
Definition dcdm_dr_species.cpp:38
void WriteOutputColumns(PerturbColumnWriter &writer, const PerturbationsModule &mod, file_format fmt, TransferColumnSection section=TransferColumnSection::all) const override
Definition dcdm_dr_species.cpp:156
void FillSources(const BaseSpecies::PerturbLayout &layout, const double *y, const double *dy, PerturbSourceContext &ctx) const override
Definition dcdm_dr_species.cpp:85
void PerturbSynchronousToNewtonian(const BaseSpecies::PerturbLayout &layout, double *y, const PerturbIcContext &ctx) override
Definition dcdm_dr_species.cpp:71
void BackgroundDerivs(double tau, const double *y, double *dy, const double *pvecback) override
Definition dcdm_dr_species.cpp:55
void AddCouplingDerivs(double tau, const double *y, double *dy, const perturb_parameters_and_workspace &ppaw) const override
Definition dcdm_dr_species.cpp:173
Definition dark_radiation_species.h:19
Definition perturb_source_context.h:63
file_format
Definition precision.h:40
Definition background_ic_context.h:11
Definition base_species.h:89
Definition composite_species.h:36
Definition perturb_source_context.h:125
Definition perturb_source_context.h:103
Definition shooting_target.h:7
Definition shooting_target.h:14
Definition species_build_context.h:58
Definition perturbations_module.h:341