34 double (
Graybody::*
I)(double, double, double)
const;
37 double (
Graybody::*
I2)(double, double, double, double, double)
const;
43 double flux(
double nu,
void *fd) {
44 auto &p = *
static_cast<const FluxData*
>(fd);
45 return (p.I2 ? (p.g->*(p.I2))(nu, p.Tc, p.Sigmac, p.Th, p.Sigmah) :
46 (p.g->*(p.I ))(nu, p.Tc, p.Sigmac)) *
47 (p.d ? p.d->response(nu) : 1.0);
56 double T,
double Sigma,
const Detector *detect,
59 std::pair<double, double> freqRange =
63 double result, abserr;
66 gsl_integration_qag(&f, freqRange.first, freqRange.second,
74 double (
Graybody::*I)(
double,
double,
double,
double,
double)
const,
75 double Tc,
double Sigmac,
double Th,
double Sigmah,
76 const Detector *detect,
double sr)
const 78 std::pair<double, double> freqRange =
80 std::pair<double,double>{0.0, 12.0*
k_Boltzman*std::max(Tc, Th)/
94 freqRange.first, freqRange.second, 0.1*
err_);
gsl_integration_workspace * integ_
Integration workspace.
static constexpr int intKey
Integration rule key.
constexpr double h_Planck
Planck's constant (erg*s).
MathUtils numerical mathematics library.
double(Graybody::* I)(double, double, double) const
Single-temperature graybody intensity method.
double Sigmah
Halo surface density (optional).
double err_
Integration relative error.
double Th
Halo temperature (optional).
double Tc
Core temperature.
constexpr double k_Boltzman
Planck's constant (erg/K).
static constexpr size_t subLimit
Integral subdivision limit.
double flux(double nu, void *fd)
Flux density integrand.
const Detector * d
Detector instance (may be nullptr).
Parameters required by flux().
double Itot(double(Graybody::*I)(double, double, double) const, double T, double Sigma, const Detector *detect=nullptr, double sr=1.0) const
Single-temperature graybody integrated flux variant (erg/cm^2/s/??).
virtual std::pair< double, double > freqRange() const noexcept
Frequency range containing significant response.
const Graybody * g
Graybody instance.
double Sigmac
Core mass surface density.
double(Graybody::* I2)(double, double, double, double, double) const
Two-temperature graybody intensity method.
double Itot2(double(Graybody::*I)(double, double, double, double, double) const, double Tc, double Sigmac, double Th=0.0, double Sigmah=0.0, const Detector *detect=nullptr, double sr=1.0) const
Two-temperature graybody integrated flux variant (erg/cm^2/s/??).
double kgauss_r(double(*f_r)(double x, void *), void *fdata, double a, double b, double err)