10 #if !defined(GEOGRAPHICLIB_SPHERICALENGINE_HPP) 11 #define GEOGRAPHICLIB_SPHERICALENGINE_HPP 1 19 # pragma warning (push) 20 # pragma warning (disable: 4251) 44 static std::vector<real> root_;
50 return pow(
real(std::numeric_limits<real>::radix),
51 -3 * (std::numeric_limits<real>::max_exponent < (1<<14) ?
52 std::numeric_limits<real>::max_exponent : (1<<14)) / 5);
57 return std::numeric_limits<real>::epsilon() *
58 sqrt(std::numeric_limits<real>::epsilon());
60 static const std::vector<real> Z_;
98 std::vector<real>::const_iterator _Cnm;
99 std::vector<real>::const_iterator _Snm;
109 , _Snm(Z_.begin()) {}
126 const std::vector<real>& S,
127 int N,
int nmx,
int mmx)
134 if (!(_Nx >= _nmx && _nmx >= _mmx && _mmx >= -1))
136 if (!(index(_nmx, _mmx) <
int(C.size()) &&
137 index(_nmx, _mmx) < int(S.size()) + (_Nx + 1)))
154 const std::vector<real>& S,
164 if (!(index(_nmx, _mmx) <
int(C.size()) &&
165 index(_nmx, _mmx) < int(S.size()) + (_Nx + 1)))
172 inline int N()
const {
return _Nx; }
176 inline int nmx()
const {
return _nmx; }
180 inline int mmx()
const {
return _mmx; }
188 inline int index(
int n,
int m)
const 189 {
return m * _Nx - m * (m - 1) / 2 + n; }
203 inline Math::real Sv(
int k)
const {
return *(_Snm + (k - (_Nx + 1))); }
215 {
return m > _mmx || n > _nmx ? 0 : *(_Cnm + k) * f; }
227 {
return m > _mmx || n > _nmx ? 0 : *(_Snm + (k - (_Nx + 1))) * f; }
237 static inline int Csize(
int N,
int M)
238 {
return (M + 1) * (2 * N - M + 2) / 2; }
248 static inline int Ssize(
int N,
int M)
249 {
return Csize(N, M) - (N + 1); }
272 static void readcoeffs(std::istream& stream,
int& N,
int& M,
273 std::vector<real>& C, std::vector<real>& S);
305 template<
bool gradp, normalization norm,
int L>
307 real x, real y, real z, real a,
308 real& gradx, real& grady, real& gradz);
333 template<
bool gradp, normalization norm,
int L>
335 real p, real z, real a);
355 static void RootTable(
int N);
365 std::vector<real> temp(0);
372 #if defined(_MSC_VER) 373 # pragma warning (pop) 376 #endif // GEOGRAPHICLIB_SPHERICALENGINE_HPP
#define GEOGRAPHICLIB_EXPORT
The evaluation engine for SphericalHarmonic.
GeographicLib::Math::real real
Math::real Cv(int k, int n, int m, real f) const
static int Ssize(int N, int M)
coeff(const std::vector< real > &C, const std::vector< real > &S, int N)
static void RootTable(int N)
Math::real Sv(int k, int n, int m, real f) const
Package up coefficients for SphericalEngine.
coeff(const std::vector< real > &C, const std::vector< real > &S, int N, int nmx, int mmx)
int index(int n, int m) const
Namespace for GeographicLib.
Spherical harmonic sums for a circle.
Math::real Sv(int k) const
Exception handling for GeographicLib.
Header for GeographicLib::Constants class.
static int Csize(int N, int M)
Math::real Cv(int k) const
static void ClearRootTable()