Manticore  Version 1.0
Physics of Molecular Clouds
Graybody.cc
Go to the documentation of this file.
1 
8 #include "Detector.h"
9 #include "Graybody.h"
10 
11 namespace mu = mutils;
12 
13 namespace manticore {
14 
16 namespace graybody {
17 
18 extern "C" {
19 
21 struct FluxData {
22  double T,
23  Sigma;
24 
25  const Detector *d;
26 
27  const Graybody *g;
28 
29  double (Graybody::*I)(double, double, double) const;
30 };
31 
35 double flux(double nu, void *fd) {
36  auto &p = *static_cast<const FluxData*>(fd);
37  return (p.g->*(p.I))(nu, p.T, p.Sigma)*(p.d ? p.d->response(nu) : 1.0);
38 }
39 
40 } // extern "C"
41 
42 } // namescape graybody
43 
44 
45 double Graybody::Itot(double (Graybody::*I)(double, double, double) const,
46  double T, double Sigma, const Detector *detect,
47  double sr) const
48 {
49  std::pair<double, double> freqRange =
50  (detect ? detect->freqRange() :
51  std::pair<double,double>{0.0,12.0*k_Boltzman*T/h_Planck});
52 
53  double result, abserr;
54  graybody::FluxData fd = {T, Sigma, detect, this, I};
55  gsl_function f = {graybody::flux, &fd};
56  gsl_integration_qag(&f, freqRange.first, freqRange.second,
57  0.0, err_, subLimit, intKey,
58  integ_, &result, &abserr);
59  return result*sr;
60 }
61 
62 } // namespace manticore
gsl_integration_workspace * integ_
Integration workspace.
Definition: Graybody.h:142
static constexpr int intKey
Integration rule key.
Definition: Graybody.h:124
constexpr double h_Planck
Planck&#39;s constant (erg*s).
Definition: manticore.h:23
double(Graybody::* I)(double, double, double) const
Definition: Graybody.cc:29
double err_
Integration relative error.
Definition: Graybody.h:139
constexpr double k_Boltzman
Planck&#39;s constant (erg/K).
Definition: manticore.h:26
static constexpr size_t subLimit
Integral subdivision limit.
Definition: Graybody.h:121
double flux(double nu, void *fd)
Flux density integrand.
Definition: Graybody.cc:35
Package namespace.
Definition: Detector.cc:13
const Detector * d
Detector instance (may be nullptr).
Definition: Graybody.cc:25
Parameters required by flux().
Definition: Graybody.cc:21
double Itot(double(Graybody::*I)(double, double, double) const, double T, double Sigma, const Detector *detect=nullptr, double sr=1.0) const
Graybody integrated flux variant (erg/cm^2/s/??).
Definition: Graybody.cc:45
MathUtils package.
Definition: CommandLine.cc:10
virtual std::pair< double, double > freqRange() const noexcept
Frequency range containing significant response.
Definition: Detector.h:77
const Graybody * g
Graybody instance.
Definition: Graybody.cc:27
Detector base class.
Definition: Detector.h:50
Graybody emission model.
Definition: Graybody.h:33
double Sigma
Mass surface density.
Definition: Graybody.cc:22
double T
Temperature.
Definition: Graybody.cc:22