CLASSpp Manual
Cosmology reference and developer manual
Loading...
Searching...
No Matches
NCDMBaseSpecies Class Referenceabstract

#include <ncdm_base_species.h>

+ Inheritance diagram for NCDMBaseSpecies:

Data Structures

struct  DeferInit
 
struct  PerturbLayout
 

Public Member Functions

std::unique_ptr< BaseSpecies::PerturbLayoutCreatePerturbLayout () const override
 
double GetOmega0 () const override
 
bool ClustersAsMatter () const override
 
bool IsColdMatterSpecies () const override
 
double BackgroundAIni (double a_proposed, double tol) const override
 
void PrintNeffInfo () const override
 
void PrintMassInfo () const override
 
double NeutrinoOmega0 () const override
 
double NeffContribution (double z) const override
 
double TensorMasslessRelativisticRho (const double *pvecback) const override
 
void CheckUltraRelativisticAtIc (const double *pvecback, double tol) const override
 
bool IsUltraRelativisticAtIc (const double *pvecback, double tol) const override
 
void WarnIfTooHeavyForHalofit (double m_ev_threshold) const override
 
void SetBackgroundModule (const BackgroundModule *bgm) override
 
void SetPerturbs (const perturbs *ppt) override
 
void RegisterTransferSourceIndices (int &index_tp, const SourceRequestContext &ctx) override
 
void PerturbTensorDerivs (const BaseSpecies::PerturbLayout &layout, double tau, const double *y, double *dy, const perturb_parameters_and_workspace &ppaw) const override
 
void ContributeTensorGwSource (const BaseSpecies::PerturbLayout &layout, double a, const double *y, perturb_workspace *ppw) const override
 
void MarkUsedInSources (const BaseSpecies::PerturbLayout &layout, const perturb_workspace *ppw, int *used_in_sources) const override
 
void PerturbSynchronousToNewtonian (const BaseSpecies::PerturbLayout &layout, double *y, const PerturbIcContext &ctx) override
 
void CopyPerturbationsAcrossSwitch (const BaseSpecies::PerturbLayout &old_layout, const BaseSpecies::PerturbLayout &new_layout, const double *old_y, double *new_y, const PerturbSwitchContext &ctx) const override
 
- Public Member Functions inherited from BaseSpecies
virtual void SetThermodynamicsModule (const ThermodynamicsModule *)
 
virtual std::optional< double > GetParam (const std::string &) const
 
virtual void RegisterBackgroundIndices (int &index_bg)=0
 
virtual void RegisterIntegrationIndices (int &index_bi)
 
virtual void SetBackgroundInitialConditions (const BackgroundICContext &ctx)
 
virtual void ComputeBackground (double a, const double *pvecback_B, double *pvecback)=0
 
virtual void BackgroundDerivs (double tau, const double *y, double *dy, const double *pvecback)
 
virtual double Rho (const double *pvecback) const =0
 
virtual double P (const double *pvecback) const =0
 
virtual double PPrime (double a, double H, const double *pvecback_B, const double *pvecback) const
 
virtual void FinalizeBackground (double a, double H, const double *pvecback_B, double *pvecback)
 
virtual bool IsFreestreaming () const
 
virtual double FreestreamingRho (const double *pvecback) const
 
bool IsPresent () const
 
virtual void WriteBackgroundColumnTitles (BackgroundColumnWriter &) const
 
virtual void WriteBackgroundData (const double *, BackgroundColumnWriter &) const
 
virtual void ProcessBackgroundTable (const double *, int, int, const double *)
 
virtual void PerturbDerivs (const PerturbLayout &layout, double tau, const double *y, double *dy, const perturb_parameters_and_workspace &ppaw) const =0
 
virtual void PerturbVectorDerivs (const PerturbLayout &, double, const double *, double *, const perturb_parameters_and_workspace &) const
 
virtual void WriteTensorOutputColumnTitles (std::string &) const
 
virtual StressEnergyContribution StressEnergy (const PerturbLayout &layout, const perturb_vector *pv, const double *y, const double *pvecback, const perturb_workspace *ppw) const =0
 
virtual void WriteOutputColumns (PerturbColumnWriter &, const PerturbationsModule &, file_format, TransferColumnSection=TransferColumnSection::all) const
 
virtual void PrintVariables (PerturbColumnWriter &, double, const double *, const PerturbationsModule &, const perturb_workspace *) const
 
virtual void FillSources (const PerturbLayout &, const double *, const double *, PerturbSourceContext &) const
 
virtual void ApplyInitialConditions (const PerturbLayout &, double *, const PerturbIcContext &)
 
virtual double RhoDotOverRho (const double *pvecback, double a_prime_over_a) const
 
virtual double GetRadiationOmega0 () const
 
virtual double DarkRadiationRhoToday (const double *) const
 
bool ClustersAsMatterCached () const
 
virtual void FinalizeMatterClassification ()
 
virtual bool HasWarmMatter () const
 

Protected Member Functions

virtual double GetDlnf0Dlnq (int iq, const double *pvecback) const =0
 
virtual double GetW0ForGwSource (int iq, const double *pvecback) const
 
virtual double EvaluatePsdAnalytic (double q) const
 
virtual quadrature_method DefaultQuadratureStrategy () const
 
virtual void FillQuadratureParams (GBQuadParams &) const
 
void BuildQuadratureAndMass (const NcdmSettings &settings)
 
- Protected Member Functions inherited from BaseSpecies
void ApplyFluidLikeNewtonianShift (double *y, int idx_delta, int idx_theta, const double *pvecback, const PerturbIcContext &ctx) const
 

Additional Inherited Members

- Public Types inherited from BaseSpecies
enum class  EnergyType
 

Detailed Description

Abstract base for all NCDM flavors. Owns per-species quadrature, distribution function, and thermodynamic parameters. Subclasses implement the perturbation interface.


Data Structure Documentation

◆ NCDMBaseSpecies::DeferInit

struct NCDMBaseSpecies::DeferInit

Tag type selecting the deferred-init constructor: reads parameters but does NOT build quadrature or mass, so a subclass can set up an overridden PSD first and then call BuildQuadratureAndMass itself.

Member Function Documentation

◆ CreatePerturbLayout()

std::unique_ptr< BaseSpecies::PerturbLayout > NCDMBaseSpecies::CreatePerturbLayout ( ) const
inlineoverridevirtual

Produce a fresh layout for this species. Called once per pv during perturb_vector_init, before Register*PerturbationIndices. Default: empty base PerturbLayout (suitable for species with no perturbation slots, or as a placeholder during migration).

Reimplemented from BaseSpecies.

◆ GetOmega0()

double NCDMBaseSpecies::GetOmega0 ( ) const
overridevirtual

Returns the species' contribution to Omega0 (used for budget closure during construction). For composites, this defaults to summing children. For decay-product species starting at zero, override returning 0.

Implements BaseSpecies.

Reimplemented in WdmDecayProductSpecies.

◆ ClustersAsMatter()

bool NCDMBaseSpecies::ClustersAsMatter ( ) const
inlineoverridevirtual

NCDM (and DNCDM) are "warm" matter — they participate in delta_m but NOT in the delta_cb cold-matter tally. EnergyType::Other → both base defaults would return false, so both explicit overrides are needed.

Reimplemented from BaseSpecies.

◆ IsColdMatterSpecies()

bool NCDMBaseSpecies::IsColdMatterSpecies ( ) const
inlineoverridevirtual

True iff this sector participates in the cold-matter tally (delta_cb, theta_cb). Cold matter excludes NCDM/DNCDM (which are "warm" matter). Default: energy_type_ == EnergyType::Matter. Overrides: NCDMBaseSpecies returns false; composites scan children.

Reimplemented from BaseSpecies.

◆ BackgroundAIni()

double NCDMBaseSpecies::BackgroundAIni ( double  a_proposed,
double  tol 
) const
inlineoverridevirtual

NCDM may need to start integration earlier so it is relativistic at a_ini.

Reimplemented from BaseSpecies.

Reimplemented in WdmDecayProductSpecies.

◆ PrintNeffInfo()

void NCDMBaseSpecies::PrintNeffInfo ( ) const
overridevirtual

Verbose N_eff line (background_verbose). Default no-op; NCDM prints; composites forward to children.

Reimplemented from BaseSpecies.

Reimplemented in WdmDecayProductSpecies.

◆ PrintMassInfo()

void NCDMBaseSpecies::PrintMassInfo ( ) const
overridevirtual

Verbose mass/omega line (background_verbose). Default no-op; NCDM prints; composites forward to children.

