31 #ifndef __GyotoMetric_H_
32 #define __GyotoMetric_H_
70 (FactoryMessenger* fmp) {
72 #ifdef GYOTO_USE_XERCES
73 if (fmp) gg -> setParameters(fmp);
186 void
kind(const std::string);
200 const std::string
kind() const;
205 Generic(const int coordkind, const std::string &name);
213 void
mass(const double);
214 void
mass(const double, const std::string &unit);
221 double
mass(const std::string &unit) const;
229 double
unitLength(const std::string &unit) const ;
236 virtual double
getRmb() const;
243 virtual double
getRms() const;
257 virtual double
getPotential(double pos[4], double l_cst) const;
284 virtual double
deltaMax(double const pos[8], double delta_max_external) const;
305 virtual double
SysPrimeToTdot(const double coord[4], const double v[3]) const;
329 double dir=1.) const ;
354 virtual void
nullifyCoord(double coord[8], double& tdot2) const;
366 virtual double
ScalarProd(const double pos[4],
367 const double u1[4], const double u2[4]) const;
369 virtual double
Norm3D(double* pos) const;
383 double const pos[4], double fourvel[4],
384 double screen1[4], double screen2[4],
385 double screen3[4]) const ;
399 virtual double
gmunu(const double * x, int mu, int nu) const;
410 virtual void
gmunu(double g[4][4], const double * pos) const;
422 const int alpha, const int mu, const int nu) const;
431 virtual int
christoffel(double dst[4][4][4], const double coord[8]) const ;
438 virtual int
myrk4(Worldline * line, const double coord[8], double h, double res[8]) const;
443 virtual int
myrk4_adaptive(Gyoto::Worldline* line, const double coord[8],
444 double lastnorm, double normref,
445 double coordnew[8], double h0, double& h1,
446 double deltamax=GYOTO_DEFAULT_DELTA_MAX) const;
463 virtual int
diff(const double y[8], double res[8]) const ;
469 const double * coord) const;
virtual void nullifyCoord(double coord[8]) const
Set tdot (coord[4]) such that coord is light-like. Everything is in geometrical units.
#define GYOTO_OBJECT
Declare class::properties and class::getProperties()
Definition: GyotoObject.h:83
bool keplerian() const
Get keplerian_.
int coordkind_
Kind of coordinates (cartesian-like, spherical-like, unspecified)
Definition: GyotoMetric.h:157
int coordKind() const
Get coordinate kind.
virtual void circularVelocity(double const pos[4], double vel[4], double dir=1.) const
Yield circular velocity at a given position.
Astronomical objects (light emitters)
Register::Entry * Register_
The Metric register.
virtual Generic * clone() const
Virtual copy constructor.
Tellers tell Listeners when they mutate.
double delta_min_
Minimum integration step for the adaptive integrator.
Definition: GyotoMetric.h:160
virtual void setParticleProperties(Gyoto::Worldline *line, const double *coord) const
Set Metric-specific constants of motion. Used e.g. in KerrBL.
Base class for metrics.
Definition: GyotoMetric.h:148
Reference-counting pointers.
double delta_max_
Maximum integration step for the adaptive integrator.
Definition: GyotoMetric.h:161
Gyoto::Metric::Subcontractor_t * getSubcontractor(std::string name, int errmode=0)
Query the Metric register.
virtual double ScalarProd(const double pos[4], const double u1[4], const double u2[4]) const
Scalar product.
double unitLength() const
M * G / c^2, M is in kg, unitLength in meters.
virtual double christoffel(const double coord[8], const int alpha, const int mu, const int nu) const
Chistoffel symbol.
bool keplerian_
1 if circularVelocity should return the Newtonian Keplerian velocity, in r^-3/2
Definition: GyotoMetric.h:177
const std::string kind() const
Get kind_.
virtual int myrk4_adaptive(Gyoto::Worldline *line, const double coord[8], double lastnorm, double normref, double coordnew[8], double h0, double &h1, double deltamax=GYOTO_DEFAULT_DELTA_MAX) const
RK4 integrator with adaptive step.
Gyoto ubiquitous macros and typedefs.
SmartPointer< Metric::Generic > Subcontractor_t(FactoryMessenger *)
A function to build instances of a specific Metric::Generic sub-class.
Definition: GyotoMetric.h:58
virtual int isStopCondition(double const *const coord) const
Check whether integration should stop.
void initRegister()
Empty the Metric register.
double delta_max_over_r_
Numerical tuning parameter.
Definition: GyotoMetric.h:175
virtual double getPotential(double pos[4], double l_cst) const
Namespace for the Gyoto library.
Definition: GyotoAstrobj.h:43
virtual void cartesianVelocity(double const coord[8], double vel[3])
Compute xprime, yprime and zprime from 8-coordinates.
SmartPointer< Metric::Generic > Subcontractor(FactoryMessenger *fmp)
Subcontractor template.
Definition: GyotoMetric.h:70
Can be pointed to by a SmartPointer.
Definition: GyotoSmartPointer.h:78
virtual double getRmb() const
virtual double Norm3D(double *pos) const
not clear
double mass_
Mass yielding geometrical unit (in kg).
Definition: GyotoMetric.h:156
virtual double SysPrimeToTdot(const double coord[4], const double v[3]) const
Compute tdot as a function of dr/dt, dtheta/dt and dphi/dt. Everything is in geometrical units...
virtual void observerTetrad(std::string const obskind, double const pos[4], double fourvel[4], double screen1[4], double screen2[4], double screen3[4]) const
Computes the orthonormal local tetrad of the observer.
virtual int myrk4(Worldline *line, const double coord[8], double h, double res[8]) const
RK4 integrator.
double deltaMaxOverR() const
Get delta_max_over_r_.
Object with properties.
Definition: GyotoObject.h:136
virtual double gmunu(const double *x, int mu, int nu) const
Metric coefficients.
virtual double getSpecificAngularMomentum(double rr) const
Listen to me and I'll warn you when I change.
Definition: GyotoHooks.h:82
double mass() const
Get mass used in unitLength()
virtual double getRms() const
virtual int diff(const double y[8], double res[8]) const
F function such as dy/dtau=F(y,cst)
void Register(std::string kind, Gyoto::Metric::Subcontractor_t *scp)
Make a Metric kind known to the Factory.
Entry in a register (or a full register)
Definition: GyotoRegister.h:92