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 const pos[4], double l_cst) const;
132 
136  virtual int myrk4(double tt, const double coord[7], double h, double res[7]) const;
137  virtual int myrk4(Worldline* line, const double coord[8],
138  double h, double res[8]) const;
139 
143  int myrk4_adaptive(Gyoto::Worldline* line, const double coord[8], double lastnorm, double normref, double coordnew[8], double h0, double& h1, double h1max) const;
144 
145  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;
147 
151  void reverseR(double tt, double coord[7]) const;
152 
156  void computeNBeta(const double coord[4],double &NN,double beta[3]) const;//Compute lapse and shift at coord
157 
161  using Generic::gmunu;
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[4], const int alpha, const int mu,
174  const int nu) const ;
175  double christoffel(const double coord[4],
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[4]) const;
181  int christoffel(double dst[4][4][4],
182  const double coord[4],
183  const int indice_time) const;
187  double christoffel3(const double coord[3], const int indice_time,
188  const int ii, const int jj, const int kk) const ;
189 
190  void setParticleProperties(Worldline * line, const double coord[8]) const;
191 
199  double Interpol3rdOrder(double tt, int indice_time, double values[4]) const;
200 
204  double computeHorizon(const double* pos) const;
205  double computeHorizon(const double* pos, int indice) const;
206 
210  //using Generic::diff;
211  virtual int diff(const double coord[8], double res[8]) const;
212  int diff(double tt, const double y[7], double res[7]) const ;
213  virtual int diff(const double y[7], double res[7], int indice_time) const ;
214 
234  void circularVelocity(double const coor[4], double vel[3],
235  double dir) const ;
236  void circularVelocity(double const coor[4], double vel[3],
237  double dir, int indice_time) const ;
238 
239 };
240 
241 #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
virtual double gmunu(double const x[4], int mu, int nu) const
Metric coefficients.
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