Reimplemented from BaseSpecies.

Reimplemented in WdmDecayProductSpecies.

◆ NeutrinoOmega0()

double NCDMBaseSpecies::NeutrinoOmega0 ( ) const
inlineoverridevirtual

This species' contribution to Omega0 of the neutrino/NCDM sector (fnu). Default 0; NCDM returns GetOmega0(); composites sum children.

Reimplemented from BaseSpecies.

Reimplemented in WdmDecayProductSpecies.

◆ NeffContribution()

double NCDMBaseSpecies::NeffContribution ( double  ) const
inlineoverridevirtual

Contribution to N_eff at redshift z. Default 0; NCDM returns GetNeff(z); composites sum children.

Reimplemented from BaseSpecies.

Reimplemented in WdmDecayProductSpecies.

◆ TensorMasslessRelativisticRho()

double NCDMBaseSpecies::TensorMasslessRelativisticRho ( const double *  ) const
inlineoverridevirtual

Contribution to the tensor-mode "relativistic" density in the massless approximation. Default 0; NCDM returns 3*P; composites sum.

Reimplemented from BaseSpecies.

◆ CheckUltraRelativisticAtIc()

void NCDMBaseSpecies::CheckUltraRelativisticAtIc ( const double *  ,
double   
) const
overridevirtual

Initial-time ultra-relativistic check (throws via class_test on failure). Default no-op; NCDM checks |w-1/3|; composites forward to children.

Reimplemented from BaseSpecies.

Reimplemented in WdmDecayProductSpecies.

◆ IsUltraRelativisticAtIc()

bool NCDMBaseSpecies::IsUltraRelativisticAtIc ( const double *  ,
double   
) const
overridevirtual

Initial-time ultra-relativistic predicate. Default true; NCDM checks |w-1/3| <= tol; composites AND over children.

Reimplemented from BaseSpecies.

Reimplemented in WdmDecayProductSpecies.

◆ WarnIfTooHeavyForHalofit()

void NCDMBaseSpecies::WarnIfTooHeavyForHalofit ( double  ) const
overridevirtual

Warn (stdout) if this species is too heavy for Halofit/HMcode. The policy threshold is passed by the nonlinear module. Default no-op; NCDM compares its mass; composites forward.

Reimplemented from BaseSpecies.

◆ SetBackgroundModule()

void NCDMBaseSpecies::SetBackgroundModule ( const BackgroundModule *  )
inlineoverridevirtual

Called by BackgroundModule after construction to provide access to its indices (index_bg_a_, index_bg_H_, etc.) and background state. Species that need it override this; default is no-op.

Reimplemented from BaseSpecies.

◆ SetPerturbs()

void NCDMBaseSpecies::SetPerturbs ( const perturbs )
inlineoverridevirtual

Called by PerturbationsModule during construction to provide access to the perturbs struct (alpha_idm_dr, gauge, etc.). Default: no-op.

Reimplemented from BaseSpecies.

◆ RegisterTransferSourceIndices()

void NCDMBaseSpecies::RegisterTransferSourceIndices ( int &  ,
const SourceRequestContext  
)
overridevirtual

Register this species' transfer-source (index_tp) slots. Set once in perturb_indices_of_perturbs() before the k-loop; mirrors RegisterBackgroundIndices (k-independent, cached in a plain species member). Takes no PerturbLayout — that absence marks it as non-per-k state. Default: no-op (species that emit no transfer functions).

Reimplemented from BaseSpecies.

◆ PerturbTensorDerivs()

void NCDMBaseSpecies::PerturbTensorDerivs ( const BaseSpecies::PerturbLayout layout,
double  tau,
const double *  y,
double *  dy,
const perturb_parameters_and_workspace ppaw 
) const
overridevirtual

Tensor-mode Boltzmann hierarchy for NCDM species. Subclasses must provide GetDlnf0Dlnq to specialise the driving term (static table for NCDMSpecies; pvecback array for DNCDMSpecies).

Reimplemented from BaseSpecies.

◆ ContributeTensorGwSource()

void NCDMBaseSpecies::ContributeTensorGwSource ( const BaseSpecies::PerturbLayout layout,
double  a,
const double *  y,
perturb_workspace ppw 
) const
overridevirtual

