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