10 #if !defined(GEOGRAPHICLIB_SPHERICALENGINE_HPP) 11 #define GEOGRAPHICLIB_SPHERICALENGINE_HPP 1 19 # pragma warning (push) 20 # pragma warning (disable: 4251) 46 static std::vector<real>& sqrttable();
53 s =
real(pow(
real(std::numeric_limits<real>::radix),
54 -3 * (std::numeric_limits<real>::max_exponent < (1<<14) ?
55 std::numeric_limits<real>::max_exponent : (1<<14))
62 return std::numeric_limits<real>::epsilon() *
63 sqrt(std::numeric_limits<real>::epsilon());
102 std::vector<real>::const_iterator _Cnm;
103 std::vector<real>::const_iterator _Snm;
108 coeff() : _Nx(-1) , _nmx(-1) , _mmx(-1) {}
125 const std::vector<real>& S,
126 int N,
int nmx,
int mmx)
133 if (!(_Nx >= _nmx && _nmx >= _mmx && _mmx >= -1))
135 if (!(index(_nmx, _mmx) <
int(C.size()) &&
136 index(_nmx, _mmx) < int(S.size()) + (_Nx + 1)))
153 const std::vector<real>& S,
163 if (!(index(_nmx, _mmx) <
int(C.size()) &&
164 index(_nmx, _mmx) < int(S.size()) + (_Nx + 1)))
171 int N()
const {
return _Nx; }
175 int nmx()
const {
return _nmx; }
179 int mmx()
const {
return _mmx; }
188 {
return m * _Nx - m * (m - 1) / 2 + n; }
214 {
return m > _mmx || n > _nmx ? 0 : *(_Cnm + k) * f; }
226 {
return m > _mmx || n > _nmx ? 0 : *(_Snm + (k - (_Nx + 1))) * f; }
237 {
return (M + 1) * (2 * N - M + 2) / 2; }
248 {
return Csize(N, M) - (N + 1); }
271 static void readcoeffs(std::istream& stream,
int& N,
int& M,
272 std::vector<real>& C, std::vector<real>& S);
304 template<
bool gradp, normalization norm,
int L>
332 template<
bool gradp, normalization norm,
int L>
354 static void RootTable(
int N);
366 std::vector<real> temp(0);
367 sqrttable().swap(temp);
373 #if defined(_MSC_VER) 374 # pragma warning (pop) 377 #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()