46 static constexpr
double Tcmb = 2.73;
53 hacc_{gsl_interp_accel_alloc()},
cacc_{gsl_interp_accel_alloc()} { }
61 hacc_{gsl_interp_accel_alloc()},
cacc_{gsl_interp_accel_alloc()} { }
66 hacc_{gsl_interp_accel_alloc()},
cacc_{gsl_interp_accel_alloc()} { }
70 gsl_interp_accel_free(
hacc_);
71 gsl_interp_accel_free(
cacc_);
77 double Bnu(
double nu,
double T)
const 83 double dBnu_dT(
double nu,
double T)
const {
85 return B0*nu*nu*nu*(em1+1.0)*x/(em1*em1*T);
92 double Inu(
double nu,
double T,
double Sigma)
const {
93 double em1 = expm1(-
dust_.first.kappa(nu,
hacc_)*Sigma);
102 double dInu_dT(
double nu,
double T,
double Sigma)
const 110 double dInu_dS(
double nu,
double T,
double Sigma)
const {
112 return kappa*exp(-kappa*Sigma)*(
Bnu(nu, T)-(
CMB ?
Bnu(nu,
Tcmb) : 0.0));
121 double Inu(
double nu,
double Tc,
double Sigmac,
122 double Th,
double Sigmah)
const 126 ehm1 = expm1(-kappah*Sigmah), eh = 1.0 + ehm1,
127 ecm1 = expm1(-kappac*Sigmac), ec = 1.0 + ecm1;
128 return -ehm1*(1.0+eh*ec)*
Bnu(nu, Th)-ecm1*eh*
Bnu(nu, Tc);
138 double dInu_dTc(
double nu,
double Tc,
double Sigmac,
139 double Th,
double Sigmah)
const {
143 return -expm1(-kappac*Sigmac)*exp(-kappah*Sigmah)*
dBnu_dT(nu, Tc);
153 double dInu_dSc(
double nu,
double Tc,
double Sigmac,
154 double Th,
double Sigmah)
const {
157 return kappac*exp(-(kappah*Sigmah+kappac*Sigmac)) *
158 (expm1(-kappah*Sigmah)*
Bnu(nu, Th) +
Bnu(nu, Tc));
168 double dInu_dTh(
double nu,
double Tc,
double Sigmac,
169 double Th,
double Sigmah)
const {
173 ehc = exp(-(kappah*Sigmah+kappac*Sigmac));
174 return -expm1(-kappah*Sigmah)*(1.0+ehc)*
dBnu_dT(nu, Th);
184 double dInu_dSh(
double nu,
double Tc,
double Sigmac,
185 double Th,
double Sigmah)
const {
188 ehm1 = expm1(-kappah*Sigmah), eh = 1.0 + ehm1,
189 ecm1 = expm1(-kappac*Sigmac), ec = 1.0 + ecm1;
190 return kappah*eh*((2.0*eh*ec-ecm1)*
Bnu(nu, Th)+ecm1*
Bnu(nu, Tc));
198 double F(
double T,
double Sigma,
199 const Detector *detect,
double sr = 1.0)
const 207 double dF_dT(
double T,
double Sigma,
208 const Detector *detect,
double sr = 1.0)
const 216 double dF_dS(
double T,
double Sigma,
217 const Detector *detect,
double sr = 1.0)
const 227 double F(
double Tc,
double Sigmac,
double Th,
double Sigmah,
228 const Detector *detect,
double sr = 1.0)
const 238 double dF_dTc(
double Tc,
double Sigmac,
double Th,
double Sigmah,
239 const Detector *detect,
double sr = 1.0)
const 249 double dF_dSc(
double Tc,
double Sigmac,
double Th,
double Sigmah,
250 const Detector *detect,
double sr = 1.0)
const 260 double dF_dTh(
double Tc,
double Sigmac,
double Th,
double Sigmah,
261 const Detector *detect,
double sr = 1.0)
const 271 double dF_dSh(
double Tc,
double Sigmac,
double Th,
double Sigmah,
272 const Detector *detect,
double sr = 1.0)
const 282 double Itot(
double (
Graybody::*I)(
double,
double,
double)
const,
283 double T,
double Sigma,
284 const Detector *detect,
double sr = 1.0)
const;
294 double Itot2(
double (
Graybody::*I)(
double,
double,
double,
double,
double)
const,
295 double Tc,
double Sigmac,
double Th,
double Sigmah,
296 const Detector *detect,
double sr = 1.0)
const;
double dInu_dTh(double nu, double Tc, double Sigmac, double Th, double Sigmah) const
Two-temperature graybody specific intensity Th-derivative (erg/cm^2/s/Hz/sr/K).
constexpr double h_Planck
Planck's constant (erg*s).
static constexpr double Tcmb
CMB temperature (K).
double Inu(double nu, double Tc, double Sigmac, double Th, double Sigmah) const
Two-temperature graybody specific intensity (erg/cm^2/s/Hz/sr).
double err_
Integration relative error.
double dInu_dTc(double nu, double Tc, double Sigmac, double Th, double Sigmah) const
Two-temperature graybody specific intensity Tc-derivative (erg/cm^2/s/Hz/sr/K).
double F(double Tc, double Sigmac, double Th, double Sigmah, const Detector *detect, double sr=1.0) const
Two-temperature graybody integrated flux (erg/cm^2/s).
constexpr double k_Boltzman
Planck's constant (erg/K).
double dF_dSh(double Tc, double Sigmac, double Th, double Sigmah, const Detector *detect, double sr=1.0) const
Two-temperature graybody integrated flux Sigmah-derivative (erg/s/g).
double dF_dTh(double Tc, double Sigmac, double Th, double Sigmah, const Detector *detect, double sr=1.0) const
Two-temperature graybody integrated flux Th-derivative (erg/cm^2/s/K).
double Itot2(double(Graybody::*I)(double, double, double, double, double) const, double Tc, double Sigmac, double Th, double Sigmah, const Detector *detect, double sr=1.0) const
Two-temperature graybody integrated flux variant (erg/cm^2/s/??).
double dInu_dSc(double nu, double Tc, double Sigmac, double Th, double Sigmah) const
Two-temperature graybody specific intensity Sigmac-derivative (erg/s/Hz/sr/g).
Graybody(const Graybody &g)
Copy constructor.
double dInu_dT(double nu, double T, double Sigma) const
Single-temperature graybody specific intensity T-derivative (erg/cm^2/s/Hz/sr/K).
double F(double T, double Sigma, const Detector *detect, double sr=1.0) const
Single-temperature graybody integrated flux (erg/cm^2/s).
constexpr double c_light
Speed of light (cm/s).
double dInu_dSh(double nu, double Tc, double Sigmac, double Th, double Sigmah) const
Two-temperature graybody specific intensity Sigmah-derivative (erg/s/Hz/sr/g).
bool dualDust_
Whether the two dust models differ;.
static constexpr double B0
Blackbody convenience value.
double dF_dT(double T, double Sigma, const Detector *detect, double sr=1.0) const
Single-temperature graybody integrated flux T-derivative (erg/cm^2/s/K).
double Itot(double(Graybody::*I)(double, double, double) const, double T, double Sigma, const Detector *detect, double sr=1.0) const
Single-temperature graybody integrated flux variant (erg/cm^2/s/??).
std::pair< Dust &, Dust & > dust_
Dust models.
double Bnu(double nu, double T) const
Blackbody specific intensity (erg/cm^2/s/Hz/sr).
Graybody(Dust &dust, double err=1e-3)
Single dust model constructor.
double dInu_dS(double nu, double T, double Sigma) const
Single-temperature graybody specific intensity Sigma-derivative (erg/s/Hz/sr/g).
double Inu(double nu, double T, double Sigma) const
Single-temperature graybody specific intensity (erg/cm^2/s/Hz/sr).
double dF_dS(double T, double Sigma, const Detector *detect, double sr=1.0) const
Single-temperature graybody integrated flux Sigma-derivative (erg/s/g).
double dF_dSc(double Tc, double Sigmac, double Th, double Sigmah, const Detector *detect, double sr=1.0) const
Two-temperature graybody integrated flux Sigmac-derivative (erg/s/g).
Graybody(Dust &dusth, Dust &dustc, double err=1e-3)
Dual dust model constructor.
gsl_interp_accel * hacc_
Interpolation index accelerators.
double dF_dTc(double Tc, double Sigmac, double Th, double Sigmah, const Detector *detect, double sr=1.0) const
Two-temperature graybody integrated flux Tc-derivative (erg/cm^2/s/K).
double dBnu_dT(double nu, double T) const
Blackbody specific intensity T-derivative (erg/cm^2/s/Hz/sr/K).