10 #if !defined(GEOGRAPHICLIB_SPHERICALENGINE_HPP)
11 #define GEOGRAPHICLIB_SPHERICALENGINE_HPP 1
19 # pragma warning (push)
20 # pragma warning (disable: 4251)
23 namespace GeographicLib {
44 static std::vector<real> root_;
48 static const real scale_;
50 static const real eps_;
51 static const std::vector<real> Z_;
94 std::vector<real>::const_iterator _Cnm;
95 std::vector<real>::const_iterator _Snm;
105 , _Snm(Z_.begin()) {}
122 const std::vector<real>& S,
123 int N,
int nmx,
int mmx)
130 if (!(_Nx >= _nmx && _nmx >= _mmx && _mmx >= -1))
132 if (!(index(_nmx, _mmx) <
int(C.size()) &&
133 index(_nmx, _mmx) < int(S.size()) + (_Nx + 1)))
150 const std::vector<real>& S,
160 if (!(index(_nmx, _mmx) <
int(C.size()) &&
161 index(_nmx, _mmx) < int(S.size()) + (_Nx + 1)))
168 inline int N()
const throw() {
return _Nx; }
172 inline int nmx()
const throw() {
return _nmx; }
176 inline int mmx()
const throw() {
return _mmx; }
184 inline int index(
int n,
int m)
const throw()
185 {
return m * _Nx - m * (m - 1) / 2 + n; }
199 inline Math::real Sv(
int k)
const {
return *(_Snm + (k - (_Nx + 1))); }
211 {
return m > _mmx || n > _nmx ? 0 : *(_Cnm + k) * f; }
223 {
return m > _mmx || n > _nmx ? 0 : *(_Snm + (k - (_Nx + 1))) * f; }
233 static inline int Csize(
int N,
int M)
throw()
234 {
return (M + 1) * (2 * N - M + 2) / 2; }
244 static inline int Ssize(
int N,
int M)
throw ()
245 {
return Csize(N, M) - (N + 1); }
268 static void readcoeffs(std::istream& stream,
int& N,
int& M,
269 std::vector<real>& C, std::vector<real>& S);
301 template<
bool gradp, normalization norm,
int L>
329 template<
bool gradp, normalization norm,
int L>
351 static void RootTable(
int N);
361 std::vector<real> temp(0);
368 #if defined(_MSC_VER)
369 # pragma warning (pop)
372 #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
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()