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_;
103 std::vector<real>::const_iterator _Cnm;
104 std::vector<real>::const_iterator _Snm;
114 , _Snm(Z_.begin()) {}
131 const std::vector<real>& S,
132 int N,
int nmx,
int mmx)
139 if (!(_Nx >= _nmx && _nmx >= _mmx && _mmx >= -1))
141 if (!(index(_nmx, _mmx) <
int(C.size()) &&
142 index(_nmx, _mmx) < int(S.size()) + (_Nx + 1)))
159 const std::vector<real>& S,
169 if (!(index(_nmx, _mmx) <
int(C.size()) &&
170 index(_nmx, _mmx) < int(S.size()) + (_Nx + 1)))
177 inline int N()
const {
return _Nx; }
181 inline int nmx()
const {
return _nmx; }
185 inline int mmx()
const {
return _mmx; }
193 inline int index(
int n,
int m)
const 194 {
return m * _Nx - m * (m - 1) / 2 + n; }
208 inline Math::real Sv(
int k)
const {
return *(_Snm + (k - (_Nx + 1))); }
220 {
return m > _mmx || n > _nmx ? 0 : *(_Cnm + k) * f; }
232 {
return m > _mmx || n > _nmx ? 0 : *(_Snm + (k - (_Nx + 1))) * f; }
242 static inline int Csize(
int N,
int M)
243 {
return (M + 1) * (2 * N - M + 2) / 2; }
253 static inline int Ssize(
int N,
int M)
254 {
return Csize(N, M) - (N + 1); }
277 static void readcoeffs(std::istream& stream,
int& N,
int& M,
278 std::vector<real>& C, std::vector<real>& S);
310 template<
bool gradp, normalization norm,
int L>
312 real x, real y, real z, real a,
313 real& gradx, real& grady, real& gradz);
338 template<
bool gradp, normalization norm,
int L>
340 real p, real z, real a);
360 static void RootTable(
int N);
370 std::vector<real> temp(0);
377 #if defined(_MSC_VER) 378 # pragma warning (pop) 381 #endif // GEOGRAPHICLIB_SPHERICALENGINE_HPP
#define GEOGRAPHICLIB_EXPORT
The evaluation engine for SphericalHarmonic.
GeographicLib::Math::real real
Math::real Cv(int k) const
static int Ssize(int N, int M)
coeff(const std::vector< real > &C, const std::vector< real > &S, int N)
int index(int n, int m) const
static void RootTable(int N)
Package up coefficients for SphericalEngine.
coeff(const std::vector< real > &C, const std::vector< real > &S, int N, int nmx, int mmx)
Math::real Sv(int k) const
Namespace for GeographicLib.
Spherical harmonic sums for a circle.
Exception handling for GeographicLib.
Header for GeographicLib::Constants class.
static int Csize(int N, int M)
Math::real Cv(int k, int n, int m, real f) const
Math::real Sv(int k, int n, int m, real f) const
static void ClearRootTable()