diff --git a/src/arome/ext/vdfhghtnhl.F90 b/src/arome/ext/vdfhghtnhl.F90
new file mode 100644
index 0000000000000000000000000000000000000000..169b233f5a1709606bd327726123b2b85fc2fae4
--- /dev/null
+++ b/src/arome/ext/vdfhghtnhl.F90
@@ -0,0 +1,1377 @@
+!OPTIONS XOPT(HSFUN)
+SUBROUTINE VDFHGHTNHL (YDVDF,YDEPHLI,YDECUMF,YDEPHY,YDPARAR,KIDIA   , KFDIA   , KLON    , KLEV   , KDRAFT, PTMST, KSTEP, &
+                   & PUM1    , PVM1    , PTM1    , PQM1    , PLM1    , PIM1   , PAM1,&
+                   & PAPHM1  , PAPM1   , PGEOM1  , PGEOH  , &
+                   & PKMFL   , PKHFL   , PKQFL   , PMFLX  , PEXNF , PEXNH, &
+! DIAGNOSTIC OUTPUT
+
+                   & PUUH    , PVUH    , PSLGUH  , PQTUH  , PTHTVUH, PFRACB, &
+                   & PZPTOP  , KPTOP   , PZPLCL  , KPLCL  , KPLZB   , &
+                   &  PRICUI  , &
+                   & PFPLVL  , PFPLVN  , PCLFR, &
+                   & PBIR    , LDNODECP, LDRUNDRY, KPBLTYPE, &
+                   & YSPP_CLDDPTH,YSPP_CLDDPTHDP, &
+                   & YSPP_RFAC_TWOC,YSPP_RZC_H,YSPP_RZL_INF, &
+                   & ZLENGTH_M, ZLENGTH_H,  PTKE)
+
+!     ------------------------------------------------------------------
+
+!**   * VDFHGHTNHL* - DETERMINES THE PBL-HEIGHT AND STRONG UPDRAFT FIELDS
+!                  USING A ENTRAINING PARCEL ASCENT METHOD.
+
+!     A.P. SIEBESMA                30/06/1999  Original (dry)
+!     M. Ko"hler                    3/12/2004  Moist Version
+!     Roel Neggers                 12/04/2005  Multiple updraft extension
+!     Wim de Rooy/Geert Lenderink  13/06/2008 and 21/09/2010 Updates to combine TKE turbulence
+!                                              with dual updraft EDMF. Lateral mixing according
+!                                              to de Rooy & Siebesma MWR 2008 and QJRMS 2010
+!     Wim de Rooy                  July /2015  Implementation LHARATU in Harmonie
+!     Lisa Bengtsson               Feb /2017   Introduce LTOTPREC option
+!     Karl-Ivar Ivarsson           Feb /2018   Code optimation
+!     R. El Khatib 30-Apr-2019                 bugfix
+!     Wim de Rooy                  June / 2019 Modifications among which energy
+!                                              energy cascade term
+!     R. El Khatib 27-Aug-2019                 Cleaning
+!     Karl-Ivar Ivarsson           April /2020 Introduce LTOTPRECL option
+!     U. Andrae Dec 2020                       Introduce SPP for HARMONIE-AROME
+!      R. El Khatib 08-Jul-2022 Contribution to the encapsulation of YOMCST and YOETHF
+
+
+!     PURPOSE
+!     -------
+
+!     DETERMINE PBL HEIGHT AND UPDRAFT FIELDS
+
+!     INTERFACE
+!     ---------
+
+!     * VDFHGHTNHL* IS CALLED BY *VDFHGHTHL*
+
+!     PARAMETER     DESCRIPTION                                   UNITS
+!     ---------     -----------                                   -----
+!     INPUT PARAMETERS (INTEGER):
+
+!     *KIDIA*        START POINT
+!     *KFDIA*        END POINT
+!     *KLEV*         NUMBER OF LEVELS
+!     *KLON*         NUMBER OF GRID POINTS PER PACKET
+!     *KDRAFT*       NUMBER OF EXPLICITLY MODELED DRAFTS - CURRENTLY 3:
+!                    1: test parcel
+!                    2: rising dry thermals which stop at cloud base or inversion
+!                    3: rising dry thermals which become cloudy
+!                    (4: downdrafts .. to be done?)
+
+!     INPUT PARAMETERS (REAL):
+
+!     *PTMST*        DOUBLE TIME STEP (SINGLE AT 1TH STEP)        S
+!     *PUM1*         X-VELOCITY COMPONENT AT T-1                  M/S
+!     *PVM1*         Y-VELOCITY COMPONENT AT T-1                  M/S
+!     *PTM1*         TEMPERATURE AT T-1                           K
+!     *PQM1*         SPECIFIC HUMUDITY AT T-1                     KG/KG
+!     *PLM1*         SPECIFIC CLOUD LIQUID WATER AT T-1           KG/KG
+!     *PIM1*         SPECIFIC CLOUD ICE AT T-1                    KG/KG
+!     *PAM1*         CLOUD FRACTION AT T-1                        KG/KG
+!     *PAPHM1*       PRESSURE AT HALF LEVEL AT T-1                PA
+!     *PAPM1*        PRESSURE AT FULL LEVEL AT T-1                PA
+!     *PGEOM1*       GEOPOTENTIAL AT T-1                          M2/S2
+!     *PGEOH*        GEOPOTENTIAL AT HALF LEVEL                   M2/S2
+!     *PKMFL*        SURFACE KINEMATIC MOMENTUM FLUX              M2/S2
+!     *PKHFL*        SURFACE KINEMATIC HEAT FLUX                  K*M/S
+!     *PKQFL*        SURFACE KINEMATIC MOISTURE FLUX              M/S
+!     *PBIR*         BUOYANCY-FLUX INTEGRAL RATIO (-N/P)
+!                    USED FOR DECOUPLING CRITERIA
+!     *PEXNF*        ENXNER FUNCTION FOR FULL PRESSURE LEVELS (FOR OPTIMATION OF CODE)
+!     *PEXNH*        ENXNER FUNCTION FOR HALF PRESSURE LEVELS (FOR OPTIMATION OF CODE),
+!                    =  (P / PREF) ** R/CP
+
+!     INPUT PARAMETERS (LOGICAL):
+
+!     *LDNODECP*     TRUE:  NEVER DECOUPLE
+!                    FALSE: MAYBE DECOUPLE
+!     *LDRUNDRY*     TRUE:  RUN PARCEL WITHOUT CONDENSATION
+!                    FALSE: RUN PARCEL WITH CONDENSATION
+
+!     OUTPUT PARAMETERS (REAL):
+
+!     *PFPLVL*       PBL PRECIPITATION FLUX AS RAIN                KG/(M**2*S)
+!     *PFPLVN*       PBL PRECIPITATION FLUX AS SNOW                KG/(M**2*S)
+
+!     *PUUH*         UPDRAFT X-MOMENTUM
+!     *PVUH*         UPDRAFT Y-MOMENTUM
+!     *PSLGUH*       UPDRAFT GENERALIZED LIQUID STATIC ENERGY (SLG)
+!                    AT HALF LEVEL                                M2/S2
+!     *PQTUH*        UPDRAFT SPECIFIC TOTAL WATER AT HALF LEVEL   KG/KG
+!     *PTHTVUH*      UPDRAFT virt potential temp at HALF LEVEL (for TKE)  K
+!     *PMFLX*        PBL MASS FLUX                                M/S
+!     *PZPLCL*       HEIGHT OF LIFTING CONDENSATION LEVEL OF UPDRAFT          M
+!     *PZPTOP*       HEIGHT OF LEVEL OF ZERO KINETIC ENERGY (W=0) OF UPDRAFT  M
+!cstep/GL
+!     *PBUOY_COR*    STABILITY CORRECTION PARAMETER TO BE USED FOR TKE SCHEME
+!
+!     *PWU*          VERTICAL VELOCITY OF SECOND UPDRAFT
+!cstep/GL
+!
+!     OUTPUT PARAMETERS (INTEGER):
+
+!     *KPLCL*         FIRST HALF LEVEL ABOVE REAL HEIGHT OF UPRAFT LCL
+!     *KPTOP*         HIGHEST HALF LEVEL BELOW PZTOP, AND
+!                       UPDRAFT TOP FULL LEVEL (PZTOP IS WITHIN THAT LAYER)
+!     *KPLZB*         LEVEL OF UPRAFT ZERO BUOYANCY (LAST FULL LEVEL THAT IS POS. BUOYANT)
+!     *KPBLTYPE*    -1: not defined yet
+!                    0: stable PBL
+!                    1: dry convective PBL (no cloud below parcel top)
+!                    2: stratocumulus
+!                    3: shallow cumulus
+!                    4: deep cumulus
+
+!     METHOD
+!     ------
+
+!     SEE DOCUMENTATION
+
+!     ------------------------------------------------------------------
+
+USE YOEPHLI  , ONLY : TEPHLI
+USE PARKIND1  ,ONLY : JPIM     ,JPRB
+
+USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
+
+USE YOMCST   , ONLY : YDCST=>YRCST ! allows use of included functions. REK.
+USE YOETHF   , ONLY : YDTHF=>YRTHF ! allows use of included functions. REK.
+USE PARPHY   , ONLY : RKAP
+USE YOECUMF  , ONLY : TECUMF
+USE YOMPARAR , ONLY : TPARAR
+USE YOEPHY   , ONLY : TEPHY
+USE YOEVDF   , ONLY : TVDF
+
+!for optimation
+USE MODD_CST
+USE MODD_RAIN_ICE_DESCR
+USE MODD_RAIN_ICE_PARAM
+USE MODE_TIWMX_TAB
+USE MODE_TIWMX
+
+USE SPP_MOD_TYPE, ONLY : TSPP_CONFIG_TYPE, APPLY_SPP 
+
+IMPLICIT NONE
+
+
+!*         0.1    GLOBAL VARIABLES
+
+TYPE(TVDF)        ,INTENT(IN)    :: YDVDF
+TYPE(TECUMF)      ,INTENT(IN)    :: YDECUMF
+TYPE(TEPHLI)      ,INTENT(IN)    :: YDEPHLI
+TYPE(TEPHY)       ,INTENT(IN)    :: YDEPHY
+TYPE(TPARAR)      ,INTENT(IN)    :: YDPARAR
+INTEGER(KIND=JPIM),INTENT(IN)    :: KLON
+INTEGER(KIND=JPIM),INTENT(IN)    :: KLEV
+INTEGER(KIND=JPIM),INTENT(IN)    :: KDRAFT
+INTEGER(KIND=JPIM),INTENT(IN)    :: KIDIA
+INTEGER(KIND=JPIM),INTENT(IN)    :: KFDIA
+INTEGER(KIND=JPIM),INTENT(IN)    :: KSTEP
+INTEGER(KIND=JPIM),INTENT(INOUT) :: KPLCL(KLON,KDRAFT)
+INTEGER(KIND=JPIM),INTENT(INOUT) :: KPTOP(KLON,KDRAFT)
+INTEGER(KIND=JPIM),INTENT(INOUT) :: KPLZB(KLON,KDRAFT)
+REAL(KIND=JPRB)   ,INTENT(IN)    :: PTMST
+REAL(KIND=JPRB)   ,INTENT(IN)    :: PUM1(KLON,KLEV)
+REAL(KIND=JPRB)   ,INTENT(IN)    :: PVM1(KLON,KLEV)
+REAL(KIND=JPRB)   ,INTENT(IN)    :: PTM1(KLON,KLEV)
+REAL(KIND=JPRB)   ,INTENT(IN)    :: PQM1(KLON,KLEV)
+REAL(KIND=JPRB)   ,INTENT(IN)    :: PLM1(KLON,KLEV)
+REAL(KIND=JPRB)   ,INTENT(IN)    :: PIM1(KLON,KLEV)
+REAL(KIND=JPRB)   ,INTENT(IN)    :: PAM1(KLON,KLEV)
+REAL(KIND=JPRB)   ,INTENT(IN)    :: PAPHM1(KLON,0:KLEV)
+REAL(KIND=JPRB)   ,INTENT(IN)    :: PAPM1(KLON,KLEV)
+REAL(KIND=JPRB)   ,INTENT(IN)    :: PGEOM1(KLON,KLEV)
+REAL(KIND=JPRB)   ,INTENT(IN)    :: PGEOH(KLON,0:KLEV)
+REAL(KIND=JPRB)   ,INTENT(IN)    :: PKMFL(KLON)
+REAL(KIND=JPRB)   ,INTENT(IN)    :: PKHFL(KLON)
+REAL(KIND=JPRB)   ,INTENT(IN)    :: PKQFL(KLON)
+REAL(KIND=JPRB)   ,INTENT(INOUT) :: PMFLX(KLON,0:KLEV,KDRAFT)
+REAL(KIND=JPRB)   ,INTENT(OUT)   :: PUUH(KLON,0:KLEV,KDRAFT)
+REAL(KIND=JPRB)   ,INTENT(OUT)   :: PVUH(KLON,0:KLEV,KDRAFT)
+REAL(KIND=JPRB)   ,INTENT(INOUT) :: PSLGUH(KLON,0:KLEV,KDRAFT)
+REAL(KIND=JPRB)   ,INTENT(INOUT) :: PQTUH(KLON,0:KLEV,KDRAFT)
+REAL(KIND=JPRB)   ,INTENT(INOUT) :: PTHTVUH(KLON,0:KLEV,KDRAFT)
+REAL(KIND=JPRB)   ,INTENT(OUT)   :: PFRACB(KLON,KDRAFT)
+REAL(KIND=JPRB)   ,INTENT(INOUT) :: PZPLCL(KLON,KDRAFT)
+REAL(KIND=JPRB)   ,INTENT(INOUT) :: PZPTOP(KLON,KDRAFT)
+REAL(KIND=JPRB)   ,INTENT(INOUT) :: PFPLVL(KLON,0:KLEV)
+REAL(KIND=JPRB)   ,INTENT(INOUT) :: PFPLVN(KLON,0:KLEV)
+REAL(KIND=JPRB)   ,INTENT(OUT)   :: PCLFR(KLON)
+REAL(KIND=JPRB)   ,INTENT(IN)    :: PBIR(KLON)
+REAL(KIND=JPRB)   ,INTENT(OUT)   :: PRICUI(KLON)
+TYPE(TSPP_CONFIG_TYPE),INTENT(INOUT) :: YSPP_CLDDPTH,  YSPP_CLDDPTHDP, &
+                                      & YSPP_RFAC_TWOC,YSPP_RZC_H,YSPP_RZL_INF
+! variables RACMO turbulence scheme
+REAL(KIND=JPRB)   ,INTENT(OUT) :: ZLENGTH_M(KLON,KLEV)
+REAL(KIND=JPRB)   ,INTENT(OUT) :: ZLENGTH_H(KLON,KLEV)
+REAL(KIND=JPRB)   ,INTENT(INOUT) :: PTKE(KLON,KLEV)
+
+! variables for optimation of code
+REAL(KIND=JPRB)   ,INTENT(IN) :: PEXNF(KLON,KLEV)
+REAL(KIND=JPRB)   ,INTENT(IN) :: PEXNH(KLON,0:KLEV)
+
+LOGICAL           ,INTENT(IN)    :: LDNODECP(KLON)
+!ldrundry not used now
+LOGICAL           ,INTENT(IN)    :: LDRUNDRY(KLON)
+INTEGER(KIND=JPIM),INTENT(INOUT) :: KPBLTYPE(KLON)
+REAL(KIND=JPRB)    :: ZENCASC(KLON,0:KLEV)
+
+! --- variables associated with Lgeert
+REAL(KIND=JPRB)    ::  PBUOY_COR (KLON,0:KLEV)
+REAL(KIND=JPRB)    :: ZQCUH(KLON,0:KLEV,KDRAFT)
+REAL(KIND=JPRB)    :: ZWU2H(KLON,0:KLEV,KDRAFT)
+
+REAL(KIND=JPRB)    ::  PWU       (KLON,0:KLEV)
+REAL(KIND=JPRB)    :: ZQSVAR(KLON,KLEV)
+REAL(KIND=JPRB)    :: ZDQSDTEMP(KLON,KLEV)
+REAL(KIND=JPRB)    :: ZFACW,ZFACI,ZESDP,ZCOR,ZLAT2CP,&
+                      & ZESW,ZESI,ZES,ZQSAT,ZEL2R,ZEI2R,ZE2R
+!cstep/GL ---------------------------------------------
+
+
+
+!*         0.2    LOCAL VARIABLES
+
+!--- mean & environmental properties ---
+REAL(KIND=JPRB) ::    ZUSTAR (KLON)      , ZWSTAR(KLON)       , ZKHVFL(KLON)       , &
+                    & ZWSIGMA(KLON)      , &
+                    & ZSLGENH(KLON,0:KLEV),ZQLENH(KLON,0:KLEV), ZQIENH(KLON,0:KLEV), &
+                    & ZQTENH(KLON,0:KLEV), ZUENH(KLON,0:KLEV) , ZVENH(KLON,0:KLEV) , &
+                    & ZTVEN(KLON,KLEV),    ZQTM1 (KLON,KLEV)  , &
+                    & ZSLGM1(KLON,KLEV)  ,&
+                    & ZTENH(KLON,0:KLEV) , ZRHOH (KLON,0:KLEV), ZTHVEN(KLON,KLEV)
+
+REAL(KIND=JPRB) ::    ZSTAR(KLON), ZCHICRIT(KLON,0:KLEV),ZMEANCHICRIT(KLON)   , &
+                    & ZDETRSHALLOW(KLON), ZVARQ(KLON,0:KLEV), &
+                    & ZFRACMB(KLON) , ZMINIMUM(KLON) ,  &
+                    & ZQVENH(KLON,0:KLEV), &
+                    & ZTHTVENH(KLON,0:KLEV), ZTHTLUH(KLON,0:KLEV), &
+                    & ZTHTENH(KLON,0:KLEV), &
+                    & ZTHTVUH(KLON,0:KLEV), ZTHTLEH(KLON,0:KLEV),&
+                    & ZDQSDTU(KLON,0:KLEV),ZGAMMA(KLON,0:KLEV),ZDUMFUNC(KLON,0:KLEV), &
+                    & ZPRES_0, ZKAPPA,ZQSATU(KLON,0:KLEV)
+
+
+!--- updraft parameters ---
+REAL(KIND=JPRB) ::    ZWUH,DZH, &
+                    & ZQUH  (KLON,0:KLEV,KDRAFT), &
+    & ZTUH  (KLON,0:KLEV,KDRAFT), ZEPS  (KLON,0:KLEV,KDRAFT), &
+    & ZDETR (KLON,0:KLEV,KDRAFT), ZFRAC (KLON,0:KLEV,KDRAFT), &
+    & ZBUOF (KLON,KLEV,KDRAFT)  , &
+                    & ZDELTAMINEPS(KLON,0:KLEV), ZCAPE1(KLON)
+
+REAL(KIND=JPRB) ::    ZQSATM, ZSATDEF, &
+                    & ZUPFLXL(KLON,0:KLEV,KDRAFT), ZUPFLXN(KLON,0:KLEV,KDRAFT), &
+                    & ZUPGENL(KLON,KLEV,KDRAFT), ZUPGENN(KLON,KLEV,KDRAFT), &
+                    & ZDZRHO, ZPFLXTOT, ZPEVAPUP, ZFAC, ZUPMELT, ZUPMELTTEND
+
+REAL(KIND=JPRB) ::    ZFRACB(KLON,KDRAFT), ZMFLXB(KLON,KDRAFT), ZTVEXCSURF(KLON,KDRAFT)
+
+
+REAL(KIND=JPRB) ::    ZFRACMAX , ZFACMAXEXC , ZFRACTEST , ZFACTESTEXC , &
+                    & ZFACEXC(KLON,KDRAFT), ZDUMFRAC, ZDUMR, TVEXCSURF, ZWT, ZWL, ZEL, ZET, &
+                    & ZFACCASC(KLON,0:KLEV)
+
+LOGICAL ::            LLDONE(KLON,KDRAFT)
+
+
+INTEGER(KIND=JPIM) :: IS, JK, JL, JD, JKM
+
+INTEGER(KIND=JPIM) :: IKSTAR(KLON)
+
+REAL(KIND=JPRB) ::    ZQEXC   , ZTEXC   , ZDZ     , &
+                    & ZCONS10 , ZTVMEAN     , &
+                    & ZRG     , ZMFMAX  , ZMFS(KLON,KDRAFT)
+
+!          REMAINING MODEL PARAMETERS
+
+REAL(KIND=JPRB) ::    ZTAUEPS(KLON) , ZCLDDEPTH  , &
+                    & ZW2THRESH         , ZSTABTHRESH       , ZBIRTHRESH , &
+                    & ZCLDDEPTHDP       , ZDZCLOUD(KLON), &
+                    & ZREPUST, ZGHM1
+    
+REAL(KIND=JPRB) ::    ZZI(KLON),ZB1(KLON),ZCOUNT(KLON), &
+                    & ZFRMIN(KLON,2),ZMU,ZVAL
+INTEGER(KIND=JPIM) :: ITOP, IBASE, JKO,JKE
+
+!cstep 30082007: introduce two parcel time scales, one for the test parcel (ZTAUEPS_TEST) and one
+!              : for the actual parcels (ZTAUEPS)
+REAL(KIND=JPRB) :: ZTAUEPS_TEST
+
+INTEGER(KIND=JPIM) :: IZI(KLON,KDRAFT)
+
+
+REAL(KIND=JPRB) ::    ZHOOK_HANDLE
+
+
+#include "surf_inq.h"
+
+#include "vdfparcelhl.intfb.h"
+#include "vdfpdftablehl.intfb.h"
+#include "vdfexcuhl.intfb.h"
+#include "fcttre.func.h"
+
+
+
+!     ------------------------------------------------------------------
+
+!*         1.     INITIALIZATION
+!                 --------------
+
+IF (LHOOK) CALL DR_HOOK('VDFHGHTNHL',0,ZHOOK_HANDLE)
+ASSOCIATE(RTAUMEL=>YDECUMF%RTAUMEL, &
+ & RG=>YDCST%RG, RCPD=>YDCST%RCPD, RETV=>YDCST%RETV, RLVTT=>YDCST%RLVTT, RLSTT=>YDCST%RLSTT, &
+ & RATM=>YDCST%RATM, RTT=>YDCST%RTT, RLMLT=>YDCST%RLMLT, RD=>YDCST%RD, &
+ & R2ES=>YDTHF%R2ES, R3LES=>YDTHF%R3LES, R3IES=>YDTHF%R3IES, R4LES=>YDTHF%R4LES, &
+ & R4IES=>YDTHF%R4IES, R5LES=>YDTHF%R5LES, R5IES=>YDTHF%R5IES, R5ALVCP=>YDTHF%R5ALVCP, &
+ & R5ALSCP=>YDTHF%R5ALSCP, RALVDCP=>YDTHF%RALVDCP, RALSDCP=>YDTHF%RALSDCP, &
+ & RTWAT=>YDTHF%RTWAT, RTICE=>YDTHF%RTICE, RTICECU=>YDTHF%RTICECU, RTWAT_RTICE_R=>YDTHF%RTWAT_RTICE_R, &
+ & RTWAT_RTICECU_R=>YDTHF%RTWAT_RTICECU_R, &
+ & YSURF=>YDEPHY%YSURF,LHARATU=>YDPARAR%LHARATU, &
+ & LTOTPREC=>YDPARAR%LTOTPREC,LTOTPRECL=>YDPARAR%LTOTPRECL)
+
+ZWL= 200._JPRB
+ZWT= 400._JPRB
+! typical entrainment values at LCL (L) and TOP (T)
+ZEL= 0.002_JPRB
+ZET= 0.002_JPRB
+ZPRES_0 = 100000._JPRB     ! standard pressure consistent with vdfexcu
+ZKAPPA = RD / RCPD         ! consistent with vdfexcu
+
+ZFRACTEST   = 0.002_JPRB   ! top % of the PDF associated with the test parcel
+CALL VDFPDFTABLEHL (ZFRACTEST, ZFACTESTEXC, ZDUMR, ZDUMR, 0) ! associated PDF scaling factor
+
+
+ZFRACMAX    = 0.1_JPRB     ! total convective area fraction that is done with mass flux
+
+CALL VDFPDFTABLEHL (ZFRACMAX, ZFACMAXEXC, ZDUMR, ZDUMR, 0) ! associated PDF scaling factor
+
+! eddy turnover time scale used in parcel entrainment [s]  (Neggers, Siebesma & Jonker, JAS 2002)
+ZTAUEPS_TEST = 400._JPRB   ! Roel's original ZTAUEPS value
+
+
+!ZW2THRESH  = -1._JPRB     ! threshold parcel vertical velocity squared [m2/s2]
+!CGL
+ZW2THRESH   = 0.0_JPRB
+
+ZCLDDEPTH   = 2000._JPRB   ! threshold cloud thickness for stcu/cu transition [m]
+
+ZCLDDEPTHDP = 4000._JPRB ! threshold cloud thickness used in shallow/deep decision [m]
+
+TVEXCSURF = 0.0_JPRB ! initialisation
+
+IF(XFRMIN(19)>0.)ZCLDDEPTH = XFRMIN(19)
+IF(XFRMIN(20)>0.)ZCLDDEPTHDP = XFRMIN(20)
+
+
+ZSTABTHRESH = 20._JPRB     ! threshold stability (Klein & Hartmann criteria) [K]
+ZBIRTHRESH  = 0.1_JPRB     ! threshold BIR (TKE decoupling criteria) [1]
+
+CALL SURF_INQ(YSURF,PREPUST=ZREPUST)
+
+! optimization
+ZRG         = 1.0_JPRB/RG
+ZLAT2CP     = RLVTT/RCPD
+ZEL2R       = 0.62198_JPRB*RLVTT/RD
+ZEI2R       = 0.62198_JPRB*RLSTT/RD
+
+DO JL=KIDIA,KFDIA
+   KPBLTYPE(JL)     = -1           ! -1 means: yet unknown
+
+   ZZI(JL)          = 0._JPRB      ! mixed layer scalings
+   ZWSTAR(JL)       = 0._JPRB
+
+   PRICUI(JL)       = 1._JPRB      ! 1 / cumulus inversion Richardson number
+   ZCAPE1(JL)       = 0._JPRB
+
+ENDDO
+
+DO JD=1,KDRAFT
+   DO JL=KIDIA,KFDIA
+      PZPLCL(JL,JD)  = -100._JPRB  ! default value: -100 (no LCL)
+      PZPTOP(JL,JD)  = 0._JPRB
+      KPLCL(JL,JD)   = 0           ! default value: 0 (no PBL cloud)
+      KPTOP(JL,JD)   = 0
+      KPLZB(JL,JD)   = 0
+      LLDONE(JL,JD)  = .TRUE.      ! default: TRUE (don't launch the parcel)
+      ZFRACB(JL,JD)  = 0._JPRB
+      PFRACB(JL,JD)  = 0._JPRB
+      ZFACEXC(JL,JD) = 0._JPRB
+      ZMFLXB(JL,JD)  = 0._JPRB
+      ZTVEXCSURF(JL,JD) = 0._JPRB
+   ENDDO
+ENDDO
+
+DO JK=0,KLEV
+   DO JL=KIDIA,KFDIA
+      ZCHICRIT(JL,JK) = 0._JPRB
+   ENDDO
+ENDDO
+
+!--- parcel half level parameters ---
+DO JD=1,KDRAFT
+   DO JK=0,KLEV
+      DO JL=KIDIA,KFDIA
+         PUUH(JL,JK,JD)    = 0.0_JPRB
+         PVUH(JL,JK,JD)    = 0.0_JPRB
+         PSLGUH(JL,JK,JD)  = 0.0_JPRB
+         PQTUH(JL,JK,JD)   = 0.0_JPRB
+         PTHTVUH(JL,JK,JD) = 0.0_JPRB
+         PMFLX(JL,JK,JD)   = 0.0_JPRB
+         ZTUH(JL,JK,JD)    = 0.0_JPRB
+         ZQUH(JL,JK,JD)    = 0.0_JPRB
+         ZQCUH(JL,JK,JD)   = 0.0_JPRB
+         ZEPS(JL,JK,JD)    = 0.0_JPRB
+         ZDETR(JL,JK,JD)   = 0.0_JPRB
+         ZWU2H(JL,JK,JD)   = 0.0_JPRB
+         ZFRAC(JL,JK,JD)   = 0.0_JPRB
+         ZUPFLXL(JL,JK,JD) = 0.0_JPRB
+         ZUPFLXN(JL,JK,JD) = 0.0_JPRB
+         ZVARQ(JL,JK)       = 0.0_JPRB
+         ZENCASC(JL,JK) =0.0_JPRB
+      ENDDO
+   ENDDO
+ENDDO
+
+!--- parcel full level parameters ---
+DO JD=1,KDRAFT
+   DO JK=1,KLEV
+      DO JL=KIDIA,KFDIA
+         ZBUOF(JL,JK,JD)    = 0.0_JPRB
+         ZUPGENL(JL,JK,JD)  = 0.0_JPRB
+         ZUPGENN(JL,JK,JD)  = 0.0_JPRB
+      ENDDO
+   ENDDO
+ENDDO
+
+! Setup SPP patterns 
+IF (YSPP_CLDDPTH%LPERT) THEN
+  CALL APPLY_SPP(YSPP_CLDDPTH, &
+               & KLON,KIDIA,KFDIA, &
+               & ZCLDDEPTH,ZFRMIN(:,1))
+ELSE
+  DO JL=KIDIA,KFDIA
+    ZFRMIN(JL,1) = ZCLDDEPTH
+  ENDDO
+ENDIF
+
+IF (YSPP_CLDDPTHDP%LPERT) THEN
+  CALL APPLY_SPP(YSPP_CLDDPTHDP, &
+               & KLON,KIDIA,KFDIA, &
+               & ZCLDDEPTHDP,ZFRMIN(:,2))
+ELSE
+  DO JL=KIDIA,KFDIA
+    ZFRMIN(JL,2) = ZCLDDEPTHDP
+  ENDDO
+ENDIF
+
+
+
+!     -----------------------------------------------------------------
+
+!*         2.     PREPARE FIELDS ON HALF LEVELS BY LINEAR INTERPOLATION
+!*                OF CONSERVED VARIABLES
+!                 -----------------------------------------------------
+
+!*         2.1  full level cpm, slg, qt and Tv
+!*
+
+DO JK=1,KLEV
+   DO JL=KIDIA,KFDIA
+      ZSLGM1(JL,JK) = RCPD * PTM1(JL,JK) + PGEOM1(JL,JK)&
+           & - RLVTT * PLM1(JL,JK) - RLSTT * PIM1(JL,JK)
+      ZQTM1 (JL,JK) = PQM1(JL,JK) + PLM1(JL,JK) + PIM1(JL,JK)
+
+      !          parcel goes through cloud portion of environment
+      !          (added ql loading; ql,cld=ql,mean/fc; qv = qsat)
+      !          safety: fc>0.1; linear interpolation between overcast
+      !                  and cloudy portion for 0<fc<0.1
+      !                  guaranteed to be < tv from mean conditions
+
+      !          grid box mean virtual effect
+      ZTVMEAN       = PTM1(JL,JK) * ( 1.0_JPRB + RETV * PQM1(JL,JK)&
+           & - PLM1(JL,JK) - PIM1(JL,JK) )       !qli loading
+      ZTVEN(JL,JK) = ZTVMEAN
+      ZTHVEN(JL,JK) = ZTVEN(JL,JK) / PEXNF(JL,JK) !( PAPM1(JL,JK)/RATM )**(-RD/RCPD) * ZTVEN(JL,JK)
+   ENDDO
+ENDDO
+
+
+!*         2.2  half-level environment interpolation (qt, ql, qi, slg)
+!*              attention:  not good to interpolate everything independently
+!*              better:     interpolate conserved variables and derive rest!!!
+!*
+
+DO JK=1,KLEV-1
+   DO JL=KIDIA,KFDIA
+
+      IF (JK==1) THEN
+         ZGHM1 = PGEOH(JL,JK) + 50000._JPRB*RG   !avoid using top half level (=inf)
+      ELSE
+         ZGHM1 = PGEOH(JL,JK-1)
+      ENDIF
+
+      ZQTENH(JL,JK) = ( ZQTM1(JL,JK+1) *(ZGHM1-PGEOH(JL,JK  )) &
+                  & +   ZQTM1(JL,JK)   *(PGEOH(JL,JK  )-PGEOH(JL,JK+1)) &
+                  &   )                /(ZGHM1-PGEOH(JL,JK+1))
+      ZQLENH(JL,JK) = ( PLM1(JL,JK+1)  *(ZGHM1-PGEOH(JL,JK  )) &
+                  & +   PLM1(JL,JK)    *(PGEOH(JL,JK  )-PGEOH(JL,JK+1)) &
+                  &   )                /(ZGHM1-PGEOH(JL,JK+1))
+      ZQIENH(JL,JK) = ( PIM1(JL,JK+1)  *(ZGHM1-PGEOH(JL,JK  )) &
+                  & +   PIM1(JL,JK)    *(PGEOH(JL,JK  )-PGEOH(JL,JK+1)) &
+                  &   )                /(ZGHM1-PGEOH(JL,JK+1))
+
+      ZQVENH(JL,JK) = ZQTENH(JL,JK) - ZQLENH(JL,JK) - ZQIENH(JL,JK)
+
+      ZSLGENH(JL,JK)= ( ZSLGM1(JL,JK+1)*(ZGHM1-PGEOH(JL,JK  )) &
+                  & +   ZSLGM1(JL,JK)  *(PGEOH(JL,JK  )-PGEOH(JL,JK+1)) &
+                  &   )                /(ZGHM1-PGEOH(JL,JK+1))
+      ZUENH(JL,JK)  = ( PUM1(JL,JK+1)  *(ZGHM1-PGEOH(JL,JK  )) &
+                  & +   PUM1(JL,JK)    *(PGEOH(JL,JK  )-PGEOH(JL,JK+1)) &
+                  &   )                /(ZGHM1-PGEOH(JL,JK+1))
+      ZVENH(JL,JK)  = ( PVM1(JL,JK+1)  *(ZGHM1-PGEOH(JL,JK  )) &
+                  & +   PVM1(JL,JK)    *(PGEOH(JL,JK  )-PGEOH(JL,JK+1)) &
+                  &   )                /(ZGHM1-PGEOH(JL,JK+1))
+
+
+      !  Calculate T at half levels from sl, for later use in density calculations
+      ZTENH(JL,JK)  =  ( PTM1(JL,JK+1)  *(ZGHM1-PGEOH(JL,JK  )) &
+                   & +   PTM1(JL,JK)    *(PGEOH(JL,JK  )-PGEOH(JL,JK+1)) &
+                   &   )                /(ZGHM1-PGEOH(JL,JK+1))
+
+      !  Determine thetav environment
+      ZTHTENH(JL,JK) = (ZTENH(JL,JK)/PEXNH(JL,JK))
+      ZTHTVENH(JL,JK) = (ZTENH(JL,JK)/PEXNH(JL,JK)) &
+           &     * (1._JPRB + RETV * ZQVENH(JL,JK) &
+                                ! add qice correction
+           &      - ZQLENH(JL,JK) )
+
+      ! initialize updraft thetav for dry and moist updraft with environment values
+      PTHTVUH(JL,JK,1)=ZTHTVENH(JL,JK)
+      PTHTVUH(JL,JK,2)=ZTHTVENH(JL,JK)
+      PTHTVUH(JL,JK,3)=ZTHTVENH(JL,JK)
+      PQTUH(JL,JK,1)=ZQTENH(JL,JK)
+      PQTUH(JL,JK,2)=ZQTENH(JL,JK)
+      PQTUH(JL,JK,3)=ZQTENH(JL,JK)
+      PUUH(JL,JK,1)=ZUENH(JL,JK)
+      PUUH(JL,JK,2)=ZUENH(JL,JK)
+      PUUH(JL,JK,3)=ZUENH(JL,JK)
+      PVUH(JL,JK,1)=ZVENH(JL,JK)
+      PVUH(JL,JK,2)=ZVENH(JL,JK)
+      PVUH(JL,JK,3)=ZVENH(JL,JK)
+      PSLGUH(JL,JK,1)=ZSLGENH(JL,JK)
+      PSLGUH(JL,JK,2)=ZSLGENH(JL,JK)
+      PSLGUH(JL,JK,3)=ZSLGENH(JL,JK)
+
+
+      ZRHOH(JL,JK) = PAPHM1(JL,JK)/(RD*ZTENH(JL,JK))
+
+   ENDDO
+ENDDO
+
+!
+!  Initialization lowest updraft level with environment like values
+!
+DO JD=1,KDRAFT
+   DO JL=KIDIA,KFDIA
+      PUUH(JL,KLEV,JD)  = PUUH(JL,KLEV-1,JD)
+      PVUH(JL,KLEV,JD)  =  PVUH(JL,KLEV-1,JD)
+      PSLGUH(JL,KLEV,JD)= PSLGUH(JL,KLEV-1,JD)
+      PQTUH(JL,KLEV,JD) = PQTUH(JL,KLEV-1,JD)
+      PTHTVUH(JL,KLEV,JD) =  PTHTVUH(JL,KLEV-1,JD)
+   ENDDO
+ENDDO
+
+
+
+!     -----------------------------------------------------------------
+!*         3.     RELEASE THE FIRST (TEST) UPDRAFT TO GET PBL HEIGHTS
+
+
+!* set updraft index to 1
+JD = 1
+
+DO JL=KIDIA,KFDIA
+
+   ZFRACB(JL,JD) = ZFRACMAX  !CGL replaced ZFRACB(JL,JD) = ZFRACTEST
+
+   !* 3.1    Determine stability of BL using the surface buoyancy flux
+
+   ZKHVFL(JL)  = ( 1.0_JPRB + RETV *  ZQTM1(JL,KLEV) ) * PKHFL(JL) +&
+        & ( RETV * ZSLGM1(JL,KLEV) / RCPD )     * PKQFL(JL)
+
+   IF ( ZKHVFL(JL) >= 0.0_JPRB ) THEN
+
+      ! stable BL (no updrafts expected/needed)
+      KPBLTYPE(JL)  = 0
+
+   ELSE
+
+      LLDONE(JL,JD) = .FALSE.  !confirm launch
+
+      !* 3.2    Sigma-w-L60 (ignore 1-z/zi term)
+
+      ZUSTAR  (JL)  = MAX( SQRT(PKMFL(JL)), ZREPUST )      ! u* (repust=10e-4
+
+      ZWSIGMA(JL)      = 1.2_JPRB&
+           & * ( ZUSTAR(JL)**3&
+           & - 1.5_JPRB * RKAP * ZKHVFL(JL) * (PGEOH(JL,KLEV-1)-PGEOH(JL,KLEV))&
+           &  / PTM1(JL,KLEV-1)&
+           & ) ** ( 1.0_JPRB/3._JPRB )                         ! Kolmogorov 1/3-power
+
+
+
+      !* 3.3    Initialize updraft
+
+      !get the constant associated with the top ZFRACTEST % of the PDF
+      ZFACEXC(JL,1) = ZFACTESTEXC
+      !calculate the initial excess values
+      ZWU2H(JL,KLEV-1,JD) = ( ZFACEXC(JL,1) * ZWSIGMA(JL) )**2
+      ZTEXC               = - ZFACEXC(JL,1) * PKHFL(JL) / ZWSIGMA(JL)
+      ZQEXC               = - ZFACEXC(JL,1) * PKQFL(JL) / ZWSIGMA(JL)
+      ZTEXC            = MAX(ZTEXC, 0.0_JPRB)
+      ZQEXC            = MAX(ZQEXC, 0.0_JPRB)
+      PQTUH(JL,KLEV-1,JD) = ZQTENH(JL,KLEV-1) + ZQEXC
+      ZQCUH(JL,KLEV-1,JD) = ZQLENH(JL,KLEV-1) + ZQIENH(JL,KLEV-1)
+      ZQUH (JL,KLEV-1,JD) = PQTUH(JL,KLEV-1,JD)  - ZQCUH(JL,KLEV-1,JD)
+      PSLGUH(JL,KLEV-1,JD)= ZSLGENH(JL,KLEV-1) + RCPD * ZTEXC
+      ZTUH (JL,KLEV-1,JD) = ( PSLGUH (JL,KLEV-1,JD) - PGEOH(JL,KLEV-1)&
+           & + RLVTT*ZQLENH(JL,KLEV-1) + RLSTT*ZQIENH(JL,KLEV-1)&
+           & ) / RCPD
+      PUUH(JL,KLEV-1,JD)= ZUENH(JL,KLEV-1)
+      PVUH(JL,KLEV-1,JD)= ZVENH(JL,KLEV-1)
+
+   ENDIF
+ENDDO !JL
+
+
+!* 3.4   Release the test updraft #1
+!*          - Mainly used to get a first guess of the heights of cloud base & inversion,
+!*            and to determine PBL type accordingly.
+
+ZTAUEPS(:) = 400._JPRB
+
+!
+CALL VDFPARCELHL(YDEPHLI,YDPARAR,KIDIA,KFDIA,KLON,KLEV,KDRAFT,PGEOH,PGEOM1,PAPHM1,PUM1,PVM1,ZQTM1,ZSLGM1,ZTVEN,PUUH,PVUH,&
+ & PSLGUH,PQTUH,ZWU2H,ZQCUH,ZBUOF,ZQUH,ZTUH,ZEPS,PZPLCL,KPLCL,PZPTOP,KPTOP,KPLZB,JD,ZUPGENL,ZUPGENN,ZTAUEPS,ZW2THRESH,LLDONE,KPBLTYPE)
+
+
+
+!     -----------------------------------------------------------------
+!*         4.     CLASSIFICATION OF THE CONVECTIVE PBL
+!                 ------------------------------------
+
+
+!* 4.1    Classify the convective PBL
+!*
+
+
+DO JL=KIDIA,KFDIA
+   IF ( KPBLTYPE(JL)/=0 ) THEN
+
+      !CGL loose criterium by 100 m
+      IF ( PZPLCL(JL,1) > (PZPTOP(JL,1)+100._JPRB) .OR. KPLCL(JL,1) == 0 ) THEN
+
+         !dry convective PBL
+         KPBLTYPE(JL)  = 1                   !dry convective PBL
+         ZDZCLOUD(JL)  = 0.0_JPRB            !cloud thickness
+
+      ELSE
+
+         !moist convective PBL
+         ZDZCLOUD(JL)  = PZPTOP(JL,1) - PZPLCL(JL,1) !cloud thickness
+         IF (ZDZCLOUD(JL)>ZFRMIN(JL,2)) THEN
+
+            !deep convection
+            KPBLTYPE(JL) = 4
+         ELSE
+
+!wc no special stratocumulus regime anymore
+!           KPBLTYPE(JL) = 2   !set the type to stratocumulus for the moment
+            KPBLTYPE(JL) = 3   !set the type to stratocumulus for the moment
+
+         ENDIF
+
+      ENDIF
+
+   ENDIF !KPBLTYPE /=0
+ENDDO !JL
+
+
+
+!wc no special stratocumulus regime anymore
+!* 4.2    Check the stratocumulus/shallow cumulus criterion (trigger function)
+!*        If shallow cumulus is diagnosed, KPBLTYPE will be set to 3
+!*
+!CALL VDFSTCUCRITHL ( KIDIA , KFDIA  , KLON  , KLEV , KDRAFT ,&
+!     &    PTM1  , ZSLGM1 , ZQTM1 , PAPM1 ,&
+!     &    ZSTABTHRESH, ZCLDDEPTH, ZBIRTHRESH, ZDZCLOUD,&
+!     &    KPTOP , KPBLTYPE, LDNODECP)
+
+
+!     -----------------------------------------------------------------
+
+!*         5.     CLOSURE FOR ORGANIZED UPDRAFTS (JD=2,3)
+!                 ---------------------------------------
+
+
+!* 5.1    Determine some mixed layer scalings
+!*
+
+DO JL=KIDIA,KFDIA
+
+   IF ( KPBLTYPE(JL)/=0 ) THEN    !don't do this for stable PBL
+
+      SELECT CASE (KPBLTYPE(JL))
+
+      CASE(1)
+         !Dry convective PBL - Inversion height
+         ZZI(JL)   = PZPTOP(JL,1)
+
+      CASE(2)
+         !Stratocumulus - Inversion height
+         !CAUTION: During decoupling in the intermediate regime (e.g. ASTEX/ATEX) the
+         !   relevant ML scaling height changes from PBL inversion to level of minimum
+         !   buoyancy flux. In the current setup this is not modelled yet!
+         ZZI(JL)   = PZPTOP(JL,1)
+
+      CASE(3)
+         !Shallow cumulus - Level of minimum buoyancy flux
+         !Assume that the moist updraft LCL is very close to this level
+         ZZI(JL)   = PZPLCL(JL,1)
+
+      CASE(4)
+         !Deep cumulus - Only do a dry parcel up to cloud base
+         ZZI(JL)   = PZPLCL(JL,1)
+
+      END SELECT
+
+      !--- Mixed layer convective velocity scale ---
+      ZWSTAR(JL) = ( -ZKHVFL(JL) * RG * ZZI(JL) / ZTHVEN(JL,KLEV)  ) ** (1._JPRB/3._JPRB)
+      ! CGL for the moment revert back to old constant time scale
+      ZTAUEPS(JL) = 400._JPRB
+
+
+   ENDIF
+
+ENDDO
+
+
+!* 5.3    Closure of updraft area fractions (JD=2,3)
+!*
+
+DO JL=KIDIA,KFDIA
+
+   IF ( KPBLTYPE(JL)/=0 ) THEN    !don't do this for stable PBL
+
+      SELECT CASE (KPBLTYPE(JL))
+
+        CASE(1)
+          !Dry convective PBL
+          ZFRACB(JL,3) = 0._JPRB
+          ZFRACB(JL,2) = ZFRACMAX - ZFRACB(JL,3)
+          !          ZFRACB(JL,2) = ZFRACB(JL,2)*(1.-EXP(-ZZI(JL)/400._JPRB))
+        CASE(2)
+          !Stratocumulus
+          ZFRACB(JL,3) = 0.1_JPRB
+          ZFRACB(JL,2) = ZFRACMAX - ZFRACB(JL,3)
+        CASE(3)
+          !Shallow cumulus
+          ZFRACB(JL,3)  = 0.03_JPRB
+          ZFRACB(JL,2) = ZFRACMAX - ZFRACB(JL,3)
+          !          ZFRACB(JL,2) = ZFRACB(JL,2)*(1.-EXP(-ZZI(JL)/400._JPRB) )
+
+        CASE(4)
+          !Deep cumulus
+          ZFRACB(JL,3) = 0._JPRB
+          ZFRACB(JL,2) = ZFRACMAX - ZFRACB(JL,3)
+
+      END SELECT !KPBLTYPE
+
+
+   ENDIF !KPBLTYPE /=0
+
+ENDDO !JL
+
+
+
+!     -----------------------------------------------------------------
+
+!*         6.     CALCULATE VERTICAL PROFILES OF ALL UPDRAFTS (JD=2,3)
+!                 ----------------------------------------------------
+
+
+!*       6.1    Calculate the scaling factors of the updraft excess with the surface joint PDFs
+!*
+DO JD = 2,KDRAFT
+   DO JL=KIDIA,KFDIA
+
+      IF ( KPBLTYPE(JL)/=0 .AND. ZFRACB(JL,JD)>0._JPRB ) THEN
+
+         !-- Get the PDF scaling factor --
+         SELECT CASE (JD)
+
+         CASE(2)
+            !lower part of top ZFRACMAX %
+            ZDUMFRAC = ZFRACMAX - ZFRACB(JL,2)
+            CALL VDFPDFTABLEHL(ZDUMFRAC , ZFACEXC(JL,2), ZDUMR, ZDUMR, 0)
+            ZFACEXC(JL,2) = ( ZFRACMAX * ZFACMAXEXC - ZDUMFRAC * ZFACEXC(JL,2) ) / ZFRACB(JL,2)
+         CASE(3)
+            !upper part of top ZFRACMAX %
+            ZDUMFRAC = ZFRACB(JL,JD)
+            CALL VDFPDFTABLEHL(ZDUMFRAC , ZFACEXC(JL,3), ZDUMR, ZDUMR, 0)
+
+         END SELECT
+
+      ENDIF !KPBLTYPE & ZFRACB
+
+   ENDDO !JL
+ENDDO !JD
+
+
+!*       6.2    Vertical integration of dry & moist updraft budgets (JD=2,3)
+!*
+DO JD = 2,KDRAFT
+
+   !-- Initialize updraft --
+   DO JL=KIDIA,KFDIA
+
+      IF ( KPBLTYPE(JL)/=0 .AND. ZFRACB(JL,JD)>0._JPRB ) THEN
+
+         LLDONE(JL,JD) = .FALSE. !confirm launch
+
+         ZTEXC            = - ZFACEXC(JL,JD) * PKHFL(JL) / ZWSIGMA(JL)
+         ZQEXC            = - ZFACEXC(JL,JD) * PKQFL(JL) / ZWSIGMA(JL)
+
+         ZWU2H(JL,KLEV-1,JD) = (ZWSIGMA(JL))**2
+
+         ZTEXC            = MAX(ZTEXC, 0.0_JPRB)
+         ZQEXC            = MAX(ZQEXC, 0.0_JPRB)
+
+         ! cgl thv excess surface ; used to correct buoyancy flux
+         ZTVEXCSURF(JL,JD) = ZTEXC + RETV*(ZQEXC*PTM1(JL,KLEV-1) + ZQTENH(JL,KLEV-1)*ZTEXC)
+
+         PQTUH(JL,KLEV-1,JD) = ZQTENH(JL,KLEV-1) + ZQEXC
+         ZQCUH(JL,KLEV-1,JD) = ZQLENH(JL,KLEV-1) + ZQIENH(JL,KLEV-1)
+         ZQUH (JL,KLEV-1,JD) = PQTUH(JL,KLEV-1,JD)  - ZQCUH(JL,KLEV-1,JD)
+         PSLGUH(JL,KLEV-1,JD)= ZSLGENH(JL,KLEV-1) + RCPD * ZTEXC
+         ZTUH (JL,KLEV-1,JD) = ( PSLGUH (JL,KLEV-1,JD) - PGEOH(JL,KLEV-1) &
+              & + RLVTT*ZQLENH(JL,KLEV-1) + RLSTT*ZQIENH(JL,KLEV-1) &
+              & ) / RCPD
+         PUUH(JL,KLEV-1,JD)= ZUENH(JL,KLEV-1)
+         PVUH(JL,KLEV-1,JD)= ZVENH(JL,KLEV-1)
+
+      ENDIF !KPBLTYPE & ZFRACB
+
+   ENDDO !JL
+
+
+   !-- Release the updraft --
+
+   CALL VDFPARCELHL(YDEPHLI,YDPARAR,KIDIA,KFDIA,KLON,KLEV,KDRAFT,PGEOH,PGEOM1,PAPHM1,PUM1,PVM1,ZQTM1,ZSLGM1,ZTVEN,PUUH, &
+     & PVUH,PSLGUH,PQTUH,ZWU2H,ZQCUH,ZBUOF,ZQUH,ZTUH,ZEPS,PZPLCL,KPLCL,PZPTOP,KPTOP,KPLZB,JD,ZUPGENL,ZUPGENN,ZTAUEPS,ZW2THRESH, &
+     & LLDONE,KPBLTYPE)
+
+
+ENDDO !JD
+
+
+!*        6.3. In case no lcl is found in final updraft calculation, do some resque
+!*
+!*
+! CGL      made an adjustment in vdfparcel to initialize pzplcl = -100
+
+DO JL=KIDIA,KFDIA
+
+   IF ( KPBLTYPE(JL)==2 .OR. KPBLTYPE(JL)==3) THEN
+
+      IF (  PZPLCL(JL,3) < 0._JPRB .OR. KPLCL(JL,3)<KPTOP(JL,3) &
+      &.OR. KPLCL(JL,3)==0  .OR. KPTOP(JL,3)==0 ) THEN
+         KPBLTYPE(JL) = 1
+         ZFRACB(JL,2) = ZFRACMAX
+         ZFRACB(JL,3) = 0._JPRB
+         KPLCL(JL,3) = 0
+      ENDIF
+
+   ENDIF
+
+ENDDO !JL
+
+!*        6.5  Updraft precipitation fluxes (rain and snow)
+!*
+DO JD = 3,KDRAFT  !moist updrafts only
+
+   DO JK=2,KLEV
+      DO JL=KIDIA,KFDIA
+
+         ZDZRHO = ZRG * ( PAPHM1(JL,JK)-PAPHM1(JL,JK-1) )
+
+         !-- Add precip generation to flux [kg /m2 /s: tendency * layer depth * air density] --
+         ZUPFLXL(JL,JK,JD) = ZUPFLXL(JL,JK-1,JD) + ZUPGENL(JL,JK,JD) * ZDZRHO
+         ZUPFLXN(JL,JK,JD) = ZUPFLXN(JL,JK-1,JD) + ZUPGENN(JL,JK,JD) * ZDZRHO
+
+         !-- Do some melting at freezing level (snow->rain) --
+         IF (ZUPFLXN(JL,JK,JD)>0._JPRB .AND. PTM1(JL,JK) > RTT) THEN
+!wc
+!   No melting and evaporation in the convection scheme in case LTOTPREC=TRUE
+!   because this will be done inside microphysics
+          IF (LTOTPREC) THEN
+            ZUPMELT = 0._JPRB
+          ELSE
+            ZUPMELT = (1.0_JPRB+0.5_JPRB*(PTM1(JL,JK)-RTT)) * &
+                 & (PTM1(JL,JK)-RTT) * RCPD/(RLMLT*RTAUMEL) * ZDZRHO
+            ZUPMELT = MIN(ZUPFLXN(JL,JK,JD),ZUPMELT)
+          ENDIF
+            ZUPFLXL(JL,JK,JD) = ZUPFLXL(JL,JK,JD) + ZUPMELT
+            ZUPFLXN(JL,JK,JD) = ZUPFLXN(JL,JK,JD) - ZUPMELT
+         ENDIF
+
+         ZPFLXTOT = ZUPFLXL(JL,JK,JD) + ZUPFLXN(JL,JK,JD)
+
+         IF (ZPFLXTOT>0._JPRB) THEN
+
+            !-- Saturation deficit of mean state T -
+            ZESW=ESATW(PTM1(JL,JK))
+            ZESI=ESATI(PTM1(JL,JK))
+            ZFAC = ZUPFLXL(JL,JK,JD) / ZPFLXTOT
+            ZES = ZESW*ZFAC + ZESI*(1._JPRB-ZFAC) ! Weigting according to precititation type
+            ZQSAT = 0.62198_JPRB*ZES/(MAX(ZES,PAPM1(JL,JK))-0.37802_JPRB*ZES)
+          ! Above boiling point for PAPHM1(JL,JK) < ZES --> no condensation. May happen in stratosphere, ZQSATU becomes 1.
+            ZSATDEF=ZQSAT-PQM1(JL,JK) ! Also allow deposition = negative values
+
+            !-- Precip evaporation tendency [kg/kg /s] (Kessler 1969, Tiedtke 1993) --
+!wc
+!   No melting and evaporation in the convection scheme in case LTOTPREC=TRUE
+!   because this will be done inside microphysics
+            IF (LTOTPREC) THEN
+               ZPEVAPUP = 0._JPRB
+            ELSE
+               ZPEVAPUP = 0.001_JPRB * ZSATDEF * ( &             !cy32r1
+                    & ( ZPFLXTOT / 0.00509_JPRB ) * &
+                    & ( PAPM1(JL,JK)/PAPHM1(JL,KLEV) )**0.5_JPRB &
+                    & )**0.5777_JPRB
+
+            ENDIF
+            !-- Back-partition evaporation and substract from fluxes --
+            ZUPFLXL(JL,JK,JD) = ZUPFLXL(JL,JK,JD) - ZPEVAPUP * ZDZRHO * ZFAC
+            ZUPFLXN(JL,JK,JD) = ZUPFLXN(JL,JK,JD) - ZPEVAPUP * ZDZRHO * (1._JPRB - ZFAC)
+            ZUPFLXL(JL,JK,JD) = MAX(0._JPRB,ZUPFLXL(JL,JK,JD))
+            ZUPFLXN(JL,JK,JD) = MAX(0._JPRB,ZUPFLXN(JL,JK,JD))
+         ENDIF
+
+      ENDDO
+   ENDDO
+
+   !Add contribution to total flux - weight by updraft area fraction
+   !(or weighted by the mean cloud fraction in the cloud layer
+   ! in case of LTOTPREC = TRUE.)
+
+   IF (LTOTPREC .AND. (.NOT.LTOTPRECL)) THEN
+
+      !compute mean cloud-fraction in the convective cloud layer:
+
+      DO JL=KIDIA,KFDIA
+         PCLFR(JL)=0._JPRB
+      ENDDO
+
+      DO JL=KIDIA,KFDIA
+         ZB1(JL)=0.0_JPRB
+         ZCOUNT(JL)=0.0_JPRB
+         ITOP=KPTOP(JL,3)
+         IBASE=KPLCL(JL,3)
+         IF (ITOP > 0 .AND. IBASE > 0) THEN
+            DO JK=ITOP,IBASE
+               ZB1(JL)=ZB1(JL)+PAM1(JL,JK)
+               ZCOUNT(JL)=ZCOUNT(JL)+1._JPRB
+            ENDDO
+         ENDIF
+      ENDDO
+
+      DO JL=KIDIA,KFDIA
+         IF (ZB1(JL) > 0.0_JPRB .AND. ZCOUNT(JL) > 0.0_JPRB) THEN
+            PCLFR(JL)=ZB1(JL)/ZCOUNT(JL)
+         ENDIF
+      ENDDO
+
+      DO JK=0,KLEV
+         DO JL=KIDIA,KFDIA
+            PFPLVL(JL,JK) = PFPLVL(JL,JK) + PCLFR(JL) * ZUPFLXL(JL,JK,JD)
+            PFPLVN(JL,JK) = PFPLVN(JL,JK) + PCLFR(JL) * ZUPFLXN(JL,JK,JD)
+         ENDDO
+      ENDDO
+
+   ELSE
+      DO JK=0,KLEV
+         DO JL=KIDIA,KFDIA
+            PFPLVL(JL,JK) = PFPLVL(JL,JK) + ZFRACB(JL,JD) * ZUPFLXL(JL,JK,JD)
+            PFPLVN(JL,JK) = PFPLVN(JL,JK) + ZFRACB(JL,JD) * ZUPFLXN(JL,JK,JD)
+         ENDDO
+      ENDDO
+   ENDIF
+
+ENDDO !JD
+
+
+
+!     -----------------------------------------------------------------
+
+!*         7.     CONSTRUCT MASS FLUX PROFILES (JD=2,3)
+!                 -------------------------------------
+
+
+!*         7.1  Determine the mixed layer scaling height for JD=2,3
+!*
+
+
+!*         7.2  Construct subcloud / mixed layer mass fluxes
+!*               - use constant area fraction, and multiply by parcel w
+!*
+DO JD = 2,KDRAFT
+
+   DO JK=KLEV-1,1,-1
+
+      DO JL=KIDIA,KFDIA
+
+         IF ( KPBLTYPE(JL)/=0 .AND. ZFRACB(JL,JD)>0._JPRB) THEN
+
+            ZWUH = ZWU2H(JL,JK,JD)**0.5_JPRB
+
+            PMFLX(JL,JK,JD)  = ZFRACB(JL,JD) * ZWUH * ZRHOH(JL,JK)
+
+            IF (JD == 3 .AND. JK >= KPLCL(JL,3) ) THEN
+               ! do only below LCL !!
+
+               PMFLX(JL,JK,JD)  = 0.35_JPRB * 0.1_JPRB * ZWSTAR(JL) *  &
+                    &         ZRHOH(JL,JK)*(PGEOH(JL,JK)-PGEOH(JL,KLEV))/ &
+                    &        (PGEOH(JL,KPLCL(JL,3))-PGEOH(JL,KLEV))
+
+               !CGL cloud depth correction, if cloud thin then limit
+               ZDZCLOUD(JL) = MAX(PGEOH(JL,KPTOP(JL,3))*ZRG-PGEOH(JL,KPLCL(JL,3))*ZRG,0._JPRB)
+               IF( ZDZCLOUD(JL)<400._JPRB ) THEN
+                  PMFLX(JL,JK,JD) = PMFLX(JL,JK,JD) * ZDZCLOUD(JL) / 400._JPRB
+               ENDIF
+
+            ENDIF
+
+            IF (ZWU2H(JL,JK,JD)>0._JPRB) THEN
+               ZFRAC(JL,JK,JD) = ZFRACB(JL,JD)
+            ELSE
+               ZFRAC(JL,JK,JD) = 0._JPRB
+            ENDIF
+
+         ENDIF
+
+      ENDDO !JL
+
+   ENDDO !JK
+
+ENDDO !JD
+
+
+! Do computation for Chi critical dpendency
+!First, determine chicritmean in lower half of the
+!                 cloud layer. chicritmean is used to determine
+!                 the fractional detrainment coefficient according
+!                 to De Rooy & Siebesma MWR 2008. In the upper
+!                 half of the cloud layer a linear decreasing
+!                 mass flux to 0 at cloud layer top is prescribed.
+
+DO JL=KIDIA,KFDIA
+
+   ! In between; determine thetavup of dry updraft (2)
+   ! This can be used for the thetav flux contribution to TKE
+
+   DO JK=KLEV-1,1,-1
+      IF (KPTOP(JL,2) <= JK .AND. KPBLTYPE(JL) > 0) THEN
+         PTHTVUH(JL,JK,2) = (ZTUH(JL,JK,2) / PEXNH(JL,JK))&
+              &  * (1._JPRB + RETV * ZQUH(JL,JK,2) )
+      ENDIF
+   ENDDO
+
+   IF (KPBLTYPE(JL) == 3   .OR. KPBLTYPE(JL) == 2 ) THEN
+
+      ZSTAR(JL) = ((PGEOH(JL,KPTOP(JL,3))-PGEOH(JL,KLEV))*ZRG+&
+      &            (PGEOH(JL,KPLCL(JL,3))-PGEOH(JL,KLEV))*ZRG)/2._JPRB
+      ZMINIMUM(JL) = 10000._JPRB
+      ZMEANCHICRIT(JL) = 0._JPRB
+
+      ! Find level half way the cloud layer
+
+      !CGL added security
+      IKSTAR(JL) = KPTOP(JL,3)
+
+      DO JK=KPLCL(JL,3),KPTOP(JL,3),-1
+
+
+         IF (ABS((PGEOH(JL,JK)-PGEOH(JL,KLEV))*ZRG - ZSTAR(JL)) < ZMINIMUM(JL)) THEN
+            ZMINIMUM(JL) = ABS((PGEOH(JL,JK)-PGEOH(JL,KLEV))*ZRG - ZSTAR(JL))
+            IKSTAR(JL) = JK
+         ENDIF
+
+
+         ! determine chicrit in cloud layer
+
+         ZTHTVENH(JL,JK) = (ZTENH(JL,JK) / PEXNH(JL,JK))&
+              &   * (1._JPRB + RETV * ZQVENH(JL,JK)&
+              ! add qice correction
+              &    - ZQLENH(JL,JK) -ZQIENH(JL,JK) )
+         ZTHTLUH(JL,JK) = (ZTUH(JL,JK,3) / PEXNH(JL,JK)) -&
+              & (ZLAT2CP/PEXNH(JL,JK)*ZQCUH(JL,JK,3))
+         !  N.B. ZQCUH is initialized with ql and qi from the environment!?!
+
+         ZTHTVUH(JL,JK) = (ZTUH(JL,JK,3)/ PEXNH(JL,JK))&
+              &  * (1._JPRB + RETV * ZQUH(JL,JK,3)&
+              &    - ZQCUH(JL,JK,3))
+         PTHTVUH(JL,JK,3)=ZTHTVUH(JL,JK)
+         ZTHTLEH(JL,JK) = (ZTENH(JL,JK) / PEXNH(JL,JK)) -&
+              & ZLAT2CP/ PEXNH(JL,JK)*&
+              & ZQLENH(JL,JK)
+         ZESW=ESATW(ZTUH(JL,JK,3))
+         ZESI=ESATI(ZTUH(JL,JK,3))
+         ZFAC = ZQIENH(JL,JK) / (ZQLENH(JL,JK) +ZQIENH(JL,JK) + 1.0E-20_JPRB) ! Weighting according to cloud condensate
+         ZES = ZESI*ZFAC + ZESW*(1._JPRB-ZFAC)
+         ZQSATU(JL,JK) = 0.62198_JPRB*ZES/(MAX(ZES,PAPHM1(JL,JK))-0.37802_JPRB*ZES)
+        ! Above boiling point for PAPHM1(JL,JK) < ZES --> no condensation. May happen in stratosphere, ZQSATU becomes 1.
+         ZDQSDTU(JL,JK) = ZEL2R * ZQSATU(JL,JK)/(ZTUH(JL,JK,3) * ZTUH(JL,JK,3))
+         ZGAMMA(JL,JK) = ZLAT2CP*ZDQSDTU(JL,JK)
+         ZDUMFUNC(JL,JK) = (1._JPRB/(1._JPRB+ZGAMMA(JL,JK)))*&
+              & ((ZQTENH(JL,JK)-PQTUH(JL,JK,3)) -&
+              &  PEXNH(JL,JK) * ZDQSDTU(JL,JK) *&
+              &  (ZTHTLEH(JL,JK) - ZTHTLUH(JL,JK)))
+         ZCHICRIT(JL,JK) = (ZTHTVENH(JL,JK)-ZTHTVUH(JL,JK))/&
+              & (ZTHTLUH(JL,JK)*(RETV*(ZQTENH(JL,JK) -&
+              & PQTUH(JL,JK,3)) -  (1._JPRB +RETV)*&
+              & ZDUMFUNC(JL,JK)) + (ZTHTLEH(JL,JK) -&
+              & ZTHTLUH(JL,JK)) * (1._JPRB + RETV*&
+              & PQTUH(JL,JK,3) - (1._JPRB + RETV)*&
+              & ZQCUH(JL,JK,3)) + ZLAT2CP/PEXNH(JL,JK)*&
+              &  ZDUMFUNC(JL,JK))
+
+         !CGL ; do some safety
+
+         ZCHICRIT(JL,JK) =  MIN(ZCHICRIT(JL,JK),1._JPRB)
+
+      ENDDO !JK
+
+      !   Calculate weighted mean chicrit over lower half cloud layer
+      !   Exclude cloud base level (see de Rooy & Siebesma MWR 2008)
+
+      IF (KPLCL(JL,3)-IKSTAR(JL) > 1) THEN
+         DO JK= KPLCL(JL,3)-1,IKSTAR(JL),-1
+            ZMEANCHICRIT(JL)=ZMEANCHICRIT(JL)+ZCHICRIT(JL,JK)*&
+                 & (PGEOM1(JL,JK)*ZRG-PGEOM1(JL,JK+1)*ZRG)
+         ENDDO
+         ZMEANCHICRIT(JL)=ZMEANCHICRIT(JL)/(PGEOM1(JL,IKSTAR(JL))*ZRG-&
+              &                             PGEOM1(JL,KPLCL(JL,3))*ZRG)
+
+         !   Fraction of mass flux that is left half way the cloud layer (ZFRACMB)
+         !   is determined using LES based relation between mean chicrit and ZFRACMB
+         !   Small adjustment to somewhat more active Mass flux profiles
+         !   Note that the parameterization counteracts changes in the relation, therefore
+         !   the ultimate differences are small
+
+         ZFRACMB(JL)=MAX(0.05_JPRB,5.24_JPRB*ZMEANCHICRIT(JL)-0.39_JPRB)
+         ZFRACMB(JL)=MIN(1.0_JPRB,ZFRACMB(JL))     !safety CGL
+
+
+         ! Determine (constant) detrainment coefficient
+         ! with new eps, detr should be adapted
+         ! However we can also use original detr formulation as long as we also
+         ! use eps=1/z in the mass flux calculation (the new eps is then only used
+         ! for the updraft dilution)
+         ZDETRSHALLOW(JL)=LOG(((PGEOH(JL,IKSTAR(JL))-PGEOH(JL,KLEV))*ZRG)/&
+              &  ((PGEOH(JL,KPLCL(JL,3))-PGEOH(JL,KLEV))*ZRG&
+              &   *ZFRACMB(JL)))/((PGEOH(JL,IKSTAR(JL))-PGEOH(JL,KLEV))*ZRG-&
+              &  (PGEOH(JL,KPLCL(JL,3))-PGEOH(JL,KLEV))*ZRG)
+      ELSE
+         !  only for very shallow (less that 2 layers) cloud layers
+         ZDETRSHALLOW(JL)=0.00275_JPRB
+         ! the lower assignement only has a meaning if used in combination with
+         ! extremely thin clouds
+         ZFRACMB(JL)=0.3_JPRB
+      ENDIF
+
+   ENDIF ! KPBLTYPE=3
+
+ENDDO !JL
+
+
+! end computation by for chicritical
+
+
+!*         7.3  Construct cloudy mass flux profile (JD=3 only)
+!*
+
+
+DO JK=KLEV-2,1,-1
+
+   DO JL=KIDIA,KFDIA
+
+      IF ( KPBLTYPE(JL)/=0 .AND. KPBLTYPE(JL)/=4 .AND. ZFRACB(JL,3)> 0._JPRB ) THEN
+
+         IF (JK>=KPTOP(JL,3) .AND. JK<KPLCL(JL,3)) THEN
+
+            ZWUH = ZWU2H(JL,JK,3)**0.5_JPRB
+
+            !  Cloud layer vertical structure
+
+            ! ZDELTAMINEPS should be named ZEPSMINDELTA
+
+            IF (JK+1 >= IKSTAR(JL)) THEN !lower half cloud layer
+
+               ! With changed eps formulation change zdeltamineps also
+
+               ZDELTAMINEPS(JL,JK+1) = RG/(PGEOH(JL,JK+1)-PGEOH(JL,KLEV))-ZDETRSHALLOW(JL)
+
+            ELSE !upper half cloud layer
+               ZDELTAMINEPS(JL,JK+1) = -1._JPRB/(PGEOH(JL,KPTOP(JL,3))*ZRG -&
+                    &  PGEOH(JL,JK+1)*ZRG)
+            ENDIF
+
+            ZDZ          = (PGEOH(JL,JK) - PGEOH(JL,JK+1))*ZRG
+
+            PMFLX(JL,JK,3) = PMFLX(JL,JK+1,3) * EXP( ZDZ * ( ZDELTAMINEPS(JL,JK+1) ) ) !exact
+
+            ! make a guess at area fraction;
+
+            ZWUH = ZWU2H(JL,JK,3)**0.5_JPRB
+            ZFRAC(JL,JK,3) = PMFLX(JL,JK,3) / ( ZWUH * ZRHOH(JL,JK) )
+
+         ENDIF
+
+      ENDIF
+
+   ENDDO !JL
+
+ENDDO !JK
+
+
+
+!*        7.4  Compute some fluxes used in the qt-variance budget in VDFMAIN.
+!*
+
+!*        7.5  Mass flux limit according to CFL criterion
+!*              (reduce M profiles uniformly by maximum excess)
+!*
+ZCONS10 = 1.0_JPRB/(RG*PTMST)
+DO JD = 2,KDRAFT
+   DO JL=KIDIA,KFDIA
+      ZMFS(JL,JD) = 1.0_JPRB  ! mass flux scaling value (reduction)
+   ENDDO
+ENDDO
+
+DO JD = 2,KDRAFT
+   DO JK=1,KLEV-1
+      DO JL=KIDIA,KFDIA
+         IF ( JK >= KPTOP(JL,JD) .AND. KPTOP(JL,JD)>0) THEN
+            ZMFMAX = (PAPM1(JL,JK+1)-PAPM1(JL,JK)) * ZCONS10
+            IF ( PMFLX(JL,JK,JD) > ZMFMAX ) THEN
+               ZMFS(JL,JD) = MIN(ZMFS(JL,JD),ZMFMAX/PMFLX(JL,JK,JD))
+            ENDIF
+         ENDIF
+      ENDDO
+   ENDDO
+ENDDO
+
+DO JD = 2,KDRAFT
+   DO JK=1,KLEV
+      DO JL=KIDIA,KFDIA
+         PMFLX(JL,JK,JD) = PMFLX(JL,JK,JD)*ZMFS(JL,JD)
+      ENDDO
+   ENDDO
+ENDDO
+
+
+
+
+!     -----------------------------------------------------------------
+
+!*         8.     W-SCALE USED IN CLOUD VARIANCE DISSIPATION (VDFMAIN)
+!                 ----------------------------------------------------
+
+
+!CGL fill this array at the end
+PFRACB = ZFRACB
+
+
+! ----------------------------------------------------
+!
+!       9. OUTPUT TO BE USED IN VDFEXCU now called from this routine
+!          to calculate length scale according to Geert Lenderink
+!   if LHARATU=true
+!   Call vdfexcuhl to calculate length scales and TKE for use in Harmonie
+
+IF (LHARATU) THEN
+
+   PBUOY_COR (:,:) = 0.0_JPRB
+   PWU       (:,:) = 0.0_JPRB
+   DO JL=KIDIA,KFDIA
+
+      DO JK=1,KLEV-1
+         PWU (JL,JK) = (MAX( ZWU2H(JL,JK,2),0._JPRB ))**0.5_JPRB
+         IF (ZWSTAR(JL)*PZPTOP(JL,2).GT.0._JPRB) THEN
+            ! PBUOY_COR (JL,JK) =  ZFRAC(JL,JK,2)* ZWU2H(JL,JK,2)**(1._JPRB/2._JPRB) / ZWSTAR(JL) / PZPTOP(JL,2)
+            TVEXCSURF = MAX(ZTVEXCSURF(JL,2),0.0_JPRB)
+            PBUOY_COR (JL,JK) = TVEXCSURF*PWU(JL,JK)&
+            &/ ZWSTAR(JL) / PZPTOP(JL,2) * RG / PTM1(JL,KLEV)
+         ENDIF
+      ENDDO
+   ENDDO
+
+   DO JK=1,KLEV
+      JKM=MIN(JK,KLEV-1)
+      DO JL=KIDIA,KFDIA
+         !          dqsat/dT correction factor (1+L/cp*dqsat/dT) & alfa
+         ZESW = ESATW(PTM1(JL,JK))
+         ZESI = ESATI(PTM1(JL,JK))
+         ZFAC = ZQIENH(JL,JKM) / (ZQLENH(JL,JKM) +ZQIENH(JL,JKM) + 1.0E-20_JPRB) ! Weighting according to cloudcondensate
+         ZES = ZESI*ZFAC + ZESW*(1._JPRB-ZFAC)
+         ZE2R = ZEI2R*ZFAC + ZEL2R*(1._JPRB-ZFAC)
+         ZQSVAR(JL,JK) = 0.62198_JPRB*ZES/(MAX(ZES,PAPM1(JL,JK))-0.37802_JPRB*ZES)
+         ! Above boiling point for PAPHM1(JL,JK) < ZES --> no condensation. May happen in stratosphere, ZQSATU becomes 1.
+         ZDQSDTEMP(JL,JK) = ZE2R*ZQSVAR(JL,JK)/PTM1(JL,JK)/PTM1(JL,JK) !dqsat/dT
+         !      write (913,'(i5,10f14.5)') jk, ZFAC,  ZCOR, ZDQSDTEMP(JL,JK),  ZDQSDTEMP(JL,JK)/ZQSVAR(JL,JK)
+      ENDDO
+   ENDDO
+   DO JL=KIDIA,KFDIA
+      DO JK=1,KLEV-1
+
+!wc
+!   energy cascade:   Two contributions: 1) subplume turbulence: related to eps
+!                                        2) environmental turbulence: related to decrease M (detr)
+!
+
+         IF (KPBLTYPE(JL) == 3  .AND. (KPLCL(JL,3)-KPTOP(JL,3)) > 2) THEN
+            ZFACCASC(JL,JK) = ZEL*(((PGEOH(JL,JK)-PGEOH(JL,KLEV))*ZRG)/((PGEOH(JL,KPLCL(JL,3))-PGEOH(JL,KLEV))*ZRG))* &
+             & (1._JPRB/(1._JPRB+(((PGEOH(JL,JK)-PGEOH(JL,KPLCL(JL,3)))*ZRG)/ZWL)**2._JPRB))+ &
+             & ZET*(1._JPRB/(1._JPRB+(((PGEOH(JL,JK)-PGEOH(JL,KPTOP(JL,3)))*ZRG)/ZWT)**2._JPRB))
+            ZFACCASC(JL,JK) = MAX(0._JPRB,(MIN(ZFACCASC(JL,JK),0.01_JPRB)))
+         ELSE
+            ZFACCASC(JL,JK) = 0.002_JPRB
+         ENDIF
+
+         ZENCASC(JL,JK) = 0.5_JPRB*ZEPS(JL,JK,2)*ZWU2H(JL,JK,2)*PMFLX(JL,JK,2) + &
+          & ZFACCASC(JL,JK)*ZWU2H(JL,JK,3)*PMFLX(JL,JK,3)
+
+      ENDDO
+   ENDDO
+   !
+   !   if LHARATU=true
+   !   Call vdfexcuhl to calculate length scales and TKE for use in Harmonie
+   !
+   !
+   !*           EXCHANGE COEFFICIENTS ABOVE THE SURFACE LAYER
+
+   CALL VDFEXCUHL(YDVDF,YDEPHY,KIDIA,KFDIA,KLON,KLEV,PTMST,PUM1,PVM1,PTM1,PQM1,PLM1,PIM1,ZSLGM1,ZQTM1,PKMFL,PKHFL,PKQFL,PAPHM1,&
+   & PAPM1,PGEOM1,PGEOH,PEXNF,ZZI,KPBLTYPE,KDRAFT,ZQSVAR,ZDQSDTEMP,PBUOY_COR,ZENCASC,PWU,&
+   & YSPP_RFAC_TWOC,YSPP_RZC_H,YSPP_RZL_INF, & 
+   & PTKE,PMFLX,ZLENGTH_M,ZLENGTH_H)
+
+ENDIF ! LHARATU
+
+END ASSOCIATE
+IF (LHOOK) CALL DR_HOOK('VDFHGHTNHL',1,ZHOOK_HANDLE)
+
+END SUBROUTINE VDFHGHTNHL
diff --git a/tools/check_commit_ial.sh b/tools/check_commit_ial.sh
index f45af42ed7601805f5acdcc1a9f05827de957a62..39a480a6a48f1c9590a73534641350de0ed2bf1f 100755
--- a/tools/check_commit_ial.sh
+++ b/tools/check_commit_ial.sh
@@ -167,7 +167,7 @@ fromdir=''
 if echo $commit | grep '/' > /dev/null; then
   fromdir=$commit
   if [ "$cycle" == "" ]; then
