|
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 |
|
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 |
|
| 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) |
|
| 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) |
|
Spherical harmonic series with two corrections to the coefficients.
This classes is similar to SphericalHarmonic, except that the coefficients Cnm are replaced by Cnm + tau' C'nm + tau'' C''nm (and similarly for Snm).
Example of use:
#include <iostream>
#include <exception>
#include <vector>
try {
int N = 3, N1 = 2, N2 = 1;
double ca[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
vector<double>
C(ca, ca + (
N + 1) * (
N + 2) / 2);
double sa[] = {6, 5, 4, 3, 2, 1};
vector<double>
S(sa, sa +
N * (
N + 1) / 2);
double cb[] = {1, 2, 3, 4, 5, 6};
vector<double>
C1(cb, cb + (N1 + 1) * (N1 + 2) / 2);
double sb[] = {3, 2, 1};
vector<double>
S1(sb, sb + N1 * (N1 + 1) / 2);
double cc[] = {2, 1};
vector<double>
C2(cc, cc + (N2 + 1));
SphericalHarmonic2 h(
C,
S,
N,
N,
N,
C1,
S1, N1, N1, N1,
double tau1 = 0.1, tau2 = 0.05,
x = 2,
y = 3,
z = 1;
cout <<
v <<
" " <<
vx <<
" " <<
vy <<
" " << vz <<
"\n";
}
catch (
const exception&
e) {
cerr <<
"Caught exception: " <<
e.what() <<
"\n";
return 1;
}
}
Definition at line 35 of file SphericalHarmonic2.hpp.
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 Cnm. |
[in] | S | the coefficients Snm. |
[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.
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 Cnm. |
[in] | S | the coefficients Snm. |
[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.
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 N2 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 277 of file SphericalHarmonic2.hpp.
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 234 of file SphericalHarmonic2.hpp.