# charm_integ#

Module to compute the following integrals:

• a product of two fully-normalized associated Legendre functions and a sine of a co-latitude,

$\int\limits_{\theta_1}^{\theta_2} \bar{P}_{n_1,m_1}(\cos\theta) \, \bar{P}_{n_2,m_2}(\cos\theta) \, \sin(\theta) \, \mathrm{d}\theta{,} \quad \theta_1 \leq \theta_2{,}$

• a product of two $$4 \pi$$ fully-normalized surface spherical harmonic functions over a rectangular cell on the unit sphere,

$\int\limits_{\theta_1}^{\theta_2} \int\limits_{\lambda_1}^{\lambda_2} \bar{Y}_{n_1,m_1}(\theta, \lambda) \, \bar{Y}_{n_2,m_2}(\theta, \lambda) \, \mathrm{d}\lambda \, \sin(\theta) \, \mathrm{d}\theta{,} \quad \theta_1 \leq \theta_2{,} \quad \lambda_1 \leq \lambda_2{.}$

Note

This documentation is written for double precision version of CHarm.

Functions

double charm_integ_pn1m1pn2m2(double cltmin, double cltmax, unsigned long n1, unsigned long m1, unsigned long n2, unsigned long m2, const charm_pnmj *pnmj, charm_err *err)#

Analytically computes the integral.

$\mathrm{ip} = \int\limits_{\theta_{\mathrm{min}}}^{\theta_{\mathrm{max}}} \bar{P}_{n_1, m_1}(\cos\theta) \, \bar{P}_{n_2, m_2}(\cos\theta) \, \sin\theta \, \mathrm{d}\theta{,} \quad \theta_{\mathrm{min}} \leq \theta_{\mathrm{max}}{.}$

The computation is based on the Fourier coefficients of the associated Legendre functions (see Eq. 33 of Pail and Plank, 2001).

References:

• Pail, R., Plank, G., Schuh, W.-D. (2001) Spatially restricted data distributions on the sphere: the method of orthonormalized functions and applications. Journal of Geodesy 75:44&#8212;56

Parameters:
• cltmin[in] Minimum co-latitude in radians.

• cltmax[in] Maximum co-latitude in radians.

• n1[in] Harmonic degree of the first Legendre function.

• m1[in] Harmonic order of the first Legendre function.

• n2[in] Harmonic degree of the second Legendre function.

• m2[in] Harmonic order of the second Legendre function.

• pnmj[in] The charm_pnmj structure with the Fourier coefficients of associated Legendre functions at least up to degree CHARM_MAX(n1, n2). It is assumed that the structure is prepared beforehand by calling charm_leg_pnmj_coeffs().

• err[out] Error reported by the function (if any).

Returns:

The value ip of the integral. In case of an error, returned is the nan value and the error is written to err.

double charm_integ_yi1n1m1yi2n2m2(double cltmin, double cltmax, double lonmin, double lonmax, _Bool i1, unsigned long n1, unsigned long m1, _Bool i2, unsigned long n2, unsigned long m2, const charm_pnmj *pnmj, charm_err *err)#

Analytically computes the integral.

$\mathrm{iy} = \int\limits_{\theta_{\mathrm{min}}}^{\theta_{\mathrm{max}}} \int\limits_{\lambda_{\mathrm{min}}}^{\lambda_{\mathrm{max}}} \bar{Y}_{i_1,n_1,m_1}(\theta, \lambda) \, \bar{Y}_{i_2,n_2,m_2}(\theta, \lambda) \, \mathrm{d} \lambda \, \sin(\theta) \, \mathrm{d}\theta{,} \quad \theta_{\mathrm{min}} \leq \theta_{\mathrm{max}}{,} \quad \lambda_{\mathrm{min}} \leq \lambda_{\mathrm{max}}{,}$

where

$\begin{split}\bar{Y}_{i,n,m}(\theta, \lambda) = \begin{cases} \bar{P}_{nm}(\cos\theta) \, \cos(m \, \lambda) \quad &\textrm{if} \quad i = 0{,}\\ \bar{P}_{nm}(\cos\theta) \, \sin(m \, \lambda) \quad &\textrm{if} \quad i = 1{.} \end{cases}\end{split}$

Parameters:
• cltmin[in] Minimum co-latitude in radians.

• cltmax[in] Maximum co-latitude in radians.

• lonmin[in] Minimum longitude in radians.

• lonmax[in] Maximum longitude in radians.

• i1[in] 0 if the first spherical harmonic function is of the cos type; 1 for the sin type.

• n1[in] Harmonic degree of the first spherical harmonic function.

• m1[in] Harmonic order of the first spherical harmonic function.

• i2[in] 0 if the second spherical harmonic function is of the cos type; 1 for the sin type.

• n2[in] Harmonic degree of the second spherical harmonic function.

• m2[in] Harmonic order of the second spherical harmonic function.

• pnmj[in] The charm_pnmj structure with the Fourier coefficients of associated Legendre functions at least up to degree CHARM_MAX(n1, n2). It is assumed that the structure is prepared beforehand by calling charm_leg_pnmj_coeffs().

• err[out] Error reported by the function (if any).

Returns:

The value iy of the integral. In case of an error, returned is the nan value and the error is written to err.