Gyoto
GyotoNumericalMetricLorene.h
Go to the documentation of this file.
1 
8 /*
9  * Copyright (c) 2012 Frederic Vincent
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 class Scalar;
26 class Vector;
27 class Sym_tensor;
28 class Valeur;
29 
30 #include <GyotoMetric.h>
31 #include <GyotoWorldline.h>
32 #include <GyotoSmartPointer.h>
33 #include <GyotoWIP.h>
34 
35 #ifdef GYOTO_USE_XERCES
36 #include <GyotoRegister.h>
37 #endif
38 
46 : public WIP, public Gyoto::Metric::Generic
47 {
49 
50  private:
51  char* filename_;
52  char* mapkind_;
55  double horizon_;
56  double r_refine_;
57  double h0_refine_;
58  int refine_;
59  double initial_time_;
60  Scalar** lapse_tab_;
61  Vector** shift_tab_;
62  Sym_tensor** gamcov_tab_;
63  Sym_tensor** gamcon_tab_;
64  Sym_tensor** kij_tab_;
65  double* times_;
66  int nb_times_;
67  Valeur** nssurf_tab_;
68  Vector** vsurf_tab_;
69  Scalar** lorentz_tab_;
70  Valeur** hor_tab_;
71  double risco_;
72  double rmb_;
73 
74  void free();
75 
76  public:
78  NumericalMetricLorene(const NumericalMetricLorene&);
79  virtual NumericalMetricLorene* clone() const ;
80  virtual ~NumericalMetricLorene() ;
81 
85  virtual void setMetricSource();
86  char const * getFileName() const;
87  Vector** getShift_tab() const;
88  Scalar** getLapse_tab() const;
89  Sym_tensor** getGamcon_tab() const;
90  double* getTimes() const;
91  int getNbtimes() const;
92  Valeur** getNssurf_tab() const;
93  Vector** getVsurf_tab() const;
94  Scalar** getLorentz_tab() const;
95  Valeur** getHor_tab() const;
96  double getRisco() const;
97  double getRmb() const;
98  void setLapse_tab(Scalar* lapse, int ii);
99  void setShift_tab(Vector* shift, int ii);
100  void setGamcov_tab(Sym_tensor* gamcov, int ii);
101  void setGamcon_tab(Sym_tensor* gamcon, int ii);
102  void setKij_tab(Sym_tensor* kij, int ii);
103  void setTimes(double time,int ii);
104 
108  //using Generic::myrk4; //--> why using this?
109  virtual int myrk4(double tt, const double coord[7], double h, double res[7]) const;
110  virtual int myrk4(Worldline* line, const double coord[8],
111  double h, double res[8]) const;
112 
116  int myrk4_adaptive(Gyoto::Worldline* line, const double coord[8], double lastnorm, double normref, double coordnew[8], double h0, double& h1, double h1max) const;
117 
118  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;
120 
124  void reverseR(double tt, double coord[4]) const;
125 
129  void computeNBeta(const double coord[4],double &NN,double beta[3]) const;//Compute lapse and shift at coord
130 
134  double gmunu(const double x[4], int mu, int nu) const ;
135 
136  double gmunu(const double x[3], int indice_time, int mu, int nu) const ;
137 
141  double gmunu_up_dr(const double x[4], int mu, int nu) const ;
142 
143  double gmunu_up_dr(const double x[3], int indice_time, int mu, int nu) const ;
144 
145  double christoffel(const double coord[8], const int alpha, const int mu,
146  const int nu) const ;
150  double christoffel3(const double coord[6], const int indice_time, const int ii,
151  const int jj, const int kk) const ; //3D Christoffel
152 
153  void setParticleProperties(Worldline * line, const double* coord) const;
154 
158  double Interpol3rdOrder(double tt, int indice_time, double values[4]) const;
159  /*Interpolation at order 3 at point tt, the considered function
160  taking the values "values" at time indices "indices".*/
161 
165  double computeHorizon(const double* pos) const;
166  double computeHorizon(const double* pos, int indice) const;
167 
171  using Generic::diff;
172  int diff(double tt, const double y[7], double res[7]) const ;
173  virtual int diff(const double y[7], double res[7], int indice_time) const ;
174 
175  virtual void setParameter(std::string, std::string, std::string);
176 #ifdef GYOTO_USE_XERCES
177  virtual void fillElement(FactoryMessenger *fmp);
178  virtual void setParameters(FactoryMessenger *fmp);
179 #endif
180 
181 };
182 
183 #endif
virtual NumericalMetricLorene * clone() const
Virtual copy constructor.
void setParticleProperties(Worldline *line, const double *coord) const
Set Metric-specific constants of motion. Used e.g. in KerrBL.
double computeHorizon(const double *pos) const
Pointers performing reference counting.
Definition: GyotoSmartPointer.h:51
char * filename_
Lorene .d data file(s) path.
Definition: GyotoNumericalMetricLorene.h:51
Base class for work in progress.
Definition: GyotoWIP.h:46
Scalar ** lorentz_tab_
Lorentz factor at surface (if any)
Definition: GyotoNumericalMetricLorene.h:69
virtual void fillElement(FactoryMessenger *fmp)
called from Factory
double h0_refine_
Imposed integration step for refined integration.
Definition: GyotoNumericalMetricLorene.h:57
Gyoto registers.
char * mapkind_
Kind of Lorene mapping Map_af or Map_et.
Definition: GyotoNumericalMetricLorene.h:52
int nb_times_
Nb of time slices.
Definition: GyotoNumericalMetricLorene.h:66
virtual void setParameter(std::string, std::string, std::string)
Set parameter by name.
double rmb_
Marginally bound orbit coordinate radius.
Definition: GyotoNumericalMetricLorene.h:72
void computeNBeta(const double coord[4], double &NN, double beta[3]) const
void free()
deallocate memory
double Interpol3rdOrder(double tt, int indice_time, double values[4]) const
Base class for metrics.
Definition: GyotoMetric.h:147
Reference-counting pointers.
double r_refine_
Refine integration below this r.
Definition: GyotoNumericalMetricLorene.h:56
virtual void setParameters(FactoryMessenger *fmp)
< called from Factory
Work in progress class.
double gmunu(const double x[4], int mu, int nu) const
Valeur ** hor_tab_
Apparent horizon (if any)
Definition: GyotoNumericalMetricLorene.h:70
double gmunu_up_dr(const double x[4], int mu, int nu) const
void reverseR(double tt, double coord[4]) const
Timelike or null geodesics.
Base class for metric description.
Vector ** vsurf_tab_
4-velocity at surface (if any)
Definition: GyotoNumericalMetricLorene.h:68
int specify_marginalorbits_
1 if marginal orbits are specified in file
Definition: GyotoNumericalMetricLorene.h:54
double risco_
ISCO coordinate radius.
Definition: GyotoNumericalMetricLorene.h:71
Namespace for the Gyoto library.
Definition: GyotoAstrobj.h:42
double christoffel3(const double coord[6], const int indice_time, const int ii, const int jj, const int kk) const
int myrk4_adaptive(Gyoto::Worldline *line, const double coord[8], double lastnorm, double normref, double coordnew[8], double h0, double &h1, double h1max) const
Definition: GyotoNumericalMetricLorene.h:45
virtual int myrk4(double tt, const double coord[7], double h, double res[7]) const
int has_surface_
1 if the metric source has a surface
Definition: GyotoNumericalMetricLorene.h:53
int refine_
1 if refined integration needed
Definition: GyotoNumericalMetricLorene.h:58
double initial_time_
Time at which (first) metric is given.
Definition: GyotoNumericalMetricLorene.h:59
double christoffel(const double coord[8], const int alpha, const int mu, const int nu) const
Chistoffel symbol.
Valeur ** nssurf_tab_
Metric source (e.g. star) surface (if any)
Definition: GyotoNumericalMetricLorene.h:67
double * times_
Coordinate times at which metrics are given.
Definition: GyotoNumericalMetricLorene.h:65
virtual int diff(const double y[8], double res[8]) const
F function such as dy/dtau=F(y,cst)
double horizon_
Value of horizon (or any innermost limit)
Definition: GyotoNumericalMetricLorene.h:55