Public Types | Public Member Functions | Private Types | Private Attributes | List of all members
GeographicLib::SphericalHarmonic2 Class Reference

Spherical harmonic series with two corrections to the coefficients. More...

#include <SphericalHarmonic2.hpp>

Public Types

enum  normalization { FULL, SCHMIDT }
 

Public Member Functions

CircularEngine Circle (real tau1, real tau2, real p, real z, bool gradp) const
 
const SphericalEngine::coeffCoefficients () const
 
const SphericalEngine::coeffCoefficients1 () const
 
const SphericalEngine::coeffCoefficients2 () 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)
 

Private Types

typedef Math::real real
 

Private Attributes

real _a
 
SphericalEngine::coeff _c [3]
 
unsigned _norm
 

Detailed Description

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:

// Example of using the GeographicLib::SphericalHarmonic2 class
#include <iostream>
#include <exception>
#include <vector>
using namespace std;
using namespace GeographicLib;
int main() {
try {
int N = 3, N1 = 2, N2 = 1; // The maxium degrees
double ca[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1}; // cosine coefficients
vector<double> C(ca, ca + (N + 1) * (N + 2) / 2);
double sa[] = {6, 5, 4, 3, 2, 1}; // sine coefficients
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));
vector<double> 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;
}
}

Definition at line 35 of file SphericalHarmonic2.hpp.

Member Typedef Documentation

◆ real

Definition at line 58 of file SphericalHarmonic2.hpp.

Member Enumeration Documentation

◆ normalization

Supported normalizations for associate Legendre polynomials.

Enumerator
FULL 

Fully normalized associated Legendre polynomials. See SphericalHarmonic::FULL for documentation.

SCHMIDT 

Schmidt semi-normalized associated Legendre polynomials. See SphericalHarmonic::SCHMIDT for documentation.

Definition at line 40 of file SphericalHarmonic2.hpp.

Constructor & Destructor Documentation

◆ SphericalHarmonic2() [1/3]

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]Cthe coefficients Cnm.
[in]Sthe coefficients Snm.
[in]Nthe maximum degree and order of the sum
[in]C1the coefficients C'nm.
[in]S1the coefficients S'nm.
[in]N1the maximum degree and order of the first correction coefficients C'nm and S'nm.
[in]C2the coefficients C''nm.
[in]S2the coefficients S''nm.
[in]N2the maximum degree and order of the second correction coefficients C'nm and S'nm.
[in]athe reference radius appearing in the definition of the sum.
[in]normthe normalization for the associated Legendre polynomials, either SphericalHarmonic2::FULL (the default) or SphericalHarmonic2::SCHMIDT.
Exceptions
GeographicErrif N and N1 do not satisfy NN1 ≥ −1, and similarly for N2.
GeographicErrif 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 N1N and N2N.

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]Cthe coefficients Cnm.
[in]Sthe coefficients Snm.
[in]Nthe degree used to determine the layout of C and S.
[in]nmxthe maximum degree used in the sum. The sum over n is from 0 thru nmx.
[in]mmxthe maximum order used in the sum. The sum over m is from 0 thru min(n, mmx).
[in]C1the coefficients C'nm.
[in]S1the coefficients S'nm.
[in]N1the degree used to determine the layout of C' and S'.
[in]nmx1the maximum degree used for C' and S'.
[in]mmx1the maximum order used for C' and S'.
[in]C2the coefficients C''nm.
[in]S2the coefficients S''nm.
[in]N2the degree used to determine the layout of C'' and S''.
[in]nmx2the maximum degree used for C'' and S''.
[in]mmx2the maximum order used for C'' and S''.
[in]athe reference radius appearing in the definition of the sum.
[in]normthe normalization for the associated Legendre polynomials, either SphericalHarmonic2::FULL (the default) or SphericalHarmonic2::SCHMIDT.
Exceptions
GeographicErrif the parameters do not satisfy Nnmxmmx ≥ −1; N1nmx1mmx1 ≥ −1; NN1; nmxnmx1; mmxmmx1; and similarly for N2, nmx2, and mmx2.
GeographicErrif 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.

Member Function Documentation

