GWJ vs. the
pointwise identity, swept over
JMAX, all valid
, at N_POINTS fixed . Writes
examples/gwi_gwj_sweep/gwj_check.dat.
across the sweep exceeds TOL.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| integer(kind=i4), | intent(inout) | :: | N_FAIL |
Running failure counter, incremented if the max error |
SUBROUTINE RUN_GWJ_SWEEP(N_FAIL) IMPLICIT NONE INTEGER(KIND=i4), INTENT(INOUT) :: N_FAIL COMPLEX(KIND=dp) :: LHS, RHS, PREFACTOR REAL(KIND=dp) :: MAX_ERR, ABSDIFF, THETA, PHI INTEGER(KIND=i4) :: J1, J2, M1, M2, L, M, IP MAX_ERR = 0.0_dp OPEN(UNIT=82, FILE="./examples/gwi_gwj_sweep/gwj_check.dat") WRITE(82,'(A)') '# J1 M1 J2 M2 theta phi '// & 'Re(lhs) Im(lhs) Re(rhs) Im(rhs) absdiff' DO J1 = 1, JMAX DO J2 = 1, JMAX PREFACTOR = -j/DSQRT(DBLE(J1)*(J1+1.d0)*DBLE(J2)*(J2+1.d0)) DO M1 = -J1, J1 DO M2 = -J2, J2 M = M1+M2 DO IP = 1, N_POINTS THETA = THETA_PTS(IP) PHI = PHI_PTS(IP) LHS = DOT(PVSH_POL(J2,M2,THETA,PHI), PVSH_TOR(J1,M1,THETA,PHI)) RHS = DCMPLX(0.d0, 0.d0) DO L = ABS(J1-J2), J1+J2 IF (ABS(M) <= L) THEN RHS = RHS + GWJ(J1,M1,J2,M2,L,M)*SSH(L,M,THETA,PHI) END IF ENDDO RHS = PREFACTOR * RHS ABSDIFF = ABS(LHS-RHS) MAX_ERR = MAX(MAX_ERR, ABSDIFF) WRITE(82,*) J1, M1, J2, M2, THETA, PHI, DBLE(LHS), AIMAG(LHS), & DBLE(RHS), AIMAG(RHS), ABSDIFF ENDDO ENDDO ENDDO ENDDO ENDDO CLOSE(82) IF (MAX_ERR > TOL) THEN N_FAIL = N_FAIL + 1 WRITE(*,'(A,ES10.3)') "FAIL gwj_identity_sweep max_err=", MAX_ERR ELSE WRITE(*,'(A,ES10.3)') "PASS gwj_identity_sweep max_err=", MAX_ERR END IF END SUBROUTINE RUN_GWJ_SWEEP