Gyoto
|
Numerical metric around a rotating star in 3+1 formalism. More...
#include <GyotoRotStar3_1.h>
Public Member Functions | |
RotStar3_1 () | |
Constructor. | |
RotStar3_1 (const RotStar3_1 &) | |
Copy constructor. | |
virtual | ~RotStar3_1 () |
Destructor. | |
virtual RotStar3_1 * | clone () const |
Cloner (uses RotStar3_1(file, integ_kind)) | |
void | fileName (char const *) |
Set filename_. | |
char const * | fileName () const |
Get filename_. | |
void | integKind (int) |
Set integ_kind_. | |
int | integKind () const |
Get integ_kind_. | |
int | myrk4 (const double coord[6], double h, double res[6]) const |
RK4 integrator. More... | |
int | myrk4_adaptive (Gyoto::Worldline *line, const double coord[8], double lastnorm, double normref, double coordnew[8], double h0, double &h1, double h1max) const |
Adaptive RK4 integrator. More... | |
int | myrk4_adaptive (const double coor[6], double lastnorm, double normref, double coornew[6], double cst[2], double &tdot_used, double h0, double &h1, double h1max, double &hused) const |
RK4 integrator (3+1) More... | |
int | diff (const double coord[8], double res[8]) const |
F function such as dy/dtau=F(y,cst) | |
int | diff (const double y[6], double res[6], int) const |
Alternate version of diff(const double coord[8], double res[8]) const. More... | |
void | Normalize4v (const double coordin[6], double coordout[6], const double cst[2], double &tdot_used) const |
Tweak coordinates to insure conservation of cst. | |
double | gmunu (const double *x, int mu, int nu) const |
Metric coefficients. More... | |
double | christoffel (const double coord[8], const int alpha, const int mu, const int nu) const |
Chistoffel symbol. More... | |
double | ScalarProd (const double pos[4], const double u1[4], const double u2[4]) const |
Scalar product. More... | |
virtual void | setParameter (std::string, std::string, std::string) |
Set parameter by name. More... | |
virtual void | fillElement (FactoryMessenger *fmp) |
called from Factory | |
virtual void | setParameters (Gyoto::FactoryMessenger *fmp) |
Main loop in Subcontractor_t function. More... | |
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 | Norm3D (double *pos) const |
not clear | |
void | processGenericParameters (Gyoto::FactoryMessenger *fmp) |
Process generic XML parameters. | |
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 | myrk4 (Worldline *line, const double coord[8], double h, double res[8]) const |
RK4 integrator. | |
virtual int | isStopCondition (double const *const coord) const |
Check whether integration should stop. More... | |
virtual void | setParticleProperties (Gyoto::Worldline *line, const double *coord) const |
Set Metric-specific constants of motion. Used e.g. in KerrBL. | |
virtual void | hook (Listener *listener) |
Start listening. More... | |
virtual void | unhook (Listener *listener) |
Stop listening. More... | |
Protected Types | |
typedef Gyoto::SmartPointer < Gyoto::SmartPointee > | Subcontractor_t (Gyoto::FactoryMessenger *) |
A subcontractor builds an object upon order from the Factory. More... | |
Protected Member Functions | |
void | kind (const std::string) |
Set kind_. More... | |
void | coordKind (int coordkind) |
Set coordkind_. 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. | |
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 | |
Private Attributes | |
char * | filename_ |
Lorene output file name. | |
Star_rot * | star_ |
Pointer to underlying Lorene Star_rot instance. | |
int | integ_kind_ |
1 if RotStar3_1::myrk4(), 0 if Metric::myrk4() | |
Friends | |
class | Gyoto::SmartPointer< Gyoto::Metric::RotStar3_1 > |
Numerical metric around a rotating star in 3+1 formalism.
|
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).
|
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::KerrKS, and Gyoto::Metric::KerrBL.
|
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 |
optional] | delta_max_external external constraint on delta_max |
|
inherited |
Set delta_max_
|
inherited |
Get delta_min_
|
inherited |
Set delta_min_
int Gyoto::Metric::RotStar3_1::diff | ( | const double | y[6], |
double | res[6], | ||
int | |||
) | const |
Alternate version of diff(const double coord[8], double res[8]) const.
Using only 6 parameters. Last int is not used: it is only here to distinguish the signature of the two methods. Could have been done choosing another name, too, but hey...
|
virtual |
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 from Gyoto::Metric::Generic.
|
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::KerrKS, Gyoto::Metric::KerrBL, and Gyoto::Metric::Minkowski.
|
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 |
|
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_
int Gyoto::Metric::RotStar3_1::myrk4 | ( | const double | coord[6], |
double | h, | ||
double | res[6] | ||
) | const |
RK4 integrator.
NB: we use the 6-coordinates, here, unlike the inherited function.
|
virtual |
Adaptive RK4 integrator.
Dispatches between Generic::myrk4_adaptive() and myrk4_adaptive(const double coor[6], double lastnorm, double normref, double coornew[6], double cst[2], double& tdot_used, double h0, double& h1, double& hused) const depending on RotStar3_1::integ_kind_
Reimplemented from Gyoto::Metric::Generic.
int Gyoto::Metric::RotStar3_1::myrk4_adaptive | ( | const double | coor[6], |
double | lastnorm, | ||
double | normref, | ||
double | coornew[6], | ||
double | cst[2], | ||
double & | tdot_used, | ||
double | h0, | ||
double & | h1, | ||
double | h1max, | ||
double & | hused | ||
) | const |
RK4 integrator (3+1)
NB: we use the 6-coordinates, here, unlike the inherited function.
|
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.
|
virtual |
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 from Gyoto::Metric::Generic.
|
virtual |
Set parameter by name.
Assume MyKind is a subclass of Metric::Generic which has two members (a string StringMember and a double DoubleMember):
If MyKind is not a direct subclass of Generic, it should call the corresponding setParameter() implementation instead of Generic::setParameter().
name | XML name of the parameter |
content | string representation of the value |
unit | string representation of the unit |
Reimplemented from Gyoto::Metric::Generic.
|
virtual |
Main loop in Subcontractor_t function.
The Subcontractor_t function for each Metric kind should look somewhat like this (templated as Gyoto::Metric::Subcontractor<MyKind>):
Each metric kind should implement setParameter(string name, string content, string unit) to interpret the individual XML elements. setParameters() can be overloaded in case the specific Metric class needs low level access to the FactoryMessenger. See Gyoto::Astrobj::UniformSphere::setParameters().
Reimplemented from Gyoto::Metric::Generic.
|
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.