GeographicLib: GeographicLib::SphericalHarmonic2 Class Reference (original) (raw)
Spherical harmonic series with two corrections to the coefficients. More...
#include <[GeographicLib/SphericalHarmonic2.hpp](SphericalHarmonic2%5F8hpp%5Fsource.html)>
Public Types | |
---|---|
enum | normalization { FULL, SCHMIDT } |
Public Member Functions | |
---|---|
SphericalHarmonic2 (const std::vector< real > &C, const std::vector< real > &S, int N, const std::vector< real > &C1, const std::vector< real > &S1, int N1, const std::vector< real > &C2, const std::vector< real > &S2, int N2, real a, unsigned norm=FULL) | |
SphericalHarmonic2 (const std::vector< real > &C, const std::vector< real > &S, int N, int nmx, int mmx, const std::vector< real > &C1, const std::vector< real > &S1, int N1, int nmx1, int mmx1, const std::vector< real > &C2, const std::vector< real > &S2, int N2, int nmx2, int mmx2, real a, unsigned norm=FULL) | |
SphericalHarmonic2 () | |
Math::real | operator() (real tau1, real tau2, real x, real y, real z) const |
Math::real | operator() (real tau1, real tau2, real x, real y, real z, real &gradx, real &grady, real &gradz) const |
CircularEngine | Circle (real tau1, real tau2, real p, real z, bool gradp) const |
const SphericalEngine::coeff & | Coefficients () const |
const SphericalEngine::coeff & | Coefficients1 () const |
const SphericalEngine::coeff & | Coefficients2 () const |
Spherical harmonic series with two corrections to the coefficients.
This classes is similar to SphericalHarmonic, except that the coefficients C nm are replaced by C nm + tau' C' nm + tau'' C'' nm (and similarly for S nm).
Example of use:
#include
#include
#include
using namespace std;
try {
int N = 3, N1 = 2, N2 = 1;
double ca[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
vector C(ca, ca + (N + 1) * (N + 2) / 2);
double sa[] = {6, 5, 4, 3, 2, 1};
vector S(sa, sa + N * (N + 1) / 2);
double cb[] = {1, 2, 3, 4, 5, 6};
vector C1(cb, cb + (N1 + 1) * (N1 + 2) / 2);
double sb[] = {3, 2, 1};
vector S1(sb, sb + N1 * (N1 + 1) / 2);
double cc[] = {2, 1};
vector C2(cc, cc + (N2 + 1));
vector S2;
double a = 1;
SphericalHarmonic2 h(C, S, N, N, N, C1, S1, N1, N1, N1,
C2, S2, N2, N2, 0, a);
double tau1 = 0.1, tau2 = 0.05, x = 2, y = 3, z = 1;
double v, vx, vy, vz;
v = h(tau1, tau2, x, y, z, vx, vy, vz);
cout << v << " " << vx << " " << vy << " " << vz << "\n";
}
catch (const exception& e) {
cerr << "Caught exception: " << e.what() << "\n";
return 1;
}
}
int main(int argc, const char *const argv[])
Header for GeographicLib::SphericalHarmonic2 class.
Spherical harmonic series with two corrections to the coefficients.
Namespace for GeographicLib.
Definition at line 35 of file SphericalHarmonic2.hpp.
◆ normalization
GeographicLib::SphericalHarmonic2::SphericalHarmonic2 ( const std::vector< real > & C, const std::vector< real > & S, int N, const std::vector< real > & C1, const std::vector< real > & S1, int N1, const std::vector< real > & C2, const std::vector< real > & S2, int N2, real a, unsigned norm = FULL ) | inline |
---|
Constructor with a full set of coefficients specified.
Parameters
[in] | C | the coefficients C nm. |
---|---|---|
[in] | S | the coefficients S nm. |
[in] | N | the maximum degree and order of the sum |
[in] | C1 | the coefficients C' nm. |
[in] | S1 | the coefficients S' nm. |
[in] | N1 | the maximum degree and order of the first correction coefficients C' nm and S' nm. |
[in] | C2 | the coefficients C'' nm. |
[in] | S2 | the coefficients S'' nm. |
[in] | N2 | the maximum degree and order of the second correction coefficients C' nm and S' nm. |
[in] | a | the reference radius appearing in the definition of the sum. |
[in] | norm | the normalization for the associated Legendre polynomials, either SphericalHarmonic2::FULL (the default) or SphericalHarmonic2::SCHMIDT. |
Exceptions
GeographicErr | if N and N1 do not satisfy N ≥ N1 ≥ −1, and similarly for N2. |
---|---|
GeographicErr | if any of the vectors of coefficients is not large enough. |
See SphericalHarmonic for the way the coefficients should be stored. N1 and N2 should satisfy N1 ≤ N and N2 ≤ N.
The class stores pointers to the first elements of C, S, C', S', C'', and S''. These arrays should not be altered or destroyed during the lifetime of a SphericalHarmonic object.
Definition at line 97 of file SphericalHarmonic2.hpp.
◆ SphericalHarmonic2() [2/3]
GeographicLib::SphericalHarmonic2::SphericalHarmonic2 ( const std::vector< real > & C, const std::vector< real > & S, int N, int nmx, int mmx, const std::vector< real > & C1, const std::vector< real > & S1, int N1, int nmx1, int mmx1, const std::vector< real > & C2, const std::vector< real > & S2, int N2, int nmx2, int mmx2, real a, unsigned norm = FULL ) | inline |
---|
Constructor with a subset of coefficients specified.
Parameters
[in] | C | the coefficients C nm. |
---|---|---|
[in] | S | the coefficients S nm. |
[in] | N | the degree used to determine the layout of C and S. |
[in] | nmx | the maximum degree used in the sum. The sum over n is from 0 thru nmx. |
[in] | mmx | the maximum order used in the sum. The sum over m is from 0 thru min(n, mmx). |
[in] | C1 | the coefficients C' nm. |
[in] | S1 | the coefficients S' nm. |
[in] | N1 | the degree used to determine the layout of C' and S'. |
[in] | nmx1 | the maximum degree used for C' and S'. |
[in] | mmx1 | the maximum order used for C' and S'. |
[in] | C2 | the coefficients C'' nm. |
[in] | S2 | the coefficients S'' nm. |
[in] | N2 | the degree used to determine the layout of C'' and S''. |
[in] | nmx2 | the maximum degree used for C'' and S''. |
[in] | mmx2 | the maximum order used for C'' and S''. |
[in] | a | the reference radius appearing in the definition of the sum. |
[in] | norm | the normalization for the associated Legendre polynomials, either SphericalHarmonic2::FULL (the default) or SphericalHarmonic2::SCHMIDT. |
Exceptions
GeographicErr | if the parameters do not satisfy N ≥ nmx ≥ mmx ≥ −1; N1 ≥ nmx1 ≥ mmx1 ≥ −1; N ≥ N1; nmx ≥ nmx1; mmx ≥ mmx1; and similarly for N2, nmx2, and mmx2. |
---|---|
GeographicErr | if any of the vectors of coefficients is not large enough. |
The class stores pointers to the first elements of C, S, C', S', C'', and S''. These arrays should not be altered or destroyed during the lifetime of a SphericalHarmonic object.
Definition at line 154 of file SphericalHarmonic2.hpp.
◆ SphericalHarmonic2() [3/3]
GeographicLib::SphericalHarmonic2::SphericalHarmonic2 ( ) | inline |
---|
A default constructor so that the object can be created when the constructor for another object is initialized. This default object can then be reset with the default copy assignment operator.
Definition at line 180 of file SphericalHarmonic2.hpp.
◆ operator()() [1/2]
Math::real GeographicLib::SphericalHarmonic2::operator() ( real tau1, real tau2, real x, real y, real z ) const | inline |
---|
Compute a spherical harmonic sum with two correction terms.
Parameters
[in] | tau1 | multiplier for correction coefficients C' and S'. |
---|---|---|
[in] | tau2 | multiplier for correction coefficients C'' and S''. |
[in] | x | cartesian coordinate. |
[in] | y | cartesian coordinate. |
[in] | z | cartesian coordinate. |
Returns
V the spherical harmonic sum.
This routine requires constant memory and thus never throws an exception.
Definition at line 196 of file SphericalHarmonic2.hpp.
◆ operator()() [2/2]
Math::real GeographicLib::SphericalHarmonic2::operator() ( real tau1, real tau2, real x, real y, real z, real & gradx, real & grady, real & gradz ) const | inline |
---|
Compute a spherical harmonic sum with two correction terms and its gradient.
Parameters
[in] | tau1 | multiplier for correction coefficients C' and S'. |
---|---|---|
[in] | tau2 | multiplier for correction coefficients C'' and S''. |
[in] | x | cartesian coordinate. |
[in] | y | cartesian coordinate. |
[in] | z | cartesian coordinate. |
[out] | gradx | x component of the gradient |
[out] | grady | y component of the gradient |
[out] | gradz | z component of the gradient |
Returns
V the spherical harmonic sum.
This is the same as the previous function, except that the components of the gradients of the sum in the x, y, and z directions are computed. This routine requires constant memory and thus never throws an exception.
Definition at line 235 of file SphericalHarmonic2.hpp.
◆ Circle()
CircularEngine GeographicLib::SphericalHarmonic2::Circle ( real tau1, real tau2, real p, real z, bool gradp ) const | inline |
---|
Create a CircularEngine to allow the efficient evaluation of several points on a circle of latitude at fixed values of tau1 and tau2.
Parameters
[in] | tau1 | multiplier for correction coefficients C' and S'. |
---|---|---|
[in] | tau2 | multiplier for correction coefficients C'' and S''. |
[in] | p | the radius of the circle. |
[in] | z | the height of the circle above the equatorial plane. |
[in] | gradp | if true the returned object will be able to compute the gradient of the sum. |
Exceptions
std::bad_alloc | if the memory for the CircularEngine can't be allocated. |
---|
Returns
the CircularEngine object.
SphericalHarmonic2::operator()() exchanges the order of the sums in the definition, i.e., ∑n = 0..N ∑m = 0..n becomes ∑m = 0..N ∑n = m..N.. SphericalHarmonic2::Circle performs the inner sum over degree n (which entails about _N_2 operations). Calling CircularEngine::operator()() on the returned object performs the outer sum over the order m (about N operations).
See SphericalHarmonic::Circle for an example of its use.
Definition at line 279 of file SphericalHarmonic2.hpp.
◆ Coefficients()
◆ Coefficients1()
◆ Coefficients2()
The documentation for this class was generated from the following file: