Gyoto
Public Member Functions | Protected Types | Protected Member Functions | Protected Attributes | Private Member Functions | Private Attributes | Friends | List of all members
Gyoto::Metric::NumericalMetricLorene Class Reference
Inheritance diagram for Gyoto::Metric::NumericalMetricLorene:
Gyoto::WIP Gyoto::Metric::Generic Gyoto::SmartPointee Gyoto::Hook::Teller

Public Member Functions

 NumericalMetricLorene ()
 Constructor.
 
 NumericalMetricLorene (const NumericalMetricLorene &)
 Copy constructor.
 
virtual NumericalMetricLoreneclone () const
 Virtual copy constructor.
 
virtual ~NumericalMetricLorene ()
 Destructor.
 
virtual void setMetricSource ()
 
char const * getFileName () const
 
Vector ** getShift_tab () const
 
Scalar ** getLapse_tab () const
 
Sym_tensor ** getGamcon_tab () const
 
double * getTimes () const
 
int getNbtimes () const
 
Valeur ** getNssurf_tab () const
 
Vector ** getVsurf_tab () const
 
Scalar ** getLorentz_tab () const
 
Valeur ** getHor_tab () const
 
double getRisco () const
 
double getRmb () const
 
void setLapse_tab (Scalar *lapse, int ii)
 
void setShift_tab (Vector *shift, int ii)
 
void setGamcov_tab (Sym_tensor *gamcov, int ii)
 
void setGamcon_tab (Sym_tensor *gamcon, int ii)
 
void setKij_tab (Sym_tensor *kij, int ii)
 
void setTimes (double time, int ii)
 
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 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
 
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
 
virtual void setParameter (std::string, std::string, std::string)
 Set parameter by name. More...
 
virtual void fillElement (FactoryMessenger *fmp)
 called from Factory More...
 
virtual void setParameters (FactoryMessenger *fmp)
 < called from Factory
 
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 setParameters (Gyoto::FactoryMessenger *fmp)
 Main loop in Subcontractor_t function. More...
 
void processGenericParameters (Gyoto::FactoryMessenger *fmp)
 Process generic XML parameters.
 
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...
 
virtual int diff (const double y[8], double res[8]) const
 F function such as dy/dtau=F(y,cst)
 
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 Member Functions

void free ()
 deallocate memory
 

Private Attributes

char * filename_
 Lorene .d data file(s) path.
 
char * mapkind_
 Kind of Lorene mapping Map_af or Map_et.
 
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.
 
Scalar ** lapse_tab_
 
Vector ** shift_tab_
 
Sym_tensor ** gamcov_tab_
 
Sym_tensor ** gamcon_tab_
 
Sym_tensor ** kij_tab_
 
double * times_
 Coordinate times at which metrics are given.
 
int nb_times_
 Nb of time slices.
 
Valeur ** nssurf_tab_
 Metric source (e.g. star) surface (if any)
 
Vector ** vsurf_tab_
 4-velocity at surface (if any)
 
Scalar ** lorentz_tab_
 Lorentz factor at surface (if any)
 
Valeur ** hor_tab_
 Apparent horizon (if any)
 
double risco_
 ISCO coordinate radius.
 
double rmb_
 Marginally bound orbit coordinate radius.
 

Friends

class Gyoto::SmartPointer< Gyoto::Metric::NumericalMetricLorene >
 

Member Typedef Documentation

typedef Gyoto::SmartPointer<Gyoto::SmartPointee> Gyoto::SmartPointee::Subcontractor_t(Gyoto::FactoryMessenger *)
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().

Member Function Documentation

double Gyoto::Metric::NumericalMetricLorene::christoffel ( const double  coord[8],
const int  alpha,
const int  mu,
const int  nu 
) const
virtual

Chistoffel symbol.

Value of Christoffel symbol Γαμν at point (x1, x2, x3).

Reimplemented from Gyoto::Metric::Generic.

virtual int Gyoto::Metric::Generic::christoffel ( double  dst[4][4][4],
const double  coord[8] 
) const
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

virtual void Gyoto::Metric::Generic::circularVelocity ( double const  pos[4],
double  vel[4],
double  dir = 1. 
) const
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.

