RUN_GWJ_SWEEP Subroutine

subroutine RUN_GWJ_SWEEP(N_FAIL)

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.

Arguments

Type IntentOptional Attributes Name
integer(kind=i4), intent(inout) :: N_FAIL

Running failure counter, incremented if the max error


Calls

proc~~run_gwj_sweep~~CallsGraph proc~run_gwj_sweep RUN_GWJ_SWEEP interface~dot DOT proc~run_gwj_sweep->interface~dot interface~gwj GWJ proc~run_gwj_sweep->interface~gwj interface~pvsh_pol PVSH_POL proc~run_gwj_sweep->interface~pvsh_pol interface~pvsh_tor PVSH_TOR proc~run_gwj_sweep->interface~pvsh_tor interface~ssh SSH proc~run_gwj_sweep->interface~ssh proc~dot_dp DOT_DP interface~dot->proc~dot_dp proc~gwj_dp GWJ_DP interface~gwj->proc~gwj_dp proc~pvsh_pol_dp PVSH_POL_DP interface~pvsh_pol->proc~pvsh_pol_dp proc~pvsh_tor_dp PVSH_TOR_DP interface~pvsh_tor->proc~pvsh_tor_dp proc~ssh_dp SSH_DP interface~ssh->proc~ssh_dp interface~cgcoeff CGCOEFF proc~gwj_dp->interface~cgcoeff dcos dcos proc~pvsh_pol_dp->dcos dsin dsin proc~pvsh_pol_dp->dsin interface~assoc_legendre_and_deriv ASSOC_LEGENDRE_AND_DERIV proc~pvsh_pol_dp->interface~assoc_legendre_and_deriv interface~log_fact LOG_FACT proc~pvsh_pol_dp->interface~log_fact proc~pvsh_tor_dp->dcos proc~pvsh_tor_dp->dsin proc~pvsh_tor_dp->interface~assoc_legendre_and_deriv proc~pvsh_tor_dp->interface~log_fact proc~ssh_dp->dcos interface~assoc_legendre ASSOC_LEGENDRE proc~ssh_dp->interface~assoc_legendre proc~ssh_dp->interface~log_fact proc~assoc_legendre_dp ASSOC_LEGENDRE_DP interface~assoc_legendre->proc~assoc_legendre_dp proc~assoc_legendre_and_deriv_dp ASSOC_LEGENDRE_AND_DERIV_DP interface~assoc_legendre_and_deriv->proc~assoc_legendre_and_deriv_dp proc~cgcoeff_dp CGCOEFF_DP interface~cgcoeff->proc~cgcoeff_dp proc~log_fact_dp LOG_FACT_DP interface~log_fact->proc~log_fact_dp proc~assoc_legendre_and_deriv_dp->interface~log_fact proc~assoc_legendre_dp->interface~log_fact proc~cgcoeff_dp->interface~log_fact

Called by

proc~~run_gwj_sweep~~CalledByGraph proc~run_gwj_sweep RUN_GWJ_SWEEP program~gwi_gwj_sweep GWI_GWJ_SWEEP program~gwi_gwj_sweep->proc~run_gwj_sweep

Source Code

  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