-    content_apl_arome=$(cat $commit/src/arome/ext/apl_arome.F90)
+    content_apl_arome=$(scp $commit/src/arome/ext/apl_arome.F90 /dev/stdout)
     cycle=$(content2cycle)
   fi
   packBranch=$(echo $commit | sed 's/\//'${separator}'/g' | sed 's/:/'${separator}'/g' | sed 's/\./'${separator}'/g')
@@ -296,7 +296,7 @@ if [ $compilation -eq 1 ]; then
     fi
   fi
 
-  EXT=PHYEX/ext/
+  EXT=PHYEX/ext
   [ ! -d $EXT ] && EXT=PHYEX/externals #old name for ext/aux
   if [ -d $EXT ]; then
     #Move manually files outside of mpa (a find on the whole repository would take too much a long time)
@@ -305,6 +305,7 @@ if [ $compilation -eq 1 ]; then
     [ -f $EXT/suparar.F90 ] && mv $EXT/suparar.F90 ../arpifs/phys_dmn/
     [ -f $EXT/apl_arome.F90 ] && mv $EXT/apl_arome.F90 ../arpifs/phys_dmn/
     [ -f $EXT/suphmpa.F90 ] && mv $EXT/suphmpa.F90 ../arpifs/phys_dmn/
+    [ -f $EXT/vdfhghtnhl.F90 ] && mv $EXT/vdfhghtnhl.F90 ../arpifs/phys_dmn/
     #Special mpa case
     [ -f $EXT/modd_spp_type.F90 ] && mv $EXT/modd_spp_type.F90 ../mpa/micro/externals/
     [ -f $EXT/spp_mod_type.F90 ] && mv $EXT/spp_mod_type.F90 ../mpa/micro/externals/