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