Parameters
posinput: position,
veloutput: velocity,
dir1 for corotating, -1 for counterrotating.

Reimplemented in Gyoto::Metric::KerrKS, and Gyoto::Metric::KerrBL.

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

void Gyoto::Metric::Generic::coordKind ( int  coordkind)
protectedinherited

Set coordkind_.

coordkind(int coordkind) is protected because, for most Metrics, it should not be changed in runtime.Set coordinate kind

double Gyoto::Metric::Generic::deltaMax ( ) const
inherited

Get delta_max_

virtual double Gyoto::Metric::Generic::deltaMax ( double const  pos[8],
double  delta_max_external 
) const
virtualinherited

Get delta max at a given position

Parameters
pos4-position
optional]delta_max_external external constraint on delta_max
Returns
the smallest value between delta_max_, delta_max_external, and R*delta_max_over_r_ where R is pos[1] in spherical coordinates and max(x1, x2, x3) in Cartesian coordinates.
void Gyoto::Metric::Generic::deltaMax ( double  h1)
inherited

Set delta_max_

double Gyoto::Metric::Generic::deltaMin ( ) const
inherited

Get delta_min_

void Gyoto::Metric::Generic::deltaMin ( double  h1)
inherited

Set delta_min_

virtual void Gyoto::Metric::NumericalMetricLorene::fillElement ( FactoryMessenger *  fmp)
virtual

called from Factory

Metrics implementations should impement fillElement to save their parameters to XML and call the Metric::fillElement(fmp) for the shared properties

Reimplemented from Gyoto::Metric::Generic.

double Gyoto::Metric::NumericalMetricLorene::gmunu ( const double  x[4],
int  mu,
int  nu 
) const

4-Metric

virtual double Gyoto::Metric::Generic::gmunu ( const double *  x,
int  mu,
int  nu 
) const
virtualinherited

Metric coefficients.

The default implementation calls Metric:: gmunu(double g[4][4], const double * pos) const

Parameters
x4-position at which to compute the coefficient;
mu1st index of coefficient, 0≤μ≤3;
nu2nd index of coefficient, 0≤ν≤3;
Returns
Metric coefficient gμ,ν at point x

Reimplemented in Gyoto::Metric::RotStar3_1, Gyoto::Metric::KerrBL, Gyoto::Metric::KerrKS, and Gyoto::Metric::Minkowski.

virtual void Gyoto::Metric::Generic::gmunu ( double  g[4][4],
const double *  pos 
) const
virtualinherited

Metric coefficients.

The default implementation calls double gmunu(const double * x, int mu, int nu) const.

Parameters
[out]g4x4 array to store the coeefficients
[in]x4-position at which to compute the coefficients;
Returns
Metric coefficient gμ,ν at point x

Reimplemented in Gyoto::Metric::KerrKS, Gyoto::Metric::KerrBL, 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

virtual void Gyoto::Hook::Teller::hook ( Listener listener)
virtualinherited

Start listening.

Use from a Hook::Listener object method:

teller->hook(this)

where "this" is a Listener and "teller" is a Teller.

Use unhook() later to stop listening to a given Teller.

Parameters
listenerpointer to the new listener
double Gyoto::Metric::NumericalMetricLorene::Interpol3rdOrder ( double  tt,
int  indice_time,
double  values[4] 
) const

3rd order interpolation routine

virtual int Gyoto::Metric::Generic::isStopCondition ( double const *const  coord) const
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...

Parameters
coord8-coordinate vector to check.

Reimplemented in Gyoto::Metric::KerrBL, and Gyoto::Metric::KerrKS.

void Gyoto::Metric::Generic::kind ( const std::string  )
protectedinherited

Set kind_.

kind(const std::string) is protected because, for most Metrics, it should not be changed in runtime.Set kind_

virtual int Gyoto::Metric::NumericalMetricLorene::myrk4 ( double  tt,
const double  coord[7],
double  h,
double  res[7] 
) const
virtual

Runge-Kutta integrator at order 4

int Gyoto::Metric::NumericalMetricLorene::myrk4_adaptive ( Gyoto::Worldline line,
const double  coord[8],
double  lastnorm,
double  normref,
double  coordnew[8],
double  h0,
double &  h1,
double  h1max 
) const
virtual

