Gyoto
Public Member Functions | Protected Types | Protected Member Functions | Protected Attributes | Private Member Functions | Friends | List of all members
Gyoto::Metric::KerrBL Class Reference

Metric around a Kerr black-hole in Boyer-Lindquist coordinates. More...

#include <GyotoKerrBL.h>

Inheritance diagram for Gyoto::Metric::KerrBL:
Gyoto::Metric::Generic Gyoto::SmartPointee Gyoto::Hook::Teller

Public Member Functions

 KerrBL ()
 Default constructor.
 
 KerrBL (double spin, double mass)
 Constructor with spin and mass specification.
 
 KerrBL (const KerrBL &)
 Copy constructor.
 
virtual ~KerrBL ()
 Destructor.
 
void setSpin (const double spin)
 Set spin.
 
virtual KerrBLclone () const
 Virtual copy constructor.
 
double getSpin () const
 Returns spin.
 
double getRms () const
 Returns prograde marginally stable orbit.
 
double getRmb () const
 Returns prograde marginally bound orbit.
 
double gmunu (const double *const x, int mu, int nu) const
 Metric coefficients. More...
 
double gmunu_up (const double *const x, int mu, int nu) const
 gμ,ν
 
double christoffel (const double[8], const int, const int, const int) const
 Chistoffel symbol. More...
 
double ScalarProd (const double pos[4], const double u1[4], const double u2[4]) const
 Scalar product. More...
 
void nullifyCoord (double coord[8], double &tdot2) const
 Set tdot (coord[4]) such that coord is light-like and return other possible tdot. More...
 
void nullifyCoord (double coord[8]) const
 Set tdot (coord[4]) such that coord is light-like. Everything is in geometrical units. More...
 
virtual void circularVelocity (double const pos[4], double vel[4], double dir=1.) const
 Yield circular valocity at a given position (projected on equatorial plane). More...
 
virtual void MakeCoord (const double coordin[8], const double cst[5], double coordout[8]) const
 Inverse function of MakeMomentumAndCst. More...
 
void MakeMomentum (const double coordin[8], const double cst[5], double coordout[8]) const
 Transforms from Boyer-Lindquist coordinates [t,r,th,phi,tdot,rdot,thdot,phidot] to [t,r,th,phi,pt,pr,pth,pphi] where pt,pr... are generalized momenta.
 
virtual void setParameter (std::string, std::string, std::string)
 Set parameter by name. More...
 
virtual void fillElement (FactoryMessenger *fmp)
 called from Factory
 
void setParticleProperties (Worldline *line, const double *coord) const
 Set Metric-specific constants of motion. Used e.g. in KerrBL.
 
const std::string getKind () const
 Get kind_.
 
void setKind (const std::string)
 Set kind_.
 
int getRefCount ()
 
void setMass (const double)
 Set mass used in unitLength()
 
void setMass (const double, const std::string &unit)
 Set mass used in unitLength()
 
int getCoordKind () const
 Get coordinate kind.
 
void setCoordKind (int coordkind)
 Set coordinate kind.
 
double getMass () const
 Get mass used in unitLength()
 
double getMass (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
 
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 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 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

int myrk4 (Worldline *line, const double coordin[8], double h, double res[8]) const
 RK4 integrator.
 
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 spin_
 Angular momentum parameter.
 
int modifkerr_CS_
 Chern-Simons modification.
 

Private Member Functions

int myrk4 (const double coor[8], const double cst[5], double h, double res[8]) const
 Internal-use RK4 proxy.
 
int myrk4_adaptive (Gyoto::Worldline *line, const double coor[8], double lastnorm, double normref, double coor1[8], double h0, double &h1) const
 Interal-use adaptive RK4 proxy.
 
int CheckCons (const double coor_init[8], const double cst[5], double coor_fin[8]) const
 Ensure conservation of the constants of motion. More...
 
void Normalize4v (double coord[8], const double part_mass) const
 Normalize 4-velocity. More...
 
virtual int diff (const double y[8], const double cst[5], double res[8]) const
 Used in RK4 proxies.
 
virtual void computeCst (const double coord[8], double cst[5]) const
 

Friends

class Gyoto::SmartPointer< Gyoto::Metric::KerrBL >
 

Detailed Description

Metric around a Kerr black-hole in Boyer-Lindquist coordinates.

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

int Gyoto::Metric::KerrBL::CheckCons ( const double  coor_init[8],
const double  cst[5],
double  coor_fin[8] 
) const
private

Ensure conservation of the constants of motion.

Tweak thetadot if necessary.

double Gyoto::Metric::KerrBL::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).

Implements Gyoto::Metric::Generic.

virtual void Gyoto::Metric::KerrBL::circularVelocity ( double const  pos[4],
double  vel[4],
double  dir = 1. 
) const
virtual

Yield circular valocity at a given position (projected on equatorial plane).

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

Reimplemented from Gyoto::Metric::Generic.

virtual void Gyoto::Metric::KerrBL::computeCst ( const double  coord[8],
double  cst[5] 
) const
privatevirtual

Integrator. Computes the evolution of y (initcond=y(0)).

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

Metric coefficients.

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

Implements Gyoto::Metric::Generic.

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
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::KerrKS.

virtual void Gyoto::Metric::KerrBL::MakeCoord ( const double  coordin[8],
const double  cst[5],
double  coordout[8] 
) const
virtual

Inverse function of MakeMomentumAndCst.

Computes pr, ptheta, E and L from rdot, thetadot, phidot, tdot

void Gyoto::Metric::KerrBL::Normalize4v ( double  coord[8],
const double  part_mass 
) const
private

Normalize 4-velocity.

To 0 or -1. Changes rdot to allow norm conservation.

void Gyoto::Metric::KerrBL::nullifyCoord ( double  coord[8],
double &  tdot2 
) const
virtual

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

void Gyoto::Metric::KerrBL::nullifyCoord ( double  coord[8]) const
virtual

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

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

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

virtual void Gyoto::Metric::KerrBL::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).


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