Gyoto
GyotoNumericalMetricLorene.h
Go to the documentation of this file.
1 
8 /*
9  * Copyright (c) 2012-2015 Frederic Vincent, Thibaut Paumard
10  *
11  *
12  */
13 
14 #ifndef __GyotoNumericalMetricLoreneMetric_H_
15 #define __GyotoNumericalMetricLoreneMetric_H_
16 
17 #include <iostream>
18 #include <fstream>
19 
20 namespace Gyoto {
21  namespace Metric { class NumericalMetricLorene; }
22  class FactoryMessenger;
23 }
24 
25 // Forward declarations of Lorene classes
26 namespace Lorene {
27  class Scalar;
28  class Vector;
29  class Sym_tensor;
30  class Valeur;
31 }
32 
33 #include <GyotoMetric.h>
34 #include <GyotoWorldline.h>
35 #include <GyotoSmartPointer.h>
36 #include <GyotoWIP.h>
37 
38 #ifdef GYOTO_USE_XERCES
39 #include <GyotoRegister.h>
40 #endif
41 
49 : public WIP, public Gyoto::Metric::Generic
50 {
52 
53  private:
54  char* filename_;
55  bool mapet_;
56  bool bosonstarcircular_;
57  int has_surface_;
58  int specify_marginalorbits_;
59  double horizon_;
60  double r_refine_;
61  double h0_refine_;
62  int refine_;
63  double initial_time_;
64  Lorene::Scalar** lapse_tab_;
65  Lorene::Vector** shift_tab_;
66  Lorene::Sym_tensor** gamcov_tab_;
67  Lorene::Sym_tensor** gamcon_tab_;
68  Lorene::Sym_tensor** kij_tab_;
69  double* times_;
70  int nb_times_;
71  Lorene::Valeur** nssurf_tab_;
72  Lorene::Vector** vsurf_tab_;
73  Lorene::Scalar** lorentz_tab_;
74  Lorene::Valeur** hor_tab_;
75  double risco_;
76  double rico_;
77  double rmb_;
78 
79  void free();
80 
81  public:
84  NumericalMetricLorene(const NumericalMetricLorene&);
85  virtual NumericalMetricLorene* clone() const ;
86  virtual ~NumericalMetricLorene() ;
87 
91  virtual void setMetricSource();
92 
93  void directory(std::string const &dir) ;
94  std::string directory() const ;
95  double initialTime() const ;
96  void initialTime(double t0);
97  double horizon() const ;
98  void horizon(double t0);
99  double rico() const ;
100  void rico(double r0);
101  bool hasSurface() const;
102  void hasSurface(bool s);
103  bool bosonstarcircular() const;
104  void bosonstarcircular(bool);
105  bool specifyMarginalOrbits() const;
106  void specifyMarginalOrbits(bool s);
107  bool mapEt() const;
108  void mapEt(bool s);
109  std::vector<double> refineIntegStep() const;
110  void refineIntegStep(std::vector<double> const&);
111 
112  Lorene::Vector** getShift_tab() const;
113  Lorene::Scalar** getLapse_tab() const;
114  Lorene::Sym_tensor** getGamcon_tab() const;
115  double* getTimes() const;
116  int getNbtimes() const;
117  Lorene::Valeur** getNssurf_tab() const;
118  Lorene::Vector** getVsurf_tab() const;
119  Lorene::Scalar** getLorentz_tab() const;
120  Lorene::Valeur** getHor_tab() const;
121  double getRms() const;
122  double getRmb() const;
123  void setLapse_tab(Lorene::Scalar* lapse, int ii);
124  void setShift_tab(Lorene::Vector* shift, int ii);
125  void setGamcov_tab(Lorene::Sym_tensor* gamcov, int ii);
126  void setGamcon_tab(Lorene::Sym_tensor* gamcon, int ii);
127  void setKij_tab(Lorene::Sym_tensor* kij, int ii);
128  void setTimes(double time,int ii);
129 
130  virtual double getSpecificAngularMomentum(double rr) const;
131  virtual double getPotential(double pos[4], double l_cst) const;
132 
136  //using Generic::myrk4; //--> why using this?
137  virtual int myrk4(double tt, const double coord[7], double h, double res[7]) const;
138  virtual int myrk4(Worldline* line, const double coord[8],
139  double h, double res[8]) const;
140 
144  int myrk4_adaptive(Gyoto::Worldline* line, const double coord[8], double lastnorm, double normref, double coordnew[8], double h0, double& h1, double h1max) const;
145 
146  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;
148 
152  void reverseR(double tt, double coord[4]) const;
153 
157  void computeNBeta(const double coord[4],double &NN,double beta[3]) const;//Compute lapse and shift at coord
158 
162  double gmunu(const double x[4], int mu, int nu) const ;
163 
164  double gmunu(const double x[3], int indice_time, int mu, int nu) const ;
165 
169  double gmunu_up_dr(const double x[4], int mu, int nu) const ;
170 
171  double gmunu_up_dr(const double x[3], int indice_time, int mu, int nu) const ;
172 
173  double christoffel(const double coord[8], const int alpha, const int mu,
174  const int nu) const ;
175  double christoffel(const double coord[8],
176  const int alpha,
177  const int mu, const int nu,
178  const int indice_time) const;
179  virtual int christoffel(double dst[4][4][4],
180  const double * coord) const;
181  int christoffel(double dst[4][4][4],
182  const double * coord,
183  const int indice_time) const;
187  double christoffel3(const double coord[6], const int indice_time, const int ii,
188  const int jj, const int kk) const ; //3D Christoffel
189 
190  void setParticleProperties(Worldline * line, const double* coord) const;
191 
195  double Interpol3rdOrder(double tt, int indice_time, double values[4]) const;
196  /*Interpolation at order 3 at point tt, the considered function
197  taking the values "values" at time indices "indices".*/
198 
202  double computeHorizon(const double* pos) const;
203  double computeHorizon(const double* pos, int indice) const;
204 
208  //using Generic::diff;
209  virtual int diff(const double coord[8], double res[8]) const;
210  int diff(double tt, const double y[7], double res[7]) const ;
211  virtual int diff(const double y[7], double res[7], int indice_time) const ;
212 
232  void circularVelocity(double const * coor, double* vel,
233  double dir) const ;
234  void circularVelocity(double const * coor, double* vel,
235  double dir, int indice_time) const ;
236 
237 };
238 
239 #endif
#define GYOTO_OBJECT
Declare class::properties and class::getProperties()
Definition: GyotoObject.h:83
Base class for work in progress.
Definition: GyotoWIP.h:46
Gyoto registers.
Base class for metrics.
Definition: GyotoMetric.h:148
Reference-counting pointers.
Work in progress class.
Definition: GyotoNumericalMetricLorene.h:26
Timelike or null geodesics.
Base class for metric description.
Namespace for the Gyoto library.
Definition: GyotoAstrobj.h:43
Pointers performing reference counting.
Definition: GyotoProperty.h:41
Definition: GyotoNumericalMetricLorene.h:48