31 #ifndef __GyotoPolishDoughnut_H_
32 #define __GyotoPolishDoughnut_H_
35 namespace Astrobj {
class PolishDoughnut; }
36 class FactoryMessenger;
107 #ifdef GYOTO_USE_XERCES
109 void
fillProperty(Gyoto::FactoryMessenger *fmp, Property const &p) const;
121 void operator=(const PolishDoughnut&) ;
126 double
getL0() const;
130 void
lambda(double lambda);
141 void
beta(double beta);
157 void nonThermalDeltaExpo(std::vector<double> const &v);
158 std::vector<double> nonThermalDeltaExpo() const;
159 void angmomrinner(std::vector<double> const &v);
160 std::vector<double> angmomrinner() const;
161 void adafparams(std::vector<double> const &v);
162 std::vector<double> adafparams() const;
166 std::string const & name,
167 std::string const & content,
168 std::string const & unit);
178 virtual void
metric(Gyoto::SmartPointer<Gyoto::Metric::Generic>);
182 int
Impact(Photon *ph, size_t index,
183 Astrobj::Properties *data);
185 virtual double operator()(double const coord[4]) ;
195 virtual void
tell(Gyoto::Hook::Teller * msg);
196 virtual void
getVelocity(double const pos[4], double vel[4]) ;
209 size_t* chaninds, size_t nbnu,
210 double dsem, double *cph, double *co) const;
212 virtual double
emission(double nu_em, double dsem, double coord_ph[8],
213 double coord_obj[8]) const;
214 virtual void
emission(double Inu[], double nu_em[], size_t nbnu,
215 double dsem, double coord_ph[8],
216 double coord_obj[8]=NULL) const ;
218 virtual void radiativeQ(double Inu[], double Taunu[],
219 double nu_em[], size_t nbnu,
220 double dsem, double coord_ph[8],
221 double coord_obj[8]=NULL) const ;
224 double numax, double T_electron,
225 double n_e, double n_j,
226 double amplification,
228 int comptonorder) const;
230 double emissionSynch(double nu_em, double nu_crit,
231 double numax, double nu_0,
233 double amplification,
235 double alpha1, double alpha2,
236 double alpha3, double preff,
237 int comptonorder) const;
238 double emissionSynchro_komissarov_direction(double Theta_elec,
239 double number_density,
244 double emissionSynchro_komissarov_averaged(double Theta_elec,
245 double number_density,
249 double emissionSynchro_komissarov_averaged_integ(double Theta_elec,
250 double number_density,
254 double emissionSynchro_komissarov_PL_direction(
255 double number_density_PL,
256 double nuem, double nuc,
257 double theta_mag) const;
258 double emissionSynchro_komissarov_PL_averaged(
259 double number_density_PL,
260 double nuem, double nuc
262 double absorptionSynchro_komissarov_PL_direction(
263 double number_density_PL,
264 double nuem, double nuc,
265 double theta_mag) const ;
267 double number_density_PL,
268 double nuem, double nuc
271 double
transmission(double nuem, double dsem, double coord_ph[8]) const ;
272 double
BBapprox(double nuem, double Te) const;
273 static double
funcxM(double alpha1, double alpha2, double alpha3, double xM);
278 double
potential(double r, double theta) const;
345 static double bessi0(
double xx);
346 static double bessi1(
double xx);
347 static double bessk0(
double xx);
348 static double bessk1(
double xx);
349 static double bessk(
int nn,
double xx);
double getWcentre() const
Get PolishDoughnut::W_centre_.
double l0_
Angular momentum. Tied to PolishDoughnut::lambda_.
Definition: GyotoPolishDoughnut.h:63
#define GYOTO_OBJECT
Declare class::properties and class::getProperties()
Definition: GyotoObject.h:83
virtual double operator()(double const coord[4])
Function defining the object interior.
Pointers performing reference counting.
Definition: GyotoProperty.h:41
double lambda() const
Get PolishDoughnut::lambda_.
A toroïdal accretion structure.
Definition: GyotoPolishDoughnut.h:53
virtual double operator()(double) const
The actual function.
bool defangmomrinner_
true if torus defined from l0 and rin
Definition: GyotoPolishDoughnut.h:100
static double funcxM(double alpha1, double alpha2, double alpha3, double xM)
Mahadevan 96 fit function.
double DeltaWm1_
1./(W_centre_ - W_surface_);
Definition: GyotoPolishDoughnut.h:70
double potential(double r, double theta) const
Potential defining shape, used by operator()()
static double bessi1(double xx)
Modified Bessel function I1
void fillProperty(Gyoto::FactoryMessenger *fmp, Property const &p) const
Output a single Property to XML.
virtual double integrateEmission(double nu1, double nu2, double dsem, double c_ph[8], double c_obj[8]=NULL) const
∫ν1ν2 Iν dν (or jν)
friend std::ostream & operator<<(std::ostream &, const PolishDoughnut &)
Display.
Tellers tell Listeners when they mutate.
bool angleAveraged() const
Get PolishDoughnut::angle_averaged_.
Classes with an operator() method.
double central_density_
Central density in kg/L (same as g cm^-3)
Definition: GyotoPolishDoughnut.h:71
double lambda_
Adimentionned angular momentum.
Definition: GyotoPolishDoughnut.h:64
int Impact(Photon *ph, size_t index, Astrobj::Properties *data)
Does a photon at these coordinates impact the object?
#define size_t
If not defined in .
Definition: GyotoConfig.h:357
virtual double operator()(double) const
The actual function.
bool komissarov_
1 if Komissarov model is integrated
Definition: GyotoPolishDoughnut.h:82
virtual void getVelocity(double const pos[4], double vel[4])
Fluid velocity field.
double emissionBrems(double nu_em, double nu_crit, double numax, double T_electron, double n_e, double n_j, double amplification, double Cbrems, int comptonorder) const
Bremsstrahlung proxy for emission()
bool adaf_
true to switch to an ADAF model rather tha Polish doughnut
Definition: GyotoPolishDoughnut.h:94
double centralTempOverVirial() const
Get PolishDoughnut::centraltemp_over_virial_.
Astronomical objects defined bya a potential/distance.
virtual void integrateEmission(double *I, double *boundaries, size_t *chaninds, size_t nbnu, double dsem, double *cph, double *co) const
∫ν1ν2 Iν dν (or jν)
A functor like double (func) (double) const.
Definition: GyotoFunctors.h:56
double aa2_
aa_2
Definition: GyotoPolishDoughnut.h:80
size_t spectralOversampling() const
Get PolishDoughnut::spectral_oversampling_.
virtual void tell(Gyoto::Hook::Teller *msg)
Update PolishDoughnut::aa_.
double beta_
Pmagn/Pgas
Definition: GyotoPolishDoughnut.h:78
virtual double emission(double nu_em, double dsem, double coord_ph[8], double coord_obj[8]) const
Specific intensity Iν
size_t spectral_oversampling_
Oversampling used in integrateEmission()
Definition: GyotoPolishDoughnut.h:81
bool rochelobefilling_
true if torus filling its Roche lobe
Definition: GyotoPolishDoughnut.h:99
bool angle_averaged_
1 if Komissarov model should be angle averaged
Definition: GyotoPolishDoughnut.h:83
double centralDensity() const
Get PolishDoughnut::central_density_.
double aa_
PolishDoughnut::gg_ spin, cached when setting PolishDoughnut::lambda_.
Definition: GyotoPolishDoughnut.h:79
static double bessk0(double xx)
Modified Bessel function K0
double ADAFdensity_
ADAF central density.
Definition: GyotoPolishDoughnut.h:96
double transmission(double nuem, double dsem, double coord_ph[8]) const
Transmission: exp( αν * dsem )
double beta() const
Get PolishDoughnut::beta_.
bool changeCusp() const
Get PolishDoughnut::komissarov_.
intersection_t intersection
double intersection(double) Functor
Definition: GyotoPolishDoughnut.h:329
Namespace for the Gyoto library.
Definition: GyotoAstrobj.h:43
double W_centre_
Potential central value. Tied to PolishDoughnut::lambda_.
Definition: GyotoPolishDoughnut.h:66
virtual PolishDoughnut * clone() const
Cloner.
double centraltemp_over_virial_
Tcenter/Tvirial
Definition: GyotoPolishDoughnut.h:77
double r_cusp_
Cusp radius in geometrical units. Tied to PolishDoughnut::lambda_.
Definition: GyotoPolishDoughnut.h:67
double const * par
Parameter array.
Definition: GyotoPolishDoughnut.h:325
double W_surface_
Potential surface value. Tied to PolishDoughnut::lambda_.
Definition: GyotoPolishDoughnut.h:65
double r_torusouter_
Torus outer coordinate radius. Tied to PolishDoughnut::lambda_.
Definition: GyotoPolishDoughnut.h:69
I might listen to a Teller.
Definition: GyotoHooks.h:64
void setParameter(Gyoto::Property const &p, std::string const &name, std::string const &content, std::string const &unit)
Set parameter by Property (and name)
double getL0() const
Get PolishDoughnut::l0_.
double ADAFtemperature_
ADAF central temperature.
Definition: GyotoPolishDoughnut.h:95
bool changecusp_
true to apply the fishy rcusp_ change (to be changed)
Definition: GyotoPolishDoughnut.h:98
Astronomical objects defined bya a potential/distance.
Definition: GyotoStandardAstrobj.h:84
virtual SmartPointer< Metric::Generic > metric() const
Get the Metric gg_.
static double bessk(int nn, double xx)
Modified Bessel function.
double outerradius(double) Functor class
Definition: GyotoPolishDoughnut.h:338
I_nu(nu, T) = cst_*2*h*nu^3/c^2/(exp(h*nu/k*T)-1.);.
double transcendental(double) Functor class
Definition: GyotoPolishDoughnut.h:310
static double bessk1(double xx)
Modified Bessel function K1
double getWsurface() const
Get PolishDoughnut::W_surface_.
double absorptionSynchro_komissarov_PL_averaged(double number_density_PL, double nuem, double nuc) const
Synchrotron proxy for emission()
double intersection(double) Functor class
Definition: GyotoPolishDoughnut.h:292
static double bessi0(double xx)
Modified Bessel function I0
double expoPL_
exponent of the non-thermal powerlaw = -expoPL_
Definition: GyotoPolishDoughnut.h:92
double deltaPL_
fraction of thermal energy in non-thermal electrons
Definition: GyotoPolishDoughnut.h:91
double r_centre_
Central radius in geometrical units. Tied to PolishDoughnut::lambda_.
Definition: GyotoPolishDoughnut.h:68
double rintorus_
Inner radius of the doughnut.
Definition: GyotoPolishDoughnut.h:101
double getRcusp() const
Get PolishDoughnut::r_cusp_.
double BBapprox(double nuem, double Te) const
Approximated Black-Body function.
bool komissarov() const
Get PolishDoughnut::komissarov_.
double getRcentre() const
Get PolishDoughnut::r_centre_.