Adaptive Runge-Kutta

Reimplemented from Gyoto::Metric::Generic.

virtual void Gyoto::Metric::Generic::nullifyCoord ( double  coord[8]) const
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.

Parameters
[in,out]coord8-position, coord[4] will be set according to the other elements;

Reimplemented in Gyoto::Metric::KerrKS, and Gyoto::Metric::KerrBL.

virtual void Gyoto::Metric::Generic::nullifyCoord ( double  coord[8],
double &  tdot2 
) const
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.

Parameters
[in,out]coord8-position, coord[4] will be set according to the other elements;
[out]tdot2will be set to the smallest solution

Reimplemented in Gyoto::Metric::KerrKS, and Gyoto::Metric::KerrBL.

void Gyoto::Metric::NumericalMetricLorene::reverseR ( double  tt,
double  coord[4] 
) const

Reverse spatial vector if going throough 0, without horizon

virtual double Gyoto::Metric::Generic::ScalarProd ( const double  pos[4],
const double  u1[4],
const double  u2[4] 
) const
virtualinherited

Scalar product.

Compute the scalarproduct of the two quadrivectors u1 and u2 in this Metric, at point pos expressed in coordinate system sys.

Parameters
pos4-position;
u11st quadrivector;
u22nd quadrivector;
Returns
u1*u2

Reimplemented in Gyoto::Metric::RotStar3_1, and Gyoto::Metric::KerrBL.

virtual void Gyoto::Metric::NumericalMetricLorene::setMetricSource ( )
virtual

Access functions to get or set private attributes

virtual void Gyoto::Metric::NumericalMetricLorene::setParameter ( std::string  name,
std::string  content,
std::string  unit 
)
virtual

Set parameter by name.

Assume MyKind is a subclass of Metric::Generic which has two members (a string StringMember and a double DoubleMember):

int MyKind::setParameter(std::string name, std::string content, std::string unit) {
if (name=="StringMember") setStringMember(content);
else if (name=="DoubleMember") setDoubleMemeber(atof(content.c_str()), unit);
else return Generic::setParameter(name, content, unit);
return 0;
}

If MyKind is not a direct subclass of Generic, it should call the corresponding setParameter() implementation instead of Generic::setParameter().

Parameters
nameXML name of the parameter
contentstring representation of the value
unitstring representation of the unit
Returns
0 if this parameter is known, 1 if it is not.

Reimplemented from Gyoto::Metric::Generic.

virtual void Gyoto::Metric::Generic::setParameters ( Gyoto::FactoryMessenger *  fmp)
virtualinherited

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>):

SmartPointer<Metric::Generic>
Gyoto::Metric::MyKind::Subcontractor(FactoryMessenger* fmp) {
SmartPointer<MyKind> gg = new MyKind();
gg -> setParameters(fmp);
return gg;
}
 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 in Gyoto::Metric::RotStar3_1.

virtual double Gyoto::Metric::Generic::SysPrimeToTdot ( const double  coord[4],
const double  v[3] 
) const
virtualinherited

Compute tdot as a function of dr/dt, dtheta/dt and dphi/dt. Everything is in geometrical units.

Parameters
coord4-position (geometrical units);
v3-velocity dx1/dx0, dx2/dx0, dx3/dx0;
Returns
tdot = dx0/dtau.
virtual void Gyoto::Hook::Teller::tellListeners ( )
protectedvirtualinherited

Call tell() on each hooked Listener.

Whenever a Teller mutates, it should warn any Listener hooked to it using tellListeners().

virtual void Gyoto::Hook::Teller::unhook ( Listener listener)
virtualinherited

Stop listening.

Use from a Hook::Listener object method:

teller->unhook(this)

where "this" is a Listener, "teller" is a Teller, and "this" has called teller->hook(this) previously.

Parameters
listenerpointer to the listener
double Gyoto::Metric::Generic::unitLength ( ) const
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).

Member Data Documentation

double Gyoto::Metric::Generic::delta_max_over_r_
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.


The documentation for this class was generated from the following file: