CLASSpp Manual
Cosmology reference and developer manual
Loading...
Searching...
No Matches
dcdm_wdm_species.h
1#pragma once
2#include <memory>
3#include <string_view>
4#include <vector>
5
6#include "background.h"
7#include "composite_species.h"
8#include "dcdm.h"
9#include "species/shooting_target.h"
10#include "species/species_build_context.h"
11#include "wdm_decay_product.h"
12
13class BackgroundModule;
14
32 public:
33 static constexpr std::string_view kTypeName = "dcdm_wdm";
34
35 // Uses the generic CompositeSpecies::PerturbLayout (one owning sub-layout per
36 // child in children_ order) — required by the TallyStressEnergy/DelegateTally
37 // hot path (#358). Typed views below.
38 enum ChildIndex { kDcdm = 0, kWdm = 1 };
39 static const DCDMSpecies::PerturbLayout& dcdm_layout(const BaseSpecies::PerturbLayout& my) {
40 return static_cast<const DCDMSpecies::PerturbLayout&>(
41 *static_cast<const CompositeSpecies::PerturbLayout&>(my).child_layouts[kDcdm]);
42 }
43 static const NCDMBaseSpecies::PerturbLayout& wdm_layout(const BaseSpecies::PerturbLayout& my) {
44 return static_cast<const NCDMBaseSpecies::PerturbLayout&>(
45 *static_cast<const CompositeSpecies::PerturbLayout&>(my).child_layouts[kWdm]);
46 }
47
49 DCDM_WDM_Species(std::unique_ptr<WdmDecayProductSpecies> wdm,
50 const background* pba,
51 const BackgroundModule* bgm,
52 double omega0_combined,
53 double Omega_ini_dcdm);
54
55 static std::vector<Named> CreateAll(const SpeciesBuildContext& ctx);
56
57 void SetBackgroundModule(const BackgroundModule* bgm) override;
58
59 // Injection wiring (see class doc)
60 void ComputeBackground(double a, const double* pvecback_B, double* pvecback) override;
61 void BackgroundDerivs(double tau, const double* y, double* dy, const double* pvecback) override;
62
64 void WriteBackgroundData(const double* pvecback, BackgroundColumnWriter& w) const override;
65
69 double GetOmega0() const override;
70
71 // ── Shooter hooks ──────────────────────────────────────────────────────────
72 std::vector<ShootingTarget> GetShootingTargets() const override;
73 void ComputeShootingGuess(const SpeciesBuildContext& ctx,
74 std::vector<double>& guess,
75 std::vector<double>& dxdy) const override;
76 double ComputeShootingResidual(const ShootingResidualContext& ctx,
77 const ShootingTarget& target) const override;
78
79 // ── Perturbations ──────────────────────────────────────────────────────────
80 // Registration, derivs (children + AddCouplingDerivs), ICs, stress-energy and
81 // switch copies use the generic CompositeSpecies child loops. FillSources is
82 // overridden to also write the parent's transfer sources (DCDMSpecies itself
83 // has none — mirrors DCDM_DR).
84 void FillSources(const BaseSpecies::PerturbLayout& layout,
85 const double* y,
86 const double* dy,
87 PerturbSourceContext& ctx) const override;
89 PerturbColumnWriter& writer,
90 const PerturbationsModule& mod,
91 file_format fmt,
92 TransferColumnSection section = TransferColumnSection::all) const override;
93
94 DCDMSpecies& dcdm() {
95 return *dcdm_;
96 }
97 const DCDMSpecies& dcdm() const {
98 return *dcdm_;
99 }
101 return *wdm_;
102 }
103 const WdmDecayProductSpecies& wdm() const {
104 return *wdm_;
105 }
106
107 protected:
108 void AddCouplingDerivs(double tau,
109 const double* y,
110 double* dy,
111 const perturb_parameters_and_workspace& ppaw) const override;
112
113 private:
114 DCDMSpecies* dcdm_ = nullptr; // non-owning pointers into children_
115 WdmDecayProductSpecies* wdm_ = nullptr;
116 const background* pba_;
117 const BackgroundModule* bgm_ = nullptr;
118
119 ShootingTarget shooting_target_{};
120 bool needs_shooting_ = false;
121
122 // Scratch for BackgroundDerivs (background integration is single-threaded).
123 mutable std::vector<double> scratch_J_, scratch_dJ_;
124};
Definition base_species.h:32
Definition composite_species.h:26
Definition dcdm.h:13
Definition dcdm_wdm_species.h:31
void BackgroundDerivs(double tau, const double *y, double *dy, const double *pvecback) override
Definition dcdm_wdm_species.cpp:49
void WriteOutputColumns(PerturbColumnWriter &writer, const PerturbationsModule &mod, file_format fmt, TransferColumnSection section=TransferColumnSection::all) const override
Definition dcdm_wdm_species.cpp:277
void SetBackgroundModule(const BackgroundModule *bgm) override
Definition dcdm_wdm_species.cpp:34
void AddCouplingDerivs(double tau, const double *y, double *dy, const perturb_parameters_and_workspace &ppaw) const override
Definition dcdm_wdm_species.cpp:222
void FillSources(const BaseSpecies::PerturbLayout &layout, const double *y, const double *dy, PerturbSourceContext &ctx) const override
Definition dcdm_wdm_species.cpp:246
void WriteBackgroundData(const double *pvecback, BackgroundColumnWriter &w) const override
Definition dcdm_wdm_species.cpp:71
void ComputeBackground(double a, const double *pvecback_B, double *pvecback) override
Definition dcdm_wdm_species.cpp:43
void WriteBackgroundColumnTitles(BackgroundColumnWriter &w) const override
Definition dcdm_wdm_species.cpp:66
double GetOmega0() const override
Definition dcdm_wdm_species.cpp:81
Definition perturb_source_context.h:63
Definition wdm_decay_product.h:34
file_format
Definition precision.h:40
Definition base_species.h:89
Definition composite_species.h:36
Definition ncdm_base_species.h:50
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