Gyoto
GyotoKerrBL.h
Go to the documentation of this file.
1 
7 /*
8  Copyright 2011 Frederic Vincent, Thibaut Paumard
9 
10  This file is part of Gyoto.
11 
12  Gyoto is free software: you can redistribute it and/or modify
13  it under the terms of the GNU General Public License as published by
14  the Free Software Foundation, either version 3 of the License, or
15  (at your option) any later version.
16 
17  Gyoto is distributed in the hope that it will be useful,
18  but WITHOUT ANY WARRANTY; without even the implied warranty of
19  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20  GNU General Public License for more details.
21 
22  You should have received a copy of the GNU General Public License
23  along with Gyoto. If not, see <http://www.gnu.org/licenses/>.
24  */
25 
26 #ifndef __GyotoKerrBL_H_
27 #define __GyotoKerrBL_H_
28 
29 namespace Gyoto {
30  namespace Metric { class KerrBL; }
31 }
32 
33 #include <GyotoMetric.h>
34 #include <GyotoWorldline.h>
35 
36 #ifdef GYOTO_USE_XERCES
37 #include <GyotoRegister.h>
38 #endif
39 
40 
42 #define GYOTO_KERRBL_DEFAULT_DIFFTOL 1e-2
43 
49  friend class Gyoto::SmartPointer<Gyoto::Metric::KerrBL>;
50 
51  // Data :
52  // -----
53  protected:
54  double spin_ ;
55  double a2_ ;
56  double a3_ ;
57  double a4_ ;
58 
60 
64  double difftol_;
65  double rsink_;
66  double drhor_;
68 
69  // Constructors - Destructor
70  // -------------------------
71  public:
73  KerrBL();
74  virtual KerrBL * clone () const ;
75 
76  // Accessors
77  // ---------
78  public:
79  void spin(const double spin);
80  double spin() const ;
81 
82  double difftol() const;
83  void difftol(double t);
84 
85  void horizonSecurity(double drhor);
86  double horizonSecurity() const;
87  void genericIntegrator(bool);
88  bool genericIntegrator() const ;
89 
90  virtual double getRms() const;
91 
92  virtual double getRmb() const;
93 
94  virtual double getSpecificAngularMomentum(double rr) const;
95 
96  virtual double getPotential(double pos[4], double l_cst) const;
97 
98  void gmunu(double g[4][4], const double * pos) const ;
99  double gmunu(const double * const x, int mu, int nu) const ;
100 
104  void gmunu_up(double gup[4][4], const double * pos) const ;
105  double gmunu_up(const double * const x, int mu, int nu) const ;
106 
107  using Generic::christoffel;
108  int christoffel(double dst[4][4][4], const double * pos) const ;
109 
110  double ScalarProd(const double pos[4],
111  const double u1[4], const double u2[4]) const ;
112 
113  void nullifyCoord(double coord[8], double & tdot2) const;
114  void nullifyCoord(double coord[8]) const;
115 
116  // friend std::ostream& operator<<(std::ostream& , const KerrBL& ) ;
117  // std::ostream& print(std::ostream&) const ;
118  virtual void circularVelocity(double const pos[4], double vel [4],
119  double dir=1.) const ;
120 
121  public:
122  virtual void MakeCoord(const double coordin[8], const double cst[5], double coordout[8]) const ;
124 
126  void MakeMomentum(const double coordin[8], const double cst[5], double coordout[8]) const;
128 
129  protected:
130 
131  // outside the API
132  /* RK4 : y=[r,theta,phi,t,pr,ptheta],
133  cst=[a,E,L,Q,1/Q],dy/dtau=F(y,cst), h=proper time step.
134  For KerrBL geodesic computation.
135  */
136  int myrk4(Worldline * line, const double coordin[8], double h, double res[8]) const; //external-use RK4
137 
138  public:
139  int myrk4(const double coor[8], const double cst[5], double h, double res[8]) const;
140  int myrk4_adaptive(Gyoto::Worldline* line, const double coor[8], double lastnorm, double normref, double coor1[8], double h0, double& h1, double h1max=GYOTO_DEFAULT_DELTA_MAX) const;
141 
146  private:
147  int CheckCons(const double coor_init[8], const double cst[5], double coor_fin[8]) const;
148 
154  void Normalize4v(double coord[8], const double part_mass) const;
155 
156  public:
159  using Metric::Generic::diff;
160  private:
164  virtual int diff(const double y[8], const double cst[5],
165  double res[8]) const ;
168  virtual void computeCst(const double coord[8], double cst[5]) const;
169  public:
170  void setParticleProperties(Worldline* line, const double* coord) const;
171  virtual int isStopCondition(double const * const coord) const;
172 
173  void observerTetrad(std::string const obskind,
174  double const pos[4], double fourvel[4],
175  double screen1[4], double screen2[4],
176  double screen3[4]) const;
177 };
178 
179 #endif
180 
bool generic_integrator_
which integrator to use
Definition: GyotoKerrBL.h:67
#define GYOTO_OBJECT
Declare class::properties and class::getProperties()
Definition: GyotoObject.h:83
Pointers performing reference counting.
Definition: GyotoProperty.h:41
void gmunu(double g[4][4], const double *pos) const
Metric coefficients.
void nullifyCoord(double coord[8], double &tdot2) const
Set tdot (coord[4]) such that coord is light-like and return other possible tdot. ...
Gyoto registers.
double drhor_
horizon security
Definition: GyotoKerrBL.h:66
Metric around a Kerr black-hole in Boyer-Lindquist coordinates.
Definition: GyotoKerrBL.h:48
virtual int isStopCondition(double const *const coord) const
Check whether integration should stop.
Base class for metrics.
Definition: GyotoMetric.h:148
int myrk4_adaptive(Gyoto::Worldline *line, const double coor[8], double lastnorm, double normref, double coor1[8], double h0, double &h1, double h1max=GYOTO_DEFAULT_DELTA_MAX) const
Internal-use adaptive RK4 proxy.
double spin_
Angular momentum parameter.
Definition: GyotoKerrBL.h:54
double a2_
spin_*spin_
Definition: GyotoKerrBL.h:55
double difftol_
Numerical tuning parameter.
Definition: GyotoKerrBL.h:64
virtual double christoffel(const double coord[8], const int alpha, const int mu, const int nu) const
Chistoffel symbol.
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 double getRmb() const
virtual double getPotential(double pos[4], double l_cst) const
double a3_
a2_*spin_
Definition: GyotoKerrBL.h:56
Timelike or null geodesics.
double a4_
a2_*a2_
Definition: GyotoKerrBL.h:57
Base class for metric description.
double difftol() const
Get difftol_.
void setParticleProperties(Worldline *line, const double *coord) const
Set Metric-specific constants of motion. Used e.g. in KerrBL.
double rsink_
numerical horizon
Definition: GyotoKerrBL.h:65
Namespace for the Gyoto library.
Definition: GyotoAstrobj.h:43
int myrk4(Worldline *line, const double coordin[8], double h, double res[8]) const
RK4 integrator.
virtual void circularVelocity(double const pos[4], double vel[4], double dir=1.) const
Yield circular velocity at a given position.
virtual int diff(const double y[8], const double cst[5], double res[8]) const
Used in RK4 proxies.
virtual void MakeCoord(const double coordin[8], const double cst[5], double coordout[8]) const
Inverse function of MakeMomentumAndCst.
virtual double getSpecificAngularMomentum(double rr) const
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...
int CheckCons(const double coor_init[8], const double cst[5], double coor_fin[8]) const
Ensure conservation of the constants of motion.
virtual void computeCst(const double coord[8], double cst[5]) const
virtual KerrBL * clone() const
Virtual copy constructor.
double ScalarProd(const double pos[4], const double u1[4], const double u2[4]) const
Scalar product.
void gmunu_up(double gup[4][4], const double *pos) const
gμ,ν
void Normalize4v(double coord[8], const double part_mass) const
Normalize 4-velocity.
double spin() const
Returns spin.
virtual int diff(const double y[8], double res[8]) const
F function such as dy/dtau=F(y,cst)
virtual double getRms() const