10#if !defined(GEOGRAPHICLIB_TRIAXIALGEODESICODE_HPP)
11#define GEOGRAPHICLIB_TRIAXIALGEODESICODE_HPP 1
24#if GEOGRAPHICLIB_PRECISION == 5
25# define GEOGRAPHICLIB_BOOST_ODE_DENSE_OUT 0
27# define GEOGRAPHICLIB_BOOST_ODE_DENSE_OUT 1
49#pragma clang diagnostic ignored "-Wunused-parameter"
50#pragma clang diagnostic ignored "-Wreorder-ctor"
53#include <boost/numeric/odeint.hpp>
54#if GEOGRAPHICLIB_BOOST_ODE_DENSE_OUT
55#include <boost/numeric/odeint/stepper/bulirsch_stoer_dense_out.hpp>
57#include <boost/numeric/odeint/stepper/bulirsch_stoer.hpp>
112 using vec6 = std::array<real, 6>;
113 using vec10 = std::array<real, 10>;
115#if GEOGRAPHICLIB_BOOST_ODE_DENSE_OUT
117 boost::numeric::odeint::bulirsch_stoer_dense_out<vec6, real>;
119 boost::numeric::odeint::bulirsch_stoer_dense_out<vec10, real>;
121 using step6 = boost::numeric::odeint::bulirsch_stoer<vec6, real>;
122 using step10 = boost::numeric::odeint::bulirsch_stoer<vec10, real>;
125 const vec3 _axesn, _axes2n;
127 Angle _bet1, _omg1, _alp1;
128 bool _extended, _dense, _normp;
130 mutable long _nsteps, _intsteps;
131#if GEOGRAPHICLIB_BOOST_ODE_DENSE_OUT
142 void Norm6(vec6& y)
const;
143 void Accel6(
const vec6& y, vec6& yp)
const;
144 void Accel6N(
const vec6& y, vec6& yp)
const;
145 void Norm10(vec10& y)
const;
146 void Accel10(
const vec10& y, vec10& yp)
const;
147 void Accel10N(
const vec10& y, vec10& yp)
const;
148 static std::vector<size_t> sort_indices(
const std::vector<real>& v);
176 bool extended =
false,
bool dense =
false,
177 bool normp =
false, real eps = 0);
196 bool extended =
false,
bool dense =
false,
197 bool normp =
false, real eps = 0);
218 bool extended =
false,
bool dense =
false,
219 bool normp =
false, real eps = 0);
255 real& m12, real& M12, real& M21);
290 real& m12, real& M12, real& M21);
308 std::vector<vec3>& R2, std::vector<vec3>& V2);
334 std::vector<vec3>& R2, std::vector<vec3>& V2,
335 std::vector<real>& m12,
336 std::vector<real>& M12, std::vector<real>& M21);
352 std::vector<Angle>& bet2, std::vector<Angle>& omg2,
353 std::vector<Angle>& alp2);
374 std::vector<Angle>& bet2, std::vector<Angle>& omg2,
375 std::vector<Angle>& alp2,
376 std::vector<real>& m12,
377 std::vector<real>& M12, std::vector<real>& M21);
432 bet1 = _bet1; omg1 = _omg1; alp1 = _alp1;
Header for the GeographicLib::AngleT class.
Header for GeographicLib::Constants class.
Header for GeographicLib::Triaxial::Ellipsoid3 class.
std::array< Math::real, 3 > vec3
Triaxial::Ellipsoid3::vec3 vec3
void Position(const std::vector< real > &s12, std::vector< Angle > &bet2, std::vector< Angle > &omg2, std::vector< Angle > &alp2)
std::pair< real, real > Position(real s12, vec3 &R2, vec3 &V2, real &m12, real &M12, real &M21)
void Position1(Angle &bet1, Angle &omg1, Angle &alp1) const
void Reset(vec3 R1, vec3 V1)
TriaxialGeodesicODE(const Triaxial::Ellipsoid3 &t, Angle bet1, Angle omg1, Angle alp1, bool extended=false, bool dense=false, bool normp=false, real eps=0)
TriaxialGeodesicODE(const Triaxial::Ellipsoid3 &t, bool extended=false, bool dense=false, bool normp=false, real eps=0)
void Position(const std::vector< real > &s12, std::vector< vec3 > &R2, std::vector< vec3 > &V2)
void Position(const std::vector< real > &s12, std::vector< vec3 > &R2, std::vector< vec3 > &V2, std::vector< real > &m12, std::vector< real > &M12, std::vector< real > &M21)
std::pair< real, real > Position(real s12, Angle &bet2, Angle &omg2, Angle &alp2)
void Reset(Angle bet1, Angle omg1, Angle alp1)
TriaxialGeodesicODE(const Triaxial::Ellipsoid3 &t, vec3 R1, vec3 V1, bool extended=false, bool dense=false, bool normp=false, real eps=0)
void Position1(vec3 &R1, vec3 &V1) const
std::pair< real, real > CurrentDistance() const
std::pair< real, real > Position(real s12, vec3 &R2, vec3 &V2)
std::pair< real, real > Position(real s12, Angle &bet2, Angle &omg2, Angle &alp2, real &m12, real &M12, real &M21)
void Position(const std::vector< real > &s12, std::vector< Angle > &bet2, std::vector< Angle > &omg2, std::vector< Angle > &alp2, std::vector< real > &m12, std::vector< real > &M12, std::vector< real > &M21)
const Triaxial::Ellipsoid3 & t() const
Namespace for experimental components of GeographicLib.
Namespace for GeographicLib.
AngleT< Math::real > Angle