CLASSpp Manual
Cosmology reference and developer manual
Loading...
Searching...
No Matches
dncdm_dr_species.h
1#pragma once
2#include <memory>
3#include <vector>
4
5#include "background.h"
6#include "composite_species.h"
7#include "dark_radiation_species.h"
8#include "dncdm_species.h"
9#include "parser.h"
10#include "species/shooting_target.h"
11#include "species/species_build_context.h"
12
13class BackgroundModule;
14
19 public:
20 // ── PerturbLayout ──────────────────────────────────────────────────────────
21 // Uses the generic CompositeSpecies::PerturbLayout (one owning sub-layout per
22 // child in children_ order): the base-class child loops — including the
23 // TallyStressEnergy/DelegateTally hot path — index child_layouts, so every
24 // composite layout must carry it (#358). Typed views below.
25 enum ChildIndex { kDncdm = 0, kDr = 1 }; // children_ order, set in the ctor
26 static const NCDMBaseSpecies::PerturbLayout& dncdm_layout(const BaseSpecies::PerturbLayout& my) {
27 return static_cast<const NCDMBaseSpecies::PerturbLayout&>(
28 *static_cast<const CompositeSpecies::PerturbLayout&>(my).child_layouts[kDncdm]);
29 }
30 static const DarkRadiationSpecies::PerturbLayout& dr_layout(
32 return static_cast<const DarkRadiationSpecies::PerturbLayout&>(
33 *static_cast<const CompositeSpecies::PerturbLayout&>(my).child_layouts[kDr]);
34 }
35
36 // Takes ownership of a pre-built DNCDMSpecies (from DNCDMSpecies::CreateAll)
37 DNCDM_DR_Species(std::unique_ptr<DNCDMSpecies> dncdm,
38 const background* pba,
39 const BackgroundModule* bgm);
40
41 static std::vector<Named> CreateAll(const SpeciesBuildContext& ctx);
42
43 // ── Shooter hooks ──────────────────────────────────────────────────────────
44 std::vector<ShootingTarget> GetShootingTargets() const override;
45 void ComputeShootingGuess(const SpeciesBuildContext& ctx,
46 std::vector<double>& guess,
47 std::vector<double>& dxdy) const override;
48 double ComputeShootingResidual(const ShootingResidualContext& ctx,
49 const ShootingTarget& target) const override;
50
51 void SetBackgroundModule(const BackgroundModule* bgm) override;
53
54 // Override to add DNCDM->DR decay source after children
55 void BackgroundDerivs(double tau, const double* y, double* dy, const double* pvecback) override;
56
60 void WriteBackgroundData(const double* pvecback, BackgroundColumnWriter& w) const override {
61 dncdm_->WriteBackgroundData(pvecback, w);
62 }
63
68 double GetOmega0() const override;
69
70 DNCDMSpecies& dncdm() {
71 return *dncdm_;
72 }
73 const DNCDMSpecies& dncdm() const {
74 return *dncdm_;
75 }
77 return *dr_sp_;
78 }
79 const DarkRadiationSpecies& dr() const {
80 return *dr_sp_;
81 }
82
83 // ── Perturbations ──────────────────────────────────────────────────────────
84 // PerturbDerivs (children + AddCouplingDerivs), ICs, stress-energy and
85 // approximation-switch copies all use the generic CompositeSpecies child
86 // loops. Registration stays overridden for its DR-first slot ordering.
87 void RegisterPerturbationIndices(BaseSpecies::PerturbLayout& layout,
89 const precision* ppr,
90 int& index_pt,
91 const perturb_workspace* ppw,
92 int gauge) override;
93
95 double tau,
96 const double* y,
97 double* dy,
98 const perturb_parameters_and_workspace& ppaw) const override;
99
101 double* y,
102 const PerturbIcContext& ctx) override;
103
104 void FillSources(const BaseSpecies::PerturbLayout& layout,
105 const double* y,
106 const double* dy,
107 PerturbSourceContext& ctx) const override;
108
110 PerturbColumnWriter& writer,
111 const PerturbationsModule& mod,
112 file_format fmt,
113 TransferColumnSection section = TransferColumnSection::all) const override;
114
115 protected:
116 void AddCouplingDerivs(double tau,
117 const double* y,
118 double* dy,
119 const perturb_parameters_and_workspace& ppaw) const override;
120
121 private:
122 DNCDMSpecies* dncdm_ = nullptr;
123 DarkRadiationSpecies* dr_sp_ = nullptr;
124 const background* pba_;
125 const BackgroundModule* bgm_ = nullptr;
126};
Definition base_species.h:32
Definition composite_species.h:26
Definition dncdm_species.h:22
void WriteBackgroundData(const double *pvecback, BackgroundColumnWriter &w) const override
Definition dncdm_species.cpp:431
void WriteBackgroundColumnTitles(BackgroundColumnWriter &w) const override
Definition dncdm_species.cpp:418
Definition dncdm_dr_species.h:18
void BackgroundDerivs(double tau, const double *y, double *dy, const double *pvecback) override
Definition dncdm_dr_species.cpp:42
void AddCouplingDerivs(double tau, const double *y, double *dy, const perturb_parameters_and_workspace &ppaw) const override
Definition dncdm_dr_species.cpp:101
void WriteOutputColumns(PerturbColumnWriter &writer, const PerturbationsModule &mod, file_format fmt, TransferColumnSection section=TransferColumnSection::all) const override
Definition dncdm_dr_species.cpp:276
void WriteBackgroundData(const double *pvecback, BackgroundColumnWriter &w) const override
Definition dncdm_dr_species.h:60
void SetBackgroundInitialConditions(const BackgroundICContext &ctx) override
Definition dncdm_dr_species.cpp:38
void PerturbTensorDerivs(const BaseSpecies::PerturbLayout &layout, double tau, const double *y, double *dy, const perturb_parameters_and_workspace &ppaw) const override
Definition dncdm_dr_species.cpp:74
void SetBackgroundModule(const BackgroundModule *bgm) override
Definition dncdm_dr_species.cpp:33
void PerturbSynchronousToNewtonian(const BaseSpecies::PerturbLayout &layout, double *y, const PerturbIcContext &ctx) override
Definition dncdm_dr_species.cpp:84
void WriteBackgroundColumnTitles(BackgroundColumnWriter &w) const override
Definition dncdm_dr_species.h:57
double GetOmega0() const override
Definition dncdm_dr_species.cpp:295
void FillSources(const BaseSpecies::PerturbLayout &layout, const double *y, const double *dy, PerturbSourceContext &ctx) const override
Definition dncdm_dr_species.cpp:228
Definition dark_radiation_species.h:19
Definition perturb_source_context.h:63
Definition perturbations.h:250
Definition perturbations.h:344
file_format
Definition precision.h:40
Definition background_ic_context.h:11
Definition base_species.h:89
Definition composite_species.h:36
Definition ncdm_base_species.h:50
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
Definition precision.h:63