Contributes this species' anisotropic-stress integral to ppw->gw_source. Uses the species's per-pv NCDMBaseSpecies::PerturbLayout slot.

Reimplemented from BaseSpecies.

◆ MarkUsedInSources()

void NCDMBaseSpecies::MarkUsedInSources ( const BaseSpecies::PerturbLayout layout,
const perturb_workspace ppw,
int *  used_in_sources 
) const
overridevirtual

NCDM multipoles l > 2 do not enter source functions.

Reimplemented from BaseSpecies.

◆ PerturbSynchronousToNewtonian()

void NCDMBaseSpecies::PerturbSynchronousToNewtonian ( const BaseSpecies::PerturbLayout ,
double *  ,
const PerturbIcContext  
)
overridevirtual

Transform this species' own perturbation variables from synchronous to Newtonian gauge, in place in y[]. Called by the module after alpha is known (ctx.alpha / ctx.alpha_prime filled). The synchronous IC is already in y[] (ApplyInitialConditions runs in both gauges), so this is a pure shift/re-seed. Default: no-op (species with no perturbed variables, e.g. cosmological constant).

Reimplemented from BaseSpecies.

Reimplemented in WdmDecayProductSpecies.

◆ CopyPerturbationsAcrossSwitch()

void NCDMBaseSpecies::CopyPerturbationsAcrossSwitch ( const BaseSpecies::PerturbLayout old_layout,
const BaseSpecies::PerturbLayout new_layout,
const double *  old_y,
double *  new_y,
const PerturbSwitchContext ctx 
) const
overridevirtual

Layout-shape-preserving slot-by-slot copy across a vector reallocation. Default for NCDM-family species with no approximation switches of their own: the vector is still reallocated (zero-initialized) whenever any OTHER species' approximation flips (TCA/RSA/...), so every species must migrate its slots or lose its hierarchy mid-integration (#372). Subclasses whose layout shape can change across a switch must override (NCDMSpecies' fluid-approximation collapse).

Reimplemented from BaseSpecies.

◆ GetDlnf0Dlnq()

virtual double NCDMBaseSpecies::GetDlnf0Dlnq ( int  iq,
const double *  pvecback 
) const
protectedpure virtual

Return d ln f_0 / d ln q for momentum bin iq. NCDMSpecies reads a static table; DNCDMSpecies reads pvecback. Used by PerturbTensorDerivs.

Implemented in DNCDMSpecies, and WdmDecayProductSpecies.

◆ GetW0ForGwSource()

double NCDMBaseSpecies::GetW0ForGwSource ( int  iq,
const double *  pvecback 
) const
protectedvirtual

Return the quadrature weight w_0[iq] for the GW source integral. NCDMBaseSpecies returns the static w_[iq]; DNCDMSpecies overrides.

Reimplemented in DNCDMSpecies.

◆ EvaluatePsdAnalytic()

double NCDMBaseSpecies::EvaluatePsdAnalytic ( double  q) const
protectedvirtual

Analytic PSD f0(q) for the non-file case. Base: Fermi-Dirac with chemical potential ksi_. GreyBodyNCDMSpecies overrides this.

Reimplemented in AxionNCDMSpecies, and GreyBodyNCDMSpecies.

◆ DefaultQuadratureStrategy()

virtual quadrature_method NCDMBaseSpecies::DefaultQuadratureStrategy ( ) const
inlineprotectedvirtual

Default quadrature strategy when the user leaves quadrature_strategy_ at qm_auto. Base: qm_auto (unchanged). GreyBodyNCDMSpecies returns a GB-specific method. Wired into InitQuadrature in Task 5.1; not consulted yet.

Reimplemented in GreyBodyNCDMSpecies.

◆ FillQuadratureParams()

virtual void NCDMBaseSpecies::FillQuadratureParams ( GBQuadParams ) const
inlineprotectedvirtual

Populate grey-body quadrature parameters. Base: leaves p.active == false.

Reimplemented in GreyBodyNCDMSpecies.

◆ BuildQuadratureAndMass()

void NCDMBaseSpecies::BuildQuadratureAndMass ( const NcdmSettings &  settings)
protected

Build perturbation/background quadrature and the dimensionless mass M_. Calls InitQuadrature (which dispatches the virtual PSD) then computes M_ from m_in_eV_. Call once, after the object is fully constructed.


The documentation for this class was generated from the following files: