setup_trans4py.F90 Source File


This file depends on

sourcefile~~setup_trans4py.f90~~EfferentGraph sourcefile~setup_trans4py.f90 setup_trans4py.F90 sourcefile~setup_core4py.f90 setup_core4py.F90 sourcefile~setup_trans4py.f90->sourcefile~setup_core4py.f90

Source Code

SUBROUTINE SETUP_TRANS0_4PY(KRETURNCODE, KPRGPNS, KPRGPEW, KPRTRW, LDEQ_REGIONS, &
                          & KMAX_RESOL, LDMPOFF, KREGIONS_NS, KREGIONS_EW)
! ** PURPOSE
!    Resolution-independent (parallel) setup of the transform package, mirroring
!    the IFS SUTRANS0 'SETUP' branch: define the processor grid KPRGPNS x KPRGPEW
!    (= NPROC) and the spectral wave-set count KPRTRW. Distributed (LDMPOFF=.FALSE.).
!    Must be called after MPL_INIT4PY.
!
! ** ARGUMENTS
!    KPRGPNS, KPRGPEW : grid-point processor grid (N-S x E-W), product = NPROC
!    KPRTRW           : number of processors for the wave-set (spectral) direction
!    LDEQ_REGIONS     : use equal-regions partitioning
!    KMAX_RESOL       : maximum number of resolutions
!    KREGIONS_NS, KREGIONS_EW : returned region counts
USE ISO_FORTRAN_ENV, ONLY: INT64
USE PARKIND1, ONLY: JPIM
USE, INTRINSIC :: ISO_C_BINDING, ONLY: C_BOOL
USE SETUP_CORE4PY_MOD, ONLY: SETUP_TRANS0_CORE
IMPLICIT NONE
INTEGER(KIND=INT64), INTENT(OUT) :: KRETURNCODE
INTEGER(KIND=INT64), INTENT(IN)  :: KPRGPNS, KPRGPEW, KPRTRW, KMAX_RESOL
LOGICAL(KIND=C_BOOL), INTENT(IN) :: LDEQ_REGIONS
LOGICAL(KIND=C_BOOL), INTENT(IN) :: LDMPOFF
INTEGER(KIND=INT64), INTENT(OUT) :: KREGIONS_NS, KREGIONS_EW
INTEGER(KIND=JPIM) :: INS, IEW
KRETURNCODE = 0
INS = 0
IEW = 0
! Distributed: message passing ON, KPRGPNS x KPRGPEW grid-point processor grid.
CALL SETUP_TRANS0_CORE(KMAX_RESOL=INT(KMAX_RESOL,JPIM), LDMPOFF=LOGICAL(LDMPOFF), &
 & KPRGPNS=INT(KPRGPNS,JPIM), KPRGPEW=INT(KPRGPEW,JPIM), KPRTRW=INT(KPRTRW,JPIM), &
 & LDEQ_REGIONS=LOGICAL(LDEQ_REGIONS), KREGIONS_NS=INS, KREGIONS_EW=IEW)
KREGIONS_NS = INS
KREGIONS_EW = IEW
END SUBROUTINE SETUP_TRANS0_4PY


SUBROUTINE SETUP_TRANS_4PY(KRETURNCODE, KSMAX, KDGL, KSLOEN, KLOEN, LDSPLIT, LDUSEFLT, KRESOL)
! ** PURPOSE
!    Resolution-dependent (parallel) setup, mirroring IFS SUTRANS: define the
!    Gaussian grid (KDGL latitudes, reduced grid KLOEN) and truncation KSMAX, with
!    LDSPLIT controlling the distributed grid-point split. LDUSEFLT selects the Fast
!    Legendre Transform (butterfly algorithm). Returns the resolution tag.
USE ISO_FORTRAN_ENV, ONLY: INT64
USE PARKIND1, ONLY: JPIM
USE, INTRINSIC :: ISO_C_BINDING, ONLY: C_BOOL
IMPLICIT NONE
INTEGER(KIND=INT64), INTENT(OUT) :: KRETURNCODE
INTEGER(KIND=INT64), INTENT(IN)  :: KSMAX, KDGL, KSLOEN
INTEGER(KIND=INT64), DIMENSION(KSLOEN), INTENT(IN) :: KLOEN
LOGICAL(KIND=C_BOOL), INTENT(IN) :: LDSPLIT, LDUSEFLT
INTEGER(KIND=INT64), INTENT(OUT) :: KRESOL
INTEGER(KIND=JPIM) :: ILOEN(KSLOEN), IRESOL
LOGICAL :: LLFLT
#include "setup_trans.h"
KRETURNCODE = 0
ILOEN(:) = INT(KLOEN(:), JPIM)
IRESOL = 0
LLFLT = LOGICAL(LDUSEFLT)
! FLT computes/keeps its own Legendre polynomials; without FLT use Belusov (RPNM).
CALL SETUP_TRANS(KSMAX=INT(KSMAX,JPIM), KDGL=INT(KDGL,JPIM), KLOEN=ILOEN, &
 & LDSPLIT=LOGICAL(LDSPLIT), KRESOL=IRESOL, LDGRIDONLY=.FALSE., &
 & LDUSEFLT=LLFLT, LDUSERPNM=(.NOT.LLFLT), LDKEEPRPNM=(.NOT.LLFLT))
KRESOL = IRESOL
END SUBROUTINE SETUP_TRANS_4PY