Gyoto
|
Public Types | |
typedef Gyoto::SmartPointer< Gyoto::SmartPointee > | Subcontractor_t(Gyoto::FactoryMessenger *) |
A subcontractor builds an object upon order from the Factory. More... | |
Public Member Functions | |
virtual Property const * | getProperties () const |
Get list of properties. More... | |
NumericalMetricLorene () | |
Constructor. | |
NumericalMetricLorene (const NumericalMetricLorene &) | |
Copy constructor. | |
virtual NumericalMetricLorene * | clone () const |
Virtual copy constructor. | |
virtual | ~NumericalMetricLorene () |
Destructor. | |
virtual void | setMetricSource () |
void | directory (std::string const &dir) |
std::string | directory () const |
double | initialTime () const |
void | initialTime (double t0) |
double | horizon () const |
void | horizon (double t0) |
double | rico () const |
void | rico (double r0) |
bool | hasSurface () const |
void | hasSurface (bool s) |
bool | bosonstarcircular () const |
void | bosonstarcircular (bool) |
bool | specifyMarginalOrbits () const |
void | specifyMarginalOrbits (bool s) |
bool | mapEt () const |
void | mapEt (bool s) |
std::vector< double > | refineIntegStep () const |
void | refineIntegStep (std::vector< double > const &) |
Lorene::Vector ** | getShift_tab () const |
Lorene::Scalar ** | getLapse_tab () const |
Lorene::Sym_tensor ** | getGamcon_tab () const |
double * | getTimes () const |
int | getNbtimes () const |
Lorene::Valeur ** | getNssurf_tab () const |
Lorene::Vector ** | getVsurf_tab () const |
Lorene::Scalar ** | getLorentz_tab () const |
Lorene::Valeur ** | getHor_tab () const |
double | getRms () const |
double | getRmb () const |
void | setLapse_tab (Lorene::Scalar *lapse, int ii) |
void | setShift_tab (Lorene::Vector *shift, int ii) |
void | setGamcov_tab (Lorene::Sym_tensor *gamcov, int ii) |
void | setGamcon_tab (Lorene::Sym_tensor *gamcon, int ii) |
void | setKij_tab (Lorene::Sym_tensor *kij, int ii) |
void | setTimes (double time, int ii) |
virtual double | getSpecificAngularMomentum (double rr) const |
virtual double | getPotential (double pos[4], double l_cst) const |
virtual int | myrk4 (double tt, const double coord[7], double h, double res[7]) const |
virtual int | myrk4 (Worldline *line, const double coord[8], double h, double res[8]) const |
RK4 integrator. | |
int | myrk4_adaptive (Gyoto::Worldline *line, const double coord[8], double lastnorm, double normref, double coordnew[8], double h0, double &h1, double h1max) const |
int | myrk4_adaptive (double tt, const double coor[7], double lastnorm, double normref, double coornew[7], const double cst[2], double &tdot_used, double h0, double &h1, double &hused, double h1max) const |
With energy integration also, coor=[E,r,th,ph,dE/dt,Vr,Vth,Vph]. | |
void | reverseR (double tt, double coord[4]) const |
void | computeNBeta (const double coord[4], double &NN, double beta[3]) const |
double | gmunu (const double x[4], int mu, int nu) const |
double | gmunu (const double x[3], int indice_time, int mu, int nu) const |
double | gmunu_up_dr (const double x[4], int mu, int nu) const |
double | gmunu_up_dr (const double x[3], int indice_time, int mu, int nu) const |
double | christoffel (const double coord[8], const int alpha, const int mu, const int nu) const |
Chistoffel symbol. More... | |
double | christoffel (const double coord[8], const int alpha, const int mu, const int nu, const int indice_time) const |
virtual int | christoffel (double dst[4][4][4], const double *coord) const |
int | christoffel (double dst[4][4][4], const double *coord, const int indice_time) const |
double | christoffel3 (const double coord[6], const int indice_time, const int ii, const int jj, const int kk) const |
void | setParticleProperties (Worldline *line, const double *coord) const |
Set Metric-specific constants of motion. Used e.g. in KerrBL. | |
double | Interpol3rdOrder (double tt, int indice_time, double values[4]) const |
double | computeHorizon (const double *pos) const |
double | computeHorizon (const double *pos, int indice) const |
virtual int | diff (const double coord[8], double res[8]) const |
int | diff (double tt, const double y[7], double res[7]) const |
virtual int | diff (const double y[7], double res[7], int indice_time) const |
void | circularVelocity (double const *coor, double *vel, double dir) const |
Yield circular velocity at a given position. More... | |
void | circularVelocity (double const *coor, double *vel, double dir, int indice_time) const |
const std::string | kind () const |
Get kind_. | |
int | coordKind () const |
Get coordinate kind. | |
int | getRefCount () |
void | mass (const double) |
Set mass used in unitLength() | |
void | mass (const double, const std::string &unit) |
Set mass used in unitLength() | |
double | mass () const |
Get mass used in unitLength() | |
double | mass (const std::string &unit) const |
Get mass used in unitLength() | |
double | unitLength () const |
M * G / c^2, M is in kg, unitLength in meters. More... | |
double | unitLength (const std::string &unit) const |
unitLength expressed in specified unit | |
double | deltaMin () const |
void | deltaMin (double h1) |
double | deltaMax () const |
virtual double | deltaMax (double const pos[8], double delta_max_external) const |
void | deltaMax (double h1) |
double | deltaMaxOverR () const |
Get delta_max_over_r_. | |
void | deltaMaxOverR (double t) |
Set delta_max_over_r_. | |
bool | keplerian () const |
Get keplerian_. | |
void | keplerian (bool) |
Set keplerian_. | |
virtual void | cartesianVelocity (double const coord[8], double vel[3]) |
Compute xprime, yprime and zprime from 8-coordinates. | |
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. More... | |
virtual void | circularVelocity (double const pos[4], double vel[4], double dir=1.) const |
Yield circular velocity at a given position. More... | |
virtual void | nullifyCoord (double coord[8]) const |
Set tdot (coord[4]) such that coord is light-like. Everything is in geometrical units. More... | |
virtual void | nullifyCoord (double coord[8], double &tdot2) const |
Set tdot (coord[4]) such that coord is light-like and return other possible tdot. More... | |
virtual double | ScalarProd (const double pos[4], const double u1[4], const double u2[4]) const |
Scalar product. More... | |
virtual double | Norm3D (double *pos) const |
not clear | |
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. More... | |
virtual double | gmunu (const double *x, int mu, int nu) const |
Metric coefficients. More... | |
virtual void | gmunu (double g[4][4], const double *pos) const |
Metric coefficients. More... | |
virtual int | christoffel (double dst[4][4][4], const double coord[8]) const |
Chistoffel symbol. More... | |
virtual int | isStopCondition (double const *const coord) const |
Check whether integration should stop. More... | |
void | incRefCount () |
Increment the reference counter. Warning: Don't mess with the counter. | |
int | decRefCount () |
Decrement the reference counter and return current value. Warning: Don't mess with the counter. | |
void | set (Property const &p, Value val) |
Set Value of a Property. | |
void | set (Property const &p, Value val, std::string const &unit) |
Set Value (expressed in unit) of a Property. | |
void | set (std::string const &pname, Value val) |
Set Value of a Property. | |
void | set (std::string const &pname, Value val, std::string const &unit) |
Set Value (expressed in unit) of a Property. | |
Value | get (Property const &p) const |
Get Value of a Property. | |
Value | get (std::string const &pname) const |
Get Value of a Property. | |
Value | get (Property const &p, std::string const &unit) const |
Get Value of a Property, converted to unit. | |
Value | get (std::string const &pname, std::string const &unit) const |
Get Value of a Property, converted to unit. | |
Property const * | property (std::string const pname) const |
Find property by name. More... | |
virtual void | fillProperty (Gyoto::FactoryMessenger *fmp, Property const &p) const |
Output a single Property to XML. More... | |
virtual void | fillElement (Gyoto::FactoryMessenger *fmp) const |
Fill the XML element for this Object. More... | |
virtual void | setParameters (Gyoto::FactoryMessenger *fmp) |
Main loop for parsing Properties from XML description. More... | |
virtual int | setParameter (std::string name, std::string content, std::string unit) |
Set parameter by name. More... | |
virtual void | setParameter (Gyoto::Property const &p, std::string const &name, std::string const &content, std::string const &unit) |
Set parameter by Property (and name) More... | |
virtual void | hook (Listener *listener) |
Start listening. More... | |
virtual void | unhook (Listener *listener) |
Stop listening. More... | |
Static Public Attributes | |
static GYOTO_OBJECT Property const | properties [] |
Protected Member Functions | |
void | kind (const std::string) |
Set kind_. More... | |
void | coordKind (int coordkind) |
Set coordkind_. More... | |
virtual void | tellListeners () |
Call tell() on each hooked Listener. More... | |
Protected Attributes | |
double | delta_min_ |
Minimum integration step for the adaptive integrator. | |
double | delta_max_ |
Maximum integration step for the adaptive integrator. | |
double | delta_max_over_r_ |
Numerical tuning parameter. More... | |
bool | keplerian_ |
1 if circularVelocity should return the Newtonian Keplerian velocity, in r^-3/2 | |
std::string | kind_ |
The "kind" that is output in the XML entity. More... | |
Private Member Functions | |
void | free () |
deallocate memory | |
Private Attributes | |
char * | filename_ |
Lorene .d data file(s) path. | |
bool | mapet_ |
Kind of Lorene mapping: 'false' for Map_af, 'true' for Map_et. | |
bool | bosonstarcircular_ |
1 to implement the circular velocity of a boson star | |
int | has_surface_ |
1 if the metric source has a surface | |
int | specify_marginalorbits_ |
1 if marginal orbits are specified in file | |
double | horizon_ |
Value of horizon (or any innermost limit) | |
double | r_refine_ |
Refine integration below this r. | |
double | h0_refine_ |
Imposed integration step for refined integration. | |
int | refine_ |
1 if refined integration needed | |
double | initial_time_ |
Time at which (first) metric is given. | |
Lorene::Scalar ** | lapse_tab_ |
Lorene::Vector ** | shift_tab_ |
Lorene::Sym_tensor ** | gamcov_tab_ |
Lorene::Sym_tensor ** | gamcon_tab_ |
Lorene::Sym_tensor ** | kij_tab_ |
double * | times_ |
Coordinate times at which metrics are given. | |
int | nb_times_ |
Nb of time slices. | |
Lorene::Valeur ** | nssurf_tab_ |
Metric source (e.g. star) surface (if any) | |
Lorene::Vector ** | vsurf_tab_ |
4-velocity at surface (if any) | |
Lorene::Scalar ** | lorentz_tab_ |
Lorentz factor at surface (if any) | |
Lorene::Valeur ** | hor_tab_ |
Apparent horizon (if any) | |
double | risco_ |
ISCO coordinate radius. | |
double | rico_ |
Innermost circular orbit coordinate radius. | |
double | rmb_ |
Marginally bound orbit coordinate radius. | |
Friends | |
class | Gyoto::SmartPointer< Gyoto::Metric::NumericalMetricLorene > |
|
inherited |
A subcontractor builds an object upon order from the Factory.
Various classes need to provide a subcontractor to be able to instanciate themselves upon order from the Factory. A subcontractor is a function (often a static member function) which accepts a pointer to a FactoryMessenger as unique parameter, communicates with the Factory using this messenger to read an XML description of the object to build, and returns this objet. SmartPointee::Subcontractor_t* is just generic enough a typedef to cast to and from other subcontractor types: Astrobj::Subcontractor_t, Metric::Subcontractor_t, Spectrum::Subcontractor_t. A subcontractor needs to be registered using the relevant Register() function: Astrobj::Register(), Metric::Register(), Spectrum::Register().
|
virtual |
Chistoffel symbol.
Value of Christoffel symbol Γαμν at point (x1, x2, x3).
Reimplemented from Gyoto::Metric::Generic.
|
virtualinherited |
Chistoffel symbol.
Value of Christoffel symbol Γαμν at point (x1, x2, x3).
double Gyoto::Metric::NumericalMetricLorene::christoffel3 | ( | const double | coord[6], |
const int | indice_time, | ||
const int | ii, | ||
const int | jj, | ||
const int | kk | ||
) | const |
3-Christoffels
void Gyoto::Metric::NumericalMetricLorene::circularVelocity | ( | double const * | coor, |
double * | vel, | ||
double | dir | ||
) | const |
Yield circular velocity at a given position.
Give the velocity of a massive particle in circular orbit at the given position projected onto the equatorial plane. Such a velocity may not exist everywhere (or anywhere) for a given metric. This method is intended to be used by Astrobj classes such as Torus or ThinDisk.
This circular velocity should be implemented for all specific numerical metric used.
If bosonstarcircular_ is set to true, this method returns the boson star circular velocity.
coor | input: position, |
vel | output: velocity, |
dir | 1 for corotating, -1 for counterrotating. |
|
virtualinherited |
Yield circular velocity at a given position.
Give the velocity of a massive particle in circular orbit at the given position projected onto the equatorial plane. Such a velocity may not exist everywhere (or anywhere) for a given metric. This method is intended to be used by Astrobj classes such as Torus or ThinDisk.
If keplerian_ is set to true, this method should return the Keplerian velcity instead (derived classes should ensure this, see KerrBL::circularVelocity() for instance).
The default implementation throws an error if keplerian_ is set to false.
pos | input: position, |
vel | output: velocity, |
dir | 1 for corotating, -1 for counterrotating. |
Reimplemented in Gyoto::Metric::KerrBL, and Gyoto::Metric::KerrKS.
double Gyoto::Metric::NumericalMetricLorene::computeHorizon | ( | const double * | pos | ) | const |
Computation of horizon value
void Gyoto::Metric::NumericalMetricLorene::computeNBeta | ( | const double | coord[4], |
double & | NN, | ||
double | beta[3] | ||
) | const |
Compute lapse and shift at given coordinates
|
protectedinherited |
Set coordkind_.
coordkind(int coordkind) is protected because, for most Metrics, it should not be changed in runtime.Set coordinate kind
|
inherited |
Get delta_max_
|
virtualinherited |
Get delta max at a given position
pos | 4-position |
|
inherited |
Set delta_max_
|
inherited |
Get delta_min_
|
inherited |
Set delta_min_
|
virtual |
F function such as d(coord)/d(tau)=F(coord)
Reimplemented from Gyoto::Metric::Generic.
|
virtualinherited |
Fill the XML element for this Object.
The base implementation simply calls fillProperty() for each Property defined for the Object.
Derived classes should avoid overriding fillElement(). It may make sense occasionally, e.g. to make sure that the metric is output first.
To customize how a given Property is rendered, it is better to override fillProperty().
If this method is overridden, the implementation should in general call fillElement() on the direct base.
|
virtualinherited |
Output a single Property to XML.
The base implementation decides what to do based on the p.type. The format matches how setParameters() an setParameter() would interpret the XML descition.
Overriding this method should be avoided, but makes sense in some cases (for instance Screen::fillProperty() selects a different unit for Distance based on its magnitude, so that stellar sizes are expressed in solar radii while smaller sizes can be expressed in meters and larger sizes in parsecs).
Overriding implementation should fall-back on calling the implementation in the direct parent class:
Reimplemented in Gyoto::Screen, Gyoto::Astrobj::Star, Gyoto::Spectrometer::Uniform, Gyoto::Astrobj::Disk3D, Gyoto::Astrobj::PatternDisk, Gyoto::Astrobj::PolishDoughnut, and Gyoto::Astrobj::DirectionalDisk.
|
virtual |
Returns potential W=-ln(|u_t|) for a cst specific angular momentum l_cst Should be implemented in derived classes if useful If called on the base class, returns an error
Reimplemented from Gyoto::Metric::Generic.
|
virtual |
Get list of properties.
This method is declared automatically by the GYOTO_OBJECT macro and defined automatically by the GYOTO_PROPERTY_END macro.
Reimplemented from Gyoto::Metric::Generic.
|
virtual |
Returns the marginally bound radius Should be implemented in derived classes if useful If called on the base class, returns an error
Reimplemented from Gyoto::Metric::Generic.
|
virtual |
Returns the marginally stable (ISCO) radius Should be implemented in derived classes if useful If called on the base class, returns an error
Reimplemented from Gyoto::Metric::Generic.
|
virtual |
Returns the specific angular momentum l=-u_phi/u_t Should be implemented in derived classes if useful If called on the base class, returns an error
Reimplemented from Gyoto::Metric::Generic.
double Gyoto::Metric::NumericalMetricLorene::gmunu | ( | const double | x[4], |
int | mu, | ||
int | nu | ||
) | const |
4-Metric
|
virtualinherited |
Metric coefficients.
The default implementation calls Metric:: gmunu(double g[4][4], const double * pos) const
x | 4-position at which to compute the coefficient; |
mu | 1st index of coefficient, 0≤μ≤3; |
nu | 2nd index of coefficient, 0≤ν≤3; |
Reimplemented in Gyoto::Metric::RotStar3_1, Gyoto::Metric::KerrBL, Gyoto::Metric::KerrKS, and Gyoto::Metric::Minkowski.
|
virtualinherited |
Metric coefficients.
The default implementation calls double gmunu(const double * x, int mu, int nu) const.
[out] | g | 4x4 array to store the coeefficients |
[in] | x | 4-position at which to compute the coefficients; |
Reimplemented in Gyoto::Metric::KerrBL, Gyoto::Metric::KerrKS, and Gyoto::Metric::Minkowski.
double Gyoto::Metric::NumericalMetricLorene::gmunu_up_dr | ( | const double | x[4], |
int | mu, | ||
int | nu | ||
) | const |
r derivative of contravariant 4-metric
|
virtualinherited |
Start listening.
Use from a Hook::Listener object method:
where "this" is a Listener and "teller" is a Teller.
Use unhook() later to stop listening to a given Teller.
listener | pointer to the new listener |
double Gyoto::Metric::NumericalMetricLorene::Interpol3rdOrder | ( | double | tt, |
int | indice_time, | ||
double | values[4] | ||
) | const |
3rd order interpolation routine
|
virtualinherited |
Check whether integration should stop.
The integrating loop will ask this the Metric through this method whether or not it is happy to conitnue the integration. Typically, the Metric should answer 0 when everything is fine, 1 when too close to the event horizon, inside the BH...
coord | 8-coordinate vector to check. |
Reimplemented in Gyoto::Metric::KerrBL, and Gyoto::Metric::KerrKS.
|
protectedinherited |
Set kind_.
kind(const std::string) is protected because, for most Metrics, it should not be changed in runtime.Set kind_
|
virtual |
Runge-Kutta integrator at order 4
|
virtual |
Adaptive Runge-Kutta
Reimplemented from Gyoto::Metric::Generic.
|
virtualinherited |
Set tdot (coord[4]) such that coord is light-like. Everything is in geometrical units.
Set coord[4] so that the 4-velocity coord[4:7] is lightlike, i.e. of norm 0. There may be up to two solutions. coord[4] is set to the hightest. The lowest can be retrieved using nullifyCoord(double coord[8], double& tdot2) const. Everything is expressed in geometrical units.
[in,out] | coord | 8-position, coord[4] will be set according to the other elements; |
Reimplemented in Gyoto::Metric::KerrKS, and Gyoto::Metric::KerrBL.
|
virtualinherited |
Set tdot (coord[4]) such that coord is light-like and return other possible tdot.
Set coord[4] so that the 4-velocity coord[4:7] is lightlike, i.e. of norm 0. There may be up to two solutions. coord[4] is set to the hightest. The lowest can be retrieved in tdot2. Everything is expressed in geometrical units.
[in,out] | coord | 8-position, coord[4] will be set according to the other elements; |
[out] | tdot2 | will be set to the smallest solution |
Reimplemented in Gyoto::Metric::KerrKS, and Gyoto::Metric::KerrBL.
|
virtualinherited |
Computes the orthonormal local tetrad of the observer.
obskind | input: kind of observer (eg: "ZAMO","KeplerianObserver"...) |
pos | input: position, |
fourvel | output: observer 4-velocity (norm -1) |
screen1 | output: first vector in the screen plane |
screen2 | output: second vector in the screen plane |
screen3 | output: vector normal to the screen |
Reimplemented in Gyoto::Metric::KerrBL, and Gyoto::Metric::Minkowski.
|
inherited |
void Gyoto::Metric::NumericalMetricLorene::reverseR | ( | double | tt, |
double | coord[4] | ||
) | const |
Reverse spatial vector if going throough 0, without horizon
|
virtualinherited |
Scalar product.
Compute the scalarproduct of the two quadrivectors u1 and u2 in this Metric, at point pos expressed in coordinate system sys.
pos | 4-position; |
u1 | 1st quadrivector; |
u2 | 2nd quadrivector; |
Reimplemented in Gyoto::Metric::RotStar3_1, and Gyoto::Metric::KerrBL.
|
virtual |
Access functions to get or set private attributes
|
virtualinherited |
Set parameter by name.
This function is used when parsing an XML description, if no Property of this name is found. Overriding implementation should fall-back on calling the direct's parent implementation:
name | XML name of the parameter (XML entity). This may have a path component, e.g. "Astrobj::Radius", in which case a property named "Astrobj" will be sought in the current object, and setParameter will be called recusrively on this Astrobj with Radius as name. |
content | string representation of the value |
unit | string representation of the unit |
Reimplemented in Gyoto::Astrobj::Star, and Gyoto::Metric::RotStar3_1.
|
virtualinherited |
Set parameter by Property (and name)
This function is used when parsing an XML description, if Property (p) of this name is found (i.e. either p.name or p.name_false is equal to name). Implementation should fall-back on calling the direct's parent implementation:
p | Property that matches name (p.name == name or p.name_false == name) |
name | XML name of the parameter (XML entity) |
content | string representation of the value |
unit | string representation of the unit |
Reimplemented in Gyoto::Astrobj::PolishDoughnut.
|
virtualinherited |
Main loop for parsing Properties from XML description.
This function queries the FactoryMessenger for elements to parse, and tries to matche each element to a Property to set it accordingly.
Any class that tries to be buildable from XML must supply a subcontractor (for base classes such as Metric, Astrobj, Spectrum and Spectrometer, it is done as a template that must be specialized for each class).
This subcontractor typically looks somewhat like this:
Although this is discouraged, it is possible to override the following functions to customize how XML entities are parsed: - setParameters() if low-level access to the FactoryMessenger is required; - setParameter(std::string name, std::string content, std::string unit) to interpret an entity that does not match a Property (e.g. alternative name); - setParameter(Gyoto::Property const &p, std::string const &name, std::string const &content, std::string const &unit) to change how a Property is interpreted.
|
virtualinherited |
Compute tdot as a function of dr/dt, dtheta/dt and dphi/dt. Everything is in geometrical units.
coord | 4-position (geometrical units); |
v | 3-velocity dx1/dx0, dx2/dx0, dx3/dx0; |
|
protectedvirtualinherited |
Call tell() on each hooked Listener.
Whenever a Teller mutates, it should warn any Listener hooked to it using tellListeners().
|
virtualinherited |
Stop listening.
Use from a Hook::Listener object method:
where "this" is a Listener, "teller" is a Teller, and "this" has called teller->hook(this) previously.
listener | pointer to the listener |
|
inherited |
M * G / c^2, M is in kg, unitLength in meters.
Metrics implementations are free to express lengths and distances in whatever unit they see fit (presumably most often geometrical units). This function returns this unit in SI (meters).
|
protectedinherited |
Numerical tuning parameter.
Ensure that delta (the numerical integration step) is never larger than a fraction of the distance between the current location and the center of the coordinate system.
For investigations close to the event horizon, 0.5 is usually fine. If high accuracy is needed long after deflection (weak lensing), then this must be smaller. A good test is to look at a MinDistance map for a FixedStar: it must be smooth.
|
protectedinherited |
The "kind" that is output in the XML entity.
E.g. for an Astrobj, fillElement() will ensure
is written.