From 8e2cb42287e3bf7469b1f737d45407e000b8db18 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Riette?= <sebastien.riette@meteo.fr>
Date: Wed, 22 Nov 2023 18:18:26 +0100
Subject: [PATCH] S. Riette 23 Nov 2023: update rain_ice_old testprogs
 initialisation

Part of #17
---
 src/testprogs/ice_adjust/main_ice_adjust.F90  |   7 +-
 src/testprogs/rain_ice/main_rain_ice.F90      |  27 +-
 .../rain_ice_old/main_rain_ice_old.F90        | 875 ++++++++++--------
 src/testprogs/shallow/main_shallow.F90        |  65 +-
 .../support/{diff.F90 => compute_diff.F90}    |   0
 src/testprogs/turb_mnh/main_turb.F90          |  53 +-
 6 files changed, 547 insertions(+), 480 deletions(-)
 rename src/testprogs/support/{diff.F90 => compute_diff.F90} (100%)

diff --git a/src/testprogs/ice_adjust/main_ice_adjust.F90 b/src/testprogs/ice_adjust/main_ice_adjust.F90
index 77b85dac3..20225eb60 100644
--- a/src/testprogs/ice_adjust/main_ice_adjust.F90
+++ b/src/testprogs/ice_adjust/main_ice_adjust.F90
@@ -1,8 +1,8 @@
 PROGRAM MAIN_ICE_ADJUST
 
-USE XRD_GETOPTIONS
-USE GETDATA_ICE_ADJUST_MOD
-USE COMPUTE_DIFF
+USE XRD_GETOPTIONS,  ONLY: INITOPTIONS, GETOPTION, CHECKOPTIONS
+USE GETDATA_ICE_ADJUST_MOD, ONLY: GETDATA_ICE_ADJUST
+USE COMPUTE_DIFF,    ONLY: DIFF
 USE MODI_ICE_ADJUST
 USE MODD_DIMPHYEX,   ONLY: DIMPHYEX_t
 USE MODD_PHYEX,      ONLY: PHYEX_t
@@ -12,7 +12,6 @@ USE YOMHOOK, ONLY : LHOOK, DR_HOOK, JPHOOK
 
 IMPLICIT NONE
 
-INTEGER      :: KLON 
 INTEGER      :: KLEV
 INTEGER      :: KRR
 
diff --git a/src/testprogs/rain_ice/main_rain_ice.F90 b/src/testprogs/rain_ice/main_rain_ice.F90
index 4a6055341..c8c007c6f 100644
--- a/src/testprogs/rain_ice/main_rain_ice.F90
+++ b/src/testprogs/rain_ice/main_rain_ice.F90
@@ -1,8 +1,8 @@
 PROGRAM MAIN_RAIN_ICE
 
-USE XRD_GETOPTIONS
-USE GETDATA_RAIN_ICE_MOD
-USE COMPUTE_DIFF
+USE XRD_GETOPTIONS,  ONLY: INITOPTIONS, GETOPTION, CHECKOPTIONS
+USE GETDATA_RAIN_ICE_MOD, ONLY: GETDATA_RAIN_ICE
+USE COMPUTE_DIFF,    ONLY: DIFF
 USE MODI_RAIN_ICE
 USE MODD_DIMPHYEX,   ONLY: DIMPHYEX_t
 USE MODD_PHYEX,      ONLY: PHYEX_t
@@ -12,7 +12,6 @@ USE YOMHOOK, ONLY : LHOOK, DR_HOOK, JPHOOK
 
 IMPLICIT NONE
 
-INTEGER      :: KLON 
 INTEGER      :: KLEV
 INTEGER      :: KRR
 
@@ -258,20 +257,20 @@ IF (LLCHECK .OR. LLSTAT .OR. LLCHECKDIFF) THEN
     PRINT *, " IBL = ", IBL
     DO JRR=1, KRR
       WRITE (CLTEXT, '("PRS JRR=",I3.3)') JRR
