25 #ifndef __GyotoWorldline_H_ 26 #define __GyotoWorldline_H_ 35 #ifdef GYOTO_HAVE_BOOST_INTEGRATORS 36 # include <functional> 38 # include <boost/numeric/odeint/stepper/controlled_step_result.hpp> 39 # include <boost/numeric/odeint/algebra/vector_space_algebra.hpp> 40 # include <boost/numeric/odeint/stepper/controlled_runge_kutta.hpp> 47 class FactoryMessenger;
62 #define GYOTO_WORLDLINE_PROPERTIES(c) \ 63 Gyoto::Property("Gyoto::Worldline", "Time-like or null geodesic."), \ 64 GYOTO_PROPERTY_BOOL(c, Integ31, Integ4D, _integ31, \ 65 "Whether to integrate the 3+1 or 4D equation of geodesics.") \ 66 GYOTO_PROPERTY_BOOL(c, HighOrderImages, PrimaryOnly, _secondary, \ 67 "Whether to stop Photon integration at 180° deflection.") \ 68 GYOTO_PROPERTY_BOOL(c, ParallelTransport, NoParallelTransport, _parallelTransport, \ 69 "Whether to perform parallel transport of a local triad (used for polarization).") \ 70 GYOTO_PROPERTY_BOOL(c, CheckBasis, NoCheckBasis, _checkBasis, \ 71 "Whether to check basis orthogonality during parallel transport.") \ 72 GYOTO_PROPERTY_DOUBLE(c, MaxCrossEqplane, _maxCrossEqplane, \ 73 "Maximum number of crossings of the equatorial plane allowed for this worldline") \ 74 GYOTO_PROPERTY_DOUBLE(c, RelTol, _relTol, \ 75 "Relative tolerance for the adaptive step integrators.") \ 76 GYOTO_PROPERTY_DOUBLE(c, AbsTol, _absTol, \ 77 "Absolute tolerance for the adaptive step integrators.") \ 78 GYOTO_PROPERTY_DOUBLE(c, NormTol, _normTol, \ 79 "Tolerance on 4-velocity norm variations.") \ 80 GYOTO_PROPERTY_DOUBLE(c, DeltaMaxOverR, _deltaMaxOverR, \ 81 "Maximum value of step/distance from center of mass.") \ 82 GYOTO_PROPERTY_DOUBLE(c, DeltaMax, _deltaMax, "Maximum step (geometrical units).") \ 83 GYOTO_PROPERTY_DOUBLE(c, DeltaMin, _deltaMin, "Minimum step (geometrical units).") \ 84 GYOTO_PROPERTY_STRING(c, Integrator, _integrator, \ 85 "Name of integrator (\"runge_kutta_fehlberg78\").") \ 86 GYOTO_PROPERTY_SIZE_T(c, MaxIter, _maxiter, \ 87 "Maximum number of integration steps.") \ 88 GYOTO_PROPERTY_BOOL(c, Adaptive, NonAdaptive, _adaptive, \ 89 "Whether to use an adaptive step.") \ 90 GYOTO_PROPERTY_DOUBLE_UNIT(c, MinimumTime, _tMin, \ 91 "Do not integrate earlier than this date (geometrical_time).") \ 92 GYOTO_PROPERTY_DOUBLE_UNIT(c, Delta, _delta, \ 93 "Initial integration step (geometrical units).") \ 94 GYOTO_PROPERTY_VECTOR_DOUBLE(c, InitCoord, _initCoord, \ 95 "Initial 8-coordinate.") \ 96 GYOTO_PROPERTY_METRIC(c, Metric, _metric, \ 97 "The geometry of space-time at this end of the Universe.") 114 #define GYOTO_WORLDLINE_ACCESSORS(c) \ 115 void c::_integ31(bool s) {integ31(s);} \ 116 bool c::_integ31() const {return integ31();} \ 117 void c::_secondary(bool s) {secondary(s);} \ 118 bool c::_secondary() const {return secondary();} \ 119 void c::_parallelTransport(bool s) {parallelTransport(s);} \ 120 bool c::_parallelTransport() const {return parallelTransport();} \ 121 void c::_checkBasis(bool s) {checkBasis(s);} \ 122 bool c::_checkBasis() const {return checkBasis();} \ 123 void c::_adaptive(bool s) {adaptive(s);} \ 124 bool c::_adaptive() const {return adaptive();} \ 125 void c::_maxCrossEqplane(double max){maxCrossEqplane(max);} \ 126 double c::_maxCrossEqplane()const{return maxCrossEqplane();} \ 127 void c::_relTol(double f){relTol(f);} \ 128 double c::_relTol()const{return relTol();} \ 129 void c::_absTol(double f){absTol(f);} \ 130 double c::_absTol()const{return absTol();} \ 131 void c::_deltaMin(double f){deltaMin(f);} \ 132 double c::_deltaMin()const{return deltaMin();} \ 133 void c::_deltaMax(double f){deltaMax(f);} \ 134 double c::_deltaMax()const{return deltaMax();} \ 135 void c::_normTol(double f){normTol(f);} \ 136 double c::_normTol()const{return normTol();} \ 137 void c::_deltaMaxOverR(double f){deltaMaxOverR(f);} \ 138 double c::_deltaMaxOverR()const{return deltaMaxOverR();} \ 139 void c::_delta(double f){delta(f);} \ 140 double c::_delta()const{return delta();} \ 141 void c::_delta(double f, std::string const &u){delta(f, u);} \ 142 double c::_delta(std::string const &u)const{return delta(u);} \ 143 void c::_tMin(double f){tMin(f);} \ 144 double c::_tMin()const{return tMin();} \ 145 void c::_tMin(double f, std::string const &u){tMin(f, u);} \ 146 double c::_tMin(std::string const &u)const{return tMin(u);} \ 147 void c::_maxiter(size_t f){maxiter(f);} \ 148 size_t c::_maxiter()const{return maxiter();} \ 149 void c::_integrator(std::string const &f){integrator(f);} \ 150 std::string c::_integrator() const {return integrator();} \ 151 std::vector<double> c::_initCoord()const{return initCoord();} \ 152 void c::_initCoord(std::vector<double> const &f){initCoord(f);} \ 153 void c::_metric(SmartPointer<Metric::Generic>f){metric(f);} \ 154 SmartPointer<Metric::Generic> c::_metric() const{return metric();} 163 #define GYOTO_WORLDLINE_PROPERTY_END(c, a) \ 164 GYOTO_WORLDLINE_PROPERTIES(c) \ 165 GYOTO_PROPERTY_END(c, a) \ 166 GYOTO_WORLDLINE_ACCESSORS(c) 176 #define GYOTO_WORLDLINE \ 177 void _delta(const double delta); \ 178 void _delta(double, const std::string &unit); \ 179 double _delta() const ; \ 180 double _delta(const std::string &unit) const ; \ 181 void _tMin(const double tmin); \ 182 void _tMin(double, const std::string &unit); \ 183 double _tMin() const ; \ 184 double _tMin(const std::string &unit) const ; \ 185 void _adaptive (bool mode) ; \ 186 bool _adaptive () const ; \ 187 void _secondary (bool sec) ; \ 188 bool _secondary () const ; \ 189 void _integ31 (bool sec) ; \ 190 bool _integ31 () const ; \ 191 void _parallelTransport (bool sec) ; \ 192 bool _parallelTransport () const ; \ 193 void _checkBasis (bool sec) ; \ 194 bool _checkBasis () const ; \ 195 void _maxiter (size_t miter) ; \ 196 size_t _maxiter () const ; \ 197 void _integrator(std::string const & type); \ 198 std::string _integrator() const ; \ 199 double _deltaMin() const; \ 200 void _deltaMin(double h1); \ 201 double _normTol() const; \ 202 void _normTol(double normtol); \ 203 void _absTol(double); \ 204 double _absTol()const; \ 205 void _maxCrossEqplane(double); \ 206 double _maxCrossEqplane()const; \ 207 void _relTol(double); \ 208 double _relTol()const; \ 209 void _deltaMax(double h1); \ 210 double _deltaMax()const; \ 211 double _deltaMaxOverR() const; \ 212 void _deltaMaxOverR(double t); \ 213 std::vector<double> _initCoord()const; \ 214 void _initCoord(std::vector<double> const&f); \ 215 void _metric(SmartPointer<Metric::Generic>); \ 216 SmartPointer<Metric::Generic> _metric() const; 429 size_t getI0()
const;
431 virtual double getMass()
const = 0;
435 void initCoord(std::vector<double>
const&);
436 std::vector<double> initCoord()
const;
460 virtual void setInitCoord(
const double coord[8],
int dir,
461 double const Ephi[4],
462 double const Etheta[4]);
483 virtual void setInitCoord(
const double coord[8],
int dir = 0);
492 virtual void setInitCoord(
double const pos[4],
double const vel[3],
int dir=0);
568 virtual double deltaMax(
double const pos[8],
double delta_max_external)
const;
602 virtual size_t xExpand(
int dir);
611 virtual void xExpand(
double * &x,
int dir);
633 void delta(
double,
const std::string &unit);
634 double delta()
const ;
635 double delta(
const std::string &unit)
const ;
636 double tMin()
const ;
637 double tMin(
const std::string &unit)
const ;
638 void tMin(
double tlim);
639 void tMin(
double,
const std::string &unit);
660 double const *
getCst()
const ;
671 void setCst(
double const * cst,
size_t const ncsts) ;
703 const double coord[8],
705 double const Ephi[4],
double const Etheta[4]) ;
716 const double coord[8],
731 void getCoord(
size_t index, Gyoto::state_t &dest)
const;
737 void getCoord(
size_t index, Gyoto::state_t &dest) ;
744 void getCoord(
double date, Gyoto::state_t &dest,
bool proper=
false);
749 virtual void xStore(
size_t ind, state_t
const &coord,
double tau) ;
750 virtual void xStore(
size_t ind, state_t
const &coord) =
delete;
751 virtual void xStore(
size_t ind,
double const coord[8]) =
delete;
752 virtual void xFill(
double tlim,
bool proper=
false) ;
767 void get_t(
double *dest)
const;
772 void get_tau(
double *dest)
const;
791 void getCartesian(
double const *
const dates,
size_t const n_dates,
792 double *
const x,
double *
const y,
793 double *
const z,
double *
const xprime=NULL,
794 double *
const yprime=NULL,
double *
const zprime=NULL) ;
799 void get_xyz(
double* x,
double *y,
double *z)
const;
832 void getCoord(
double const *
const dates,
size_t const n_dates,
833 double *
const x1dest,
834 double *
const x2dest,
double *
const x3dest,
835 double *
const x0dot=NULL,
double *
const x1dot=NULL,
836 double *
const x2dot=NULL,
double *
const x3dot=NULL,
837 double * ep0=NULL,
double * ep1=NULL,
double * ep2=NULL,
double * ep3=NULL,
838 double * et0=NULL,
double * et1=NULL,
double * et2=NULL,
double * et3=NULL,
839 double * otime=NULL,
bool proper=
false) ;
847 void getCoord(
double *x0,
double *x1,
double *x2,
double *x3)
const ;
867 void get_dot(
double *x0dot,
double *x1dot,
double *x2dot,
double *x3dot)
const ;
872 void get_prime(
double *x1prime,
double *x2prime,
double *x3prime)
const ;
878 void save_txyz(
char * fichierxyz)
const ;
879 void save_txyz(
char*
const filename,
double const t1,
double const mass_sun,
890 #ifdef GYOTO_HAVE_BOOST_INTEGRATORS 902 #ifndef GYOTO_SWIGIMPORTED 957 virtual void
init(Worldline * line, const state_t &coord, const double delta);
959 virtual void
init(Worldline * line, const double *coord, const double delta) = delete;
982 virtual std::string
kind()=0;
996 virtual int
nextStep(state_t &coord, double &tau, double h1max=GYOTO_DEFAULT_DELTA_MAX)=0;
998 virtual int
nextStep(double *coord, double h1max=GYOTO_DEFAULT_DELTA_MAX) = delete;
1010 virtual void
doStep(state_t const &coordin,
1012 state_t &coordout)=0;
1014 virtual void
doStep(double const coordin[8],
1016 double coordout[8]) = delete;
1042 Legacy(Worldline *parent);
1045 void
init(Worldline * line, const state_t &coord, const double delta);
1046 virtual std::string
kind();
1048 virtual int
nextStep(state_t &coord, double &tau, double h1max=1e6);
1050 virtual void
doStep(state_t const &coordin,
1057 #ifdef GYOTO_HAVE_BOOST_INTEGRATORS 1075 enum
Kind {runge_kutta_cash_karp54,
1076 runge_kutta_fehlberg78,
1078 runge_kutta_cash_karp54_classic };
1083 typedef std::function<boost::numeric::odeint::controlled_step_result
1084 (state_t&,
double&,
double&)> try_step_t;
1085 typedef std::function<void(state_t&, double)> do_step_t;
1086 typedef std::function<void(
const state_t &,
1088 const double )> system_t;
1096 void setup_stepper();
1100 template<
class Value,
class Algebra = boost::numeric::ode
int::range_algebra,
class Operations = boost::numeric::ode
int::default_operations>
1103 using default_checker = boost::numeric::odeint::default_error_checker<Value, Algebra, Operations>;
1105 default_checker checker;
1108 const double& ref_norm;
1113 const double& ref_norm,
1115 const do_step_t& do_step)
1116 : checker(abs_tol, rel_tol), met(met),
normTol(normTol_), ref_norm(ref_norm), do_step_(do_step) {}
1118 const do_step_t& do_step_;
1120 template<
class State,
class Deriv,
class Err,
class Time>
1121 Value error(Algebra &algebra,
1123 const Deriv &dxdt_old,
1125 const Time &dt)
const 1128 Value err_default = checker.error(algebra, x_old, dxdt_old, x_err, dt);
1131 state_t x_new=x_old;
1132 do_step_(x_new, dt);
1144 <<
" norm_drift = " << norm_drift
1145 <<
" max = " << std::max(err_default, norm_drift)
1150 return std::max(err_default, (norm_drift > 1.0 ? norm_drift : 0.0));
1173 virtual void init();
1175 virtual int nextStep(state_t &coord,
double &tau,
double h1max=1e6);
1176 virtual void doStep(state_t
const &coordin,
1179 virtual std::string
kind();
1182 double checkBasis(state_t
const &coord)
const;
1183 void reorthonormalizeBasis(state_t &coord)
const;
double delta_max_over_r_
Numerical tuning parameter.
Definition: GyotoWorldline.h:363
double maxCrossEqplane() const
Get maxCrossEqplane_.
double * init_vel_
Hack in setParameters()
Definition: GyotoWorldline.h:331
void getSkyPos(SmartPointer< Screen > screen, double *dalpha, double *ddellta, double *dD) const
Get computed positions in sky coordinates.
size_t get_nelements() const
Get number of computed dates.
void reset()
Forget integration, keeping initial contition.
void integ31(bool integ)
Defines the kind of geodesic equation to integrate (3+1, 4D)
virtual void setPosition(double const pos[4])
Set initial 4-position.
double deltaMax() const
Get delta_max_.
double maxCrossEqplane_
Maximum number of crossings of equatorial plane.
Definition: GyotoWorldline.h:400
Timelike or null geodesics.
Definition: GyotoWorldline.h:254
SmartPointer< Gyoto::Metric::Generic > metric_
The Gyoto::Metric in this part of the universe.
Definition: GyotoWorldline.h:264
double delta_
Initial integrating step.
Definition: GyotoWorldline.h:314
void get_tau(double *dest) const
Get computed proper times or values of the affine parameter.
virtual void xFill(double tlim, bool proper=false)
Fill x0, x1... by integrating the Worldline from previously set inittial condition to time tlim...
void save_txyz(char *fichierxyz) const
Save in a file.
Tellers tell Listeners when they mutate.
virtual void xStore(size_t ind, state_t const &coord, double tau)
Store coord at index ind.
bool parallel_transport_
Whether to parallel-transport base vectors.
Definition: GyotoWorldline.h:921
Base class for metrics.
Definition: GyotoMetric.h:163
Reference-counting pointers.
virtual std::string className_l() const
"worldline"
Boost integrator.
Definition: GyotoWorldline.h:1068
do_step_t do_step_
Stepper used by the non-adaptive-step integrator.
Definition: GyotoWorldline.h:1094
void setInitialCondition(SmartPointer< Metric::Generic > gg, const double coord[8], const int dir, double const Ephi[4], double const Etheta[4])
Set or re-set the initial condition prior to integration.
#define GYOTO_DEBUG
Display debug message (in debug mode)
Definition: GyotoDefs.h:367
void reInit()
Reset and recompute particle properties.
double tmin_
Time limit for the integration (geometrical units)
Definition: GyotoWorldline.h:326
Kind
Enum to represent the integrator flavour.
Definition: GyotoWorldline.h:1075
double delta_min_
Minimum integration step for the adaptive integrator.
Definition: GyotoWorldline.h:341
double * tau_
proper time or affine parameter
Definition: GyotoWorldline.h:265
size_t getImax() const
Get imax_.
virtual void eExpand(int dir)
virtual void checkNorm(double coord[8])
Check norm.
bool check_basis_
Whether to check for orthogonality.
Definition: GyotoWorldline.h:922
double * cst_
Worldline's csts of motion (if any)
Definition: GyotoWorldline.h:328
double * et1_
Coordinate of Second base vector to parallel transport.
Definition: GyotoWorldline.h:279
double relTol() const
Get reltol_.
double delta() const
Get delta_.
void getInitialCoord(std::vector< double > &dest) const
Get initial coordinates + base vectors.
void getCartesian(double const *const dates, size_t const n_dates, double *const x, double *const y, double *const z, double *const xprime=NULL, double *const yprime=NULL, double *const zprime=NULL)
Get the 6 Cartesian coordinates for specific dates.
virtual int nextStep(state_t &coord, double &tau, double h1max=GYOTO_DEFAULT_DELTA_MAX)=0
Make one step.
bool adaptive_
Whether to use an adaptive step.
Definition: GyotoWorldline.h:920
virtual void tell(Gyoto::Hook::Teller *)
This is how a Teller tells.
bool secondary() const
Get secondary_.
Gyoto::SmartPointer< Gyoto::Metric::Generic > gg_
The Metric in this end of the Universe.
Definition: GyotoWorldline.h:929
double * et2_
Coordinate of Second base vector to parallel transport.
Definition: GyotoWorldline.h:280
#define GYOTO_DEBUG_EXPR(a)
Output expression value in debug mode.
Definition: GyotoDefs.h:280
void get_xyz(double *x, double *y, double *z) const
Get 3-position in cartesian coordinates for computed dates.
size_t i0_
Index of initial condition in array.
Definition: GyotoWorldline.h:284
void getCartesianPos(size_t index, double dest[4]) const
Get Cartesian expression of 4-position at index.
Obsolete: Home-brewed integrator.
Definition: GyotoWorldline.h:1033
double tMin() const
Get tmin_.
double const * getCst() const
Returns the worldline's cst of motion (if any)
Gyoto ubiquitous macros and typedefs.
Base class for metric description.
SmartPointer< Worldline::IntegState::Generic > state_
An object to hold the integration state.
Definition: GyotoWorldline.h:899
size_t x_size_
Coordinate of Second base vector to parallel transport.
Definition: GyotoWorldline.h:282
double * x0_
t or T
Definition: GyotoWorldline.h:266
bool adaptive_
Whether integration should use adaptive delta.
Definition: GyotoWorldline.h:286
bool integ31() const
Get the kind of geodesic equation integrated by state_.
double * ep3_
Coordinate of first base vector to parallel transport.
Definition: GyotoWorldline.h:277
size_t getImin() const
Get imin_.
size_t maxiter() const
Get maxiter_.
double * x2_
θ or y
Definition: GyotoWorldline.h:268
double * x3dot_
φdot or zdot
Definition: GyotoWorldline.h:273
bool check_basis_
Whether to check for orthogonaliry during parallel transport.
Definition: GyotoWorldline.h:307
double * x0dot_
tdot or Tdot
Definition: GyotoWorldline.h:270
bool parallel_transport_
Whether to parallel transport a local triad.
Definition: GyotoWorldline.h:301
Definition: GyotoWorldline.h:886
double norm_
Current norm of the 4-velocity.
Definition: GyotoWorldline.h:923
double reltol_
Absolute tolerance of the integrator.
Definition: GyotoWorldline.h:381
double normref_
Definition: GyotoWorldline.h:924
double deltaMaxOverR() const
Get delta_max_over_r_.
double * et3_
Coordinate of Second base vector to parallel transport.
Definition: GyotoWorldline.h:281
Namespace for the Gyoto library.
Definition: GyotoAstrobj.h:46
virtual double getMass() const =0
Get mass of particule.
virtual Generic * clone(Worldline *newparent) const =0
Deep copy.
virtual void init()
Cache whatever needs to be cached.
virtual void doStep(state_t const &coordin, double step, state_t &coordout)=0
Make one step of exactly this size.
virtual double ScalarProd(const double pos[4], const double u1[4], const double u2[4]) const
Scalar product.
virtual void eAllocate()
Allocate ep0_ ... et3_.
void get_t(double *dest) const
Get computed dates.
double * ep1_
Coordinate of first base vector to parallel transport.
Definition: GyotoWorldline.h:275
bool adaptive() const
Get adaptive_.
void checkPhiTheta(double coord[8]) const
Bring θ in [0,Π] and φ in [0,2Π].
double deltaMin() const
Get delta_min_.
double normTol() const
Get normtol_.
Can be pointed to by a SmartPointer.
Definition: GyotoSmartPointer.h:80
bool secondary_
Experimental: choose 0 to compute only primary image.
Definition: GyotoWorldline.h:293
try_step_t try_step_
Stepper used by the adaptive-step integrator.
Definition: GyotoWorldline.h:1091
I might listen to a Teller.
Definition: GyotoHooks.h:64
void get_prime(double *x1prime, double *x2prime, double *x3prime) const
Get computed 3-velocities.
bool parallelTransport() const
Get parallel_transport_.
double normtol_
Tolerance on 4-velocity norm variations.
Definition: GyotoWorldline.h:392
std::vector< double > constantsOfMotion() const
Return a copy of the Metric-specific constants of motion.
virtual std::string kind()=0
Return the integrator kind.
bool integ_31_
Whether to integrate the 3+1 equation of geodesics instead of the 4D one.
Definition: GyotoWorldline.h:918
virtual ~Worldline()
Destructor.
double delta_
Integration step (current in case of adaptive_).
Definition: GyotoWorldline.h:919
double * x3_
φ or z
Definition: GyotoWorldline.h:269
Container for the value of a Property.
Definition: GyotoValue.h:60
void getCoord(size_t index, Gyoto::state_t &dest) const
Get coordinates+base vectors corresponding to index.
double * ep2_
Coordinate of first base vector to parallel transport.
Definition: GyotoWorldline.h:276
Custom error checker that takes into account the norm of the impulsion.
Definition: GyotoWorldline.h:1101
virtual std::string className() const
"Worldline"
size_t cst_n_
Number of constants of motion.
Definition: GyotoWorldline.h:329
size_t imin_
Minimum index for which x0_, x1_... have been computed.
Definition: GyotoWorldline.h:283
double * x1dot_
rdot or xdot
Definition: GyotoWorldline.h:271
double abstol_
Absolute tolerance of the integrator.
Definition: GyotoWorldline.h:372
size_t getI0() const
Get i0_.
virtual size_t xExpand(int dir)
Expand x0, x1 etc... to hold more elements.
Current state of a geodesic integration.
Definition: GyotoWorldline.h:907
virtual void setVelocity(double const vel[3])
Set initial 3-velocity.
Kind kind_
Integrator flavour.
Definition: GyotoWorldline.h:1081
Description of the observer screen.
virtual void setInitCoord(const double coord[8], int dir, double const Ephi[4], double const Etheta[4])
Set Initial coordinate.
SmartPointer< Metric::Generic > metric() const
Get metric.
virtual void eDeallocate()
Deallocate ep0_ ... et3_.
Worldline * line_
Worldline that we are integrating.
Definition: GyotoWorldline.h:916
double delta_max_
Maximum integration step for the adaptive integrator.
Definition: GyotoWorldline.h:350
double * et0_
Coordinate of first base vector to parallel transport.
Definition: GyotoWorldline.h:278
int wait_pos_
Hack in setParameters()
Definition: GyotoWorldline.h:330
std::string integrator() const
Describe the integrator used by state_.
virtual void xAllocate()
Allocate x0, x1 etc. with default size.
double * x2dot_
θdot or ydot
Definition: GyotoWorldline.h:272
Listen to me and I'll warn you when I change.
Definition: GyotoHooks.h:82
void get_dot(double *x0dot, double *x1dot, double *x2dot, double *x3dot) const
Get computed 4-velocities.
double * x1_
r or x
Definition: GyotoWorldline.h:267
int stopcond
Whether and why integration is finished.
Definition: GyotoWorldline.h:261
void setCst(double const *cst, size_t const ncsts)
Set Metric-specific constants of motion.
size_t maxiter_
Maximum number of iterations when integrating.
Definition: GyotoWorldline.h:332
Worldline()
Default constructor.
bool checkBasis() const
Get check_basis_.
double absTol() const
Get abstol_.
size_t imax_
Maximum index for which x0_, x1_... have been computed.
Definition: GyotoWorldline.h:285