gpnorm_gridonly_reproducer.F90 Source File


Source Code

PROGRAM GRIDONLY_GPNORM
! GPNORM_TRANS on a grid-point-only resolution (SETUP_TRANS LDGRIDONLY=.TRUE.).
! Octahedral O16 grid (32 rows), split latitudes, equal regions.
! Usage: mpirun -n <N> ./gridonly_gpnorm <T|F>   (T: LDGRIDONLY=.TRUE., F: the control)
USE PARKIND1,   ONLY: JPIM, JPRB
USE MPL_MODULE, ONLY: MPL_INIT, MPL_END, MPL_MYRANK, MPL_NPROC
IMPLICIT NONE
#include "setup_trans0.h"
#include "setup_trans.h"
#include "trans_inq.h"
#include "gpnorm_trans.h"
INTEGER(KIND=JPIM), PARAMETER :: NDGL = 32
INTEGER(KIND=JPIM) :: NPROC, IRESOL, IGPTOT, JL, NLOEN(NDGL)
REAL(KIND=JPRB), ALLOCATABLE :: ZGP(:,:,:)
REAL(KIND=JPRB) :: ZAVE(1), ZMIN(1), ZMAX(1)
LOGICAL :: LLGRIDONLY
CHARACTER(LEN=8) :: CLARG

CALL GET_COMMAND_ARGUMENT(1, CLARG)
READ(CLARG,*) LLGRIDONLY
CALL MPL_INIT()
NPROC = MPL_NPROC()
CALL SETUP_TRANS0(KPRGPNS=NPROC, KPRGPEW=1, KPRTRW=NPROC, LDEQ_REGIONS=.TRUE.)
DO JL = 1, NDGL/2
  NLOEN(JL) = 20 + 4*(JL-1)
  NLOEN(NDGL+1-JL) = NLOEN(JL)
ENDDO
CALL SETUP_TRANS(KSMAX=15, KDGL=NDGL, KLOEN=NLOEN, LDSPLIT=.TRUE., KRESOL=IRESOL, &
 & LDGRIDONLY=LLGRIDONLY)
CALL TRANS_INQ(KRESOL=IRESOL, KGPTOT=IGPTOT)
ALLOCATE(ZGP(IGPTOT,1,1))
ZGP(:,:,:) = 1.0_JPRB
ZMIN(:) = 0.0_JPRB
ZMAX(:) = 0.0_JPRB
CALL GPNORM_TRANS(ZGP, 1, IGPTOT, ZAVE, ZMIN, ZMAX, .FALSE., KRESOL=IRESOL)
IF (MPL_MYRANK() == 1) WRITE(*,*) 'LDGRIDONLY=', LLGRIDONLY, ' GPNORM_TRANS ave/min/max:', &
 & ZAVE, ZMIN, ZMAX
CALL MPL_END()
END PROGRAM GRIDONLY_GPNORM