9#include "shooting_target.h"
19#include "background_ic_context.h"
21#include "perturb_source_context.h"
23class BackgroundModule;
24class ThermodynamicsModule;
36 : dataptr_(dataptr), storeidx_(&storeidx) {}
38 bool IsTitleMode()
const {
39 return titles_ !=
nullptr;
42 void Add(
const char* title,
double value,
bool condition =
true) {
44 class_store_columntitle(*titles_, title, condition ?
true :
false);
47 class_store_double(dataptr_, value, condition ?
true :
false, (*storeidx_));
50 void Add(
const std::string& title,
double value,
bool condition =
true) {
51 Add(title.c_str(), value, condition);
55 std::string* titles_ =
nullptr;
56 double* dataptr_ =
nullptr;
57 int* storeidx_ =
nullptr;
79 enum class EnergyType { Radiation, Matter, DarkEnergy, Other };
80 enum class TransferColumnSection { all, density, velocity };
100 return std::make_unique<PerturbLayout>();
107 const std::string& name()
const {
137 virtual std::optional<double>
GetParam(
const std::string& )
const {
175 virtual void BackgroundDerivs(
double tau,
const double* y,
double* dy,
const double* pvecback) {}
178 virtual double Rho(
const double* pvecback)
const = 0;
181 virtual double P(
const double* pvecback)
const = 0;
190 const double* pvecback_B,
191 const double* pvecback)
const {
228 return index_bg_rho_ >= 0;
270 virtual void RegisterPerturbationIndices(PerturbLayout& ,
277 virtual void RegisterVectorPerturbationIndices(PerturbLayout& ,
284 virtual void RegisterTensorPerturbationIndices(PerturbLayout& ,
335 double delta_rho = 0.;
336 double rho_plus_p_theta = 0.;
338 double rho_plus_p_shear = 0.;
343 delta_rho += o.delta_rho;
344 rho_plus_p_theta += o.rho_plus_p_theta;
345 delta_p += o.delta_p;
346 rho_plus_p_shear += o.rho_plus_p_shear;
355 const double* pvecback,
369 const double* pvecback,
374 if (delegates_tally_) {
375 DelegateTally(layout, pv, y, pvecback, ppw, total, total_cold, total_warm);
382 if (clusters_as_matter_)
383 (is_cold_ ? total_cold : total_warm) += se;
388 virtual void DelegateTally(
const PerturbLayout& ,
393 StressEnergyContribution& ,
394 StressEnergyContribution& ,
395 StressEnergyContribution& )
const {}
408 const PerturbationsModule& ,
410 TransferColumnSection = TransferColumnSection::all)
const {}
422 const PerturbationsModule& ,
474 virtual double RhoDotOverRho(
const double* pvecback,
double a_prime_over_a)
const {
475 return -3. * a_prime_over_a * (
Rho(pvecback) +
P(pvecback)) /
Rho(pvecback);
493 virtual std::vector<ShootingTarget> GetShootingTargets()
const {
499 std::vector<double>& ,
500 std::vector<double>& )
const {}
521 virtual void MarkVectorUsedInSources(
const PerturbLayout& ,
525 virtual void MarkTensorUsedInSources(
const PerturbLayout& ,
601 return clusters_as_matter_;
603 bool IsColdCached()
const {
629 return energy_type_ == EnergyType::Matter;
639 return energy_type_ == EnergyType::Matter;
657 : name_(std::move(name)), energy_type_(energy_type) {}
667 const double* pvecback,
670 y[idx_delta] +=
RhoDotOverRho(pvecback, ctx.a_prime_over_a) * ctx.alpha;
672 y[idx_theta] += ctx.k * ctx.k * ctx.alpha;
681 bool clusters_as_matter_ =
false;
682 bool is_cold_ =
false;
683 bool delegates_tally_ =
false;
686 std::size_t collection_index_ = SIZE_MAX;
689 int index_bg_rho_ = -1;
690 int index_bg_p_ = -1;
700enum class BudgetBucket { Radiation, NonRelativistic, Ncdm, Other };
Definition base_species.h:32
Definition base_species.h:76
virtual void BackgroundDerivs(double tau, const double *y, double *dy, const double *pvecback)
Definition base_species.h:175
virtual double BackgroundAIni(double a_proposed, double) const
Definition base_species.h:594
virtual void ApplyInitialConditions(const PerturbLayout &, double *, const PerturbIcContext &)
Definition base_species.h:449
virtual void FinalizeBackground(double a, double H, const double *pvecback_B, double *pvecback)
Definition base_species.h:199
virtual bool HasWarmMatter() const
Definition base_species.h:651
bool ClustersAsMatterCached() const
Definition base_species.h:600
virtual double PPrime(double a, double H, const double *pvecback_B, const double *pvecback) const
Definition base_species.h:188
virtual void FinalizeMatterClassification()
Definition base_species.h:610
virtual double NeffContribution(double) const
Definition base_species.h:560
virtual void PerturbSynchronousToNewtonian(const PerturbLayout &, double *, const PerturbIcContext &)
Definition base_species.h:485
virtual double GetRadiationOmega0() const
Definition base_species.h:538
virtual void CopyPerturbationsAcrossSwitch(const PerturbLayout &, const PerturbLayout &, const double *, double *, const PerturbSwitchContext &) const
Definition base_species.h:459
virtual void SetPerturbs(const perturbs *)
Definition base_species.h:131
virtual std::unique_ptr< PerturbLayout > CreatePerturbLayout() const
Definition base_species.h:99
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 MarkUsedInSources(const PerturbLayout &, const perturb_workspace *, int *) const
Definition base_species.h:517
virtual void RegisterIntegrationIndices(int &index_bi)
Definition base_species.h:154
virtual void ComputeBackground(double a, const double *pvecback_B, double *pvecback)=0
virtual bool IsUltraRelativisticAtIc(const double *, double) const
Definition base_species.h:583
virtual bool ClustersAsMatter() const
Definition base_species.h:628
virtual double NeutrinoOmega0() const
Definition base_species.h:554
bool IsPresent() const
Definition base_species.h:227
virtual void WriteBackgroundData(const double *, BackgroundColumnWriter &) const
Definition base_species.h:244
virtual void SetThermodynamicsModule(const ThermodynamicsModule *)
Definition base_species.h:125
virtual double RhoDotOverRho(const double *pvecback, double a_prime_over_a) const
Definition base_species.h:474
virtual double GetOmega0() const =0
virtual void WriteBackgroundColumnTitles(BackgroundColumnWriter &) const
Definition base_species.h:236
virtual void PerturbTensorDerivs(const PerturbLayout &, double, const double *, double *, const perturb_parameters_and_workspace &) const
Definition base_species.h:312
virtual void ProcessBackgroundTable(const double *, int, int, const double *)
Definition base_species.h:251
virtual double P(const double *pvecback) const =0
virtual void SetBackgroundModule(const BackgroundModule *)
Definition base_species.h:119
virtual void RegisterTransferSourceIndices(int &, const SourceRequestContext &)
Definition base_species.h:267
virtual void CheckUltraRelativisticAtIc(const double *, double) const
Definition base_species.h:579
virtual bool IsFreestreaming() const
Definition base_species.h:209
virtual void PerturbVectorDerivs(const PerturbLayout &, double, const double *, double *, const perturb_parameters_and_workspace &) const
Definition base_species.h:305
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 PrintNeffInfo() const
Definition base_species.h:566
virtual void ContributeTensorGwSource(const PerturbLayout &, double, const double *, perturb_workspace *) const
Definition base_species.h:324
virtual double DarkRadiationRhoToday(const double *) const
Definition base_species.h:548
EnergyType
Definition base_species.h:79
virtual void RegisterBackgroundIndices(int &index_bg)=0
void ApplyFluidLikeNewtonianShift(double *y, int idx_delta, int idx_theta, const double *pvecback, const PerturbIcContext &ctx) const
Definition base_species.h:664
virtual bool IsColdMatterSpecies() const
Definition base_species.h:638
virtual std::optional< double > GetParam(const std::string &) const
Definition base_species.h:137
virtual double Rho(const double *pvecback) const =0
virtual void WriteTensorOutputColumnTitles(std::string &) const
Definition base_species.h:319
virtual double FreestreamingRho(const double *pvecback) const
Definition base_species.h:218
virtual double TensorMasslessRelativisticRho(const double *) const
Definition base_species.h:573
virtual StressEnergyContribution StressEnergy(const PerturbLayout &layout, const perturb_vector *pv, const double *y, const double *pvecback, const perturb_workspace *ppw) const =0
virtual void PrintMassInfo() const
Definition base_species.h:569
virtual void WarnIfTooHeavyForHalofit(double) const
Definition base_species.h:590
virtual void SetBackgroundInitialConditions(const BackgroundICContext &ctx)
Definition base_species.h:161
Definition perturb_source_context.h:63
Definition species_collection.h:33
Definition perturbations.h:250
Definition perturbations.h:344
Definition perturbations.h:100
file_format
Definition precision.h:40
Definition background_ic_context.h:11
Definition base_species.h:89
Definition base_species.h:332
Definition perturb_source_context.h:125
Definition perturb_source_context.h:103
Definition perturb_source_context.h:159
Definition shooting_target.h:7
Definition shooting_target.h:14
Definition perturb_source_context.h:48
Definition species_build_context.h:58
Definition perturbations_module.h:341
Definition precision.h:63