GeographicLib  1.21
Public Types | Public Member Functions
GeographicLib::SphericalHarmonic1 Class Reference

Spherical Harmonic series with a correction to the coefficients. More...

#include <GeographicLib/SphericalHarmonic1.hpp>

List of all members.

Public Types

enum  normalization { FULL, SCHMIDT }

Public Member Functions

 SphericalHarmonic1 (const std::vector< real > &C, const std::vector< real > &S, int N, const std::vector< real > &C1, const std::vector< real > &S1, int N1, real a, unsigned norm=FULL)
 SphericalHarmonic1 (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, real a, unsigned norm=FULL)
 SphericalHarmonic1 ()
Math::real operator() (real tau, real x, real y, real z) const throw ()
Math::real operator() (real tau, real x, real y, real z, real &gradx, real &grady, real &gradz) const throw ()
CircularEngine Circle (real tau, real p, real z, bool gradp) const
const SphericalEngine::coeffCoefficients () const throw ()
const SphericalEngine::coeffCoefficients1 () const throw ()

Detailed Description

Spherical Harmonic series with a correction to the coefficients.

This classes is similar to SphericalHarmonic, except that the coefficients Cnm are replaced by Cnm + tau C'nm (and similarly for Snm).

Example of use:

// Example of using the GeographicLib::SphericalHarmonic1 class
// $Id: 9d964d2e64c201179a88e51697b508414ff8c800 $

#include <iostream>
#include <exception>
#include <vector>
#include <GeographicLib/SphericalHarmonic1.hpp>

using namespace std;
using namespace GeographicLib;

int main() {
  try {
    int N = 3, N1 = 2;                  // 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 a = 1;
    SphericalHarmonic1 h(C, S, N, C1, S1, N1, a);
    double tau = 0.1, x = 2, y = 3, z = 1;
    double v, vx, vy, vz;
    v = h(tau, x, y, z, vx, vy, vz);
    cout << v << " " << vx << " " << vy << " " << vz << "\n";
  }
  catch (const exception& e) {
    cerr << "Caught exception: " << e.what() << "\n";
    return 1;
  }
  return 0;
}

Member Enumeration Documentation

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 37 of file SphericalHarmonic1.hpp.


Constructor & Destructor Documentation

GeographicLib::SphericalHarmonic1::SphericalHarmonic1 ( const std::vector< real > &  C,
const std::vector< real > &  S,
int  N,
const std::vector< real > &  C1,
const std::vector< real > &  S1,
int  N1,
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 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 SphericalHarmonic1::FULL (the default) or SphericalHarmonic1::SCHMIDT.

See SphericalHarmonic for the way the coefficients should be stored. N1 should satisfy N1 <= N.

The class stores pointers to the first elements of C, S, C', and S'. These arrays should not be altered or destroyed during the lifetime of a SphericalHarmonic object.

Definition at line 89 of file SphericalHarmonic1.hpp.

GeographicLib::SphericalHarmonic1::SphericalHarmonic1 ( 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,
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]athe reference radius appearing in the definition of the sum.
[in]normthe normalization for the associated Legendre polynomials, either SphericalHarmonic1::FULL (the default) or SphericalHarmonic1::SCHMIDT.

The class stores pointers to the first elements of C, S, C', and S'. These arrays should not be altered or destroyed during the lifetime of a SphericalHarmonic object.

Definition at line 130 of file SphericalHarmonic1.hpp.

GeographicLib::SphericalHarmonic1::SphericalHarmonic1 ( ) [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 152 of file SphericalHarmonic1.hpp.


Member Function Documentation

Math::real GeographicLib::SphericalHarmonic1::operator() ( real  tau,
real  x,
real  y,
real  z 
) const throw () [inline]

Compute a spherical harmonic sum with a correction term.

Parameters:
[in]taumultiplier 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 166 of file SphericalHarmonic1.hpp.

Math::real GeographicLib::SphericalHarmonic1::operator() ( real  tau,
real  x,
real  y,
real  z,
real &  gradx,
real &  grady,
real &  gradz 
) const throw () [inline]

Compute a spherical harmonic sum with a correction term and its gradient.

Parameters:
[in]taumultiplier 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 201 of file SphericalHarmonic1.hpp.

CircularEngine GeographicLib::SphericalHarmonic1::Circle ( real  tau,
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 a fixed value of tau.

Parameters:
[in]tauthe multiplier for the correction coefficients.
[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.
Returns:
the CircularEngine object.

SphericalHarmonic1::operator()() exchanges the order of the sums in the definition, i.e., sum(n = 0..N)[sum(m = 0..n)[...]] becomes sum(m = 0..N)[sum(n = m..N)[...]]. SphericalHarmonic1::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). This routine may throw a bad_alloc exception in the CircularEngine constructor.

See SphericalHarmonic::Circle for an example of its use.

Definition at line 240 of file SphericalHarmonic1.hpp.

Referenced by GeographicLib::GravityModel::Circle().

const SphericalEngine::coeff& GeographicLib::SphericalHarmonic1::Coefficients ( ) const throw () [inline]
Returns:
the zeroth SphericalEngine::coeff object.

Definition at line 264 of file SphericalHarmonic1.hpp.

const SphericalEngine::coeff& GeographicLib::SphericalHarmonic1::Coefficients1 ( ) const throw () [inline]
Returns:
the first SphericalEngine::coeff object.

Definition at line 269 of file SphericalHarmonic1.hpp.


The documentation for this class was generated from the following file: