chaosmagpy.coordinate_utils.sh_analysis¶
- chaosmagpy.coordinate_utils.sh_analysis(func, nmax, kmax=None)[source]¶
Perform a spherical harmonic expansion of a function defined on a spherical surface.
- Parameters:
- func: callable
Function takes two inputs: colatitude in degrees and longitude in degrees. The function must accept 2-D arrays and preserve shapes.
- nmax: int
Maximum spherical harmonic degree of the expansion.
- kmax: int, optional, greater than or equal to nmax
Maximum spherical harmonic degree needed to resolve the output of
func
. This basically increases the number of grid points, which improves the accuracy of the numerical integration (defaults tonmax
). Ignored ifkmax < nmax
.
- Returns:
- coeffs: ndarray, shape (nmax*(nmax+2),)
Coefficients of the spherical harmonic expansion.
Examples
First, a straight forward example using the spherical harmonic \(Y_1^1\):
>>> import chaosmagpy as cp >>> import numpy as np >>> # >>> def func(theta, phi): >>> n, m = 1, 1 >>> Pnm = cp.model_utils.legendre_poly(n, theta) >>> if m >= 0: >>> return np.cos(m*np.radians(phi))*Pnm[n, m] >>> else: >>> return np.sin(abs(m)*np.radians(phi))*Pnm[n, abs(m)]
>>> cp.coordinate_utils.sh_analysis(func, nmax=1) array([0.0000000e+00, 1.0000000e+00, 1.2246468e-16])
Next, an example with an insufficient number of grid points, which leads to inaccurate numerical integration:
>>> def func(theta, phi): >>> n, m = 7, 0 # increased degree to n=7 >>> Pnm = cp.model_utils.legendre_poly(n, theta) >>> return Pnm[n, m]
>>> cp.coordinate_utils.sh_analysis(func, nmax=1) array([0.55555556, 0.00000000e+00, 0.00000000e+00]) # g10 is wrong
But, by setting
kmax=7
and, thus, increasing the number of grid points:>>> cp.coordinate_utils.sh_analysis(func, nmax=1, kmax=7) array([-1.14491749e-16, 0.00000000e+00, -0.00000000e+00])