All standard-VSH members VSH_POL_UP for , from one VSH_CORE pass: . Well-defined (nonzero) at -- see VSH_POL_UP for the dipole-ratio note at .
Warning
Inherits ASSOC_LEGENDRE_NORM_ALL's -dependent
stability limit (safe for unconditionally) --
see STABILITY_FINDINGS.md at the repo root.
1=, 2=, 3=; mode axis
indexed by YLM_INDEX(l,m).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| complex(kind=dp), | intent(out) | :: | OUT(3,(LMAX+1)**2) | |||
| integer(kind=i4), | intent(in) | :: | LMAX |
Maximum degree, . |
||
| real(kind=dp), | intent(in) | :: | THETA |
Colatitude in radians, . |
||
| real(kind=dp), | intent(in) | :: | PHI |
Longitude in radians, . |
SUBROUTINE VSH_POL_UP_ALL_DP(OUT, LMAX, THETA, PHI) IMPLICIT NONE INTEGER(KIND=i4), INTENT(IN) :: LMAX REAL(KIND=dp), INTENT(IN) :: THETA REAL(KIND=dp), INTENT(IN) :: PHI COMPLEX(KIND=dp), INTENT(OUT) :: OUT(3,(LMAX+1)**2) INTEGER(KIND=i4) :: L, M, NYLM, IDX REAL(KIND=dp) :: SC_TH, SC_R COMPLEX(KIND=dp), ALLOCATABLE :: YLM(:), GTH(:), GPH(:) NYLM = (LMAX+1)**2 ALLOCATE(YLM(NYLM), GTH(NYLM), GPH(NYLM)) CALL VSH_CORE(YLM, GTH, GPH, LMAX, THETA, PHI) OUT = DCMPLX(0.d0, 0.d0) OUT(1, YLM_INDEX(0,0)) = -YLM(YLM_INDEX(0,0)) DO L = 1, LMAX SC_TH = 1.d0/DSQRT((2*L+1.d0)*(L+1.d0)) SC_R = -DSQRT((L+1.d0)/(2*L+1.d0)) DO M = -L, L IDX = YLM_INDEX(L, M) OUT(1,IDX) = SC_R * YLM(IDX) OUT(2,IDX) = SC_TH * GTH(IDX) OUT(3,IDX) = SC_TH * GPH(IDX) END DO END DO DEALLOCATE(YLM, GTH, GPH) END SUBROUTINE VSH_POL_UP_ALL_DP