CLASSpp Manual
Cosmology reference and developer manual
Loading...
Searching...
No Matches
ncdm_species.h
1#pragma once
2#include <memory>
3#include <string>
4#include <string_view>
5#include <vector>
6
7#include "../species/ncdm_base_species.h"
8#include "../species/species_build_context.h"
9#include "background.h"
10#include "perturbations.h"
11
12class BackgroundModule;
13
14class NCDMSpecies : public NCDMBaseSpecies {
15 public:
16 static constexpr std::string_view kTypeName = "ncdm_standard";
17
18 // New input path: parameters are read from PFC under <instance_name>.<field>.
19 NCDMSpecies(FileContent* pfc,
20 const std::string& instance_name,
21 const NcdmSettings& settings,
22 const background* pba,
23 const BackgroundModule* bgm);
24
25 static std::vector<Named> CreateAll(const SpeciesBuildContext& ctx);
26
27 bool IsFreestreaming() const override {
28 return true;
29 }
30
31 // ── Background ──────────────────────────────────────────────────────────
32 void RegisterBackgroundIndices(int& index_bg) override;
33 void RegisterIntegrationIndices(int& index_bi) override;
34 void ComputeBackground(double a, const double* pvecback_B, double* pvecback) override;
35 void BackgroundDerivs(double tau, const double* y, double* dy, const double* pvecback) override;
36
37 double Rho(const double* pvecback) const override {
38 return pvecback[index_bg_rho_];
39 }
40 double P(const double* pvecback) const override {
41 return pvecback[index_bg_p_];
42 }
43 double PPrime(double a,
44 double H,
45 const double* /*pvecback_B*/,
46 const double* pvecback) const override {
47 return a * H * (pvecback[index_bg_pseudo_p_] - 5. * pvecback[index_bg_p_]);
48 }
49
50 // ── Perturbations ────────────────────────────────────────────────────────
51
52 // Layout-based scalar register (implementation writes both layout and legacy pv arrays).
53 void RegisterPerturbationIndices(BaseSpecies::PerturbLayout& layout,
55 const precision* ppr,
56 int& index_pt,
57 const perturb_workspace* ppw,
58 int gauge) override;
59
61 double tau,
62 const double* y,
63 double* dy,
64 const perturb_parameters_and_workspace& ppaw) const override;
65
66 void FillSources(const BaseSpecies::PerturbLayout& layout,
67 const double* y,
68 const double* dy,
69 PerturbSourceContext& ctx) const override;
70
72 double* y,
73 const PerturbIcContext& ctx) override;
74
80 StressEnergyContribution StressEnergy(const BaseSpecies::PerturbLayout& layout,
81 const perturb_vector* pv,
82 const double* y,
83 const double* pvecback,
84 const perturb_workspace* ppw) const override;
85
86 // FA-collapse switch hook.
88 const BaseSpecies::PerturbLayout& new_layout,
89 const double* old_y,
90 double* new_y,
91 const PerturbSwitchContext& ctx) const override;
92
94 void WriteBackgroundData(const double* pvecback, BackgroundColumnWriter& w) const override;
96 const PerturbationsModule&,
98 TransferColumnSection) const override;
100 double,
101 const double*,
102 const PerturbationsModule&,
103 const perturb_workspace*) const override;
104 void WriteTensorOutputColumnTitles(std::string& tensor_titles) const override;
105
106 int bg_number_index() const {
107 return index_bg_number_;
108 }
109 int bg_pseudo_p_index() const {
110 return index_bg_pseudo_p_;
111 }
112
113 protected:
114 // Deferred-init constructor for subclasses (e.g. GreyBodyNCDMSpecies) that
115 // must configure an overridden PSD before quadrature is built.
116 NCDMSpecies(FileContent* pfc,
117 const std::string& instance_name,
118 const NcdmSettings& settings,
119 const background* pba,
120 const BackgroundModule* bgm,
122
123 // Standard-NCDM mass/Omega closure (factored out of the public constructor so
124 // GreyBodyNCDMSpecies can re-run it after rebuilding quadrature).
125 void ResolveMassOmegaClosure(const NcdmSettings& settings);
126
127 double GetDlnf0Dlnq(int iq, const double* /*pvecback*/) const override {
128 return dlnf0_dlnq_[iq];
129 }
130
131 const background* pba_;
132
133 int index_bg_number_ = -1;
134 int index_bg_pseudo_p_ = -1;
135 int index_pt_psi0_ = -1;
136};
Definition base_species.h:32
virtual void BackgroundDerivs(double tau, const double *y, double *dy, const double *pvecback)
Definition base_species.h:175
virtual void ApplyInitialConditions(const PerturbLayout &, double *, const PerturbIcContext &)
Definition base_species.h:449
virtual double PPrime(double a, double H, const double *pvecback_B, const double *pvecback) const
Definition base_species.h:188
virtual void FillSources(const PerturbLayout &, const double *, const double *, PerturbSourceContext &) const
Definition base_species.h:435
virtual void PrintVariables(PerturbColumnWriter &, double, const double *, const PerturbationsModule &, const perturb_workspace *) const
Definition base_species.h:419
virtual void RegisterIntegrationIndices(int &index_bi)
Definition base_species.h:154
virtual void ComputeBackground(double a, const double *pvecback_B, double *pvecback)=0
virtual void WriteBackgroundData(const double *, BackgroundColumnWriter &) const
Definition base_species.h:244
virtual void WriteBackgroundColumnTitles(BackgroundColumnWriter &) const
Definition base_species.h:236
virtual double P(const double *pvecback) const =0
virtual bool IsFreestreaming() const
Definition base_species.h:209
virtual void WriteOutputColumns(PerturbColumnWriter &, const PerturbationsModule &, file_format, TransferColumnSection=TransferColumnSection::all) const
Definition base_species.h:406
virtual void PerturbDerivs(const PerturbLayout &layout, double tau, const double *y, double *dy, const perturb_parameters_and_workspace &ppaw) const =0
virtual void RegisterBackgroundIndices(int &index_bg)=0
virtual double Rho(const double *pvecback) const =0
virtual void WriteTensorOutputColumnTitles(std::string &) const
Definition base_species.h:319
virtual StressEnergyContribution StressEnergy(const PerturbLayout &layout, const perturb_vector *pv, const double *y, const double *pvecback, const perturb_workspace *ppw) const =0
Definition parser.h:21
Definition ncdm_base_species.h:42
void CopyPerturbationsAcrossSwitch(const BaseSpecies::PerturbLayout &old_layout, const BaseSpecies::PerturbLayout &new_layout, const double *old_y, double *new_y, const PerturbSwitchContext &ctx) const override
Definition ncdm_base_species.cpp:729
virtual double GetDlnf0Dlnq(int iq, const double *pvecback) const =0
Definition ncdm_base_species.h:238
Definition perturb_source_context.h:63
Definition perturbations.h:250
Definition perturbations.h:344
file_format
Definition precision.h:40
Definition base_species.h:89
Definition perturb_source_context.h:125
Definition perturb_source_context.h:103
Definition perturb_source_context.h:159
Definition species_build_context.h:58
Definition perturbations_module.h:341
Definition precision.h:63