Batch-consistency check: VSH_TOR_ALL vs. looped VSH_TOR calls,
for (starts at
; VSH_TOR is identical to PVSH_TOR, already
covered at by BATCH_PVSH_TOR_CONS), swept over NTH
colatitude points at fixed . Fails (STATUS=1) if any
component's absolute difference exceeds .
theta phi absdiff_r absdiff_th absdiff_ph`). ).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| integer(kind=i4), | intent(in) | :: | LMAX |
Maximum degree tested, . |
||
| integer(kind=i4), | intent(in) | :: | NTH |
Number of colatitude points swept over . |
||
| integer(kind=i4), | intent(in) | :: | OUTUNIT |
Fortran unit number to write results to (columns: `L M |
||
| integer(kind=i4), | intent(out) | :: | STATUS |
Output: 0 = pass, 1 = fail (some component difference |
SUBROUTINE BATCH_VSH_TOR_CONS(LMAX, NTH, OUTUNIT, STATUS) IMPLICIT NONE INTEGER(KIND=i4), INTENT(IN) :: LMAX INTEGER(KIND=i4), INTENT(IN) :: NTH INTEGER(KIND=i4), INTENT(IN) :: OUTUNIT INTEGER(KIND=i4), INTENT(OUT) :: STATUS INTEGER(KIND=i4) :: L, M, ITH, NYLM REAL(KIND=dp) :: THETA, PHI, DTH COMPLEX(KIND=dp), DIMENSION(3) :: VS COMPLEX(KIND=dp), ALLOCATABLE :: OUT(:,:) NYLM = (LMAX+1)**2 ALLOCATE(OUT(3, NYLM)) STATUS = 0 DTH = pi / (NTH + 1) PHI = pi / 4.d0 WRITE(OUTUNIT,'(A)') & '# L M theta phi absdiff_r absdiff_th absdiff_ph' DO ITH = 1, NTH THETA = ITH * DTH CALL VSH_TOR_ALL(OUT, LMAX, THETA, PHI) DO L = 1, LMAX DO M = -L, L VS = VSH_TOR(L, M, THETA, PHI) WRITE(OUTUNIT, *) L, M, THETA, PHI, & ABS(OUT(1,YLM_INDEX(L,M))-VS(1)), & ABS(OUT(2,YLM_INDEX(L,M))-VS(2)), & ABS(OUT(3,YLM_INDEX(L,M))-VS(3)) IF (ABS(OUT(1,YLM_INDEX(L,M))-VS(1)) > 1.0E-12_dp .OR. & ABS(OUT(2,YLM_INDEX(L,M))-VS(2)) > 1.0E-12_dp .OR. & ABS(OUT(3,YLM_INDEX(L,M))-VS(3)) > 1.0E-12_dp) STATUS = 1 END DO END DO END DO DEALLOCATE(OUT) END SUBROUTINE BATCH_VSH_TOR_CONS