From 7e44ab1ac18096354fc426eaf403a7e721f111e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Riette?= <sebastien.riette@meteo.fr> Date: Fri, 16 Dec 2022 14:58:21 +0100 Subject: [PATCH] S. Riette 16 Dec 2022: adding shallow_mf testprog --- build/with_fcm/fcm-make.cfg | 2 +- src/testprogs/shallow/getdata_shallow_mod.F90 | 683 ++++++++++++++++++ src/testprogs/shallow/main_shallow.F90 | 512 +++++++++++++ src/testprogs/support/arrays_manip.F90 | 131 +++- tools/.gitignore | 4 +- tools/check_commit_testprogs.sh | 4 +- .../{shallow_mf => shallow}/.gitkeep | 0 7 files changed, 1303 insertions(+), 33 deletions(-) create mode 100644 src/testprogs/shallow/getdata_shallow_mod.F90 create mode 100644 src/testprogs/shallow/main_shallow.F90 rename tools/testprogs_data/{shallow_mf => shallow}/.gitkeep (100%) diff --git a/build/with_fcm/fcm-make.cfg b/build/with_fcm/fcm-make.cfg index 6a43a1be5..05911c3a3 100644 --- a/build/with_fcm/fcm-make.cfg +++ b/build/with_fcm/fcm-make.cfg @@ -64,7 +64,7 @@ build.prop{fc.libs} = $LIBS ############################# # 4.1 Programs and dummy programm to force linking build.source[dummyprog] = src/dummyprog.F90 -build.source[testprogs] = src/ice_adjust/ src/rain_ice/ src/turb_mnh/ src/support/ +build.source[testprogs] = src/ice_adjust/ src/rain_ice/ src/turb_mnh/ src/support/ src/shallow/ ############################# # 4.2 Main directory diff --git a/src/testprogs/shallow/getdata_shallow_mod.F90 b/src/testprogs/shallow/getdata_shallow_mod.F90 new file mode 100644 index 000000000..4e5186d22 --- /dev/null +++ b/src/testprogs/shallow/getdata_shallow_mod.F90 @@ -0,0 +1,683 @@ +MODULE GETDATA_SHALLOW_MOD + +USE ARRAYS_MANIP, ONLY: SETUP, REPLICATE, NPROMIZE, INTERPOLATE, SET + +CONTAINS + +SUBROUTINE GETDATA_SHALLOW (NPROMA, NGPBLKS, NFLEVG, KRR, KRRL, KRRI, KSV, KLEV, & + !IN and INOUT (allocation and reading) + &PDZZF_B, PZZ_B, PRHODJ_B, PRHODREF_B, PPABSM_B, PEXNM_B, & + &PSFTH_B, PSFRV_B, & + &PTHM_B, PRM_B, & + &PUM_B, PVM_B, PTKEM_B, PSVM_B, PTHL_UP_B, & + &PRT_UP_B, PRV_UP_B, PRC_UP_B, & + &PRI_UP_B, & + &PU_UP_B, & + &PV_UP_B, PTHV_UP_B, PW_UP_B, PFRAC_UP_B, PEMF_B, & + !OUT (allocation) + &PDUDT_MF_B, & + &PDVDT_MF_B,PDTHLDT_MF_B,PDRTDT_MF_B,PDSVDT_MF_B,PSIGMF_B,PRC_MF_B,PRI_MF_B,PCF_MF_B, & + &PFLXZTHVMF_B,ZFLXZTHMF_B, & + &ZFLXZRMF_B,ZFLXZUMF_B, & + &ZFLXZVMF_B,ZDETR_B,ZENTR_B, IKLCL_B, IKETL_B, IKCTL_B,& + !OUT and INOUT (expected values) + &PDUDT_MF_OUT_B, PDVDT_MF_OUT_B, & + &PDTHLDT_MF_OUT_B, PDRTDT_MF_OUT_B, & + &PDSVDT_MF_OUT_B, PSIGMF_OUT_B, PRC_MF_OUT_B, PRI_MF_OUT_B, PCF_MF_OUT_B, PFLXZTHVMF_OUT_B, ZFLXZTHMF_OUT_B, & + &ZFLXZRMF_OUT_B, & + &ZFLXZUMF_OUT_B, ZFLXZVMF_OUT_B, PTHL_UP_OUT_B, PRT_UP_OUT_B, PRV_UP_OUT_B, PRC_UP_OUT_B, PRI_UP_OUT_B, & + &PU_UP_OUT_B, PV_UP_OUT_B, & + &PTHV_UP_OUT_B, PW_UP_OUT_B, & + &PFRAC_UP_OUT_B, PEMF_OUT_B, ZDETR_OUT_B, ZENTR_OUT_B, IKLCL_OUT_B, IKETL_OUT_B, IKCTL_OUT_B) + +IMPLICIT NONE + +INTEGER, PARAMETER :: IFILE = 77 + +INTEGER :: KLON +INTEGER :: KIDIA +INTEGER :: KFDIA +INTEGER :: KLEV +INTEGER :: KRR, KRRL, KRRI +INTEGER :: KSV +INTEGER :: KDUM + +LOGICAL :: LDVERBOSE + +!IN and INOUTS +REAL, ALLOCATABLE :: PDZZF_B (:,:,:,:) +REAL, ALLOCATABLE :: PZZ_B (:,:,:,:) +REAL, ALLOCATABLE :: PRHODJ_B (:,:,:,:) +REAL, ALLOCATABLE :: PRHODREF_B (:,:,:,:) +REAL, ALLOCATABLE :: PPABSM_B (:,:,:,:) +REAL, ALLOCATABLE :: PEXNM_B (:,:,:,:) +REAL, ALLOCATABLE :: PSFTH_B (:,:,:) +REAL, ALLOCATABLE :: PSFRV_B (:,:,:) +REAL, ALLOCATABLE :: PTHM_B (:,:,:,:) +REAL, ALLOCATABLE :: PRM_B (:,:,:,:,:) !(KLON, 1, KLEV, KRR) +REAL, ALLOCATABLE :: PUM_B (:,:,:,:) +REAL, ALLOCATABLE :: PVM_B (:,:,:,:) +REAL, ALLOCATABLE :: PTKEM_B (:,:,:,:) +REAL, ALLOCATABLE :: PSVM_B (:,:,:,:,:) !(KLON,1,KLEV,KSV) +REAL, ALLOCATABLE :: PTHL_UP_B (:,:,:,:) +REAL, ALLOCATABLE :: PRT_UP_B (:,:,:,:) +REAL, ALLOCATABLE :: PRV_UP_B (:,:,:,:) +REAL, ALLOCATABLE :: PRC_UP_B (:,:,:,:) +REAL, ALLOCATABLE :: PRI_UP_B (:,:,:,:) +REAL, ALLOCATABLE :: PU_UP_B (:,:,:,:) +REAL, ALLOCATABLE :: PV_UP_B (:,:,:,:) +REAL, ALLOCATABLE :: PTHV_UP_B (:,:,:,:) +REAL, ALLOCATABLE :: PW_UP_B (:,:,:,:) +REAL, ALLOCATABLE :: PFRAC_UP_B (:,:,:,:) +REAL, ALLOCATABLE :: PEMF_B (:,:,:,:) + +!OUT +REAL, ALLOCATABLE :: PDUDT_MF_B (:,:,:,:) +REAL, ALLOCATABLE :: PDVDT_MF_B (:,:,:,:) +REAL, ALLOCATABLE :: PDTHLDT_MF_B (:,:,:,:) +REAL, ALLOCATABLE :: PDRTDT_MF_B (:,:,:,:) +REAL, ALLOCATABLE :: PDSVDT_MF_B (:,:,:,:,:) !(KLON,1,KLEV,KSV) +REAL, ALLOCATABLE :: PSIGMF_B (:,:,:,:) +REAL, ALLOCATABLE :: PRC_MF_B (:,:,:,:) +REAL, ALLOCATABLE :: PRI_MF_B (:,:,:,:) +REAL, ALLOCATABLE :: PCF_MF_B (:,:,:,:) +REAL, ALLOCATABLE :: PFLXZTHVMF_B (:,:,:,:) +REAL, ALLOCATABLE :: ZFLXZTHMF_B (:,:,:,:) +REAL, ALLOCATABLE :: ZFLXZRMF_B (:,:,:,:) +REAL, ALLOCATABLE :: ZFLXZUMF_B (:,:,:,:) +REAL, ALLOCATABLE :: ZFLXZVMF_B (:,:,:,:) +REAL, ALLOCATABLE :: ZDETR_B (:,:,:,:) +REAL, ALLOCATABLE :: ZENTR_B (:,:,:,:) +INTEGER, ALLOCATABLE:: IKLCL_B (:,:,:) +INTEGER, ALLOCATABLE:: IKETL_B (:,:,:) +INTEGER, ALLOCATABLE:: IKCTL_B (:,:,:) + + +!Expected values +REAL, ALLOCATABLE :: PDUDT_MF_OUT_B (:,:,:,:) +REAL, ALLOCATABLE :: PDVDT_MF_OUT_B (:,:,:,:) +REAL, ALLOCATABLE :: PDTHLDT_MF_OUT_B (:,:,:,:) +REAL, ALLOCATABLE :: PDRTDT_MF_OUT_B (:,:,:,:) +REAL, ALLOCATABLE :: PDSVDT_MF_OUT_B (:,:,:,:,:) !(KLON,1,KLEV,KSV) +REAL, ALLOCATABLE :: PSIGMF_OUT_B (:,:,:,:) +REAL, ALLOCATABLE :: PRC_MF_OUT_B (:,:,:,:) +REAL, ALLOCATABLE :: PRI_MF_OUT_B (:,:,:,:) +REAL, ALLOCATABLE :: PCF_MF_OUT_B (:,:,:,:) +REAL, ALLOCATABLE :: PFLXZTHVMF_OUT_B (:,:,:,:) +REAL, ALLOCATABLE :: ZFLXZTHMF_OUT_B (:,:,:,:) +REAL, ALLOCATABLE :: ZFLXZRMF_OUT_B (:,:,:,:) +REAL, ALLOCATABLE :: ZFLXZUMF_OUT_B (:,:,:,:) +REAL, ALLOCATABLE :: ZFLXZVMF_OUT_B (:,:,:,:) +REAL, ALLOCATABLE :: PTHL_UP_OUT_B (:,:,:,:) +REAL, ALLOCATABLE :: PRT_UP_OUT_B (:,:,:,:) +REAL, ALLOCATABLE :: PRV_UP_OUT_B (:,:,:,:) +REAL, ALLOCATABLE :: PRC_UP_OUT_B (:,:,:,:) +REAL, ALLOCATABLE :: PRI_UP_OUT_B (:,:,:,:) +REAL, ALLOCATABLE :: PU_UP_OUT_B (:,:,:,:) +REAL, ALLOCATABLE :: PV_UP_OUT_B (:,:,:,:) +REAL, ALLOCATABLE :: PTHV_UP_OUT_B (:,:,:,:) +REAL, ALLOCATABLE :: PW_UP_OUT_B (:,:,:,:) +REAL, ALLOCATABLE :: PFRAC_UP_OUT_B (:,:,:,:) +REAL, ALLOCATABLE :: PEMF_OUT_B (:,:,:,:) +REAL, ALLOCATABLE :: ZDETR_OUT_B (:,:,:,:) +REAL, ALLOCATABLE :: ZENTR_OUT_B (:,:,:,:) +INTEGER, ALLOCATABLE:: IKLCL_OUT_B (:,:,:) +INTEGER, ALLOCATABLE:: IKETL_OUT_B (:,:,:) +INTEGER, ALLOCATABLE:: IKCTL_OUT_B (:,:,:) + +!Inputs to read +REAL, ALLOCATABLE :: PDZZF (:,:,:,:) +REAL, ALLOCATABLE :: PZZ (:,:,:,:) +REAL, ALLOCATABLE :: PRHODJ (:,:,:,:) +REAL, ALLOCATABLE :: PRHODREF (:,:,:,:) +REAL, ALLOCATABLE :: PPABSM (:,:,:,:) +REAL, ALLOCATABLE :: PEXNM (:,:,:,:) +REAL, ALLOCATABLE :: PSFTH (:,:,:) +REAL, ALLOCATABLE :: PSFRV (:,:,:) +REAL, ALLOCATABLE :: PTHM (:,:,:,:) +REAL, ALLOCATABLE :: PRM (:,:,:,:,:) !(KLON, 1, KLEV, KRR) +REAL, ALLOCATABLE :: PUM (:,:,:,:) +REAL, ALLOCATABLE :: PVM (:,:,:,:) +REAL, ALLOCATABLE :: PTKEM (:,:,:,:) +REAL, ALLOCATABLE :: PSVM (:,:,:,:,:) !(KLON,1,KLEV,KSV) +REAL, ALLOCATABLE :: PTHL_UP (:,:,:,:) +REAL, ALLOCATABLE :: PRT_UP (:,:,:,:) +REAL, ALLOCATABLE :: PRV_UP (:,:,:,:) +REAL, ALLOCATABLE :: PRC_UP (:,:,:,:) +REAL, ALLOCATABLE :: PRI_UP (:,:,:,:) +REAL, ALLOCATABLE :: PU_UP (:,:,:,:) +REAL, ALLOCATABLE :: PV_UP (:,:,:,:) +REAL, ALLOCATABLE :: PTHV_UP (:,:,:,:) +REAL, ALLOCATABLE :: PW_UP (:,:,:,:) +REAL, ALLOCATABLE :: PFRAC_UP (:,:,:,:) +REAL, ALLOCATABLE :: PEMF (:,:,:,:) +!Expected values to read +REAL, ALLOCATABLE :: PDUDT_MF_OUT (:,:,:,:) +REAL, ALLOCATABLE :: PDVDT_MF_OUT (:,:,:,:) +REAL, ALLOCATABLE :: PDTHLDT_MF_OUT (:,:,:,:) +REAL, ALLOCATABLE :: PDRTDT_MF_OUT (:,:,:,:) +REAL, ALLOCATABLE :: PDSVDT_MF_OUT (:,:,:,:,:) !(KLON,1,KLEV,KSV) +REAL, ALLOCATABLE :: PSIGMF_OUT (:,:,:,:) +REAL, ALLOCATABLE :: PRC_MF_OUT (:,:,:,:) +REAL, ALLOCATABLE :: PRI_MF_OUT (:,:,:,:) +REAL, ALLOCATABLE :: PCF_MF_OUT (:,:,:,:) +REAL, ALLOCATABLE :: PFLXZTHVMF_OUT (:,:,:,:) +REAL, ALLOCATABLE :: ZFLXZTHMF_OUT (:,:,:,:) +REAL, ALLOCATABLE :: ZFLXZRMF_OUT (:,:,:,:) +REAL, ALLOCATABLE :: ZFLXZUMF_OUT (:,:,:,:) +REAL, ALLOCATABLE :: ZFLXZVMF_OUT (:,:,:,:) +REAL, ALLOCATABLE :: PTHL_UP_OUT (:,:,:,:) +REAL, ALLOCATABLE :: PRT_UP_OUT (:,:,:,:) +REAL, ALLOCATABLE :: PRV_UP_OUT (:,:,:,:) +REAL, ALLOCATABLE :: PRC_UP_OUT (:,:,:,:) +REAL, ALLOCATABLE :: PRI_UP_OUT (:,:,:,:) +REAL, ALLOCATABLE :: PU_UP_OUT (:,:,:,:) +REAL, ALLOCATABLE :: PV_UP_OUT (:,:,:,:) +REAL, ALLOCATABLE :: PTHV_UP_OUT (:,:,:,:) +REAL, ALLOCATABLE :: PW_UP_OUT (:,:,:,:) +REAL, ALLOCATABLE :: PFRAC_UP_OUT (:,:,:,:) +REAL, ALLOCATABLE :: PEMF_OUT (:,:,:,:) +REAL, ALLOCATABLE :: ZDETR_OUT (:,:,:,:) +REAL, ALLOCATABLE :: ZENTR_OUT (:,:,:,:) +INTEGER, ALLOCATABLE:: IKLCL_OUT (:,:,:) +INTEGER, ALLOCATABLE:: IKETL_OUT (:,:,:) +INTEGER, ALLOCATABLE:: IKCTL_OUT (:,:,:) + +INTEGER :: NGPTOT, NPROMA, NGPBLKS, NFLEVG +INTEGER :: IOFF, IBL +LOGICAL :: LLEXIST +CHARACTER(LEN=32) :: CLFILE + +CALL SETUP() + +NGPTOT = NPROMA * NGPBLKS +KRR=6 +KRRL=2 +KRRI=3 +KSV=0 + +IBL = 1 +WRITE (CLFILE, '("data/",I8.8,".dat")') IBL +OPEN (IFILE, FILE=TRIM (CLFILE), FORM='UNFORMATTED') +READ (IFILE) KLON, KLEV +CLOSE (IFILE) + +IF (NFLEVG < 0) NFLEVG = KLEV + +ALLOCATE (PDZZF_B (NPROMA,1,NFLEVG,NGPBLKS)) +ALLOCATE (PZZ_B (NPROMA,1,NFLEVG,NGPBLKS)) +ALLOCATE (PRHODJ_B (NPROMA,1,NFLEVG,NGPBLKS)) +ALLOCATE (PRHODREF_B (NPROMA,1,NFLEVG,NGPBLKS)) +ALLOCATE (PPABSM_B (NPROMA,1,NFLEVG,NGPBLKS)) +ALLOCATE (PEXNM_B (NPROMA,1,NFLEVG,NGPBLKS)) +ALLOCATE (PSFTH_B (NPROMA,1,NGPBLKS)) +ALLOCATE (PSFRV_B (NPROMA,1,NGPBLKS)) +ALLOCATE (PTHM_B (NPROMA,1,NFLEVG,NGPBLKS)) +ALLOCATE (PRM_B (NPROMA,1,NFLEVG,KRR,NGPBLKS)) +ALLOCATE (PUM_B (NPROMA,1,NFLEVG,NGPBLKS)) +ALLOCATE (PVM_B (NPROMA,1,NFLEVG,NGPBLKS)) +ALLOCATE (PTKEM_B (NPROMA,1,NFLEVG,NGPBLKS)) +ALLOCATE (PSVM_B (NPROMA,1,NFLEVG,KSV,NGPBLKS)) +ALLOCATE (PTHL_UP_B (NPROMA,1,NFLEVG,NGPBLKS)) +ALLOCATE (PRT_UP_B (NPROMA,1,NFLEVG,NGPBLKS)) +ALLOCATE (PRV_UP_B (NPROMA,1,NFLEVG,NGPBLKS)) +ALLOCATE (PRC_UP_B (NPROMA,1,NFLEVG,NGPBLKS)) +ALLOCATE (PRI_UP_B (NPROMA,1,NFLEVG,NGPBLKS)) +ALLOCATE (PU_UP_B (NPROMA,1,NFLEVG,NGPBLKS)) +ALLOCATE (PV_UP_B (NPROMA,1,NFLEVG,NGPBLKS)) +ALLOCATE (PTHV_UP_B (NPROMA,1,NFLEVG,NGPBLKS)) +ALLOCATE (PW_UP_B (NPROMA,1,NFLEVG,NGPBLKS)) +ALLOCATE (PFRAC_UP_B (NPROMA,1,NFLEVG,NGPBLKS)) +ALLOCATE (PEMF_B (NPROMA,1,NFLEVG,NGPBLKS)) + +ALLOCATE (PDUDT_MF_B (NPROMA,1,NFLEVG,NGPBLKS)) +ALLOCATE (PDVDT_MF_B (NPROMA,1,NFLEVG,NGPBLKS)) +ALLOCATE (PDTHLDT_MF_B (NPROMA,1,NFLEVG,NGPBLKS)) +ALLOCATE (PDRTDT_MF_B (NPROMA,1,NFLEVG,NGPBLKS)) +ALLOCATE (PDSVDT_MF_B (NPROMA,1,NFLEVG,KSV,NGPBLKS)) +ALLOCATE (PSIGMF_B (NPROMA,1,NFLEVG,NGPBLKS)) +ALLOCATE (PRC_MF_B (NPROMA,1,NFLEVG,NGPBLKS)) +ALLOCATE (PRI_MF_B (NPROMA,1,NFLEVG,NGPBLKS)) +ALLOCATE (PCF_MF_B (NPROMA,1,NFLEVG,NGPBLKS)) +ALLOCATE (PFLXZTHVMF_B (NPROMA,1,NFLEVG,NGPBLKS)) +ALLOCATE (ZFLXZTHMF_B (NPROMA,1,NFLEVG,NGPBLKS)) +ALLOCATE (ZFLXZRMF_B (NPROMA,1,NFLEVG,NGPBLKS)) +ALLOCATE (ZFLXZUMF_B (NPROMA,1,NFLEVG,NGPBLKS)) +ALLOCATE (ZFLXZVMF_B (NPROMA,1,NFLEVG,NGPBLKS)) +ALLOCATE (ZDETR_B (NPROMA,1,NFLEVG,NGPBLKS)) +ALLOCATE (ZENTR_B (NPROMA,1,NFLEVG,NGPBLKS)) +ALLOCATE (IKLCL_B (NPROMA,1,NGPBLKS)) +ALLOCATE (IKETL_B (NPROMA,1,NGPBLKS)) +ALLOCATE (IKCTL_B (NPROMA,1,NGPBLKS)) + +ALLOCATE (PDUDT_MF_OUT_B (NPROMA,1,NFLEVG,NGPBLKS)) +ALLOCATE (PDVDT_MF_OUT_B (NPROMA,1,NFLEVG,NGPBLKS)) +ALLOCATE (PDTHLDT_MF_OUT_B (NPROMA,1,NFLEVG,NGPBLKS)) +ALLOCATE (PDRTDT_MF_OUT_B (NPROMA,1,NFLEVG,NGPBLKS)) +ALLOCATE (PDSVDT_MF_OUT_B (NPROMA,1,NFLEVG,KSV,NGPBLKS)) +ALLOCATE (PSIGMF_OUT_B (NPROMA,1,NFLEVG,NGPBLKS)) +ALLOCATE (PRC_MF_OUT_B (NPROMA,1,NFLEVG,NGPBLKS)) +ALLOCATE (PRI_MF_OUT_B (NPROMA,1,NFLEVG,NGPBLKS)) +ALLOCATE (PCF_MF_OUT_B (NPROMA,1,NFLEVG,NGPBLKS)) +ALLOCATE (PFLXZTHVMF_OUT_B (NPROMA,1,NFLEVG,NGPBLKS)) +ALLOCATE (ZFLXZTHMF_OUT_B (NPROMA,1,NFLEVG,NGPBLKS)) +ALLOCATE (ZFLXZRMF_OUT_B (NPROMA,1,NFLEVG,NGPBLKS)) +ALLOCATE (ZFLXZUMF_OUT_B (NPROMA,1,NFLEVG,NGPBLKS)) +ALLOCATE (ZFLXZVMF_OUT_B (NPROMA,1,NFLEVG,NGPBLKS)) +ALLOCATE (PTHL_UP_OUT_B (NPROMA,1,NFLEVG,NGPBLKS)) +ALLOCATE (PRT_UP_OUT_B (NPROMA,1,NFLEVG,NGPBLKS)) +ALLOCATE (PRV_UP_OUT_B (NPROMA,1,NFLEVG,NGPBLKS)) +ALLOCATE (PRC_UP_OUT_B (NPROMA,1,NFLEVG,NGPBLKS)) +ALLOCATE (PRI_UP_OUT_B (NPROMA,1,NFLEVG,NGPBLKS)) +ALLOCATE (PU_UP_OUT_B (NPROMA,1,NFLEVG,NGPBLKS)) +ALLOCATE (PV_UP_OUT_B (NPROMA,1,NFLEVG,NGPBLKS)) +ALLOCATE (PTHV_UP_OUT_B (NPROMA,1,NFLEVG,NGPBLKS)) +ALLOCATE (PW_UP_OUT_B (NPROMA,1,NFLEVG,NGPBLKS)) +ALLOCATE (PFRAC_UP_OUT_B (NPROMA,1,NFLEVG,NGPBLKS)) +ALLOCATE (PEMF_OUT_B (NPROMA,1,NFLEVG,NGPBLKS)) +ALLOCATE (ZDETR_OUT_B (NPROMA,1,NFLEVG,NGPBLKS)) +ALLOCATE (ZENTR_OUT_B (NPROMA,1,NFLEVG,NGPBLKS)) +ALLOCATE (IKLCL_OUT_B (NPROMA,1,NGPBLKS)) +ALLOCATE (IKETL_OUT_B (NPROMA,1,NGPBLKS)) +ALLOCATE (IKCTL_OUT_B (NPROMA,1,NGPBLKS)) + + +CALL SET (PDZZF_B ) +CALL SET (PZZ_B ) +CALL SET (PRHODJ_B ) +CALL SET (PRHODREF_B ) +CALL SET (PPABSM_B ) +CALL SET (PEXNM_B ) +CALL SET (PSFTH_B ) +CALL SET (PSFRV_B ) +CALL SET (PTHM_B ) +CALL SET (PRM_B ) +CALL SET (PUM_B ) +CALL SET (PVM_B ) +CALL SET (PTKEM_B ) +CALL SET (PSVM_B ) +CALL SET (PTHL_UP_B ) +CALL SET (PRT_UP_B ) +CALL SET (PRV_UP_B ) +CALL SET (PRC_UP_B ) +CALL SET (PRI_UP_B ) +CALL SET (PU_UP_B ) +CALL SET (PV_UP_B ) +CALL SET (PTHV_UP_B ) +CALL SET (PW_UP_B ) +CALL SET (PFRAC_UP_B ) +CALL SET (PEMF_B ) + +CALL SET (PDUDT_MF_B ) +CALL SET (PDVDT_MF_B ) +CALL SET (PDTHLDT_MF_B ) +CALL SET (PDRTDT_MF_B ) +CALL SET (PDSVDT_MF_B ) +CALL SET (PSIGMF_B ) +CALL SET (PRC_MF_B ) +CALL SET (PRI_MF_B ) +CALL SET (PCF_MF_B ) +CALL SET (PFLXZTHVMF_B ) +CALL SET (ZFLXZTHMF_B ) +CALL SET (ZFLXZRMF_B ) +CALL SET (ZFLXZUMF_B ) +CALL SET (ZFLXZVMF_B ) +CALL SET (ZDETR_B ) +CALL SET (ZENTR_B ) +CALL SET (IKLCL_B ) +CALL SET (IKETL_B ) +CALL SET (IKCTL_B ) + +CALL SET (PDUDT_MF_OUT_B ) +CALL SET (PDVDT_MF_OUT_B ) +CALL SET (PDTHLDT_MF_OUT_B ) +CALL SET (PDRTDT_MF_OUT_B ) +CALL SET (PDSVDT_MF_OUT_B ) +CALL SET (PSIGMF_OUT_B ) +CALL SET (PRC_MF_OUT_B ) +CALL SET (PRI_MF_OUT_B ) +CALL SET (PCF_MF_OUT_B ) +CALL SET (PFLXZTHVMF_OUT_B ) +CALL SET (ZFLXZTHMF_OUT_B ) +CALL SET (ZFLXZRMF_OUT_B ) +CALL SET (ZFLXZUMF_OUT_B ) +CALL SET (ZFLXZVMF_OUT_B ) +CALL SET (PTHL_UP_OUT_B ) +CALL SET (PRT_UP_OUT_B ) +CALL SET (PRV_UP_OUT_B ) +CALL SET (PRC_UP_OUT_B ) +CALL SET (PRI_UP_OUT_B ) +CALL SET (PU_UP_OUT_B ) +CALL SET (PV_UP_OUT_B ) +CALL SET (PTHV_UP_OUT_B ) +CALL SET (PW_UP_OUT_B ) +CALL SET (PFRAC_UP_OUT_B ) +CALL SET (PEMF_OUT_B ) +CALL SET (ZDETR_OUT_B ) +CALL SET (ZENTR_OUT_B ) +CALL SET (IKLCL_OUT_B ) +CALL SET (IKETL_OUT_B ) +CALL SET (IKCTL_OUT_B ) + +IOFF = 0 +IBL = 0 +LLEXIST = .TRUE. + +DO WHILE(LLEXIST) + IBL = IBL + 1 + WRITE (CLFILE, '("data/",I8.8,".dat")') IBL + + INQUIRE (FILE=TRIM (CLFILE), EXIST=LLEXIST) + + IF (LDVERBOSE) PRINT *, TRIM (CLFILE) + + IF (.NOT. LLEXIST) EXIT + + OPEN (IFILE, FILE=TRIM (CLFILE), FORM='UNFORMATTED') + + READ (IFILE) KLON, KLEV + + IF (IBL == 1) THEN + ALLOCATE (PDZZF (NGPTOT,1,KLEV,1)) + ALLOCATE (PZZ (NGPTOT,1,KLEV,1)) + ALLOCATE (PRHODJ (NGPTOT,1,KLEV,1)) + ALLOCATE (PRHODREF (NGPTOT,1,KLEV,1)) + ALLOCATE (PPABSM (NGPTOT,1,KLEV,1)) + ALLOCATE (PEXNM (NGPTOT,1,KLEV,1)) + ALLOCATE (PSFTH (NGPTOT,1,1)) + ALLOCATE (PSFRV (NGPTOT,1,1)) + ALLOCATE (PTHM (NGPTOT,1,KLEV,1)) + ALLOCATE (PRM (NGPTOT,1,KLEV,KRR,1)) + ALLOCATE (PUM (NGPTOT,1,KLEV,1)) + ALLOCATE (PVM (NGPTOT,1,KLEV,1)) + ALLOCATE (PTKEM (NGPTOT,1,KLEV,1)) + ALLOCATE (PSVM (NGPTOT,1,KLEV,KSV,1)) + ALLOCATE (PTHL_UP (NGPTOT,1,KLEV,1)) + ALLOCATE (PRT_UP (NGPTOT,1,KLEV,1)) + ALLOCATE (PRV_UP (NGPTOT,1,KLEV,1)) + ALLOCATE (PRC_UP (NGPTOT,1,KLEV,1)) + ALLOCATE (PRI_UP (NGPTOT,1,KLEV,1)) + ALLOCATE (PU_UP (NGPTOT,1,KLEV,1)) + ALLOCATE (PV_UP (NGPTOT,1,KLEV,1)) + ALLOCATE (PTHV_UP (NGPTOT,1,KLEV,1)) + ALLOCATE (PW_UP (NGPTOT,1,KLEV,1)) + ALLOCATE (PFRAC_UP (NGPTOT,1,KLEV,1)) + ALLOCATE (PEMF (NGPTOT,1,KLEV,1)) + + ALLOCATE (PDUDT_MF_OUT (NGPTOT,1,KLEV,1)) + ALLOCATE (PDVDT_MF_OUT (NGPTOT,1,KLEV,1)) + ALLOCATE (PDTHLDT_MF_OUT (NGPTOT,1,KLEV,1)) + ALLOCATE (PDRTDT_MF_OUT (NGPTOT,1,KLEV,1)) + ALLOCATE (PDSVDT_MF_OUT (NGPTOT,1,KLEV,KSV,1)) + ALLOCATE (PSIGMF_OUT (NGPTOT,1,KLEV,1)) + ALLOCATE (PRC_MF_OUT (NGPTOT,1,KLEV,1)) + ALLOCATE (PRI_MF_OUT (NGPTOT,1,KLEV,1)) + ALLOCATE (PCF_MF_OUT (NGPTOT,1,KLEV,1)) + ALLOCATE (PFLXZTHVMF_OUT (NGPTOT,1,KLEV,1)) + ALLOCATE (ZFLXZTHMF_OUT (NGPTOT,1,KLEV,1)) + ALLOCATE (ZFLXZRMF_OUT (NGPTOT,1,KLEV,1)) + ALLOCATE (ZFLXZUMF_OUT (NGPTOT,1,KLEV,1)) + ALLOCATE (ZFLXZVMF_OUT (NGPTOT,1,KLEV,1)) + ALLOCATE (PTHL_UP_OUT (NGPTOT,1,KLEV,1)) + ALLOCATE (PRT_UP_OUT (NGPTOT,1,KLEV,1)) + ALLOCATE (PRV_UP_OUT (NGPTOT,1,KLEV,1)) + ALLOCATE (PRC_UP_OUT (NGPTOT,1,KLEV,1)) + ALLOCATE (PRI_UP_OUT (NGPTOT,1,KLEV,1)) + ALLOCATE (PU_UP_OUT (NGPTOT,1,KLEV,1)) + ALLOCATE (PV_UP_OUT (NGPTOT,1,KLEV,1)) + ALLOCATE (PTHV_UP_OUT (NGPTOT,1,KLEV,1)) + ALLOCATE (PW_UP_OUT (NGPTOT,1,KLEV,1)) + ALLOCATE (PFRAC_UP_OUT (NGPTOT,1,KLEV,1)) + ALLOCATE (PEMF_OUT (NGPTOT,1,KLEV,1)) + ALLOCATE (ZDETR_OUT (NGPTOT,1,KLEV,1)) + ALLOCATE (ZENTR_OUT (NGPTOT,1,KLEV,1)) + ALLOCATE (IKLCL_OUT (NGPTOT,1,1)) + ALLOCATE (IKETL_OUT (NGPTOT,1,1)) + ALLOCATE (IKCTL_OUT (NGPTOT,1,1)) + ENDIF + + IF (IOFF+KLON > NGPTOT) THEN + EXIT + ENDIF + + READ(IFILE) PDZZF (IOFF+1:IOFF+KLON,:,:,1) + READ(IFILE) PZZ (IOFF+1:IOFF+KLON,:,:,1) + READ(IFILE) PRHODJ (IOFF+1:IOFF+KLON,:,:,1) + READ(IFILE) PRHODREF (IOFF+1:IOFF+KLON,:,:,1) + READ(IFILE) PPABSM (IOFF+1:IOFF+KLON,:,:,1) + READ(IFILE) PEXNM (IOFF+1:IOFF+KLON,:,:,1) + READ(IFILE) PSFTH (IOFF+1:IOFF+KLON,:,1) + READ(IFILE) PSFRV (IOFF+1:IOFF+KLON,:,1) + READ(IFILE) PTHM (IOFF+1:IOFF+KLON,:,:,1) + READ(IFILE) PRM (IOFF+1:IOFF+KLON,:,:,:,1) + READ(IFILE) PUM (IOFF+1:IOFF+KLON,:,:,1) + READ(IFILE) PVM (IOFF+1:IOFF+KLON,:,:,1) + READ(IFILE) PTKEM (IOFF+1:IOFF+KLON,:,:,1) + READ(IFILE) PSVM (IOFF+1:IOFF+KLON,:,:,:,1) + READ(IFILE) PTHL_UP (IOFF+1:IOFF+KLON,:,:,1) + READ(IFILE) PRT_UP (IOFF+1:IOFF+KLON,:,:,1) + READ(IFILE) PRV_UP (IOFF+1:IOFF+KLON,:,:,1) + READ(IFILE) PRC_UP (IOFF+1:IOFF+KLON,:,:,1) + READ(IFILE) PRI_UP (IOFF+1:IOFF+KLON,:,:,1) + READ(IFILE) PU_UP (IOFF+1:IOFF+KLON,:,:,1) + READ(IFILE) PV_UP (IOFF+1:IOFF+KLON,:,:,1) + READ(IFILE) PTHV_UP (IOFF+1:IOFF+KLON,:,:,1) + READ(IFILE) PW_UP (IOFF+1:IOFF+KLON,:,:,1) + READ(IFILE) PFRAC_UP (IOFF+1:IOFF+KLON,:,:,1) + READ(IFILE) PEMF (IOFF+1:IOFF+KLON,:,:,1) + + READ(IFILE) + READ(IFILE) PDUDT_MF_OUT (IOFF+1:IOFF+KLON,:,:,1) + READ(IFILE) PDVDT_MF_OUT (IOFF+1:IOFF+KLON,:,:,1) + READ(IFILE) PDTHLDT_MF_OUT (IOFF+1:IOFF+KLON,:,:,1) + READ(IFILE) PDRTDT_MF_OUT (IOFF+1:IOFF+KLON,:,:,1) + READ(IFILE) PDSVDT_MF_OUT (IOFF+1:IOFF+KLON,:,:,:,1) + READ(IFILE) PSIGMF_OUT (IOFF+1:IOFF+KLON,:,:,1) + READ(IFILE) PRC_MF_OUT (IOFF+1:IOFF+KLON,:,:,1) + READ(IFILE) PRI_MF_OUT (IOFF+1:IOFF+KLON,:,:,1) + READ(IFILE) PCF_MF_OUT (IOFF+1:IOFF+KLON,:,:,1) + READ(IFILE) PFLXZTHVMF_OUT (IOFF+1:IOFF+KLON,:,:,1) + READ(IFILE) ZFLXZTHMF_OUT (IOFF+1:IOFF+KLON,:,:,1) + READ(IFILE) ZFLXZRMF_OUT (IOFF+1:IOFF+KLON,:,:,1) + READ(IFILE) ZFLXZUMF_OUT (IOFF+1:IOFF+KLON,:,:,1) + READ(IFILE) ZFLXZVMF_OUT (IOFF+1:IOFF+KLON,:,:,1) + READ(IFILE) PTHL_UP_OUT (IOFF+1:IOFF+KLON,:,:,1) + READ(IFILE) PRT_UP_OUT (IOFF+1:IOFF+KLON,:,:,1) + READ(IFILE) PRV_UP_OUT (IOFF+1:IOFF+KLON,:,:,1) + READ(IFILE) PRC_UP_OUT (IOFF+1:IOFF+KLON,:,:,1) + READ(IFILE) PRI_UP_OUT (IOFF+1:IOFF+KLON,:,:,1) + READ(IFILE) PU_UP_OUT (IOFF+1:IOFF+KLON,:,:,1) + READ(IFILE) PV_UP_OUT (IOFF+1:IOFF+KLON,:,:,1) + READ(IFILE) PTHV_UP_OUT (IOFF+1:IOFF+KLON,:,:,1) + READ(IFILE) PW_UP_OUT (IOFF+1:IOFF+KLON,:,:,1) + READ(IFILE) PFRAC_UP_OUT (IOFF+1:IOFF+KLON,:,:,1) + READ(IFILE) PEMF_OUT (IOFF+1:IOFF+KLON,:,:,1) + READ(IFILE) ZDETR_OUT (IOFF+1:IOFF+KLON,:,:,1) + READ(IFILE) ZENTR_OUT (IOFF+1:IOFF+KLON,:,:,1) + READ(IFILE) IKLCL_OUT (IOFF+1:IOFF+KLON,:,1) + READ(IFILE) IKETL_OUT (IOFF+1:IOFF+KLON,:,1) + READ(IFILE) IKCTL_OUT (IOFF+1:IOFF+KLON,:,1) + + CLOSE (IFILE) + + IOFF = IOFF + KLON + +ENDDO + +IF (NFLEVG /= KLEV) THEN + CALL INTERPOLATE (NFLEVG, IOFF, PDZZF ) + CALL INTERPOLATE (NFLEVG, IOFF, PZZ ) + CALL INTERPOLATE (NFLEVG, IOFF, PRHODJ ) + CALL INTERPOLATE (NFLEVG, IOFF, PRHODREF ) + CALL INTERPOLATE (NFLEVG, IOFF, PPABSM ) + CALL INTERPOLATE (NFLEVG, IOFF, PEXNM ) +! CALL INTERPOLATE (NFLEVG, IOFF, PSFTH_B ) +! CALL INTERPOLATE (NFLEVG, IOFF, PSFRV_B ) + CALL INTERPOLATE (NFLEVG, IOFF, PTHM ) + CALL INTERPOLATE (NFLEVG, IOFF, PRM ) + CALL INTERPOLATE (NFLEVG, IOFF, PUM ) + CALL INTERPOLATE (NFLEVG, IOFF, PVM ) + CALL INTERPOLATE (NFLEVG, IOFF, PTKEM ) + CALL INTERPOLATE (NFLEVG, IOFF, PSVM ) + CALL INTERPOLATE (NFLEVG, IOFF, PTHL_UP ) + CALL INTERPOLATE (NFLEVG, IOFF, PRT_UP ) + CALL INTERPOLATE (NFLEVG, IOFF, PRV_UP ) + CALL INTERPOLATE (NFLEVG, IOFF, PRC_UP ) + CALL INTERPOLATE (NFLEVG, IOFF, PRI_UP ) + CALL INTERPOLATE (NFLEVG, IOFF, PU_UP ) + CALL INTERPOLATE (NFLEVG, IOFF, PV_UP ) + CALL INTERPOLATE (NFLEVG, IOFF, PTHV_UP ) + CALL INTERPOLATE (NFLEVG, IOFF, PW_UP ) + CALL INTERPOLATE (NFLEVG, IOFF, PFRAC_UP ) + CALL INTERPOLATE (NFLEVG, IOFF, PEMF ) + + CALL INTERPOLATE (NFLEVG, IOFF, PDUDT_MF_OUT ) + CALL INTERPOLATE (NFLEVG, IOFF, PDVDT_MF_OUT ) + CALL INTERPOLATE (NFLEVG, IOFF, PDTHLDT_MF_OUT ) + CALL INTERPOLATE (NFLEVG, IOFF, PDRTDT_MF_OUT ) + CALL INTERPOLATE (NFLEVG, IOFF, PDSVDT_MF_OUT ) + CALL INTERPOLATE (NFLEVG, IOFF, PSIGMF_OUT ) + CALL INTERPOLATE (NFLEVG, IOFF, PRC_MF_OUT ) + CALL INTERPOLATE (NFLEVG, IOFF, PRI_MF_OUT ) + CALL INTERPOLATE (NFLEVG, IOFF, PCF_MF_OUT ) + CALL INTERPOLATE (NFLEVG, IOFF, PFLXZTHVMF_OUT ) + CALL INTERPOLATE (NFLEVG, IOFF, ZFLXZTHMF_OUT ) + CALL INTERPOLATE (NFLEVG, IOFF, ZFLXZRMF_OUT ) + CALL INTERPOLATE (NFLEVG, IOFF, ZFLXZUMF_OUT ) + CALL INTERPOLATE (NFLEVG, IOFF, ZFLXZVMF_OUT ) + CALL INTERPOLATE (NFLEVG, IOFF, PTHL_UP_OUT ) + CALL INTERPOLATE (NFLEVG, IOFF, PRT_UP_OUT ) + CALL INTERPOLATE (NFLEVG, IOFF, PRV_UP_OUT ) + CALL INTERPOLATE (NFLEVG, IOFF, PRC_UP_OUT ) + CALL INTERPOLATE (NFLEVG, IOFF, PRI_UP_OUT ) + CALL INTERPOLATE (NFLEVG, IOFF, PU_UP_OUT ) + CALL INTERPOLATE (NFLEVG, IOFF, PV_UP_OUT ) + CALL INTERPOLATE (NFLEVG, IOFF, PTHV_UP_OUT ) + CALL INTERPOLATE (NFLEVG, IOFF, PW_UP_OUT ) + CALL INTERPOLATE (NFLEVG, IOFF, PFRAC_UP_OUT ) + CALL INTERPOLATE (NFLEVG, IOFF, PEMF_OUT ) + CALL INTERPOLATE (NFLEVG, IOFF, ZDETR_OUT ) + CALL INTERPOLATE (NFLEVG, IOFF, ZENTR_OUT ) + !CALL INTERPOLATE (NFLEVG, IOFF, IKLCL_OUT ) + !CALL INTERPOLATE (NFLEVG, IOFF, IKETL_OUT ) + !CALL INTERPOLATE (NFLEVG, IOFF, IKCTL_OUT ) + +ENDIF + +CALL REPLICATE (IOFF, PDZZF (:,:,:,1)) +CALL REPLICATE (IOFF, PZZ (:,:,:,1)) +CALL REPLICATE (IOFF, PRHODJ (:,:,:,1)) +CALL REPLICATE (IOFF, PRHODREF (:,:,:,1)) +CALL REPLICATE (IOFF, PPABSM (:,:,:,1)) +CALL REPLICATE (IOFF, PEXNM (:,:,:,1)) +CALL REPLICATE (IOFF, PSFTH (:,:,1)) +CALL REPLICATE (IOFF, PSFRV (:,:,1)) +CALL REPLICATE (IOFF, PTHM (:,:,:,1)) +CALL REPLICATE (IOFF, PRM (:,:,:,:,1)) +CALL REPLICATE (IOFF, PUM (:,:,:,1)) +CALL REPLICATE (IOFF, PVM (:,:,:,1)) +CALL REPLICATE (IOFF, PTKEM (:,:,:,1)) +CALL REPLICATE (IOFF, PSVM (:,:,:,:,1)) +CALL REPLICATE (IOFF, PTHL_UP (:,:,:,1)) +CALL REPLICATE (IOFF, PRT_UP (:,:,:,1)) +CALL REPLICATE (IOFF, PRV_UP (:,:,:,1)) +CALL REPLICATE (IOFF, PRC_UP (:,:,:,1)) +CALL REPLICATE (IOFF, PRI_UP (:,:,:,1)) +CALL REPLICATE (IOFF, PU_UP (:,:,:,1)) +CALL REPLICATE (IOFF, PV_UP (:,:,:,1)) +CALL REPLICATE (IOFF, PTHV_UP (:,:,:,1)) +CALL REPLICATE (IOFF, PW_UP (:,:,:,1)) +CALL REPLICATE (IOFF, PFRAC_UP (:,:,:,1)) +CALL REPLICATE (IOFF, PEMF (:,:,:,1)) + +CALL REPLICATE (IOFF, PDUDT_MF_OUT (:,:,:,1)) +CALL REPLICATE (IOFF, PDVDT_MF_OUT (:,:,:,1)) +CALL REPLICATE (IOFF, PDTHLDT_MF_OUT (:,:,:,1)) +CALL REPLICATE (IOFF, PDRTDT_MF_OUT (:,:,:,1)) +CALL REPLICATE (IOFF, PDSVDT_MF_OUT (:,:,:,:,1)) +CALL REPLICATE (IOFF, PSIGMF_OUT (:,:,:,1)) +CALL REPLICATE (IOFF, PRC_MF_OUT (:,:,:,1)) +CALL REPLICATE (IOFF, PRI_MF_OUT (:,:,:,1)) +CALL REPLICATE (IOFF, PCF_MF_OUT (:,:,:,1)) +CALL REPLICATE (IOFF, PFLXZTHVMF_OUT (:,:,:,1)) +CALL REPLICATE (IOFF, ZFLXZTHMF_OUT (:,:,:,1)) +CALL REPLICATE (IOFF, ZFLXZRMF_OUT (:,:,:,1)) +CALL REPLICATE (IOFF, ZFLXZUMF_OUT (:,:,:,1)) +CALL REPLICATE (IOFF, ZFLXZVMF_OUT (:,:,:,1)) +CALL REPLICATE (IOFF, PTHL_UP_OUT (:,:,:,1)) +CALL REPLICATE (IOFF, PRT_UP_OUT (:,:,:,1)) +CALL REPLICATE (IOFF, PRV_UP_OUT (:,:,:,1)) +CALL REPLICATE (IOFF, PRC_UP_OUT (:,:,:,1)) +CALL REPLICATE (IOFF, PRI_UP_OUT (:,:,:,1)) +CALL REPLICATE (IOFF, PU_UP_OUT (:,:,:,1)) +CALL REPLICATE (IOFF, PV_UP_OUT (:,:,:,1)) +CALL REPLICATE (IOFF, PTHV_UP_OUT (:,:,:,1)) +CALL REPLICATE (IOFF, PW_UP_OUT (:,:,:,1)) +CALL REPLICATE (IOFF, PFRAC_UP_OUT (:,:,:,1)) +CALL REPLICATE (IOFF, PEMF_OUT (:,:,:,1)) +CALL REPLICATE (IOFF, ZDETR_OUT (:,:,:,1)) +CALL REPLICATE (IOFF, ZENTR_OUT (:,:,:,1)) +CALL REPLICATE (IOFF, IKLCL_OUT (:,:,1)) +CALL REPLICATE (IOFF, IKETL_OUT (:,:,1)) +CALL REPLICATE (IOFF, IKCTL_OUT (:,:,1)) + +CALL NPROMIZE (NPROMA, PDZZF , PDZZF_B ) +CALL NPROMIZE (NPROMA, PZZ , PZZ_B ) +CALL NPROMIZE (NPROMA, PRHODJ , PRHODJ_B ) +CALL NPROMIZE (NPROMA, PRHODREF , PRHODREF_B ) +CALL NPROMIZE (NPROMA, PPABSM , PPABSM_B ) +CALL NPROMIZE (NPROMA, PEXNM , PEXNM_B ) +CALL NPROMIZE (NPROMA, PSFTH , PSFTH_B ) +CALL NPROMIZE (NPROMA, PSFRV , PSFRV_B ) +CALL NPROMIZE (NPROMA, PTHM , PTHM_B ) +CALL NPROMIZE (NPROMA, PRM , PRM_B ) +CALL NPROMIZE (NPROMA, PUM , PUM_B ) +CALL NPROMIZE (NPROMA, PVM , PVM_B ) +CALL NPROMIZE (NPROMA, PTKEM , PTKEM_B ) +CALL NPROMIZE (NPROMA, PSVM , PSVM_B ) +CALL NPROMIZE (NPROMA, PTHL_UP , PTHL_UP_B ) +CALL NPROMIZE (NPROMA, PRT_UP , PRT_UP_B ) +CALL NPROMIZE (NPROMA, PRV_UP , PRV_UP_B ) +CALL NPROMIZE (NPROMA, PRC_UP , PRC_UP_B ) +CALL NPROMIZE (NPROMA, PRI_UP , PRI_UP_B ) +CALL NPROMIZE (NPROMA, PU_UP , PU_UP_B ) +CALL NPROMIZE (NPROMA, PV_UP , PV_UP_B ) +CALL NPROMIZE (NPROMA, PTHV_UP , PTHV_UP_B ) +CALL NPROMIZE (NPROMA, PW_UP , PW_UP_B ) +CALL NPROMIZE (NPROMA, PFRAC_UP , PFRAC_UP_B ) +CALL NPROMIZE (NPROMA, PEMF , PEMF_B ) + +CALL NPROMIZE (NPROMA, PDUDT_MF_OUT , PDUDT_MF_OUT_B ) +CALL NPROMIZE (NPROMA, PDVDT_MF_OUT , PDVDT_MF_OUT_B ) +CALL NPROMIZE (NPROMA, PDTHLDT_MF_OUT , PDTHLDT_MF_OUT_B ) +CALL NPROMIZE (NPROMA, PDRTDT_MF_OUT , PDRTDT_MF_OUT_B ) +CALL NPROMIZE (NPROMA, PDSVDT_MF_OUT , PDSVDT_MF_OUT_B ) +CALL NPROMIZE (NPROMA, PSIGMF_OUT , PSIGMF_OUT_B ) +CALL NPROMIZE (NPROMA, PRC_MF_OUT , PRC_MF_OUT_B ) +CALL NPROMIZE (NPROMA, PRI_MF_OUT , PRI_MF_OUT_B ) +CALL NPROMIZE (NPROMA, PCF_MF_OUT , PCF_MF_OUT_B ) +CALL NPROMIZE (NPROMA, PFLXZTHVMF_OUT , PFLXZTHVMF_OUT_B ) +CALL NPROMIZE (NPROMA, ZFLXZTHMF_OUT , ZFLXZTHMF_OUT_B ) +CALL NPROMIZE (NPROMA, ZFLXZRMF_OUT , ZFLXZRMF_OUT_B ) +CALL NPROMIZE (NPROMA, ZFLXZUMF_OUT , ZFLXZUMF_OUT_B ) +CALL NPROMIZE (NPROMA, ZFLXZVMF_OUT , ZFLXZVMF_OUT_B ) +CALL NPROMIZE (NPROMA, PTHL_UP_OUT , PTHL_UP_OUT_B ) +CALL NPROMIZE (NPROMA, PRT_UP_OUT , PRT_UP_OUT_B ) +CALL NPROMIZE (NPROMA, PRV_UP_OUT , PRV_UP_OUT_B ) +CALL NPROMIZE (NPROMA, PRC_UP_OUT , PRC_UP_OUT_B ) +CALL NPROMIZE (NPROMA, PRI_UP_OUT , PRI_UP_OUT_B ) +CALL NPROMIZE (NPROMA, PU_UP_OUT , PU_UP_OUT_B ) +CALL NPROMIZE (NPROMA, PV_UP_OUT , PV_UP_OUT_B ) +CALL NPROMIZE (NPROMA, PTHV_UP_OUT , PTHV_UP_OUT_B ) +CALL NPROMIZE (NPROMA, PW_UP_OUT , PW_UP_OUT_B ) +CALL NPROMIZE (NPROMA, PFRAC_UP_OUT , PFRAC_UP_OUT_B ) +CALL NPROMIZE (NPROMA, PEMF_OUT , PEMF_OUT_B ) +CALL NPROMIZE (NPROMA, ZDETR_OUT , ZDETR_OUT_B ) +CALL NPROMIZE (NPROMA, ZENTR_OUT , ZENTR_OUT_B ) +CALL NPROMIZE (NPROMA, IKLCL_OUT , IKLCL_OUT_B ) +CALL NPROMIZE (NPROMA, IKETL_OUT , IKETL_OUT_B ) +CALL NPROMIZE (NPROMA, IKCTL_OUT , IKCTL_OUT_B ) + +END SUBROUTINE + +END MODULE diff --git a/src/testprogs/shallow/main_shallow.F90 b/src/testprogs/shallow/main_shallow.F90 new file mode 100644 index 000000000..726217260 --- /dev/null +++ b/src/testprogs/shallow/main_shallow.F90 @@ -0,0 +1,512 @@ +PROGRAM MAIN_SHALLOW + +USE XRD_GETOPTIONS +USE GETDATA_SHALLOW_MOD +USE COMPUTE_DIFF +USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t +USE MODD_CST, ONLY: CST +USE MODD_NEB, ONLY: NEB +USE MODD_PARAM_MFSHALL_n, ONLY: PARAM_MFSHALLN, PARAM_MFSHALL_GOTO_MODEL +USE MODD_CTURB +USE MODD_TURB_n, ONLY: TURBN +USE MODI_SHALLOW_MF +USE MODI_INI_CST +USE MODI_INI_NEB +USE STACK_MOD +USE OMP_LIB +USE YOMHOOK, ONLY : LHOOK, DR_HOOK +USE PARKIND1, ONLY : JPRB, JPIM + + +IMPLICIT NONE + +INTEGER :: KLON +INTEGER :: KLEV +INTEGER :: KRR, KRRL, KRRI +INTEGER :: KSV + +!IN and INOUTS +REAL, ALLOCATABLE :: PDZZF (:,:,:,:) +REAL, ALLOCATABLE :: PZZ (:,:,:,:) +REAL, ALLOCATABLE :: PRHODJ (:,:,:,:) +REAL, ALLOCATABLE :: PRHODREF (:,:,:,:) +REAL, ALLOCATABLE :: PPABSM (:,:,:,:) +REAL, ALLOCATABLE :: PEXNM (:,:,:,:) +REAL, ALLOCATABLE :: PSFTH (:,:,:) +REAL, ALLOCATABLE :: PSFRV (:,:,:) +REAL, ALLOCATABLE :: PTHM (:,:,:,:) +REAL, ALLOCATABLE :: PRM (:,:,:,:,:) !(KLON, 1, KLEV, KRR) + +REAL, ALLOCATABLE :: PUM (:,:,:,:) +REAL, ALLOCATABLE :: PVM (:,:,:,:) +REAL, ALLOCATABLE :: PTKEM (:,:,:,:) +REAL, ALLOCATABLE :: PSVM (:,:,:,:,:) !(KLON,1,KLEV,KSV) +REAL, ALLOCATABLE :: PTHL_UP (:,:,:,:) +REAL, ALLOCATABLE :: PRT_UP (:,:,:,:) +REAL, ALLOCATABLE :: PRV_UP (:,:,:,:) +REAL, ALLOCATABLE :: PRC_UP (:,:,:,:) +REAL, ALLOCATABLE :: PRI_UP (:,:,:,:) +REAL, ALLOCATABLE :: PU_UP (:,:,:,:) +REAL, ALLOCATABLE :: PV_UP (:,:,:,:) +REAL, ALLOCATABLE :: PTHV_UP (:,:,:,:) +REAL, ALLOCATABLE :: PW_UP (:,:,:,:) +REAL, ALLOCATABLE :: PFRAC_UP (:,:,:,:) +REAL, ALLOCATABLE :: PEMF (:,:,:,:) + +!OUT +REAL, ALLOCATABLE :: PDUDT_MF (:,:,:,:) +REAL, ALLOCATABLE :: PDVDT_MF (:,:,:,:) +REAL, ALLOCATABLE :: PDTHLDT_MF (:,:,:,:) +REAL, ALLOCATABLE :: PDRTDT_MF (:,:,:,:) +REAL, ALLOCATABLE :: PDSVDT_MF (:,:,:,:,:) !(KLON,1,KLEV,KSV) +REAL, ALLOCATABLE :: PSIGMF (:,:,:,:) +REAL, ALLOCATABLE :: PRC_MF (:,:,:,:) +REAL, ALLOCATABLE :: PRI_MF (:,:,:,:) +REAL, ALLOCATABLE :: PCF_MF (:,:,:,:) +REAL, ALLOCATABLE :: PFLXZTHVMF (:,:,:,:) +REAL, ALLOCATABLE :: ZFLXZTHMF (:,:,:,:) +REAL, ALLOCATABLE :: ZFLXZRMF (:,:,:,:) +REAL, ALLOCATABLE :: ZFLXZUMF (:,:,:,:) +REAL, ALLOCATABLE :: ZFLXZVMF (:,:,:,:) +REAL, ALLOCATABLE :: ZDETR (:,:,:,:) +REAL, ALLOCATABLE :: ZENTR (:,:,:,:) +INTEGER, ALLOCATABLE:: IKLCL (:,:,:) +INTEGER, ALLOCATABLE:: IKETL (:,:,:) +INTEGER, ALLOCATABLE:: IKCTL (:,:,:) + +!Expected values +REAL, ALLOCATABLE :: PDUDT_MF_OUT (:,:,:,:) +REAL, ALLOCATABLE :: PDVDT_MF_OUT (:,:,:,:) +REAL, ALLOCATABLE :: PDTHLDT_MF_OUT (:,:,:,:) +REAL, ALLOCATABLE :: PDRTDT_MF_OUT (:,:,:,:) +REAL, ALLOCATABLE :: PDSVDT_MF_OUT (:,:,:,:,:) !(KLON,1,KLEV,KSV) +REAL, ALLOCATABLE :: PSIGMF_OUT (:,:,:,:) +REAL, ALLOCATABLE :: PRC_MF_OUT (:,:,:,:) +REAL, ALLOCATABLE :: PRI_MF_OUT (:,:,:,:) +REAL, ALLOCATABLE :: PCF_MF_OUT (:,:,:,:) +REAL, ALLOCATABLE :: PFLXZTHVMF_OUT (:,:,:,:) +REAL, ALLOCATABLE :: ZFLXZTHMF_OUT (:,:,:,:) +REAL, ALLOCATABLE :: ZFLXZRMF_OUT (:,:,:,:) +REAL, ALLOCATABLE :: ZFLXZUMF_OUT (:,:,:,:) +REAL, ALLOCATABLE :: ZFLXZVMF_OUT (:,:,:,:) +REAL, ALLOCATABLE :: PTHL_UP_OUT (:,:,:,:) +REAL, ALLOCATABLE :: PRT_UP_OUT (:,:,:,:) +REAL, ALLOCATABLE :: PRV_UP_OUT (:,:,:,:) +REAL, ALLOCATABLE :: PRC_UP_OUT (:,:,:,:) +REAL, ALLOCATABLE :: PRI_UP_OUT (:,:,:,:) +REAL, ALLOCATABLE :: PU_UP_OUT (:,:,:,:) +REAL, ALLOCATABLE :: PV_UP_OUT (:,:,:,:) +REAL, ALLOCATABLE :: PTHV_UP_OUT (:,:,:,:) +REAL, ALLOCATABLE :: PW_UP_OUT (:,:,:,:) +REAL, ALLOCATABLE :: PFRAC_UP_OUT (:,:,:,:) +REAL, ALLOCATABLE :: PEMF_OUT (:,:,:,:) +REAL, ALLOCATABLE :: ZDETR_OUT (:,:,:,:) +REAL, ALLOCATABLE :: ZENTR_OUT (:,:,:,:) +INTEGER, ALLOCATABLE:: IKLCL_OUT (:,:,:) +INTEGER, ALLOCATABLE:: IKETL_OUT (:,:,:) +INTEGER, ALLOCATABLE:: IKCTL_OUT (:,:,:) + +INTEGER :: NPROMA, NGPBLKS, NFLEVG +INTEGER :: IBL, JLON, JLEV + +TYPE(DIMPHYEX_t) :: D, D0 +CHARACTER (LEN=4) :: HMF_CLOUD, HMF_UPDRAFT +CHARACTER (LEN=1) :: HFRAC_ICE +LOGICAL :: OMIXUV, ONOMIXLG, OSTATNW +REAL :: ZIMPL +INTEGER :: KSV_LGBEG, KSV_LGEND +REAL :: PTSTEP +LOGICAL :: LLCHECK +LOGICAL :: LLCHECKDIFF +LOGICAL :: LLDIFF +INTEGER :: IBLOCK1, IBLOCK2 +INTEGER :: ISTSZ, JBLK1, JBLK2 +INTEGER :: NTID, ITID + + +REAL, ALLOCATABLE :: PSTACK(:,:) +TYPE (STACK) :: YLSTACK + +REAL(KIND=8) :: TS,TE +REAL(KIND=8) :: TSC, TEC, TSD, TED, ZTC, ZTD +INTEGER :: ITIME, NTIME +INTEGER :: IRANK, ISIZE +LOGICAL :: LLVERBOSE, LLSTAT, LLBIND +REAL (KIND=JPRB) :: ZHOOK_HANDLE +CHARACTER(LEN=32) :: CLTEXT + +CALL INITOPTIONS () +NGPBLKS = 150 +CALL GETOPTION ("--blocks", NGPBLKS) +NPROMA = 32 +CALL GETOPTION ("--nproma", NPROMA) +NFLEVG = -1 +CALL GETOPTION ("--nflevg", NFLEVG) +CALL GETOPTION ("--check", LLCHECK) +CALL GETOPTION ("--checkdiff", LLCHECKDIFF) +IBLOCK1 = 1 +CALL GETOPTION ("--check-block-1", IBLOCK1) +IBLOCK2 = NGPBLKS +CALL GETOPTION ("--check-block-2", IBLOCK2) +CALL GETOPTION ("--stat", LLSTAT) +NTIME = 1 +CALL GETOPTION ("--times", NTIME) +CALL GETOPTION ("--verbose", LLVERBOSE) +CALL GETOPTION ("--bind", LLBIND) +CALL CHECKOPTIONS () + +LLDIFF = .FALSE. + +IRANK = 0 +ISIZE = 1 +IF (LLBIND) THEN + CALL LINUX_BIND (IRANK, ISIZE) + CALL LINUX_BIND_DUMP (IRANK, ISIZE) +ENDIF + +CALL GETDATA_SHALLOW (NPROMA, NGPBLKS, NFLEVG, KRR, KRRL, KRRI, KSV, KLEV, & + !IN and INOUT (allocation and values are needed for the call) + &PDZZF, PZZ, PRHODJ, PRHODREF, PPABSM, PEXNM, & + &PSFTH, PSFRV, & + &PTHM, PRM, & + &PUM, PVM, PTKEM, PSVM, PTHL_UP, & + &PRT_UP, PRV_UP, PRC_UP, & + &PRI_UP, & + &PU_UP, & + &PV_UP, PTHV_UP, PW_UP, PFRAC_UP, PEMF, & + !OUT only (needed to allocate the array to be passed to the subroutine) + &PDUDT_MF, & + &PDVDT_MF,PDTHLDT_MF,PDRTDT_MF,PDSVDT_MF,PSIGMF,PRC_MF,PRI_MF,PCF_MF, & + &PFLXZTHVMF,ZFLXZTHMF, & + &ZFLXZRMF,ZFLXZUMF, & + &ZFLXZVMF,ZDETR,ZENTR, IKLCL, IKETL, IKCTL, & + !OUT and INOUT (expected values) + &PDUDT_MF_OUT, PDVDT_MF_OUT, & + &PDTHLDT_MF_OUT, PDRTDT_MF_OUT, & + &PDSVDT_MF_OUT, PSIGMF_OUT, PRC_MF_OUT, PRI_MF_OUT, PCF_MF_OUT, PFLXZTHVMF_OUT, ZFLXZTHMF_OUT, & + &ZFLXZRMF_OUT, & + &ZFLXZUMF_OUT, ZFLXZVMF_OUT, PTHL_UP_OUT, PRT_UP_OUT, PRV_UP_OUT, PRC_UP_OUT, PRI_UP_OUT, & + &PU_UP_OUT, PV_UP_OUT, & + &PTHV_UP_OUT, PW_UP_OUT, & + &PFRAC_UP_OUT, PEMF_OUT, ZDETR_OUT, ZENTR_OUT, IKLCL_OUT, IKETL_OUT, IKCTL_OUT) + +IF (LLVERBOSE) PRINT *, " KLEV = ", KLEV, " KRR = ", KRR + +PRINT *, " NPROMA = ", NPROMA, " KLEV = ", KLEV, " NGPBLKS = ", NGPBLKS + +KSV_LGBEG = 0 +KSV_LGEND = 0 +HMF_CLOUD='DIRE' +HMF_UPDRAFT='EDKF' +HFRAC_ICE='S' +OMIXUV=.TRUE. +ONOMIXLG=.FALSE. +ZIMPL=1. +OSTATNW=.FALSE. +! +PTSTEP = 25.0000000000000 + +CALL INIT_PHYEX () + +D0%NIT = NPROMA +D0%NIB = 1 +D0%NIE = NPROMA +D0%NJT = 1 +D0%NJB = 1 +D0%NJE = 1 +D0%NIJT = D0%NIT * D0%NJT +D0%NIJB = 1 +D0%NIJE = NPROMA +D0%NKL = -1 +D0%NKT = KLEV +D0%NKA = KLEV +D0%NKU = 1 +D0%NKB = KLEV-1 +D0%NKE = 2 +D0%NKTB = 2 +D0%NKTE = KLEV-1 +D0%NIBC = 1 +D0%NJBC = 1 +D0%NIEC = D0%NIE +D0%NJEC = D0%NJT + +ISTSZ = NPROMA * 20 * KLEV +ALLOCATE (PSTACK (ISTSZ, NGPBLKS)) + +TS = OMP_GET_WTIME () + +ZTD = 0. +ZTC = 0. + +IF (LHOOK) CALL DR_HOOK ('MAIN',0,ZHOOK_HANDLE) + +DO ITIME = 1, NTIME + + TSD = OMP_GET_WTIME () + +!!! !directives pas a jour !$acc data & +!!! !directives pas a jour !$acc & copyin (D0, CST, ICEP, NEB, KRR, HFRAC_ICE, HCONDENS, HLAMBDA3, HBUNAME, OSUBG_COND, OSIGMAS, OCND2, HSUBG_MF_PDF, PTSTEP, LMFCONV, & +!!! !directives pas a jour !$acc & ZSIGQSAT, PTHM, PEXNREF, PRHODREF, PSIGS, PMFCONV, PPABSM, ZZZ, PCF_MF, PRC_MF, PRI_MF, ZRS, ZICE_CLD_WGT) & +!!! !directives pas a jour !$acc & copy (PRS, PTHS), & +!!! !directives pas a jour !$acc & copyout (PSRCS, PCLDFR, PHLC_HRC, PHLC_HCF, PHLI_HRI, PHLI_HCF) & +!!! !directives pas a jour !$acc & create (PSTACK) + + TSC = OMP_GET_WTIME () + +#ifdef USE_OPENMP +!$OMP PARALLEL PRIVATE (D, ITID, JBLK1, JBLK2) +#endif + +#ifdef _OPENACC +JBLK1 = 1 +JBLK2 = NGPBLKS +#endif + +#ifdef USE_OPENMP +NTID = OMP_GET_MAX_THREADS () +ITID = OMP_GET_THREAD_NUM () +JBLK1 = 1 + (NGPBLKS * (ITID+0)) / NTID +JBLK2 = (NGPBLKS * (ITID+1)) / NTID + + +!PRINT *, ITID, JBLK1, JBLK2 + +#endif + +!$acc parallel loop gang vector private (YLSTACK, IBL, JLON, D) collapse (2) + + DO IBL = JBLK1, JBLK2 + + +#ifdef _OPENACC + DO JLON = 1, NPROMA + D = D0 + D%NIB = JLON + D%NIE = JLON + D%NIJB = JLON + D%NIJE = JLON + D%NIBC = JLON + D%NIEC = JLON +#endif + +#ifdef USE_OPENMP + D = D0 +#endif + +#ifdef USE_STACK + YLSTACK%L = LOC (PSTACK (1, IBL)) + YLSTACK%U = YLSTACK%L + ISTSZ * KIND (PSTACK) +#else + YLSTACK%L = 0 + YLSTACK%U = 0 +#endif + + CALL SHALLOW_MF(D, CST, NEB, PARAM_MFSHALLN, TURBN, CSTURB, & + &KRR=KRR, KRRL=KRRL, KRRI=KRRI, KSV=KSV, & + &HMF_UPDRAFT=HMF_UPDRAFT, HMF_CLOUD=HMF_CLOUD,HFRAC_ICE=HFRAC_ICE,OMIXUV=OMIXUV, & + &OSTATNW=OSTATNW, & + &ONOMIXLG=ONOMIXLG,KSV_LGBEG=KSV_LGBEG,KSV_LGEND=KSV_LGEND, & + &PIMPL_MF=ZIMPL, PTSTEP=PTSTEP, & + &PDZZ=PDZZF(:,:,:,IBL),PZZ=PZZ(:,:,:,IBL), & + &PRHODJ=PRHODJ(:,:,:,IBL),PRHODREF=PRHODREF(:,:,:,IBL), & + &PPABSM=PPABSM(:,:,:,IBL),PEXNM=PEXNM(:,:,:,IBL), & + &PSFTH=PSFTH(:,:,IBL),PSFRV=PSFRV(:,:,IBL), & + &PTHM=PTHM(:,:,:,IBL),PRM=PRM(:,:,:,:,IBL),PUM=PUM(:,:,:,IBL),PVM=PVM(:,:,:,IBL),& + &PTKEM=PTKEM(:,:,:,IBL),PSVM=PSVM(:,:,:,:,IBL), & + &PDUDT_MF=PDUDT_MF(:,:,:,IBL),PDVDT_MF=PDVDT_MF(:,:,:,IBL), & + &PDTHLDT_MF=PDTHLDT_MF(:,:,:,IBL),PDRTDT_MF=PDRTDT_MF(:,:,:,IBL),PDSVDT_MF=PDSVDT_MF(:,:,:,:,IBL), & + &PSIGMF=PSIGMF(:,:,:,IBL),PRC_MF=PRC_MF(:,:,:,IBL),PRI_MF=PRI_MF(:,:,:,IBL),PCF_MF=PCF_MF(:,:,:,IBL),& + &PFLXZTHVMF=PFLXZTHVMF(:,:,:,IBL), & + &PFLXZTHMF=ZFLXZTHMF(:,:,:,IBL),PFLXZRMF=ZFLXZRMF(:,:,:,IBL),PFLXZUMF=ZFLXZUMF(:,:,:,IBL),PFLXZVMF=ZFLXZVMF(:,:,:,IBL), & + &PTHL_UP=PTHL_UP(:,:,:,IBL),PRT_UP=PRT_UP(:,:,:,IBL),PRV_UP=PRV_UP(:,:,:,IBL),& + &PRC_UP=PRC_UP(:,:,:,IBL),PRI_UP=PRI_UP(:,:,:,IBL), & + &PU_UP=PU_UP(:,:,:,IBL), PV_UP=PV_UP(:,:,:,IBL), PTHV_UP=PTHV_UP(:,:,:,IBL), PW_UP=PW_UP(:,:,:,IBL), & + &PFRAC_UP=PFRAC_UP(:,:,:,IBL),PEMF=PEMF(:,:,:,IBL),PDETR=ZDETR(:,:,:,IBL),PENTR=ZENTR(:,:,:,IBL), & + &KKLCL=IKLCL(:,:,IBL),KKETL=IKETL(:,:,IBL),KKCTL=IKCTL(:,:,IBL),PDX=0.,PDY=0. ) + +#ifdef _OPENACC + ENDDO +#endif + + ENDDO + +#ifdef USE_OPENMP +!$OMP END PARALLEL +#endif + +!$acc end parallel loop + + TEC = OMP_GET_WTIME () + +!$acc end data + + TED = OMP_GET_WTIME () + + ZTC = ZTC + (TEC - TSC) + ZTD = ZTD + (TED - TSD) + +ENDDO + +IF (LHOOK) CALL DR_HOOK ('MAIN',1,ZHOOK_HANDLE) + +TE = OMP_GET_WTIME() + +WRITE (*,'(A,F8.2,A)') 'elapsed time : ',TE-TS,' s' +WRITE (*,'(A,F8.4,A)') ' i.e. ',1000.*(TE-TS)/(NPROMA*NGPBLKS)/NTIME,' ms/gp' + +PRINT *, " ZTD = ", ZTD, ZTD / REAL (NPROMA*NGPBLKS*NTIME) +PRINT *, " ZTC = ", ZTC, ZTC / REAL (NPROMA*NGPBLKS*NTIME) + +IF (LLCHECK .OR. LLSTAT .OR. LLCHECKDIFF) THEN + DO IBL = IBLOCK1, IBLOCK2 + PRINT *, " IBL = ", IBL + CALL DIFF3 ("PDUDT_MF ", PDUDT_MF_OUT (:,:,:,IBL), PDUDT_MF (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF3 ("PDVDT_MF ", PDVDT_MF_OUT (:,:,:,IBL), PDVDT_MF (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF3 ("PDTHLDT_MF ", PDTHLDT_MF_OUT (:,:,:,IBL), PDTHLDT_MF (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF3 ("PDRTDT_MF ", PDRTDT_MF_OUT (:,:,:,IBL), PDRTDT_MF (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF3 ("PSIGMF ", PSIGMF_OUT (:,:,:,IBL), PSIGMF (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF3 ("PRC_MF ", PRC_MF_OUT (:,:,:,IBL), PRC_MF (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF3 ("PRI_MF ", PRI_MF_OUT (:,:,:,IBL), PRI_MF (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF3 ("PCF_MF ", PCF_MF_OUT (:,:,:,IBL), PCF_MF (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF3 ("PFLXZTHVMF ", PFLXZTHVMF_OUT (:,:,:,IBL), PFLXZTHVMF (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF3 ("ZFLXZTHMF ", ZFLXZTHMF_OUT (:,:,:,IBL), ZFLXZTHMF (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF3 ("ZFLXZRMF ", ZFLXZRMF_OUT (:,:,:,IBL), ZFLXZRMF (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF3 ("ZFLXZUMF ", ZFLXZUMF_OUT (:,:,:,IBL), ZFLXZUMF (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF3 ("ZFLXZVMF ", ZFLXZVMF_OUT (:,:,:,IBL), ZFLXZVMF (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF3 ("PTHL_UP ", PTHL_UP_OUT (:,:,:,IBL), PTHL_UP (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF3 ("PRT_UP ", PRT_UP_OUT (:,:,:,IBL), PRT_UP (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF3 ("PRV_UP ", PRV_UP_OUT (:,:,:,IBL), PRV_UP (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF3 ("PRC_UP ", PRC_UP_OUT (:,:,:,IBL), PRC_UP (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF3 ("PRI_UP ", PRI_UP_OUT (:,:,:,IBL), PRI_UP (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF3 ("PU_UP ", PU_UP_OUT (:,:,:,IBL), PU_UP (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF3 ("PV_UP ", PV_UP_OUT (:,:,:,IBL), PV_UP (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF3 ("PTHV_UP ", PTHV_UP_OUT (:,:,:,IBL), PTHV_UP (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF3 ("PW_UP ", PW_UP_OUT (:,:,:,IBL), PW_UP (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF3 ("PFRAC_UP ", PFRAC_UP_OUT (:,:,:,IBL), PFRAC_UP (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF3 ("PEMF ", PEMF_OUT (:,:,:,IBL), PEMF (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF3 ("ZDETR ", ZDETR_OUT (:,:,:,IBL), ZDETR (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + CALL DIFF3 ("ZENTR ", ZENTR_OUT (:,:,:,IBL), ZENTR (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) +! CALL DIFF2 ("IKLCL ", IKLCL_OUT (:,:,IBL), IKLCL (:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) +! CALL DIFF2 ("IKETL ", IKETL_OUT (:,:,IBL), IKETL (:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) +! CALL DIFF2 ("IKCTL ", IKCTL_OUT (:,:,IBL), IKCTL (:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF) + ENDDO +ENDIF + +IF (LLCHECKDIFF) THEN + IF (LLDIFF) THEN + PRINT*, "THERE ARE DIFF SOMEWHERE" + ELSE + PRINT*, "THERE IS NO DIFF AT ALL" + ENDIF +ENDIF + +STOP + +CONTAINS + +SUBROUTINE INIT_PHYEX() +USE MODD_TURB_N, ONLY: TURB_GOTO_MODEL +IMPLICIT NONE +! +CALL INI_CST +CALL INI_NEB +CALL TURB_GOTO_MODEL(1,1) +CALL CTURB_ASSOCIATE() +!CALL TBUCONF_ASSOCIATE +CALL PARAM_MFSHALL_GOTO_MODEL(1,1) +!LBU_ENABLE=.FALSE. +!LBUDGET_U=.FALSE. +!LBUDGET_V=.FALSE. +!LBUDGET_W=.FALSE. +!LBUDGET_TH=.FALSE. +!LBUDGET_TKE=.FALSE. +!LBUDGET_RV=.FALSE. +!LBUDGET_RC=.FALSE. +!LBUDGET_RR=.FALSE. +!LBUDGET_RI=.FALSE. +!LBUDGET_RS=.FALSE. +!LBUDGET_RG=.FALSE. +!LBUDGET_RH=.FALSE. +!LBUDGET_SV=.FALSE. + +PARAM_MFSHALLN%XALP_PERT = 0.3 +PARAM_MFSHALLN%XABUO = 1. +PARAM_MFSHALLN%XBENTR = 1. +PARAM_MFSHALLN%XBDETR = 0. +PARAM_MFSHALLN%XCMF = 0.065 +PARAM_MFSHALLN%XENTR_MF = 0.035 +PARAM_MFSHALLN%XCRAD_MF = 50. +PARAM_MFSHALLN%XENTR_DRY = 0.55 +PARAM_MFSHALLN%XDETR_DRY = 10. +PARAM_MFSHALLN%XDETR_LUP = 1. +PARAM_MFSHALLN%XKCF_MF = 2.75 +PARAM_MFSHALLN%XKRC_MF = 1. +PARAM_MFSHALLN%XTAUSIGMF = 600. +PARAM_MFSHALLN%XPRES_UV = 0.5 +PARAM_MFSHALLN%XFRAC_UP_MAX= 0.33 +PARAM_MFSHALLN%XALPHA_MF = 2. +PARAM_MFSHALLN%XSIGMA_MF = 20. +PARAM_MFSHALLN%XA1 = 2. +PARAM_MFSHALLN%XB = 0.002 +PARAM_MFSHALLN%XC = 0.012 +PARAM_MFSHALLN%XBETA1 = 0.9 +PARAM_MFSHALLN%XR = 2. +PARAM_MFSHALLN%XLAMBDA_MF = 0. +PARAM_MFSHALLN%LGZ = .FALSE. +PARAM_MFSHALLN%XGZ=1. + +TURBN%LHARAT=.FALSE. +TURBN%CTURBDIM = '1DIM' +TURBN%XIMPL=1. +TURBN%CTURBLEN='BL89' +TURBN%LSTATNW=.FALSE. +TURBN%LTURB_DIAG=.FALSE. +TURBN%LTURB_FLX=.FALSE. +TURBN%LSUBG_COND=.TRUE. +TURBN%LRMC01=.FALSE. +TURBN%CTOM='NONE' +TURBN%LLEONARD=.FALSE. + +XCED = 0.85 +XCEP = 2.11 +XA0 = 0.6 +XA2 = 1. +XA3 = 0. +XCTD = 1.2 +IF (TURBN%LSTATNW) THEN + XCTP = 4.0 + ELSE + XCTP = 4.65 +ENDIF +XA5 = 1./3. +XCET = 0.40 +XALPSBL = 4.63 +XRM17 = 0.5 ! Rodier et al 2017 +XCMFS= 2./3./XCEP*(1.-XA0) !Constant for the momentum flux due to shear (RS) +XCSHF= 2./3./XCTP !Constant for the sensible heat flux(RS) +XCHF= XCSHF !Constant for the humidity flux(RS) +XCTV= 2./3./XCTP/XCTD !Constant for the temperature variance(RS) +XCHV= XCTV !Constant for the humidity variance(RS) +XCHT1= XCTV/2. !Constants for the temperature-humidity correlation(RS) +XCHT2= XCTV/2. +XCPR1= XCTV !Constants for the turbulent Prandtl and Schmidt numbers +XCPR2= XCHT1 +XCPR3= XCPR2 ! used only for the Schmidt number for scalar variables +XCPR4= XCPR2 +XCPR5= XCPR2 +XTKEMIN=1.E-6 +!XLINI=10. ! BL mixing length +XLINI=0.1 ! BL mixing length +XLINF=1.E-10! to prevent division by zero +XPHI_LIM = 3. +XCDP = 1.46 +XCDD = 1.83 +XCDT = 0.42 +XSBL_O_BL = 0.05 ! SBL height / BL height ratio +XFTOP_O_FSURF = 0.05 ! Fraction of surface (heat or momentum) flux used to define top of BL + +! +END SUBROUTINE INIT_PHYEX + +END PROGRAM + diff --git a/src/testprogs/support/arrays_manip.F90 b/src/testprogs/support/arrays_manip.F90 index 0556f3b55..0d04ebcca 100644 --- a/src/testprogs/support/arrays_manip.F90 +++ b/src/testprogs/support/arrays_manip.F90 @@ -4,41 +4,46 @@ USE OMP_LIB USE IEEE_ARITHMETIC, ONLY : IEEE_SIGNALING_NAN, IEEE_VALUE INTERFACE REPLICATE - MODULE PROCEDURE REPLICATE2 - MODULE PROCEDURE REPLICATE3 - MODULE PROCEDURE REPLICATE4 - MODULE PROCEDURE REPLICATEL + MODULE PROCEDURE REPLICATER2 + MODULE PROCEDURE REPLICATER3 + MODULE PROCEDURE REPLICATER4 + MODULE PROCEDURE REPLICATEL3 + MODULE PROCEDURE REPLICATEL2 END INTERFACE INTERFACE NPROMIZE - MODULE PROCEDURE NPROMIZE3 - MODULE PROCEDURE NPROMIZE4 - MODULE PROCEDURE NPROMIZE5 - MODULE PROCEDURE NPROMIZEL + MODULE PROCEDURE NPROMIZER3 + MODULE PROCEDURE NPROMIZER4 + MODULE PROCEDURE NPROMIZER5 + MODULE PROCEDURE NPROMIZEL4 + MODULE PROCEDURE NPROMIZEI3 END INTERFACE INTERFACE INTERPOLATE - MODULE PROCEDURE INTERPOLATE4 - MODULE PROCEDURE INTERPOLATE5 - MODULE PROCEDURE INTERPOLATEL + MODULE PROCEDURE INTERPOLATER4 + MODULE PROCEDURE INTERPOLATER5 + MODULE PROCEDURE INTERPOLATEL4 END INTERFACE INTERFACE SET - MODULE PROCEDURE SET3 - MODULE PROCEDURE SET4 - MODULE PROCEDURE SET5 + MODULE PROCEDURE SETR3 + MODULE PROCEDURE SETR4 + MODULE PROCEDURE SETR5 + MODULE PROCEDURE SETI3 END INTERFACE REAL, SAVE :: XINVALID +INTEGER, SAVE :: NINVALID CONTAINS SUBROUTINE SETUP() !XINVALID = IEEE_VALUE (1., IEEE_SIGNALING_NAN) XINVALID = HUGE(1.) + NINVALID = HUGE(1) END SUBROUTINE SETUP -SUBROUTINE REPLICATE4 (KOFF, P) +SUBROUTINE REPLICATER4 (KOFF, P) IMPLICIT NONE INTEGER :: KOFF @@ -53,7 +58,7 @@ ENDDO END SUBROUTINE -SUBROUTINE REPLICATE3 (KOFF, P) +SUBROUTINE REPLICATER3 (KOFF, P) IMPLICIT NONE INTEGER :: KOFF @@ -68,7 +73,22 @@ ENDDO END SUBROUTINE -SUBROUTINE REPLICATE2 (KOFF, P) +SUBROUTINE REPLICATEL2 (KOFF, K) +IMPLICIT NONE + +INTEGER :: KOFF +INTEGER :: K (:,:) + +INTEGER :: I, J + +DO I = KOFF+1, SIZE (K, 1) + J = 1 + MODULO (I - 1, KOFF) + K (I, :) = K (J, :) +ENDDO + +END SUBROUTINE + +SUBROUTINE REPLICATER2 (KOFF, P) IMPLICIT NONE INTEGER :: KOFF @@ -83,7 +103,7 @@ ENDDO END SUBROUTINE -SUBROUTINE REPLICATEL (KOFF, L) +SUBROUTINE REPLICATEL3 (KOFF, L) IMPLICIT NONE INTEGER :: KOFF @@ -98,7 +118,38 @@ ENDDO END SUBROUTINE -SUBROUTINE NPROMIZE3 (KPROMA, PI, PO) +SUBROUTINE NPROMIZEI3 (KPROMA, KI, KO) +IMPLICIT NONE + +INTEGER :: KPROMA +INTEGER, INTENT (IN) :: KI (:,:,:) +INTEGER, INTENT (OUT) :: KO (:,:,:) + +INTEGER :: I, J, IGPBLK, IGPTOT, IGP, JLON, JIDIA, JFDIA, IBL + +IF (SIZE (KI, 3) /= 1) STOP 1 + +IGPTOT = SIZE (KI, 1) +IGPBLK = 1 + (IGPTOT-1) / KPROMA + +DO IGP = 1, IGPTOT, KPROMA + IBL = 1 + (IGP - 1) / KPROMA + JIDIA = 1 + JFDIA = MIN (KPROMA, IGPTOT - (IBL - 1) * KPROMA) + + DO JLON = JIDIA, JFDIA + KO (JLON, :, IBL) = KI (IGP + (JLON - 1), :, 1) + ENDDO + + DO JLON = JFDIA+1, KPROMA + KO (JLON, :, IBL) = KO (JFDIA, :, IBL) + ENDDO + +ENDDO + +END SUBROUTINE + +SUBROUTINE NPROMIZER3 (KPROMA, PI, PO) IMPLICIT NONE INTEGER :: KPROMA @@ -129,7 +180,7 @@ ENDDO END SUBROUTINE -SUBROUTINE NPROMIZE4 (KPROMA, PI, PO) +SUBROUTINE NPROMIZER4 (KPROMA, PI, PO) IMPLICIT NONE INTEGER :: KPROMA @@ -160,7 +211,7 @@ ENDDO END SUBROUTINE -SUBROUTINE NPROMIZE5 (KPROMA, PI, PO) +SUBROUTINE NPROMIZER5 (KPROMA, PI, PO) IMPLICIT NONE INTEGER :: KPROMA @@ -191,7 +242,7 @@ ENDDO END SUBROUTINE -SUBROUTINE NPROMIZEL (KPROMA, LI, LO) +SUBROUTINE NPROMIZEL4 (KPROMA, LI, LO) IMPLICIT NONE INTEGER :: KPROMA @@ -222,7 +273,7 @@ ENDDO END SUBROUTINE -SUBROUTINE INTERPOLATE4 (KFLEVG, KOFF, P) +SUBROUTINE INTERPOLATER4 (KFLEVG, KOFF, P) IMPLICIT NONE INTEGER :: KFLEVG, KOFF @@ -268,7 +319,7 @@ ENDDO END SUBROUTINE -SUBROUTINE INTERPOLATE5 (KFLEVG, KOFF, P) +SUBROUTINE INTERPOLATER5 (KFLEVG, KOFF, P) IMPLICIT NONE INTEGER :: KFLEVG, KOFF @@ -316,7 +367,7 @@ ENDDO END SUBROUTINE -SUBROUTINE INTERPOLATEL (KFLEVG, KOFF, L) +SUBROUTINE INTERPOLATEL4 (KFLEVG, KOFF, L) IMPLICIT NONE INTEGER :: KFLEVG, KOFF @@ -363,7 +414,31 @@ ENDDO END SUBROUTINE -SUBROUTINE SET3 (P) +SUBROUTINE SETI3 (K) +IMPLICIT NONE + +INTEGER :: K (:,:,:) +INTEGER :: IBL, IGPBLKS +INTEGER :: NTID, ITID, JBLK1, JBLK2 + + +IGPBLKS = SIZE (K, 3) + +!$OMP PARALLEL PRIVATE (ITID, JBLK1, JBLK2, NTID) +NTID = OMP_GET_MAX_THREADS () +ITID = OMP_GET_THREAD_NUM () +JBLK1 = 1 + (IGPBLKS * (ITID+0)) / NTID +JBLK2 = (IGPBLKS * (ITID+1)) / NTID + +DO IBL = JBLK1, JBLK2 + K (:,:,IBL) = NINVALID +ENDDO + +!$OMP END PARALLEL + +END SUBROUTINE + +SUBROUTINE SETR3 (P) IMPLICIT NONE REAL :: P (:,:,:) @@ -387,7 +462,7 @@ ENDDO END SUBROUTINE -SUBROUTINE SET4 (P) +SUBROUTINE SETR4 (P) IMPLICIT NONE REAL :: P (:,:,:,:) @@ -410,7 +485,7 @@ ENDDO END SUBROUTINE -SUBROUTINE SET5 (P) +SUBROUTINE SETR5 (P) IMPLICIT NONE REAL :: P (:,:,:,:,:) diff --git a/tools/.gitignore b/tools/.gitignore index 5fd9f1761..cf3afc2b4 100644 --- a/tools/.gitignore +++ b/tools/.gitignore @@ -10,11 +10,11 @@ mnh_expand/** testprogs_data/ice_adjust/** testprogs_data/rain_ice/** testprogs_data/turb/** -testprogs_data/shallow_mf/** +testprogs_data/shallow/** !testprogs_data/ice_adjust/.gitkeep !testprogs_data/rain_ice/.gitkeep !testprogs_data/turb/.gitkeep -!testprogs_data/shallow_mf/.gitkeep +!testprogs_data/shallow/.gitkeep # Ignore vim swapp files .*.swp diff --git a/tools/check_commit_testprogs.sh b/tools/check_commit_testprogs.sh index 87e1e3f6f..e539619bd 100755 --- a/tools/check_commit_testprogs.sh +++ b/tools/check_commit_testprogs.sh @@ -17,7 +17,7 @@ set -e #for these test cases). specialName="ref" -availTests="ice_adjust,rain_ice,turb" +availTests="ice_adjust,rain_ice,turb,shallow" defaultTest='ALL' separator='_' #- seprator must be in sync with prep_code.sh separator @@ -187,7 +187,7 @@ if [ $compilation -eq 1 ]; then else expand_options="" fi - subs="$subs -s turb -s turb_mnh -s micro -s aux -s ice_adjust -s rain_ice -s support" + subs="$subs -s turb -s shallow -s turb_mnh -s micro -s aux -s ice_adjust -s rain_ice -s support" prep_code=$PHYEXTOOLSDIR/prep_code.sh if [ "$fromdir" == '' ]; then diff --git a/tools/testprogs_data/shallow_mf/.gitkeep b/tools/testprogs_data/shallow/.gitkeep similarity index 100% rename from tools/testprogs_data/shallow_mf/.gitkeep rename to tools/testprogs_data/shallow/.gitkeep -- GitLab