◆ 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]tau1multiplier for correction coefficients C' and S'.
[in]tau2multiplier for correction coefficients C'' and S''.
[in]pthe radius of the circle.
[in]zthe height of the circle above the equatorial plane.
[in]gradpif true the returned object will be able to compute the gradient of the sum.
Exceptions
std::bad_allocif 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..Nm = 0..n becomes ∑m = 0..Nn = 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.

◆ Coefficients()

const SphericalEngine::coeff& GeographicLib::SphericalHarmonic2::Coefficients ( ) const
inline
Returns
the zeroth SphericalEngine::coeff object.

Definition at line 302 of file SphericalHarmonic2.hpp.

◆ Coefficients1()

const SphericalEngine::coeff& GeographicLib::SphericalHarmonic2::Coefficients1 ( ) const
inline
Returns
the first SphericalEngine::coeff object.

Definition at line 307 of file SphericalHarmonic2.hpp.

◆ Coefficients2()

const SphericalEngine::coeff& GeographicLib::SphericalHarmonic2::Coefficients2 ( ) const
inline
Returns
the second SphericalEngine::coeff object.

Definition at line 312 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]tau1multiplier for correction coefficients C' and S'.
[in]tau2multiplier for correction coefficients C'' and S''.
[in]xcartesian coordinate.
[in]ycartesian coordinate.
[in]zcartesian 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]tau1multiplier for correction coefficients C' and S'.
[in]tau2multiplier for correction coefficients C'' and S''.
[in]xcartesian coordinate.
[in]ycartesian coordinate.
[in]zcartesian coordinate.
[out]gradxx component of the gradient
[out]gradyy component of the gradient
[out]gradzz 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.

Member Data Documentation

◆ _a

real GeographicLib::SphericalHarmonic2::_a
private

Definition at line 60 of file SphericalHarmonic2.hpp.

◆ _c

SphericalEngine::coeff GeographicLib::SphericalHarmonic2::_c[3]
private

Definition at line 59 of file SphericalHarmonic2.hpp.

◆ _norm

unsigned GeographicLib::SphericalHarmonic2::_norm
private

Definition at line 61 of file SphericalHarmonic2.hpp.


The documentation for this class was generated from the following file:
S1
static double S1[]
Definition: shichi.c:61
SphericalHarmonic2.hpp
Header for GeographicLib::SphericalHarmonic2 class.
e
Array< double, 1, 3 > e(1./3., 0.5, 2.)
GeographicLib
Namespace for GeographicLib.
Definition: JacobiConformal.hpp:15
C1
static double C1
Definition: ellpk.c:93
x
set noclip points set clip one set noclip two set bar set border lt lw set xdata set ydata set zdata set x2data set y2data set boxwidth set dummy x
Definition: gnuplot_common_settings.hh:12
C2
Definition: test_operator_overloading.cpp:98
C2
static double C2[]
Definition: shichi.c:141
h
const double h
Definition: testSimpleHelicopter.cpp:19
main
int main(int argc, char **argv)
Definition: cmake/example_cmake_find_gtsam/main.cpp:63
vy
StridedVectorType vy(make_vector(y, *n, std::abs(*incy)))
S2
Symmetric< 2 > S2
Definition: testGroup.cpp:80
gtsam::Symmetric
Symmetric group.
Definition: testGroup.cpp:27
C1
Definition: test_operator_overloading.cpp:97
pybind_wrapper_test_script.z
z
Definition: pybind_wrapper_test_script.py:61
y
Scalar * y
Definition: level1_cplx_impl.h:124
a
ArrayXXi a
Definition: Array_initializer_list_23_cxx11.cpp:1
C
Matrix< Scalar, Dynamic, Dynamic > C
Definition: bench_gemm.cpp:50
GeographicLib::SphericalHarmonic2
Spherical harmonic series with two corrections to the coefficients.
Definition: SphericalHarmonic2.hpp:35
std
Definition: BFloat16.h:88
v
Array< int, Dynamic, 1 > v
Definition: Array_initializer_list_vector_cxx11.cpp:1
N
#define N
Definition: igam.h:9
S
DiscreteKey S(1, 2)
vx
StridedVectorType vx(make_vector(x, *n, std::abs(*incx)))


gtsam
Author(s):
autogenerated on Fri Nov 1 2024 03:50:57