BATCH_VSH_POL_DN_CONS Subroutine

public subroutine BATCH_VSH_POL_DN_CONS(LMAX, NTH, OUTUNIT, STATUS)

Batch-consistency check: VSH_POL_DN_ALL vs. looped VSH_POL_DN calls, for , 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`). ).

Arguments

Type IntentOptional 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


Calls

proc~~batch_vsh_pol_dn_cons~~CallsGraph proc~batch_vsh_pol_dn_cons BATCH_VSH_POL_DN_CONS interface~vsh_pol_dn VSH_POL_DN proc~batch_vsh_pol_dn_cons->interface~vsh_pol_dn interface~vsh_pol_dn_all VSH_POL_DN_ALL proc~batch_vsh_pol_dn_cons->interface~vsh_pol_dn_all proc~ylm_index YLM_INDEX proc~batch_vsh_pol_dn_cons->proc~ylm_index proc~vsh_pol_dn_dp VSH_POL_DN_DP interface~vsh_pol_dn->proc~vsh_pol_dn_dp proc~vsh_pol_dn_all_dp VSH_POL_DN_ALL_DP interface~vsh_pol_dn_all->proc~vsh_pol_dn_all_dp proc~vsh_pol_dn_all_dp->proc~ylm_index interface~vsh_core VSH_CORE proc~vsh_pol_dn_all_dp->interface~vsh_core dcos dcos proc~vsh_pol_dn_dp->dcos dsin dsin proc~vsh_pol_dn_dp->dsin interface~assoc_legendre_and_deriv ASSOC_LEGENDRE_AND_DERIV proc~vsh_pol_dn_dp->interface~assoc_legendre_and_deriv interface~log_fact LOG_FACT proc~vsh_pol_dn_dp->interface~log_fact proc~assoc_legendre_and_deriv_dp ASSOC_LEGENDRE_AND_DERIV_DP interface~assoc_legendre_and_deriv->proc~assoc_legendre_and_deriv_dp proc~log_fact_dp LOG_FACT_DP interface~log_fact->proc~log_fact_dp proc~vsh_core_dp VSH_CORE_DP interface~vsh_core->proc~vsh_core_dp proc~assoc_legendre_and_deriv_dp->interface~log_fact proc~vsh_core_dp->proc~ylm_index proc~vsh_core_dp->dcos proc~vsh_core_dp->dsin interface~assoc_legendre_norm_all ASSOC_LEGENDRE_NORM_ALL proc~vsh_core_dp->interface~assoc_legendre_norm_all interface~ddx_assoc_legendre_norm_all DDX_ASSOC_LEGENDRE_NORM_ALL proc~vsh_core_dp->interface~ddx_assoc_legendre_norm_all proc~plm_index PLM_INDEX proc~vsh_core_dp->proc~plm_index proc~assoc_legendre_norm_all_dp ASSOC_LEGENDRE_NORM_ALL_DP interface~assoc_legendre_norm_all->proc~assoc_legendre_norm_all_dp proc~ddx_assoc_legendre_norm_all_dp DDX_ASSOC_LEGENDRE_NORM_ALL_DP interface~ddx_assoc_legendre_norm_all->proc~ddx_assoc_legendre_norm_all_dp proc~assoc_legendre_norm_all_dp->proc~plm_index proc~ddx_assoc_legendre_norm_all_dp->proc~plm_index

Called by

proc~~batch_vsh_pol_dn_cons~~CalledByGraph proc~batch_vsh_pol_dn_cons BATCH_VSH_POL_DN_CONS program~convergence_main CONVERGENCE_MAIN program~convergence_main->proc~batch_vsh_pol_dn_cons program~main MAIN program~main->proc~batch_vsh_pol_dn_cons

Source Code

  SUBROUTINE BATCH_VSH_POL_DN_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_POL_DN_ALL(OUT, LMAX, THETA, PHI)
    DO L = 0, LMAX
      DO M = -L, L
        VS = VSH_POL_DN(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_POL_DN_CONS