-      CALL DIFF3 (CLTEXT,   PRS_OUT       (:,:,:,JRR,IBL), PRS      (:,:,:,JRR,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
+      CALL DIFF (CLTEXT,   PRS_OUT       (:,:,:,JRR,IBL), PRS      (:,:,:,JRR,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
       IF(JRR>=2) THEN
         WRITE (CLTEXT, '("PFPR JRR=",I3.3)') JRR
-        CALL DIFF3 (CLTEXT, PFPR_OUT      (:,:,:,JRR,IBL), PFPR     (:,:,:,JRR,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
+        CALL DIFF (CLTEXT, PFPR_OUT      (:,:,:,JRR,IBL), PFPR     (:,:,:,JRR,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
       ENDIF
     ENDDO
-    CALL DIFF3 ("PCIT",     PCIT_OUT      (:,:,:,IBL), PCIT     (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
-    CALL DIFF2 ("ZINPRC",   ZINPRC_OUT    (:,:,IBL),   ZINPRC   (:,:,IBL)  , LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
-    CALL DIFF2 ("PINPRRRS", PINPRR_OUT    (:,:,IBL),   PINPRR   (:,:,IBL)  , LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
-    CALL DIFF3 ("PEVAP",    PEVAP_OUT     (:,:,:,IBL), PEVAP    (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
-    CALL DIFF2 ("PINPRS",   PINPRS_OUT    (:,:,IBL),   PINPRS   (:,:,IBL)  , LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
-    CALL DIFF2 ("PINPRG",   PINPRG_OUT    (:,:,IBL),   PINPRG   (:,:,IBL)  , LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
-    CALL DIFF2 ("ZINDEP",   ZINDEP_OUT    (:,:,IBL),   ZINDEP   (:,:,IBL)  , LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
-    !CALL DIFF3 ("ZRAINFR",  ZRAINFR_OUT   (:,:,:,IBL), ZRAINFR  (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
+    CALL DIFF ("PCIT",     PCIT_OUT      (:,:,:,IBL), PCIT     (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
+    CALL DIFF ("ZINPRC",   ZINPRC_OUT    (:,:,IBL),   ZINPRC   (:,:,IBL)  , LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
+    CALL DIFF ("PINPRRRS", PINPRR_OUT    (:,:,IBL),   PINPRR   (:,:,IBL)  , LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
+    CALL DIFF ("PEVAP",    PEVAP_OUT     (:,:,:,IBL), PEVAP    (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
+    CALL DIFF ("PINPRS",   PINPRS_OUT    (:,:,IBL),   PINPRS   (:,:,IBL)  , LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
+    CALL DIFF ("PINPRG",   PINPRG_OUT    (:,:,IBL),   PINPRG   (:,:,IBL)  , LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
+    CALL DIFF ("ZINDEP",   ZINDEP_OUT    (:,:,IBL),   ZINDEP   (:,:,IBL)  , LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
+    !CALL DIFF ("ZRAINFR",  ZRAINFR_OUT   (:,:,:,IBL), ZRAINFR  (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
   ENDDO
 ENDIF
 
diff --git a/src/testprogs/rain_ice_old/main_rain_ice_old.F90 b/src/testprogs/rain_ice_old/main_rain_ice_old.F90
index 55dc41c63..5feee2d5a 100644
--- a/src/testprogs/rain_ice_old/main_rain_ice_old.F90
+++ b/src/testprogs/rain_ice_old/main_rain_ice_old.F90
@@ -1,285 +1,341 @@
-program main_rain_ice_old
+PROGRAM MAIN_RAIN_ICE_OLD
+
+USE XRD_GETOPTIONS,  ONLY: INITOPTIONS, GETOPTION, CHECKOPTIONS
+USE GETDATA_RAIN_ICE_OLD_MOD, ONLY: GETDATA_RAIN_ICE_OLD
+
+USE MODI_RAIN_ICE_OLD
+USE MODD_DIMPHYEX,   ONLY: DIMPHYEX_t
+USE MODD_PHYEX,      ONLY: PHYEX_t
+USE STACK_MOD
+USE OMP_LIB
+USE YOMHOOK, ONLY : LHOOK, DR_HOOK, JPHOOK
+
+use iso_fortran_env, only: output_unit
+
+IMPLICIT NONE
+
+INTEGER      :: KLEV
+INTEGER      :: KRR
+
+REAL, ALLOCATABLE, DIMENSION(:,:,:)   :: PDZZ
+REAL, ALLOCATABLE, DIMENSION(:,:,:)   :: PRHODJ
+REAL, ALLOCATABLE, DIMENSION(:,:,:)   :: PRHODREF
+REAL, ALLOCATABLE, DIMENSION(:,:,:)   :: PEXNREF
+REAL, ALLOCATABLE, DIMENSION(:,:,:)   :: PPABSM
+REAL, ALLOCATABLE, DIMENSION(:,:,:)   :: PCIT, PCIT_OUT
+REAL, ALLOCATABLE, DIMENSION(:,:,:)   :: PCLDFR
+REAL, ALLOCATABLE, DIMENSION(:,:,:)   :: PTHT
+REAL, ALLOCATABLE, DIMENSION(:,:,:,:) :: PRT
+REAL, ALLOCATABLE, DIMENSION(:,:,:)   :: PTHS, PTHS_OUT
+REAL, ALLOCATABLE, DIMENSION(:,:,:,:) :: PRS, PRS_OUT
+REAL, ALLOCATABLE, DIMENSION(:,:,:)   :: PSIGS
+REAL, ALLOCATABLE, DIMENSION(:,:)     :: PSEA
+REAL, ALLOCATABLE, DIMENSION(:,:)     :: PTOWN
+
+REAL, ALLOCATABLE, DIMENSION(:,:)     :: ZINPRC, ZINPRC_OUT
+REAL, ALLOCATABLE, DIMENSION(:,:)     :: PINPRR, PINPRR_OUT
+REAL, ALLOCATABLE, DIMENSION(:,:,:)   :: PEVAP, PEVAP_OUT
+REAL, ALLOCATABLE, DIMENSION(:,:)     :: PINPRS, PINPRS_OUT
+REAL, ALLOCATABLE, DIMENSION(:,:)     :: PINPRG, PINPRG_OUT
+REAL, ALLOCATABLE, DIMENSION(:,:,:,:) :: PFPR, PFPR_OUT
+
+REAL, ALLOCATABLE, DIMENSION(:,:)     :: PINPRH, PINPRH_OUT
+
+!spp stuff
+REAL, ALLOCATABLE, dimension(:,:)   :: PICENU, PKGN_ACON, PKGN_SBGR
+!ocnd2 stuff
+REAL, ALLOCATABLE, DIMENSION(:,:,:) :: PICLDFR ! Ice cloud fraction
+REAL, ALLOCATABLE, DIMENSION(:,:,:) :: PIFR    ! Ratio cloud ice moist part to dry part
+REAL, ALLOCATABLE, DIMENSION(:,:,:) :: PSSIO   ! Super-saturation with respect to ice in the supersaturated fraction
+REAL, ALLOCATABLE, DIMENSION(:,:,:) :: PSSIU   ! Sub-saturation with respect to ice in the subsaturated fraction
+
+LOGICAL, ALLOCATABLE, DIMENSION(:,:,:) :: LLMICRO
+
+INTEGER :: NPROMA, NGPBLKS, NFLEVG
+INTEGER :: IBL, JLON, JLEV
+
+TYPE(DIMPHYEX_t)         :: D, D0
+TYPE(PHYEX_t)            :: PHYEX
+LOGICAL                  :: LLCHECK
+LOGICAL                  :: LLCHECKDIFF
+LOGICAL                  :: LLDIFF
+INTEGER                  :: IBLOCK1, IBLOCK2
+INTEGER                  :: ISTSZ, JBLK1, JBLK2
+INTEGER                  :: NTID, ITID
+INTEGER                  :: JRR
+
+REAL, ALLOCATABLE :: PSTACK(:,:)
+TYPE (STACK) :: YLSTACK
+
+REAL(KIND=8) :: TS,TE
+REAL(KIND=8) :: TSC, TEC, TSD, TED, ZTC, ZTD 
+INTEGER(8) :: COUNTER, C_RATE
+REAL(8) :: TIME_START_REAL, TIME_END_REAL
+REAL(8) :: TIME_START_CPU, TIME_END_CPU
+INTEGER :: ITIME, NTIME
+INTEGER :: IRANK, ISIZE
+LOGICAL :: LLVERBOSE, LLSTAT, LLBIND
+REAL (KIND=JPHOOK) :: ZHOOK_HANDLE
+
+INTEGER :: ISIZEMICRO
+INTEGER :: KKA
+INTEGER :: KKU
+INTEGER :: KKL
+INTEGER :: KSPLITR
+LOGICAL :: OSEDIC
+LOGICAL :: OCND2
+LOGICAL :: LKOGAN
+LOGICAL :: LMODICEDEP
+CHARACTER(LEN=4) :: C_SEDIM
+CHARACTER(LEN=4) :: CSUBG_AUCV_RC
+LOGICAL :: OWARM
+REAL    :: PTSTEP
+
+  integer :: j
 
-  use xrd_getoptions, only: initoptions, getoption
-  use getdata_rain_ice_old_mod, only: getdata_rain_ice_old
 
-  use modi_rain_ice_old
 
-  use yomhook, only: lhook, dr_hook, jphook
 
-  use modd_dimphyex, only: dimphyex_t
-  use modd_cst, only: cst
-  use modd_rain_ice_param_n, only: rain_ice_paramn
-  use modd_rain_ice_descr_n, only: rain_ice_descrn
-  use modd_param_ice_n,      only: param_icen
-  use modd_budget
-
-  use iso_fortran_env, only: output_unit
-
-  implicit none
-
-  integer :: n_gp_blocks, &
-             n_proma, &
-             n_levels
-
-  real, allocatable, dimension(:,:,:)   :: pdzz
-  real, allocatable, dimension(:,:,:)   :: prhodj
-  real, allocatable, dimension(:,:,:)   :: prhodref
-  real, allocatable, dimension(:,:,:)   :: pexnref
-  real, allocatable, dimension(:,:,:)   :: ppabsm
-  real, allocatable, dimension(:,:,:)   :: pcit, pcit_out
-  real, allocatable, dimension(:,:,:)   :: pcldfr
-  real, allocatable, dimension(:,:,:)   :: ptht
-  real, allocatable, dimension(:,:,:,:) :: prt
-  real, allocatable, dimension(:,:,:)   :: pths, pths_out
-  real, allocatable, dimension(:,:,:,:) :: prs, prs_out
-  real, allocatable, dimension(:,:,:)   :: psigs
-  real, allocatable, dimension(:,:)     :: psea
-  real, allocatable, dimension(:,:)     :: ptown
-
-  real, allocatable, dimension(:,:)     :: zinprc, zinprc_out
-  real, allocatable, dimension(:,:)     :: pinprr, pinprr_out
-  real, allocatable, dimension(:,:,:)   :: pevap, pevap_out
-  real, allocatable, dimension(:,:)     :: pinprs, pinprs_out
-  real, allocatable, dimension(:,:)     :: pinprg, pinprg_out
-  real, allocatable, dimension(:,:,:,:) :: pfpr, pfpr_out
-
-  real, allocatable, dimension(:,:)     :: pinprh, pinprh_out
-
-  !spp stuff
-  real, allocatable, dimension(:,:)   :: picenu, pkgn_acon, pkgn_sbgr
-  !ocnd2 stuff
-  real, allocatable, dimension(:,:,:) :: picldfr ! Ice cloud fraction
-  real, allocatable, dimension(:,:,:) :: pifr    ! Ratio cloud ice moist part to dry part
-  real, allocatable, dimension(:,:,:) :: pssio   ! Super-saturation with respect to ice in the supersaturated fraction
-  real, allocatable, dimension(:,:,:) :: pssiu   ! Sub-saturation with respect to ice in the subsaturated fraction
-
-  logical, allocatable, dimension(:,:,:) :: llmicro
-
-  integer :: isize
-
-  type(dimphyex_t) :: D
-
-  integer(8) :: counter, c_rate
-  logical :: l_verbose, checkdiff
-
-  integer :: kka
-  integer :: kku
-  integer :: kkl
-  integer :: krr
-  integer :: ksplitr
-
-  logical :: osedic
-  logical :: ocnd2
-  logical :: lkogan
-  logical :: lmodicedep
-  character(len=4) :: c_sedim
-  character(len=4) :: c_micro
-  character(len=4) :: csubg_aucv_rc
-  logical :: owarm
-  TYPE(TBUDGETDATA), DIMENSION(NBUDGET_RH) :: YLBUDGET
-
-  real    :: ptstep
-
-  integer :: i, j, jrr
-
-  real(kind=jphook) :: zhook_handle
-
-  real(8) :: time_start_real, time_end_real
-  real(8) :: time_start_cpu, time_end_cpu
-
-  interface
-
-    subroutine init_rain_ice_old(kulout)
-
-      implicit none
-
-      integer, intent (in)            :: kulout
-
-    end subroutine init_rain_ice_old
-
-    subroutine init_gmicro(D, krr, n_gp_blocks, odmicro, prt, pssio, ocnd2, prht)
-
-      use modd_dimphyex, only: dimphyex_t
-      use modd_rain_ice_descr_n, only: xrtmin
-      use modd_rain_ice_param_n, only: xfrmin
-
-      implicit none
-
-      type(dimphyex_t) :: D
-
-      integer, intent(in) :: krr, n_gp_blocks
-      logical, dimension(D%nit, D%nkt, n_gp_blocks), intent(inout) :: odmicro
-
-      real, dimension(D%nit, D%nkt, krr, n_gp_blocks), intent(in) :: prt
-      real, dimension(D%nit, D%nkt, n_gp_blocks), intent(in) :: pssio
-      real, dimension(D%nit, D%nkt, n_gp_blocks), optional, intent(in) :: prht
-
-      logical, intent(in) :: ocnd2
-
-    end subroutine init_gmicro
-
-    subroutine print_diff_1(array, ref)
-
-      implicit none
+  
+  
+  
 
-      real, intent(in), dimension(:) :: array
-      real, intent(in), dimension(:) :: ref
 
-    end subroutine print_diff_1
 
-    subroutine print_diff_2(array, ref)
 
-      implicit none
 
-      real, intent(in), dimension(:,:) :: array
-      real, intent(in), dimension(:,:) :: ref
+CALL INITOPTIONS()
+NGPBLKS = 150
+CALL GETOPTION ("--blocks", NGPBLKS)
+NPROMA = 32
+CALL GETOPTION ("--nproma", NPROMA)
+NFLEVG = 90
+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)
+LLVERBOSE = .FALSE.
+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
+
+WRITE(OUTPUT_UNIT, *) 'n_gp_blocks: ', NGPBLKS
+WRITE(OUTPUT_UNIT, *) 'n_proma:     ', NPROMA
+WRITE(OUTPUT_UNIT, *) 'n_levels:    ', NFLEVG
+WRITE(OUTPUT_UNIT, *) 'total:       ', NFLEVG*NPROMA*NGPBLKS
+
+CALL GETDATA_RAIN_ICE_OLD(NPROMA, NGPBLKS, NFLEVG, KRR, &
+                          OSEDIC, OCND2, LKOGAN, LMODICEDEP, OWARM, &
+                          KKA, KKU, KKL, KSPLITR, &
+                          PTSTEP, C_SEDIM, CSUBG_AUCV_RC, &
+                          PDZZ, PRHODJ, PRHODREF, &
+                          PEXNREF, PPABSM, &
+                          PCIT, PCIT_OUT, &
+                          PCLDFR, &
+                          PICLDFR, PSSIO, PSSIU, PIFR,  &
+                          PTHT, PRT, PTHS, PTHS_OUT, &
+                          PRS, PRS_OUT, &
+                          PSIGS, PSEA, PTOWN,     &
+                          ZINPRC, ZINPRC_OUT, &
+                          PINPRR, PINPRR_OUT, &
+                          PEVAP, PEVAP_OUT,        &
+                          PINPRS, PINPRS_OUT, &
+                          PINPRG, PINPRG_OUT,      &
+                          PINPRH, PINPRH_OUT,      &
+                          PICENU, PKGN_ACON, PKGN_SBGR, &
+                          PFPR, PFPR_OUT, LLMICRO, LLVERBOSE)
+KLEV = SIZE (PRS, 2)
+
+IF (LLVERBOSE) PRINT *, " KLEV = ", KLEV, " KRR = ", KRR
+  
+WRITE(OUTPUT_UNIT, *) 'osedic:        ', OSEDIC
+WRITE(OUTPUT_UNIT, *) 'ocnd2:         ', OCND2
+WRITE(OUTPUT_UNIT, *) 'lkogan:        ', LKOGAN
+WRITE(OUTPUT_UNIT, *) 'lmodicedep:    ', LMODICEDEP
+WRITE(OUTPUT_UNIT, *) 'owarm:         ', OWARM
+WRITE(OUTPUT_UNIT, *) 'kka:           ', KKA
+WRITE(OUTPUT_UNIT, *) 'kku:           ', KKU
+WRITE(OUTPUT_UNIT, *) 'kkl:           ', KKL
+WRITE(OUTPUT_UNIT, *) 'ksplitr:       ', KSPLITR
+WRITE(OUTPUT_UNIT, *) 'ptstep:        ', PTSTEP
+WRITE(OUTPUT_UNIT, *) 'c_sedim:       ', C_SEDIM
+WRITE(OUTPUT_UNIT, *) 'csubg_aucv_rc: ', CSUBG_AUCV_RC
+
+!PRINT *, " NPROMA = ", NPROMA, " KLEV = ", KLEV, " NGPBLKS = ", NGPBLKS
+
+CALL INIT_PHYEX(KRR, PHYEX, OWARM, OSEDIC, OCND2, C_SEDIM, CSUBG_AUCV_RC, PTSTEP)
+
+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  = KKL
+D0%NKT  = KLEV
+D0%NKA  = KLEV
+D0%NKU  = 1
+D0%NKB  = KLEV 
+D0%NKE  = 1
+D0%NKTB = 1
+D0%NKTE = KLEV
+
+ISTSZ = NPROMA * 20 * KLEV
+ALLOCATE (PSTACK (ISTSZ, NGPBLKS))
+
+TS = OMP_GET_WTIME ()
+
+ZTD = 0.
+ZTC = 0.
+
+CALL INIT_GMICRO(D0, KRR, NGPBLKS, LLMICRO, PRT, PSSIO, OCND2)
+
+IF (LHOOK) CALL DR_HOOK ('MAIN',0,ZHOOK_HANDLE)
+
+CALL CPU_TIME(TIME_START_CPU)
+CALL SYSTEM_CLOCK(COUNT=COUNTER, COUNT_RATE=C_RATE)
+TIME_START_REAL = REAL(COUNTER,8)/C_RATE
+
+DO ITIME = 1, NTIME
+
+  TSD = OMP_GET_WTIME ()
+
+!openacc directives
+
+  TSC = OMP_GET_WTIME ()
+
+#ifdef USE_OPENMP
+!$OMP PARALLEL PRIVATE (D, ITID, JBLK1, JBLK2, ISIZE, ISIZEMICRO)
+#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, ISIZEMICRO) 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
+#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
+
+    ISIZEMICRO = COUNT(LLMICRO(:,:,IBL))
+
+    IF (ISIZEMICRO .GT. 0) THEN
+      CALL RAIN_ICE_OLD(D=D, CST=PHYEX%CST, PARAMI=PHYEX%PARAM_ICEN,                                   &
+                        ICEP=PHYEX%RAIN_ICE_PARAMN, ICED=PHYEX%RAIN_ICE_DESCRN, BUCONF=PHYEX%MISC%TBUCONF,        &
+                        OSEDIC=OSEDIC, OCND2=OCND2,                                        &
+                        LKOGAN=LKOGAN, LMODICEDEP=LMODICEDEP,                              &
+                        HSEDIM=C_SEDIM, HSUBG_AUCV_RC=CSUBG_AUCV_RC, OWARM=OWARM,          &
+                        KKA=KKA, KKU=KKU, KKL=KKL,                                         &
+                        KSPLITR=KSPLITR, PTSTEP=2*PTSTEP, KRR=KRR,                         &
+                        KSIZE=ISIZEMICRO, GMICRO=LLMICRO(:,:,IBL),                                &
+                        PDZZ=PDZZ(:,:,IBL), PRHODJ=PRHODJ(:,:,IBL), PRHODREF=PRHODREF(:,:,IBL),  &
+                        PEXNREF=PEXNREF(:,:,IBL), PPABST=PPABSM(:,:,IBL),                      &
+                        PCIT=PCIT(:,:,IBL), PCLDFR=PCLDFR(:,:,IBL),                            &
+                        PICLDFR=PICLDFR(:,:,IBL), PSSIO=PSSIO(:,:,IBL), PSSIU=PSSIU(:,:,IBL),    &
+                        PIFR=PIFR(:,:,IBL),                                                  &
+                        PTHT=PTHT(:,:,IBL),                                                  &
+                        PRVT=PRT(:,:,1,IBL), PRCT=PRT(:,:,2,IBL), PRRT=PRT(:,:,3,IBL),           &
+                        PRIT=PRT(:,:,4,IBL), PRST=PRT(:,:,5,IBL), PRGT=PRT(:,:,6,IBL),           &
+                        PTHS=PTHS(:,:,IBL),                                                  &
+                        PRVS=PRS(:,:,1,IBL), PRCS=PRS(:,:,2,IBL), PRRS=PRS(:,:,3,IBL),           &
+                        PRIS=PRS(:,:,4,IBL), PRSS=PRS(:,:,5,IBL), PRGS=PRS(:,:,6,IBL),           &
+                        PINPRC=ZINPRC(:,IBL), PINPRR=PINPRR(:,IBL), PEVAP3D=PEVAP(:,:,IBL),      &
+                        PINPRS=PINPRS(:,IBL), PINPRG=PINPRG(:,IBL), PSIGS=PSIGS(:,:,IBL),        &
+                        PSEA=PSEA(:,IBL), PTOWN=PTOWN(:,IBL),                                  &
+                        TBUDGETS=PHYEX%MISC%YLBUDGET, KBUDGETS=PHYEX%MISC%NBUDGET,                        &
+                        PICENU=PICENU(:,IBL),                                                &
+                        PKGN_ACON=PKGN_ACON(:,IBL), PKGN_SBGR=PKGN_SBGR(:,IBL),                &
+                        PFPR=PFPR(:,:,:,IBL))
+    ENDIF
 
-    end subroutine print_diff_2
+#ifdef _OPENACC
+    ENDDO
+#endif
 
-  end interface
+  ENDDO
 
+#ifdef USE_OPENMP
+!$OMP END PARALLEL
+#endif
 
-  n_gp_blocks = 150
-  n_proma = 32
-  n_levels = 90
-  krr = 6
-  l_verbose = .false.
-  checkdiff = .false.
+!$acc end parallel loop
 
-  owarm = .true.
+  TEC = OMP_GET_WTIME ()
 
-  kka = 1
-  kku = n_levels
-  kkl = -1
-  ksplitr = 2
+!$acc end data
 
-  c_sedim = 'STAT'
-  csubg_aucv_rc = 'PDF'
+  TED = OMP_GET_WTIME ()
+
+  ZTC = ZTC + (TEC - TSC)
+  ZTD = ZTD + (TED - TSD)
 
-DO JRR=1, NBUDGET_RH
-  YLBUDGET(JRR)%NBUDGET=JRR
 ENDDO
 
-  ptstep = 25.0000000000000
-
-  call initoptions()
-
-  call getoption ("--blocks", n_gp_blocks)
-  call getoption ("--nproma", n_proma)
-  call getoption ("--nflevg", n_levels)
-  call getoption ("--verbose", l_verbose)
-
-  write(output_unit, *) 'n_gp_blocks: ', n_gp_blocks
-  write(output_unit, *) 'n_proma:     ', n_proma
-  write(output_unit, *) 'n_levels:    ', n_levels
-  write(output_unit, *) 'total:       ', n_levels*n_proma*n_gp_blocks
-
-  call getdata_rain_ice_old(n_proma, n_gp_blocks, n_levels, krr, &
-                            osedic, ocnd2, lkogan, lmodicedep, owarm, &
-                            kka, kku, kkl, ksplitr, &
-                            ptstep, c_sedim, csubg_aucv_rc, &
-                            pdzz, prhodj, prhodref, &
-                            pexnref, ppabsm, &
-                            pcit, pcit_out, &
-                            pcldfr, &
-                            picldfr, pssio, pssiu, pifr,  &
-                            ptht, prt, pths, pths_out, &
-                            prs, prs_out, &
-                            psigs, psea, ptown,     &
-                            zinprc, zinprc_out, &
-                            pinprr, pinprr_out, &
-                            pevap, pevap_out,        &
-                            pinprs, pinprs_out, &
-                            pinprg, pinprg_out,      &
-                            pinprh, pinprh_out,      &
-                            picenu, pkgn_acon, pkgn_sbgr, &
-                            pfpr, pfpr_out, llmicro, l_verbose)
+IF (LHOOK) CALL DR_HOOK ('MAIN',1,ZHOOK_HANDLE)
 
-  
-  write(output_unit, *) 'osedic:        ', osedic
-  write(output_unit, *) 'ocnd2:         ', ocnd2
-  write(output_unit, *) 'lkogan:        ', lkogan
-  write(output_unit, *) 'lmodicedep:    ', lmodicedep
-  write(output_unit, *) 'owarm:         ', owarm
-  write(output_unit, *) 'kka:           ', kka
-  write(output_unit, *) 'kku:           ', kku
-  write(output_unit, *) 'kkl:           ', kkl
-  write(output_unit, *) 'ksplitr:       ', ksplitr
-  write(output_unit, *) 'ptstep:        ', ptstep
-  write(output_unit, *) 'c_sedim:       ', c_sedim
-  write(output_unit, *) 'csubg_aucv_rc: ', csubg_aucv_rc
-
-  D%nit  = n_proma
-  D%nib  = 1
-  D%nie  = n_proma
-  D%njt  = 1
-  D%njb  = 1
-  D%nje  = 1
-  D%nijt = D%nit * D%njt
-  D%nijb = 1
-  D%nije = n_proma
-  D%nkl  = -1
-  D%nkt  = n_levels
-  D%nka  = n_levels
-  D%nku  = 1
-  D%nkb  = n_levels
-  D%nke  = 1
-  D%nktb = 1
-  D%nkte = n_levels
-
-  call init_rain_ice_old(20)
-
-  call init_gmicro(D, krr, n_gp_blocks, llmicro, prt, pssio, ocnd2)
-
-  call cpu_time(time_start_cpu)
-  call system_clock(count=counter, count_rate=c_rate)
-  time_start_real = real(counter,8)/c_rate
-
-  if(lhook) call dr_hook ('MAIN',0,zhook_handle)
-
-  do i = 1, n_gp_blocks
-
-    isize = count(llmicro(:,:,i))
-
-    if (isize .gt. 0) then
-
-      call rain_ice_old(D=D, cst=cst, parami=param_icen,                                   &
-                        icep=rain_ice_paramn, iced=rain_ice_descrn, buconf=tbuconf,        &
-                        osedic=osedic, ocnd2=ocnd2,                                        &
-                        lkogan=lkogan, lmodicedep=lmodicedep,                              &
-                        hsedim=c_sedim, hsubg_aucv_rc=csubg_aucv_rc, owarm=owarm,          &
-                        kka=kka, kku=kku, kkl=kkl,                                         &
-                        ksplitr=ksplitr, ptstep=2*ptstep, krr=krr,                         &
-                        ksize=isize, gmicro=llmicro(:,:,i),                                &
-                        pdzz=pdzz(:,:,i), prhodj=prhodj(:,:,i), prhodref=prhodref(:,:,i),  &
-                        pexnref=pexnref(:,:,i), ppabst=ppabsm(:,:,i),                      &
-                        pcit=pcit(:,:,i), pcldfr=pcldfr(:,:,i),                            &
-                        picldfr=picldfr(:,:,i), pssio=pssio(:,:,i), pssiu=pssiu(:,:,i),    &
-                        pifr=pifr(:,:,i),                                                  &
-                        ptht=ptht(:,:,i),                                                  &
-                        prvt=prt(:,:,1,i), prct=prt(:,:,2,i), prrt=prt(:,:,3,i),           &
-                        prit=prt(:,:,4,i), prst=prt(:,:,5,i), prgt=prt(:,:,6,i),           &
-                        pths=pths(:,:,i),                                                  &
-                        prvs=prs(:,:,1,i), prcs=prs(:,:,2,i), prrs=prs(:,:,3,i),           &
-                        pris=prs(:,:,4,i), prss=prs(:,:,5,i), prgs=prs(:,:,6,i),           &
-                        pinprc=zinprc(:,i), pinprr=pinprr(:,i), pevap3d=pevap(:,:,i),      &
-                        pinprs=pinprs(:,i), pinprg=pinprg(:,i), psigs=psigs(:,:,i),        &
-                        psea=psea(:,i), ptown=ptown(:,i),                                  &
-                        TBUDGETS=YLBUDGET, KBUDGETS=SIZE(YLBUDGET),                        &
-                        picenu=picenu(:,i),                                                &
-                        pkgn_acon=pkgn_acon(:,i), pkgn_sbgr=pkgn_sbgr(:,i),                &
-                        pfpr=pfpr(:,:,:,i))
+TE = OMP_GET_WTIME()
 
-    endif
+!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)
 
-  enddo
-
-  if(lhook) call dr_hook ('MAIN',1,zhook_handle)
 
-  call cpu_time(time_end_cpu)
-  call system_clock(count=counter, count_rate=c_rate)
-  time_end_real = real(counter,8)/c_rate
+  CALL CPU_TIME(TIME_END_CPU)
+  CALL SYSTEM_CLOCK(COUNT=COUNTER, COUNT_RATE=C_RATE)
+  TIME_END_REAL = REAL(COUNTER,8)/C_RATE
 
   write(output_unit, *)
 
@@ -359,149 +415,163 @@ ENDDO
   call print_diff_2(pfpr(:,:,6,1), pfpr_out(:,:,6,1))
   write(output_unit, *)
 
-end program
-
-subroutine init_rain_ice_old(kulout)
-
-  use modd_param_ice_n,      only: param_ice_goto_model
-  use modd_rain_ice_param_n, only: rain_ice_param_goto_model
-  use modd_rain_ice_descr_n, only: rain_ice_descr_goto_model
-  use modd_cloudpar_n,       only: cloudpar_goto_model
-  use modd_param_ice_n
-
-  use mode_ini_rain_ice
-
-  use mode_ini_cst
-  use mode_ini_tiwmx
-  use modd_budget
-  use modd_les, only: tles
-
-  use iso_fortran_env, only: output_unit
-
-  implicit none
-
-  integer, intent (in) :: kulout
-
-  character(len=4) :: c_micro
-  integer :: isplitr
-
-  call ini_cst
-
-  call ini_tiwmx
-
-  call cloudpar_goto_model(1, 1)
-  call param_ice_goto_model(1, 1)
-  call rain_ice_descr_goto_model(1, 1)
-  call rain_ice_param_goto_model(1, 1)
-
-  call param_icen_init('AROME ', 0, .false., kulout, &                                                                 
-                      &.true., .false., .false., 0)
-
-  call tbuconf_associate
-
-  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.
-  tles%lles_call = .false.
-
-  ! 1. set implicit default values for modd_param_ice
-  cpristine_ice = 'PLAT'
-  csubg_rc_rr_accr = 'NONE'
-  csubg_rr_evap = 'NONE'
-  csubg_pr_pdf = 'SIGM'
-  c_micro = 'ICE3'
-
-  ! 2. set implicit default values for modd_rain_ice_descr and modd_rain_ice_param
-
-  call ini_rain_ice(kulout, 50., 20., isplitr, c_micro)
-
-end subroutine init_rain_ice_old
-
-
-subroutine init_gmicro(D, krr, n_gp_blocks, odmicro, prt, pssio, ocnd2, prht)
-
-  use modd_dimphyex, only: dimphyex_t
-  use modd_rain_ice_descr_n, only: xrtmin
-  use modd_rain_ice_param_n, only: xfrmin
-  use iso_fortran_env, only: output_unit
-
-  implicit none
-
-  type(dimphyex_t) :: D
-
-  integer, intent(in) :: krr, n_gp_blocks
-  logical, dimension(D%nit, D%nkt, n_gp_blocks), intent(inout) :: odmicro
-
-  real, dimension(D%nit, D%nkt, krr, n_gp_blocks), intent(in) :: prt
-  real, dimension(D%nit, D%nkt, n_gp_blocks), intent(in) :: pssio
-  real, dimension(D%nit, D%nkt, n_gp_blocks), optional, intent(in) :: prht
-
-  logical, intent(in) :: ocnd2
-
-  integer :: i, k, ikrr, iblock
-
-  if (ocnd2) then
-
-    do iblock = 1, n_gp_blocks
-
-      do k = 1, D%nkt
-        do i = 1, D%nit
-          odmicro(i, k, iblock) = odmicro(i, k, iblock) .or. pssio(i, k, iblock) > xfrmin(12)
-        enddo
-      enddo
-
-      do ikrr = 2, 6
-        do k = 1, D%nkt
-          do i = 1, D%nit
-            odmicro(i, k, iblock) = odmicro(i, k, iblock) .or. prt(i, k, ikrr, iblock) > xfrmin(13)
-          enddo
-        enddo
-      enddo
-
-      if (krr == 7) then
-        do k = 1, D%nkt
-          do i = 1, D%nit
-            odmicro(i, k, iblock) = odmicro(i, k, iblock) .or. prht(i, k, iblock) > xfrmin(13)
-          enddo
-        enddo
-      endif
-
-    enddo
-
-  else
-
-    do iblock = 1, n_gp_blocks
-      do ikrr = 2, 6
-        do k = 1, D%nkt
-          do i = 1, D%nit
-            odmicro(i, k, iblock) = odmicro(i, k, iblock) .or. prt(i, k, ikrr, iblock) > xrtmin(ikrr)
-          enddo
-        enddo
-      enddo
-    enddo
-
-    if (krr == 7) then
-      do k = 1, D%nkt
-        do i = 1, D%nit
-          odmicro(i, k, iblock) = odmicro(i, k, iblock) .or. prht(i, k, iblock) > xrtmin(7)
-        enddo
-      enddo
-    endif
-
-  endif
-
-end subroutine init_gmicro
+STOP
+
+CONTAINS
+
+SUBROUTINE INIT_PHYEX(KRR, PHYEX, LDWARM, LDSEDIC, LDCND2, C_SEDIM, CSUBG_AUCV_RC, PTSTEP)
+
+USE MODD_BUDGET, ONLY: TBUCONF_ASSOCIATE, NBUDGET_RH, TBUCONF, LBU_ENABLE, LBUDGET_U, LBUDGET_V, LBUDGET_W, LBUDGET_TH, &
+                       LBUDGET_TKE, LBUDGET_RV, LBUDGET_RC, LBUDGET_RR, LBUDGET_RI, LBUDGET_RS, LBUDGET_RG, LBUDGET_RH, LBUDGET_SV
+USE MODD_PHYEX, ONLY: PHYEX_t
+USE MODI_INI_PHYEX, ONLY: INI_PHYEX
+
+IMPLICIT NONE
+
+! -----------------------------------------------------------------------
+!     DUMMY VARIABLES
+INTEGER,          INTENT(IN)  :: KRR
+TYPE(PHYEX_t),    INTENT(OUT) :: PHYEX
+LOGICAL,          INTENT(IN)  :: LDWARM
+LOGICAL,          INTENT(IN)  :: LDSEDIC
+LOGICAL,          INTENT(IN)  :: LDCND2
+CHARACTER(LEN=4), INTENT(IN)  :: C_SEDIM
+CHARACTER(LEN=4), INTENT(IN)  :: CSUBG_AUCV_RC
+REAL,             INTENT(IN)  :: PTSTEP
+
+!-----------------------------------------------------------------------
+!    LOCAL VARIABLES
+INTEGER :: IULOUT, JRR
+REAL :: ZDZMIN
+CHARACTER(LEN=6) :: CPROGRAM
+CHARACTER(LEN=4) :: CMICRO, CSCONV, CTURB
+! -----------------------------------------------------------------------
+
+IULOUT=20
+CPROGRAM='AROME'
+ZDZMIN=20.
+CMICRO='ICE3'
+CSCONV='NONE'
+CTURB='TKEL'
+
+!Default values
+CALL INI_PHYEX(CPROGRAM, 0, .TRUE., IULOUT, 0, 1, &
+              &PTSTEP, ZDZMIN, &
+              &CMICRO, CSCONV, CTURB, &
+              &LDDEFAULTVAL=.TRUE., LDREADNAM=.FALSE., LDCHECK=.FALSE., KPRINT=0, LDINIT=.FALSE., &
+              &PHYEX_OUT=PHYEX)
+
+!Control parameters
+PHYEX%MISC%PTSTEP       = 2*PTSTEP
+PHYEX%MISC%KRR          = KRR
+
+!Emulate the namelist reading
+!PHYEX%PARAM_ICEN%LCRIAUTI=.TRUE.
+!PHYEX%PARAM_ICEN%XCRIAUTI_NAM=0.2E-3
+!PHYEX%PARAM_ICEN%XT0CRIAUTI_NAM=-5.
+!PHYEX%PARAM_ICEN%XCRIAUTC_NAM=0.1E-2
+PHYEX%PARAM_ICEN%LOCND2=LDCND2
+PHYEX%PARAM_ICEN%CSEDIM=C_SEDIM
+PHYEX%PARAM_ICEN%LWARM=LDWARM
+PHYEX%PARAM_ICEN%LSEDIC=LDSEDIC
+!PHYEX%PARAM_ICEN%CSNOWRIMING='M90 '
+!PHYEX%PARAM_ICEN%XFRACM90=0.1 ! Fraction used for the Murakami 1990 formulation
+!PHYEX%PARAM_ICEN%LCONVHG=.TRUE. ! TRUE to allow the conversion from hail to graupel
+!PHYEX%PARAM_ICEN%LCRFLIMIT=.TRUE. !True to limit rain contact freezing to possible heat exchange
+!PHYEX%PARAM_ICEN%LFEEDBACKT=.TRUE. ! When .TRUE. feed back on temperature is taken into account
+!PHYEX%PARAM_ICEN%LEVLIMIT=.TRUE.   ! When .TRUE. water vapour pressure is limited by saturation
+!PHYEX%PARAM_ICEN%LNULLWETG=.TRUE.  ! When .TRUE. graupel wet growth is activated with null rate (to allow water shedding)
+!PHYEX%PARAM_ICEN%LWETGPOST=.TRUE.  ! When .TRUE. graupel wet growth is activated with positive temperature (to allow water shedding)
+!PHYEX%PARAM_ICEN%LNULLWETH=.TRUE.  ! Same as LNULLWETG but for hail
+!PHYEX%PARAM_ICEN%LWETHPOST=.TRUE.  ! Same as LWETGPOST but for hail
+!PHYEX%PARAM_ICEN%LSEDIM_AFTER=.FALSE. ! Sedimentation done after microphysics
+!PHYEX%PARAM_ICEN%XSPLIT_MAXCFL=0.8
+!PHYEX%PARAM_ICEN%LDEPOSC=.FALSE.  ! water deposition on vegetation
+!PHYEX%PARAM_ICEN%XVDEPOSC=0.02    ! deposition speed (2 cm.s-1)
+!PHYEX%PARAM_ICEN%CSUBG_RC_RR_ACCR='NONE'
+!PHYEX%PARAM_ICEN%CSUBG_RR_EVAP='NONE'
+!PHYEX%PARAM_ICEN%CSUBG_PR_PDF='SIGM'
+PHYEX%PARAM_ICEN%CSUBG_AUCV_RC=CSUBG_AUCV_RC
+
+!Param initialisation
+CALL INI_PHYEX(CPROGRAM, 0, .TRUE., IULOUT, 0, 1, &
+              &PTSTEP, ZDZMIN, &
+              &CMICRO, CSCONV, CTURB, &
+              &LDDEFAULTVAL=.FALSE., LDREADNAM=.FALSE., LDCHECK=.TRUE., KPRINT=2, LDINIT=.TRUE., &
+              &PHYEX_IN=PHYEX, PHYEX_OUT=PHYEX)
+
+!Budgets
+CALL TBUCONF_ASSOCIATE
+PHYEX%MISC%NBUDGET=NBUDGET_RH
+DO JRR=1, PHYEX%MISC%NBUDGET
+  PHYEX%MISC%YLBUDGET(JRR)%NBUDGET=JRR
+ENDDO
+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.
+PHYEX%MISC%TBUCONF=TBUCONF
+
+END SUBROUTINE INIT_PHYEX
+
+SUBROUTINE INIT_GMICRO(D, KRR, NGPBLKS, ODMICRO, PRT, PSSIO, OCND2)
+
+  USE MODD_DIMPHYEX, ONLY: DIMPHYEX_T
+  USE MODD_RAIN_ICE_DESCR_N, ONLY: XRTMIN
+  USE MODD_RAIN_ICE_PARAM_N, ONLY: XFRMIN
+  USE ISO_FORTRAN_ENV, ONLY: OUTPUT_UNIT
+
+  IMPLICIT NONE
+
+  TYPE(DIMPHYEX_T) :: D
+
+  INTEGER, INTENT(IN) :: KRR, NGPBLKS
+  LOGICAL, DIMENSION(D%NIT, D%NKT, NGPBLKS), INTENT(INOUT) :: ODMICRO
+
+  REAL, DIMENSION(D%NIT, D%NKT, KRR, NGPBLKS), INTENT(IN) :: PRT
+  REAL, DIMENSION(D%NIT, D%NKT, NGPBLKS), INTENT(IN) :: PSSIO
+
+  LOGICAL, INTENT(IN) :: OCND2
+
+  INTEGER :: I, K, IKRR, IBLOCK
+  REAL    :: ZTHR
+
+  DO IBLOCK = 1, NGPBLKS
+
+    IF (OCND2) THEN
+      DO K = 1, D%NKT
+        DO I = 1, D%NIT
+          ODMICRO(I, K, IBLOCK) = ODMICRO(I, K, IBLOCK) .OR. PSSIO(I, K, IBLOCK) > XFRMIN(12)
+        ENDDO
+      ENDDO
+    ENDIF
+
+    DO IKRR = 2, KRR
+      IF (OCND2) THEN
+        ZTHR = XFRMIN(13)
+      ELSE
+        ZTHR = XRTMIN(IKRR)
+      ENDIF
+      DO K = 1, D%NKT
+        DO I = 1, D%NIT
+          ODMICRO(I, K, IBLOCK) = ODMICRO(I, K, IBLOCK) .OR. PRT(I, K, IKRR, IBLOCK) > XFRMIN(13)
+        ENDDO
+      ENDDO
+    ENDDO
+
+  ENDDO
+
+END SUBROUTINE INIT_GMICRO
 
 
 subroutine print_diff_1(array, ref)
@@ -559,4 +629,5 @@ subroutine print_diff_2(array, ref)
 
 end subroutine print_diff_2
 
+END PROGRAM
 
diff --git a/src/testprogs/shallow/main_shallow.F90 b/src/testprogs/shallow/main_shallow.F90
index 4273072ef..29826ea4a 100644
--- a/src/testprogs/shallow/main_shallow.F90
+++ b/src/testprogs/shallow/main_shallow.F90
@@ -1,8 +1,8 @@
 PROGRAM MAIN_SHALLOW
 
-USE XRD_GETOPTIONS
-USE GETDATA_SHALLOW_MOD
-USE COMPUTE_DIFF
+USE XRD_GETOPTIONS,  ONLY: INITOPTIONS, GETOPTION, CHECKOPTIONS
+USE GETDATA_SHALLOW_MOD, ONLY: GETDATA_SHALLOW
+USE COMPUTE_DIFF,    ONLY: DIFF
 USE MODI_SHALLOW_MF
 USE MODD_DIMPHYEX,   ONLY: DIMPHYEX_t
 USE MODD_PHYEX,      ONLY: PHYEX_t
@@ -12,7 +12,6 @@ USE YOMHOOK, ONLY : LHOOK, DR_HOOK, JPHOOK
 
 IMPLICIT NONE
 
-INTEGER      :: KLON 
 INTEGER      :: KLEV
 INTEGER      :: KRR, KRRL, KRRI
 INTEGER      :: KSV
@@ -332,35 +331,35 @@ 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)
+    CALL DIFF ("PDUDT_MF   ", PDUDT_MF_OUT   (:,:,:,IBL), PDUDT_MF   (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
+    CALL DIFF ("PDVDT_MF   ", PDVDT_MF_OUT   (:,:,:,IBL), PDVDT_MF   (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
+    CALL DIFF ("PDTHLDT_MF ", PDTHLDT_MF_OUT (:,:,:,IBL), PDTHLDT_MF (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
+    CALL DIFF ("PDRTDT_MF  ", PDRTDT_MF_OUT  (:,:,:,IBL), PDRTDT_MF  (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
+    CALL DIFF ("PSIGMF     ", PSIGMF_OUT     (:,:,:,IBL), PSIGMF     (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
+    CALL DIFF ("PRC_MF     ", PRC_MF_OUT     (:,:,:,IBL), PRC_MF     (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
+    CALL DIFF ("PRI_MF     ", PRI_MF_OUT     (:,:,:,IBL), PRI_MF     (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
+    CALL DIFF ("PCF_MF     ", PCF_MF_OUT     (:,:,:,IBL), PCF_MF     (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
+    CALL DIFF ("PFLXZTHVMF ", PFLXZTHVMF_OUT (:,:,:,IBL), PFLXZTHVMF (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
+    CALL DIFF ("ZFLXZTHMF  ", ZFLXZTHMF_OUT  (:,:,:,IBL), ZFLXZTHMF  (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
+    CALL DIFF ("ZFLXZRMF   ", ZFLXZRMF_OUT   (:,:,:,IBL), ZFLXZRMF   (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
+    CALL DIFF ("ZFLXZUMF   ", ZFLXZUMF_OUT   (:,:,:,IBL), ZFLXZUMF   (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
+    CALL DIFF ("ZFLXZVMF   ", ZFLXZVMF_OUT   (:,:,:,IBL), ZFLXZVMF   (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
+    CALL DIFF ("PTHL_UP    ", PTHL_UP_OUT    (:,:,:,IBL), PTHL_UP    (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
+    CALL DIFF ("PRT_UP     ", PRT_UP_OUT     (:,:,:,IBL), PRT_UP     (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
+    CALL DIFF ("PRV_UP     ", PRV_UP_OUT     (:,:,:,IBL), PRV_UP     (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
+    CALL DIFF ("PRC_UP     ", PRC_UP_OUT     (:,:,:,IBL), PRC_UP     (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
+    CALL DIFF ("PRI_UP     ", PRI_UP_OUT     (:,:,:,IBL), PRI_UP     (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
+    CALL DIFF ("PU_UP      ", PU_UP_OUT      (:,:,:,IBL), PU_UP      (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
+    CALL DIFF ("PV_UP      ", PV_UP_OUT      (:,:,:,IBL), PV_UP      (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
+    CALL DIFF ("PTHV_UP    ", PTHV_UP_OUT    (:,:,:,IBL), PTHV_UP    (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
+    CALL DIFF ("PW_UP      ", PW_UP_OUT      (:,:,:,IBL), PW_UP      (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
+    CALL DIFF ("PFRAC_UP   ", PFRAC_UP_OUT   (:,:,:,IBL), PFRAC_UP   (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
+    CALL DIFF ("PEMF       ", PEMF_OUT       (:,:,:,IBL), PEMF       (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
+    CALL DIFF ("ZDETR      ", ZDETR_OUT      (:,:,:,IBL), ZDETR      (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
+    CALL DIFF ("ZENTR      ", ZENTR_OUT      (:,:,:,IBL), ZENTR      (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
+!    CALL DIFF ("IKLCL      ", IKLCL_OUT      (:,:,IBL),   IKLCL      (:,:,IBL),   LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
+!    CALL DIFF ("IKETL      ", IKETL_OUT      (:,:,IBL),   IKETL      (:,:,IBL),   LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
+!    CALL DIFF ("IKCTL      ", IKCTL_OUT      (:,:,IBL),   IKCTL      (:,:,IBL),   LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
   ENDDO
 ENDIF
 
diff --git a/src/testprogs/support/diff.F90 b/src/testprogs/support/compute_diff.F90
similarity index 100%
rename from src/testprogs/support/diff.F90
rename to src/testprogs/support/compute_diff.F90
diff --git a/src/testprogs/turb_mnh/main_turb.F90 b/src/testprogs/turb_mnh/main_turb.F90
index 423b7b419..b0a7f5c5f 100644
--- a/src/testprogs/turb_mnh/main_turb.F90
+++ b/src/testprogs/turb_mnh/main_turb.F90
@@ -1,8 +1,8 @@
 PROGRAM MAIN_TURB
 
-USE XRD_GETOPTIONS
-USE GETDATA_TURB_MOD
-USE COMPUTE_DIFF
+USE XRD_GETOPTIONS,  ONLY: INITOPTIONS, GETOPTION, CHECKOPTIONS
+USE GETDATA_TURB_MOD, ONLY: GETDATA_TURB
+USE COMPUTE_DIFF,    ONLY: DIFF
 USE MODI_TURB
 USE MODD_DIMPHYEX,   ONLY: DIMPHYEX_t
 USE MODD_PHYEX,      ONLY: PHYEX_t
@@ -13,7 +13,6 @@ USE MODD_LES,        ONLY: TLES_t
 
 IMPLICIT NONE
 
-INTEGER      :: KLON 
 INTEGER      :: KLEV
 INTEGER      :: KRR, KRRL, KRRI
 INTEGER      :: KSV
@@ -354,31 +353,31 @@ IF (LLCHECK .OR. LLSTAT .OR. LLCHECKDIFF) THEN
     PRINT *, " IBL = ", IBL
     DO JRR=1, KRR
       WRITE (CLTEXT, '("ZRM JRR=",I3.3)') JRR
-      CALL DIFF3 (CLTEXT,      ZRM_OUT       (:,:,:,JRR,IBL), ZRM      (:,:,:,JRR,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
+      CALL DIFF (CLTEXT,      ZRM_OUT       (:,:,:,JRR,IBL), ZRM      (:,:,:,JRR,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
       WRITE (CLTEXT, '("ZRRS JRR=",I3.3)') JRR
-      CALL DIFF3 (CLTEXT,      ZRRS_OUT       (:,:,:,JRR,IBL), ZRRS      (:,:,:,JRR,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
+      CALL DIFF (CLTEXT,      ZRRS_OUT       (:,:,:,JRR,IBL), ZRRS      (:,:,:,JRR,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
     ENDDO
-    CALL DIFF2 ("ZBL_DEPTH   ", ZBL_DEPTH_OUT    (:,:,IBL)  , ZBL_DEPTH   (:,:,IBL)  , LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
-    CALL DIFF2 ("ZSBL_DEPTH  ", ZSBL_DEPTH_OUT   (:,:,IBL)  , ZSBL_DEPTH  (:,:,IBL)  , LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
-    CALL DIFF3 ("PTHM        ", PTHM_OUT         (:,:,:,IBL), PTHM        (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
-    CALL DIFF3 ("PRUS        ", PRUS_OUT         (:,:,:,IBL), PRUS        (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
-    CALL DIFF3 ("PRVS        ", PRVS_OUT         (:,:,:,IBL), PRVS        (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
-    CALL DIFF3 ("PRWS        ", PRWS_OUT         (:,:,:,IBL), PRWS        (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
-    CALL DIFF3 ("PRTHS       ", PRTHS_OUT        (:,:,:,IBL), PRTHS       (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
-    CALL DIFF3 ("PRTKES_OUT  ", PRTKES_OUT_OUT   (:,:,:,IBL), PRTKES_OUT  (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
-    CALL DIFF3 ("PSIGS       ", PSIGS_OUT        (:,:,:,IBL), PSIGS       (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
-    CALL DIFF3 ("ZWTH        ", ZWTH_OUT         (:,:,:,IBL), ZWTH        (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
-    CALL DIFF3 ("ZWRC        ", ZWRC_OUT         (:,:,:,IBL), ZWRC        (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
-    CALL DIFF3 ("PDP         ", PDP_OUT          (:,:,:,IBL), PDP         (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
-    CALL DIFF3 ("PTP         ", PTP_OUT          (:,:,:,IBL), PTP         (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
-    CALL DIFF3 ("PTDIFF      ", PTDIFF_OUT       (:,:,:,IBL), PTDIFF      (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
-    CALL DIFF3 ("PTDISS      ", PTDISS_OUT       (:,:,:,IBL), PTDISS      (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
-    CALL DIFF3 ("PEDR        ", PEDR_OUT         (:,:,:,IBL), PEDR        (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
-    CALL DIFF3 ("PTPMF       ", PTPMF_OUT        (:,:,:,IBL), PTPMF       (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
-    CALL DIFF3 ("PDRUS_TURB  ", PDRUS_TURB_OUT   (:,:,:,IBL), PDRUS_TURB  (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
-    CALL DIFF3 ("PDRVS_TURB  ", PDRVS_TURB_OUT   (:,:,:,IBL), PDRVS_TURB  (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
-    CALL DIFF3 ("PDRTHLS_TURB", PDRTHLS_TURB_OUT (:,:,:,IBL), PDRTHLS_TURB(:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
-    CALL DIFF3 ("PDRRTS_TURB ", PDRRTS_TURB_OUT  (:,:,:,IBL), PDRRTS_TURB (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
+    CALL DIFF ("ZBL_DEPTH   ", ZBL_DEPTH_OUT    (:,:,IBL)  , ZBL_DEPTH   (:,:,IBL)  , LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
+    CALL DIFF ("ZSBL_DEPTH  ", ZSBL_DEPTH_OUT   (:,:,IBL)  , ZSBL_DEPTH  (:,:,IBL)  , LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
+    CALL DIFF ("PTHM        ", PTHM_OUT         (:,:,:,IBL), PTHM        (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
+    CALL DIFF ("PRUS        ", PRUS_OUT         (:,:,:,IBL), PRUS        (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
+    CALL DIFF ("PRVS        ", PRVS_OUT         (:,:,:,IBL), PRVS        (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
+    CALL DIFF ("PRWS        ", PRWS_OUT         (:,:,:,IBL), PRWS        (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
+    CALL DIFF ("PRTHS       ", PRTHS_OUT        (:,:,:,IBL), PRTHS       (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
+    CALL DIFF ("PRTKES_OUT  ", PRTKES_OUT_OUT   (:,:,:,IBL), PRTKES_OUT  (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
+    CALL DIFF ("PSIGS       ", PSIGS_OUT        (:,:,:,IBL), PSIGS       (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
+    CALL DIFF ("ZWTH        ", ZWTH_OUT         (:,:,:,IBL), ZWTH        (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
+    CALL DIFF ("ZWRC        ", ZWRC_OUT         (:,:,:,IBL), ZWRC        (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
+    CALL DIFF ("PDP         ", PDP_OUT          (:,:,:,IBL), PDP         (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
+    CALL DIFF ("PTP         ", PTP_OUT          (:,:,:,IBL), PTP         (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
+    CALL DIFF ("PTDIFF      ", PTDIFF_OUT       (:,:,:,IBL), PTDIFF      (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
+    CALL DIFF ("PTDISS      ", PTDISS_OUT       (:,:,:,IBL), PTDISS      (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
+    CALL DIFF ("PEDR        ", PEDR_OUT         (:,:,:,IBL), PEDR        (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
+    CALL DIFF ("PTPMF       ", PTPMF_OUT        (:,:,:,IBL), PTPMF       (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
+    CALL DIFF ("PDRUS_TURB  ", PDRUS_TURB_OUT   (:,:,:,IBL), PDRUS_TURB  (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
+    CALL DIFF ("PDRVS_TURB  ", PDRVS_TURB_OUT   (:,:,:,IBL), PDRVS_TURB  (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
+    CALL DIFF ("PDRTHLS_TURB", PDRTHLS_TURB_OUT (:,:,:,IBL), PDRTHLS_TURB(:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
+    CALL DIFF ("PDRRTS_TURB ", PDRRTS_TURB_OUT  (:,:,:,IBL), PDRRTS_TURB (:,:,:,IBL), LLSTAT, LLCHECK, NPROMA, LLCHECKDIFF, LLDIFF)
   ENDDO
 ENDIF
 
-- 
GitLab