diff --git a/src/MNH/compute_updraft_hrio.f90 b/src/MNH/compute_updraft_hrio.f90
new file mode 100644
index 0000000000000000000000000000000000000000..d7eff6d129205d4bf04e66e14a337eb93c1c310b
--- /dev/null
+++ b/src/MNH/compute_updraft_hrio.f90
@@ -0,0 +1,919 @@
+!     ######spl
+     MODULE MODI_COMPUTE_UPDRAFT_HRIO
+!    ###########################
+!
+INTERFACE
+!
+!     #################################################################
+      SUBROUTINE COMPUTE_UPDRAFT_HRIO(KKA,KKB,KKE,KKU,KKL, HFRAC_ICE,   &
+                                 OENTR_DETR,OMIXUV,                &
+                                 ONOMIXLG,KSV_LGBEG,KSV_LGEND,     &
+                                 PZZ,PDZZ,                         &
+                                 PSFTH,PSFRV,                      &
+                                 PPABSM,PRHODREF,PUM,PVM,PTKEM,PWM,&
+                                 PTHM,PRVM,PTHLM,PRTM,             &
+                                 PSVM,PTHL_UP,PRT_UP,              &
+                                 PRV_UP,PRC_UP,PRI_UP,PTHV_UP,     &
+                                 PW_UP,PU_UP, PV_UP, PSV_UP,       &
+                                 PFRAC_UP,PFRAC_ICE_UP,PRSAT_UP,   &
+                                 PTHL_DO, PTHV_DO, PRT_DO,         &
+                                 PU_DO, PV_DO, PSV_DO,             &
+                                 PEMF,PDETR,PENTR,                 &
+                                 PBUO_INTEG,KKLCL,KKETL,KKCTL,     &
+                                 PDEPTH)
+!     #################################################################
+!
+!*                    1.1  Declaration of Arguments
+!
+!
+!
+INTEGER,                INTENT(IN)   :: KKA          ! near ground array index
+INTEGER,                INTENT(IN)   :: KKB          ! near ground physical index
+INTEGER,                INTENT(IN)   :: KKE          ! uppest atmosphere physical index
+INTEGER,                INTENT(IN)   :: KKU          ! uppest atmosphere array index
+INTEGER,                INTENT(IN)   :: KKL          ! +1 if grid goes from ground to atmosphere top, -1 otherwise
+CHARACTER*1,            INTENT(IN)   :: HFRAC_ICE    ! partition liquid/ice scheme
+LOGICAL,                INTENT(IN) :: OENTR_DETR! flag to recompute entrainment, detrainment and mass flux
+LOGICAL,                INTENT(IN) :: OMIXUV    ! True if mixing of momentum
+LOGICAL,                INTENT(IN)   :: ONOMIXLG  ! False if mixing of lagrangian tracer
+INTEGER,                INTENT(IN)   :: KSV_LGBEG ! first index of lag. tracer
+INTEGER,                INTENT(IN)   :: KSV_LGEND ! last  index of lag. tracer
+REAL, DIMENSION(:,:), INTENT(IN)   :: PZZ       !  Height at the flux point
+REAL, DIMENSION(:,:), INTENT(IN)   :: PDZZ      !  Metrics coefficient
+ 
+REAL, DIMENSION(:),   INTENT(IN)   ::  PSFTH,PSFRV
+! normal surface fluxes of theta,rv,(u,v) parallel to the orography
+!
+REAL, DIMENSION(:,:),   INTENT(IN) ::  PPABSM     ! Pressure at t-dt
+REAL, DIMENSION(:,:),   INTENT(IN) ::  PRHODREF   ! dry density of the
+                                                  ! reference state
+REAL, DIMENSION(:,:),   INTENT(IN) ::  PUM        ! u mean wind
+REAL, DIMENSION(:,:),   INTENT(IN) ::  PVM        ! v mean wind
+REAL, DIMENSION(:,:),   INTENT(IN) ::  PTKEM      ! TKE at t-dt
+REAL, DIMENSION(:,:),   INTENT(IN) ::  PWM        ! w mean wind
+!
+REAL, DIMENSION(:,:),   INTENT(IN)   ::  PTHM           ! liquid pot. temp. at t-dt
+REAL, DIMENSION(:,:),   INTENT(IN)   ::  PRVM           ! vapor mixing ratio at t-dt
+REAL, DIMENSION(:,:),   INTENT(IN)   ::  PTHLM,PRTM     ! cons. var. at t-dt
+
+REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PSVM           ! scalar var. at t-dt
+
+REAL, DIMENSION(:,:),   INTENT(OUT)  ::  PTHL_UP,PRT_UP   ! updraft properties
+REAL, DIMENSION(:,:),   INTENT(OUT)  ::  PU_UP, PV_UP     ! updraft wind components
+REAL, DIMENSION(:,:),   INTENT(INOUT)::  PRV_UP,PRC_UP, & ! updraft rv, rc
+                                         PRI_UP,PTHV_UP,& ! updraft ri, THv
+                                         PW_UP,PFRAC_UP,& ! updraft w, fraction
+                                         PFRAC_ICE_UP,&   ! liquid/solid fraction in updraft
+                                         PRSAT_UP         ! Rsat
+REAL, DIMENSION(:,:),   INTENT(INOUT)::  PTHL_DO,PTHV_DO,PRT_DO,PU_DO,PV_DO
+
+REAL, DIMENSION(:,:,:), INTENT(OUT)  ::  PSV_UP           ! updraft scalar var. 
+REAL, DIMENSION(:,:,:), INTENT(OUT)  ::  PSV_DO           ! downdraft scalar var. 
+                                         
+REAL, DIMENSION(:,:),   INTENT(INOUT)::  PEMF,PDETR,PENTR ! Mass_flux,
+                                                          ! entrainment, detrainment
+REAL, DIMENSION(:,:),   INTENT(INOUT) :: PBUO_INTEG       ! Integrated Buoyancy 
+INTEGER, DIMENSION(:),  INTENT(INOUT)::  KKLCL,KKETL,KKCTL! LCL, ETL, CTL                                           
+REAL, DIMENSION(:),     INTENT(OUT)   :: PDEPTH           ! Deepness of cloud
+
+
+END SUBROUTINE COMPUTE_UPDRAFT_HRIO
+
+END INTERFACE
+!
+END MODULE MODI_COMPUTE_UPDRAFT_HRIO!     ######spl
+      SUBROUTINE COMPUTE_UPDRAFT_HRIO(KKA,KKB,KKE,KKU,KKL,HFRAC_ICE, &
+                                 OENTR_DETR,OMIXUV,                  &
+                                 ONOMIXLG,KSV_LGBEG,KSV_LGEND,       &
+                                 PZZ,PDZZ,                           &
+                                 PSFTH,PSFRV,                        &
+                                 PPABSM,PRHODREF,PUM,PVM,PTKEM,PWM,  &                                      
+                                 PTHM,PRVM,PTHLM,PRTM,               &
+                                 PSVM,PTHL_UP,PRT_UP,                &
+                                 PRV_UP,PRC_UP,PRI_UP,PTHV_UP,       &
+                                 PW_UP,PU_UP, PV_UP, PSV_UP,         &
+                                 PFRAC_UP,PFRAC_ICE_UP,PRSAT_UP,     &
+                                 PTHL_DO, PTHV_DO, PRT_DO, &
+                                 PU_DO, PV_DO, PSV_DO,         &
+                                 PEMF,PDETR,PENTR,                   &
+                                 PBUO_INTEG,KKLCL,KKETL,KKCTL,       &
+                                 PDEPTH )
+!     #################################################################
+!!
+!!****  *COMPUTE_UPDRAFT_HRIO* - calculates caracteristics of the updraft 
+!!                         
+!!
+!!    PURPOSE
+!!    -------
+!!****  The purpose of this routine is to build the updraft model 
+!!
+!
+!!**  METHOD
+!!    ------
+!!
+!!    EXTERNAL
+!!    --------
+!!      
+!!    IMPLICIT ARGUMENTS
+!!    ------------------
+!!
+!!      !!     REFERENCE
+!!     ---------
+!!       Book 1 of Meso-NH documentation (chapter Turbulence)
+!!       Soares et al. 2004 QJ
+!!
+!!     AUTHOR
+!!     ------
+!!     J.Pergaud
+!!     V.Masson : Optimization 07/2010
+!!     S. Riette : 07/2010 : modification for reproducibility  
+!!     S. Riette may 2011: ice added, interface modified
+!!     S. Riette Jan 2012: support for both order of vertical levels
+!!     V.Masson, C.Lac : 02/2011 : SV_UP initialized by a non-zero value
+!! --------------------------------------------------------------------------
+!
+!*      0. DECLARATIONS
+!          ------------
+!
+USE MODD_CST
+USE MODD_PARAM_MFSHALL_n, ONLY : XPRES_UV,XALP_PERT,XCMF,XFRAC_UP_MAX,XA1,XB,&
+                          XC,XBETA1
+!USE MODD_CMFSHALL, ONLY : XPRES_UV,XALP_PERT,XCMF,XFRAC_UP_MAX,XA1,XALPHA_SEUIL,LNORM_RESOL,&
+!                          XCOEF1,XCOEF2,XCOEF3,NBUOY,XB,&
+!                          XC,XBETA1
+USE MODD_GRID_n, ONLY : XDXHAT, XDYHAT
+USE MODD_BLANK
+
+!USE MODI_COMPUTE_ENTR_DETR
+USE MODI_TH_R_FROM_THL_RT_1D
+USE MODI_SHUMAN_MF
+
+USE MODI_COMPUTE_BL89_ML
+
+IMPLICIT NONE
+
+!*                    1.1  Declaration of Arguments
+!
+!
+!
+INTEGER,                INTENT(IN)   :: KKA          ! near ground array index
+INTEGER,                INTENT(IN)   :: KKB          ! near ground physical index
+INTEGER,                INTENT(IN)   :: KKE          ! uppest atmosphere physical index
+INTEGER,                INTENT(IN)   :: KKU          ! uppest atmosphere array index
+INTEGER,                INTENT(IN)   :: KKL          ! +1 if grid goes from ground to atmosphere top, -1 otherwise
+CHARACTER*1,            INTENT(IN)   :: HFRAC_ICE    ! partition liquid/ice scheme
+LOGICAL,                INTENT(IN) :: OENTR_DETR! flag to recompute entrainment, detrainment and mass flux
+LOGICAL,                INTENT(IN) :: OMIXUV    ! True if mixing of momentum
+LOGICAL,                INTENT(IN)   :: ONOMIXLG  ! False if mixing of lagrangian tracer
+INTEGER,                INTENT(IN)   :: KSV_LGBEG ! first index of lag. tracer
+INTEGER,                INTENT(IN)   :: KSV_LGEND ! last  index of lag. tracer
+! FAUX dans AROME, mais pas grave dans la param�trisation
+REAL, DIMENSION(:,:), INTENT(IN)   :: PZZ       !  Height at the flux point
+REAL, DIMENSION(:,:), INTENT(IN)   :: PDZZ      !  Metrics coefficient
+ 
+REAL, DIMENSION(:),   INTENT(IN)   ::  PSFTH,PSFRV
+! normal surface fluxes of theta,rv,(u,v) parallel to the orography
+!
+REAL, DIMENSION(:,:),   INTENT(IN) ::  PPABSM     ! Pressure at t-dt
+REAL, DIMENSION(:,:),   INTENT(IN) ::  PRHODREF   ! dry density of the
+                                                  ! reference state
+REAL, DIMENSION(:,:),   INTENT(IN) ::  PUM        ! u mean wind
+REAL, DIMENSION(:,:),   INTENT(IN) ::  PVM        ! v mean wind
+REAL, DIMENSION(:,:),   INTENT(IN) ::  PWM        ! w mean wind
+REAL, DIMENSION(:,:),   INTENT(IN) ::  PTKEM      ! TKE at t-dt
+!
+REAL, DIMENSION(:,:),   INTENT(IN)   ::  PTHM           ! liquid pot. temp. at t-dt
+REAL, DIMENSION(:,:),   INTENT(IN)   ::  PRVM           ! vapor mixing ratio at t-dt
+REAL, DIMENSION(:,:),   INTENT(IN)   ::  PTHLM,PRTM     ! cons. var. at t-dt
+
+REAL, DIMENSION(:,:,:), INTENT(IN)   ::  PSVM           ! scalar var. at t-dt
+
+REAL, DIMENSION(:,:),   INTENT(OUT)  ::  PTHL_UP,PRT_UP   ! updraft properties
+REAL, DIMENSION(:,:),   INTENT(OUT)  ::  PU_UP, PV_UP     ! updraft wind components
+REAL, DIMENSION(:,:),   INTENT(INOUT)::  PRV_UP,PRC_UP, & ! updraft rv, rc
+                                         PRI_UP,PTHV_UP,& ! updraft ri, THv
+                                         PW_UP,PFRAC_UP,& ! updraft w, fraction
+                                         PFRAC_ICE_UP,&   ! liquid/solid fraction in updraft
+                                         PRSAT_UP         ! Rsat
+REAL, DIMENSION(:,:),   INTENT(INOUT)::  PTHL_DO,PTHV_DO,PRT_DO,PU_DO,PV_DO ! environment var.
+
+REAL, DIMENSION(:,:,:), INTENT(OUT)  ::  PSV_UP           ! updraft scalar var. 
+REAL, DIMENSION(:,:,:), INTENT(OUT)  ::  PSV_DO           ! environment scalar var. 
+                                         
+REAL, DIMENSION(:,:),   INTENT(INOUT)::  PEMF,PDETR,PENTR ! Mass_flux,
+                                                          ! detrainment,entrainment
+REAL, DIMENSION(:,:),   INTENT(INOUT) :: PBUO_INTEG       ! Integrated Buoyancy 
+INTEGER, DIMENSION(:),  INTENT(INOUT) :: KKLCL,KKETL,KKCTL! LCL, ETL, CTL
+REAL, DIMENSION(:),     INTENT(OUT)   :: PDEPTH           ! Deepness of cloud
+!                       1.2  Declaration of local variables
+!
+!
+! Mean environment variables at t-dt at flux point
+REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2)) ::    &
+                        ZTHM_F,ZRVM_F                 ! Theta,rv of
+                                                      ! updraft environnement
+REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2)) ::    &
+                        ZRTM_F, ZTHLM_F, ZTKEM_F,&    ! rt, thetal,TKE,pressure,
+                        ZUM_F,ZVM_F,ZRHO_F,      &    ! density,momentum
+                        ZPRES_F,ZTHVM_F,ZTHVM,   &    ! interpolated at the flux point
+                        ZG_O_THVREF,             &    ! g*ThetaV ref
+                        ZW_UP2                        ! w**2  of the updraft
+!==================================================================================                        
+REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2)) :: ZW_UP   ! w  of the updraft
+REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2)) :: ZWM_M   ! w at mass levels
+
+REAL, DIMENSION(SIZE(PSVM,1),SIZE(PTHM,2),SIZE(PSVM,3)) :: &
+                        ZSVM_F ! scalar variables 
+
+                        
+REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2)) ::  &
+                        ZTH_UP,                  &    ! updraft THETA 
+                        ZRC_MIX, ZRI_MIX              ! guess of Rc and Ri for KF mixture
+!==================================================================================                        
+REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2)) :: PTHVREF                       ! THv de r�f�rence 
+REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2)) :: ZBUO                          ! Buoyancy 
+REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2)) :: ZZDZ                          ! Dz 
+!==================================================================================                        
+
+REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2)) ::  ZCOEF  ! diminution coefficient for too high clouds 
+                        
+REAL, DIMENSION(SIZE(PSFTH,1) )            ::  ZWTHVSURF  ! Surface w'thetav'
+
+REAL  :: ZRDORV       ! RD/RV
+REAL  :: ZRVORD       ! RV/RD
+
+
+REAL, DIMENSION(SIZE(PTHM,1)) :: ZMIX1,ZMIX2
+
+REAL, DIMENSION(SIZE(PTHM,1)) :: ZLUP         ! Upward Mixing length from the ground
+
+INTEGER  :: ISV                ! Number of scalar variables                               
+INTEGER  :: JK,JI,JSV          ! loop counters
+
+LOGICAL, DIMENSION(SIZE(PTHM,1)) ::  GTEST,GTESTLCL,GTESTETL
+                               ! Test if the ascent continue, if LCL or ETL is reached
+LOGICAL                          ::  GLMIX 
+                               ! To choose upward or downward mixing length
+LOGICAL, DIMENSION(SIZE(PTHM,1))              :: GWORK1
+LOGICAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2)) :: GWORK2
+
+INTEGER  :: ITEST
+
+REAL, DIMENSION(SIZE(PTHM,1)) :: ZRC_UP, ZRI_UP, ZRV_UP, ZRSATW, ZRSATI
+!==================================================================================                        
+REAL, DIMENSION(SIZE(PTHM,1))              ::  ZWUP_MEAN    ! 
+REAL, DIMENSION(SIZE(PTHM,1))              ::  ZCOE,ZWCOE,ZBUCOE
+REAL, DIMENSION(SIZE(PTHM,1))              ::  ZDETR_BUO, ZDETR_RT
+!==================================================================================                        
+
+REAL  :: ZDEPTH_MAX1, ZDEPTH_MAX2 ! control auto-extinction process
+REAL  :: XFRAC_LIM ! surface maximale du thermique
+
+REAL  :: ZTMAX,ZRMAX, ZEPS  ! control value
+
+! pour le calcul de la resolution normalis�e
+REAL, DIMENSION(SIZE(PTHM,1))              ::  ZA1, ZRESOL_NORM 
+REAL :: ZRESOL_GRID   
+REAL, DIMENSION(SIZE(PTHM,1)) :: MODIF
+!
+
+INTEGER :: KTCOUNT_MF ! current model time-step
+REAL, DIMENSION (:), ALLOCATABLE :: ZWORK
+!
+!*    0.3    Declaration of namelists
+!            ------------------------
+!
+!----------------------------------------------------------------------------
+
+! Thresholds for the  perturbation of
+! theta_l and r_t at the first level of the updraft
+
+ZTMAX=2.0
+ZRMAX=1.E-3
+ZEPS=1.E-15
+XFRAC_LIM=0.5
+!
+if(LDUMMY1)THEN
+print*,"XPRES_UV=",XPRES_UV
+print*,"XALP_PERT=",XALP_PERT
+print*,"XCMF=",XCMF
+print*,"XFRAC_UP_MAX=",XFRAC_UP_MAX
+print*,"XA1=",XA1
+print*,"XB=",XB
+print*,"XC=",XC
+print*,"XBETA1=",XBETA1
+END IF 
+!------------------------------------------------------------------------
+
+!                     INITIALISATION
+
+! Initialisation of the constants   
+ZRDORV   = XRD / XRV   !=0.622
+ZRVORD   = (XRV / XRD) 
+
+ZDEPTH_MAX1=3000. ! clouds with depth inferior to this value are keeped untouched
+ZDEPTH_MAX2=4000. ! clouds with depth superior to this value are suppressed
+
+!                 Local variables, internal domain
+! Internal Domain
+
+!number of scalar variables
+ISV=SIZE(PSVM,3)
+
+IF (OENTR_DETR) THEN
+   ! si on prend en compte la r�solution
+   ! dans le calcul de l'entrainement et du d�trainement
+   !IF(LNORM_RESOL) THEN
+        !grid resolution in the AROME CASE
+        ZRESOL_GRID=sqrt(XDXHAT(1)*XDYHAT(1))
+   !ENDIF
+
+! Initialisation of intersesting Level :LCL,ETL,CTL
+  KKLCL(:)=KKE
+  KKETL(:)=KKE
+  KKCTL(:)=KKE
+
+  !
+  ! Initialisation
+  !* udraft governing variables
+  PEMF(:,:)=0.
+  PDETR(:,:)=0.
+  PENTR(:,:)=0.
+
+  ! Initialisation
+  !* updraft core variables
+  PRV_UP(:,:)=0.
+  PRC_UP(:,:)=0.
+  PRI_UP(:,:)=0.
+  PW_UP(:,:)=0.
+  ZTH_UP(:,:)=0.
+  PFRAC_UP(:,:)=0.
+  PTHV_UP(:,:)=0.
+
+  PBUO_INTEG=0.
+  ZBUO      =0.
+
+  PFRAC_ICE_UP(:,:)=0.
+  PRSAT_UP(:,:)=PRVM(:,:) ! should be initialised correctly but is (normaly) not used
+
+  !cloud/dry air mixture cloud content
+  ZRC_MIX = 0.
+  ZRI_MIX = 0.
+
+END IF
+
+! Initialisation of environment variables at t-dt
+! variables at flux level
+ZTHLM_F(:,:) = MZM_MF(KKA,KKU,KKL,PTHLM(:,:))
+ZRTM_F (:,:) = MZM_MF(KKA,KKU,KKL,PRTM(:,:))
+ZUM_F  (:,:) = MZM_MF(KKA,KKU,KKL,PUM(:,:))
+ZVM_F  (:,:) = MZM_MF(KKA,KKU,KKL,PVM(:,:))
+ZTKEM_F(:,:) = MZM_MF(KKA,KKU,KKL,PTKEM(:,:))
+
+DO JSV=1,ISV
+  IF (ONOMIXLG .AND. JSV >= KSV_LGBEG .AND. JSV<= KSV_LGEND) CYCLE
+  ZSVM_F(:,:,JSV) = MZM_MF(KKA,KKU,KKL,PSVM(:,:,JSV))
+END DO
+!                     
+!          Initialisation of updraft characteristics 
+PTHL_UP(:,:)=ZTHLM_F(:,:)
+PRT_UP(:,:)=ZRTM_F(:,:)
+PU_UP(:,:)=ZUM_F(:,:)
+PV_UP(:,:)=ZVM_F(:,:)
+PSV_UP(:,:,:)=ZSVM_F(:,:,:)
+PSV_DO(:,:,:)=ZSVM_F(:,:,:)
+PTHL_DO(:,:)=ZTHLM_F(:,:)
+PRT_DO(:,:)=ZRTM_F(:,:)
+PU_DO(:,:)=ZUM_F(:,:)
+PV_DO(:,:)=ZVM_F(:,:)
+PSV_DO(:,:,:)=0.
+
+   ! initiation de l'�quation de la dynamique
+        !vertical velocity at mass level
+        ZWM_M(:,:)=MZF_MF(KKA,KKU,KKL,PWM(:,:))
+! Computation or initialisation of updraft characteristics at the KKB level
+! thetal_up,rt_up,thetaV_up, w2,Buoyancy term and mass flux (PEMF)
+
+PTHL_UP(:,KKB)= ZTHLM_F(:,KKB)+MAX(0.,MIN(ZTMAX,(PSFTH(:)/SQRT(ZTKEM_F(:,KKB)))*XALP_PERT))
+PRT_UP(:,KKB) = ZRTM_F(:,KKB)+MAX(0.,MIN(ZRMAX,(PSFRV(:)/SQRT(ZTKEM_F(:,KKB)))*XALP_PERT)) 
+!------------------------
+print*,OENTR_DETR
+!------------------------
+IF (OENTR_DETR) THEN
+  ZTHM_F (:,:) = MZM_MF(KKA,KKU,KKL,PTHM (:,:))
+  ZPRES_F(:,:) = MZM_MF(KKA,KKU,KKL,PPABSM(:,:))
+  ZRHO_F (:,:) = MZM_MF(KKA,KKU,KKL,PRHODREF(:,:))
+  ZRVM_F (:,:) = MZM_MF(KKA,KKU,KKL,PRVM(:,:))
+
+  ! thetav at mass and flux levels
+  ZTHVM_F(:,:)=ZTHM_F(:,:)*((1.+ZRVORD*ZRVM_F(:,:))/(1.+ZRTM_F(:,:)))
+  ZTHVM(:,:)=PTHM(:,:)*((1.+ZRVORD*PRVM(:,:))/(1.+PRTM(:,:)))
+
+  PTHV_UP(:,:)=ZTHVM_F(:,:)
+
+  ZW_UP2(:,:)=ZEPS
+  ZW_UP2(:,KKB) = MAX(0.0001,(2./3.)*ZTKEM_F(:,KKB))
+
+   ! initiation de l'�quation de la dynamique
+        ! initialisation du vent de l'updraft pour la zone grise
+        ZW_UP(:,:)=SQRT(ZW_UP2)
+
+  ! Computation of non conservative variable for the KKB level of the updraft
+  ! (all or nothing ajustement)
+  PRC_UP(:,KKB)=0.
+  PRI_UP(:,KKB)=0.
+  CALL TH_R_FROM_THL_RT_1D(HFRAC_ICE,PFRAC_ICE_UP(:,KKB),ZPRES_F(:,KKB), &
+             PTHL_UP(:,KKB),PRT_UP(:,KKB),ZTH_UP(:,KKB), &
+             PRV_UP(:,KKB),PRC_UP(:,KKB),PRI_UP(:,KKB),ZRSATW(:),ZRSATI(:))
+
+  ! compute updraft thevav and buoyancy term at KKB level
+  PTHV_UP(:,KKB) = ZTH_UP(:,KKB)*((1+ZRVORD*PRV_UP(:,KKB))/(1+PRT_UP(:,KKB)))
+  ! compute mean rsat in updraft
+  PRSAT_UP(:,KKB) = ZRSATW(:)*(1-PFRAC_ICE_UP(:,KKB)) + ZRSATI(:)*PFRAC_ICE_UP(:,KKB)
+                                                            
+  ! Closure assumption for mass flux at KKB level
+  !
+  ! calcul diff�rent de la flottabilit�
+  PTHVREF=300.
+  ! c'est la meilleure flottabilit� ! 
+  !NBUOY=0.
+   !IF(NBUOY == 0.) THEN
+      ZG_O_THVREF=XG/ZTHVM_F
+   !ELSE
+   !   ! in AROME XTHVREF does not exist ici 300
+   !   ZG_O_THVREF=XG/PTHVREF(1,1) ! on revient � l'�tat de r�f�rence et pas ZTHVM_F
+   !ENDIF
+   ! Calcul de la fermeture de Julien Pergaut comme limite max de PHY
+
+   DO JK=KKB,KKE-KKL,KKL   !  Vertical loop
+    ZZDZ(:,JK)   = MAX(ZEPS,PZZ(:,JK+KKL)-PZZ(:,JK))  ! <== Delta Z between two flux level
+  ENDDO
+
+  ! compute L_up
+  GLMIX=.TRUE.
+  ZTKEM_F(:,KKB)=0.
+
+  CALL COMPUTE_BL89_ML(KKA,KKB,KKE,KKU,KKL,PDZZ,ZTKEM_F,ZG_O_THVREF,ZTHVM_F,KKB,GLMIX,ZLUP)
+  ZLUP(:)=MAX(ZLUP(:),1.E-10)
+
+  ! Compute Buoyancy flux at the ground
+  ZWTHVSURF(:) = (ZTHVM_F(:,KKB)/ZTHM_F(:,KKB))*PSFTH(:)+     &
+                (0.61*ZTHM_F(:,KKB))*PSFRV(:)
+
+  ! Mass flux at KKB level (updraft triggered if PSFTH>0.)
+    !elefant>
+       MODIF(:)=tanh(1.83*sqrt(XDXHAT(1)*XDYHAT(1))/ZLUP)
+      WHERE (ZWTHVSURF(:)>0.)
+        PEMF(:,KKB) = XCMF * MODIF(:) * ZRHO_F(:,KKB) *&
+        ((ZG_O_THVREF(:,KKB))*ZWTHVSURF*ZLUP)**(1./3.)
+        PFRAC_UP(:,KKB)=MIN(PEMF(:,KKB)/(SQRT(ZW_UP2(:,KKB))*ZRHO_F(:,KKB)),XFRAC_UP_MAX)
+        ZW_UP2(:,KKB)=(PEMF(:,KKB)/(PFRAC_UP(:,KKB)*ZRHO_F(:,KKB)))**2
+        GTEST(:)=.TRUE.
+      ELSEWHERE
+        PEMF(:,KKB) =0.
+        GTEST(:)=.FALSE.
+      ENDWHERE
+    !elefant<
+ELSE
+  GTEST(:)=PEMF(:,KKB+KKL)>0.
+END IF
+      !=================
+      IF(LDUMMY1)THEN
+      print*,"PEMF(:,",KKB,")=", minval(PEMF(:,KKB)),maxval(PEMF(:,KKB))
+      print*,"PFRAC_UP(:,",KKB,")=", minval(PFRAC_UP(:,KKB)),maxval(PFRAC_UP(:,KKB))
+      print*,"ZW_UP2(:,",KKB,")=", minval(ZW_UP2(:,KKB)),maxval(ZW_UP2(:,KKB))
+      END IF
+      !=================
+
+!--------------------------------------------------------------------------
+
+!                        3. Vertical ascending loop
+!                           -----------------------
+!
+! If GTEST = T the updraft starts from the KKB level and stops when GTEST becomes F
+!
+!
+GTESTLCL(:)=.FALSE.
+GTESTETL(:)=.FALSE.
+
+   ! CALCUL DE LA RESOLUTION NORMALISEE
+   
+   !IF(NLES_DTCOUNT .EQ. 0.)THEN        
+   !  print*,"PROBLEME NLES_DTCOUNT"
+   !  print*,"NLES_DTCOUNT doit �tre 1."   
+   !STOP
+   !ENDIF
+IF(LDUMMY1) THEN
+print*,"GTEST=",GTEST
+END IF
+
+       WHERE (GTEST .AND. ZLUP(:)>0. )
+        ! hauteur des thermiques du pas de temps precedent
+        ! dans cette version ZLUP depend du flux de masse dans chaque
+        ! colonne, il serait peut-�tre plus simple de faire une variable
+        ! globale sur le domaine       
+         ZRESOL_NORM(:)=ZRESOL_GRID/(ZLUP(:))
+       ELSEWHERE
+         ZRESOL_NORM(:)=0.5 ! ARBITRAIRE
+       ENDWHERE
+ 
+IF(LDUMMY1) THEN
+print*,"ZRESOL_NORM=",minval(ZRESOL_NORM),maxval(ZRESOL_NORM)
+END IF
+!       Loop on vertical level
+DO JK=KKB,KKE-KKL,KKL
+
+! IF the updraft top is reached for all column, stop the loop on levels
+  ITEST=COUNT(GTEST)
+  !IF (ITEST==0) print*,"cycle"
+  IF (ITEST==0) CYCLE
+IF(LDUMMY1) THEN
+   print*,"JK=",JK
+   print*,"alt=",minval(PZZ(:,JK)),maxval(PZZ(:,JK))
+   print*,"ITEST=",ITEST
+   IF (ITEST==0) STOP
+END IF
+!       Computation of entrainment and detrainment with KF90
+!       parameterization in clouds and LR01 in subcloud layer
+
+
+! to find the LCL (check if JK is LCL or not)
+
+  WHERE ((PRC_UP(:,JK)+PRI_UP(:,JK)>0.).AND.(.NOT.(GTESTLCL)))
+      KKLCL(:) = JK           
+      GTESTLCL(:)=.TRUE.
+  ENDWHERE
+    
+!  Buoyancy is computed on "flux" levels where updraft variables are known
+   !================================================================================
+   ! CALCUL DE LA FLOTTABILITE
+   !================================================================================  
+
+  ! Compute theta_v of updraft at flux level JK    
+    
+    ZRC_UP(:)   =PRC_UP(:,JK) ! guess
+    ZRI_UP(:)   =PRI_UP(:,JK) ! guess 
+    ZRV_UP(:)   =PRV_UP(:,JK)
+    
+    CALL TH_R_FROM_THL_RT_1D(HFRAC_ICE,PFRAC_ICE_UP(:,JK),&
+               PPABSM(:,JK),PTHL_UP(:,JK),PRT_UP(:,JK),&
+               ZTH_UP(:,JK),ZRV_UP,ZRC_UP,ZRI_UP,ZRSATW(:),ZRSATI(:))            
+    
+    WHERE (GTEST)
+      PTHV_UP   (:,JK) = ZTH_UP(:,JK)*(1.+ZRVORD*ZRV_UP(:))/(1.+PRT_UP(:,JK))
+    ENDWHERE ! fin temporaire de GTEST 
+
+   ! test sur le calcul de la flottabilit� de 2 mani�res 
+   IF(LDUMMY1) THEN
+   print*,"PTHV_UP(:,",JK,")=",minval(PTHV_UP(:,JK)),maxval(PTHV_UP(:,JK))
+   print*,"ZTHVM_F(:,",JK,")=",minval(ZTHVM_F(:,JK)),maxval(ZTHVM_F(:,JK))
+   print*,"PTHVREF(:,",JK,")=",minval(PTHVREF(:,JK)),maxval(PTHVREF(:,JK))
+   END IF
+   ! le calcul de la flottabilit� est super important
+   ! c'est ce qui decide de Wup
+   !IF(NBUOY==1) THEN
+   ! !WHERE (GTEST) ! comme dans EDKF, mais c'est toujours positif
+   !               ! du coup le thermique ne s'arr�te pas
+   !   ZBUO      (:,JK) = ZG_O_THVREF(:,JK)*(PTHV_UP(:,JK) - PTHVREF(:,JK))    
+   ! !ENDWHERE ! fin temporaire de GTEST 
+   !  IF(LDUMMY1) THEN
+   ! print*,"ZBUO_1(:,",JK,")=",minval(ZBUO(:,JK)),maxval(ZBUO(:,JK))
+   !END IF
+   !ELSEIF(NBUOY==2) THEN
+   ! !WHERE (GTEST)! comme ca devrait �tre mais trop restrictif, le thermique
+   ! !s'arrete d'embl�e
+   !   ZBUO      (:,JK) = ZG_O_THVREF(:,JK)*(PTHV_UP(:,JK) -2.*ZTHVM_F(:,JK) + PTHVREF(:,JK))
+   ! !ENDWHERE ! fin temporaire de GTEST 
+   ! IF(LDUMMY1) THEN 
+   ! print*,"ZBUO_2(:,",JK,")=",minval(ZBUO(:,JK)),maxval(ZBUO(:,JK))
+   !END IF
+  !ELSEIF(NBUOY==3) THEN
+   ! !WHERE (GTEST) ! un peu plus rigoureux que celle du dessus, mais trop restrictif, le thermique
+   ! !s'arrete d'embl�e 
+   !   ZBUO      (:,JK) = XG/ZTHVM_F(:,JK)*(PTHV_UP(:,JK)-ZTHVM_F(:,JK))-&
+   !                      XG/PTHVREF(:,JK)*(ZTHVM_F(:,JK)-PTHVREF(:,JK))    
+   ! !ENDWHERE ! fin temporaire de GTEST 
+   !IF(LDUMMY1) THEN
+   ! print*,"ZBUO_3(:,",JK,")=",minval(ZBUO(:,JK)),maxval(ZBUO(:,JK))
+   !END IF
+   !ELSEIF(NBUOY==4) THEN
+   ! devrait �tre plus proche de EDKF que NBUOY==0, mais ce n'est pas le cas. 
+   ! IF(JK/=KKB) THEN
+   !   ZRC_MIX(:,JK) = ZRC_MIX(:,JK-KKL) ! guess of Rc of mixture
+   !   ZRI_MIX(:,JK) = ZRI_MIX(:,JK-KKL) ! guess of Ri of mixture
+   ! ENDIF
+   ! CALL COMPUTE_ENTR_DETR(JK,KKB,KKE,KKL,GTEST,GTESTLCL,HFRAC_ICE,PFRAC_ICE_UP(:,JK),&
+   !                        PPABSM(:,:),PZZ(:,:),PDZZ(:,:),ZTHVM(:,:),  &
+   !                        PTHLM(:,JK),PRTM(:,JK),ZW_UP2(:,:),         &
+   !                        PTHL_UP(:,JK),PRT_UP(:,JK),ZLUP(:),         &
+   !                        PRC_UP(:,JK),PRI_UP(:,JK),ZRC_MIX(:,JK),ZRI_MIX(:,JK),                 &
+   !                        PENTR(:,JK),PDETR(:,JK),ZBUO(:,JK)    )
+   !
+
+   !IF(LDUMMY1) THEN
+   ! print*,"ZBUO_4(:,",JK,")=",minval(PBUO_INTEG(:,JK)),maxval(PBUO_INTEG(:,JK))
+   !END IF
+
+   !ELSE
+    !WHERE (GTEST) ! une derni�re possibilit�
+      ZBUO      (:,JK) = ZG_O_THVREF(:,JK)*(PTHV_UP(:,JK) - ZTHVM_F(:,JK))    
+    !ENDWHERE ! fin temporaire de GTEST 
+   !IF(LDUMMY1) THEN
+   ! print*,"ZBUO_0(:,",JK,")=",minval(ZBUO(:,JK)),maxval(ZBUO(:,JK))
+   !END IF
+   !ENDIF
+   IF(LDUMMY1) THEN
+    print*,"ZBUO(:,",JK,")=",minval(ZBUO(:,JK)),maxval(ZBUO(:,JK))
+   END IF
+
+    !WHERE (GTEST)      
+      ! anomalie de flottabilit� * DZ
+       PBUO_INTEG(:,JK) = ZBUO(:,JK)*(PZZ(:,JK+KKL)-PZZ(:,JK))      
+      ! uniquement pour le calcul de l'ancienne vitesse verticale 
+    !ENDWHERE ! fin temporaire de GTEST
+ 
+   !================================================================================
+   ! CALCUL DE ZA1
+   !================================================================================  
+
+   ! si on a besoin d'un calcul sp�cifique de ZA1 vs XA1 (constante)
+   ! - LNORM_RESOL = calcul de ZA1 en prenant en compte la r�solution normalis�e
+
+      ZA1(:)=XA1    
+      !IF (LNORM_RESOL) THEN
+      ! WHERE (GTEST)
+      !   ZA1(:)=XCOEF1+XCOEF2*ZRESOL_NORM(:)**(-1*XCOEF3)
+      ! ENDWHERE
+      !ELSEIF (.NOT. XDUMMY1 == 0. ) THEN 
+      ! WHERE (GTEST)
+      !   ZA1(:)=XDUMMY1
+      ! ENDWHERE
+      !END IF
+       !
+      
+   IF(LDUMMY1) THEN
+   print*,"ZA1=",minval(ZA1),maxval(ZA1)
+   END IF
+   !================================================================================
+   ! EQUATION DE LA DYNAMIQUE  
+   !================================================================================  
+   IF(LDUMMY1) THEN
+   print*,"PBUO_INTEG(:,",JK,")=",minval(PBUO_INTEG(:,JK)),maxval(PBUO_INTEG(:,JK))
+   print*,"PWM(:,",JK,")=",minval(PWM(:,JK)),maxval(PWM(:,JK))      
+   print*,"ZWM_M(:,",JK,")=",minval(ZWM_M(:,JK)),maxval(ZWM_M(:,JK))      
+   END IF
+      ! on calcule le vent vertical du thermique dans la zone grise
+      ! ZA1 depend de la m�thode utilis�e
+      ALLOCATE(ZWORK(SIZE(ZW_UP,1)))
+       ZWORK(:)=0.
+       !WHERE (GTEST .AND. PFRAC_UP(:,JK)>0 .AND. PFRAC_UP(:,JK)<=XFRAC_LIM)
+       WHERE (GTEST .AND. PFRAC_UP(:,JK)>0 )
+         !hypothse => alpha(k)=alpha(k+1)
+         ZWCOE(:)  = (1.-PFRAC_UP(:,JK))/(1.-PFRAC_UP(:,JK)+XBETA1) 
+         ZBUCOE(:) = 2.*ZWCOE(:)*ZA1
+         ZWORK(:)=(ZW_UP(:,JK)-(1.-ZWCOE(:))*PWM(:,JK)-ZWCOE(:)*ZWM_M(:,JK))*&
+                  (ZW_UP(:,JK)-(1.-ZWCOE(:))*PWM(:,JK)-ZWCOE(:)*ZWM_M(:,JK))+&
+                   ZBUCOE(:)*PBUO_INTEG(:,JK)
+       ELSEWHERE
+        ZWORK(:)=0
+       ENDWHERE        
+       !
+       WHERE (GTEST)    
+       WHERE(ZWORK>=0.)
+         ! il s'agit bien de Wu et non pas de Wu-Wm
+         ZW_UP(:,JK+KKL)=(1.-ZWCOE(:))*PWM(:,JK+KKL)+ZWCOE(:)*ZWM_M(:,JK)+SQRT(ZWORK(:))
+       ELSEWHERE
+         ZW_UP(:,JK+KKL)=0.
+       ENDWHERE   
+        ZW_UP2(:,JK+KKL) = MAX(0.,ZW_UP(:,JK+KKL)*ZW_UP(:,JK+KKL))
+        ZWUP_MEAN(:)     = MAX(ZEPS,0.5*(ZW_UP(:,JK+KKL)+ZW_UP(:,JK))-ZWM_M(:,JK))
+       ENDWHERE
+      DEALLOCATE(ZWORK)
+   !
+   IF(LDUMMY1) THEN
+   print*,"ZW_UP(:,",JK+KKL,")=",minval(ZW_UP(:,JK+KKL)),maxval(ZW_UP(:,JK+KKL))
+   print*,"ZW_UP2(:,",JK+KKL,")=",minval(ZW_UP2(:,JK+KKL)),maxval(ZW_UP2(:,JK+KKL))
+   END IF
+   !================================================================================
+   ! CALCUL DE L ENTRAINEMENT ET DU DETRAINEMENT  
+   !================================================================================  
+   ! Hypoth�se alpha jk= alpha point de masse
+       !WHERE (GTEST .AND. PFRAC_UP(:,JK)>0. .AND. PFRAC_UP(:,JK)<XFRAC_LIM )
+       WHERE (GTEST .AND. PFRAC_UP(:,JK)>0. .AND. ZWUP_MEAN(:)>0 )
+   ! ZWUP_MEAN est Wu-Wm au point de masse
+        PENTR(:,JK)  = MAX(0., ((1.-PFRAC_UP(:,JK))*XBETA1)/(1.-PFRAC_UP(:,JK)+XBETA1)*(ZA1*ZBUO(:,JK)/&
+                               (ZWUP_MEAN(:)*ZWUP_MEAN(:))&
+                              - XB &
+                              - 1./(ZWUP_MEAN(:))*(PWM(:,JK+KKL)-PWM(:,JK))/(PZZ(:,JK+KKL)-PZZ(:,JK)))&
+                          )
+        ZDETR_BUO(:) = MAX(0., -((1.-PFRAC_UP(:,JK))*XBETA1)/(1.-PFRAC_UP(:,JK)+XBETA1)*(ZA1*ZBUO(:,JK)/&
+                                (ZWUP_MEAN(:)*ZWUP_MEAN(:))))
+        ZDETR_RT(:)  = XC*SQRT(MAX(0.,(PRT_UP(:,JK) - ZRTM_F(:,JK)))/MAX(ZEPS,ZRTM_F(:,JK))/ ZWUP_MEAN(:))
+        PDETR(:,JK)  = ZDETR_RT(:)+ZDETR_BUO(:)
+       ENDWHERE
+!
+   IF(LDUMMY1) THEN
+   print*,"PENTR(:,",JK,")=",minval(PENTR(:,JK)),maxval(PENTR(:,JK))
+   print*,"PDETR(:,",JK,")=",minval(PDETR(:,JK)),maxval(PDETR(:,JK))
+   END IF
+   !================================================================================
+   ! VARIABLES THERMODYNAMIQUES   
+   !================================================================================  
+   ! computation of the updraft characteritics at jk+1
+   ! WHERE (GTEST .AND. PFRAC_UP(:,JK)>0. .AND. PFRAC_UP(:,JK)<XFRAC_LIM)
+    WHERE (GTEST .AND. PFRAC_UP(:,JK)>0.)
+     ZMIX2(:) = (PZZ(:,JK+KKL)-PZZ(:,JK))*PENTR(:,JK)/(1.-PFRAC_UP(:,JK)) !&
+    ELSEWHERE
+     ZMIX2(:) = 0. !&
+    ENDWHERE  ! GTEST
+
+
+! If the updraft did not stop, compute cons updraft characteritics at jk+KKL
+   WHERE (GTEST)  
+    PTHL_UP(:,JK+KKL)=(PTHL_UP(:,JK)*(1.-0.5*ZMIX2(:)) + PTHLM(:,JK)*ZMIX2(:)) &
+                          /(1.+0.5*ZMIX2(:))   
+    PRT_UP(:,JK+KKL) =(PRT_UP (:,JK)*(1.-0.5*ZMIX2(:)) + PRTM(:,JK)*ZMIX2(:))  &
+                          /(1.+0.5*ZMIX2(:))
+  ENDWHERE
+  
+
+  IF(OMIXUV) THEN
+    IF(JK/=KKB) THEN
+      WHERE(GTEST)
+        PU_UP(:,JK+KKL) = (PU_UP (:,JK)*(1-0.5*ZMIX2(:)) + PUM(:,JK)*ZMIX2(:)+ &
+                          0.5*XPRES_UV*(PZZ(:,JK+KKL)-PZZ(:,JK))*&
+                          ((PUM(:,JK+KKL)-PUM(:,JK))/PDZZ(:,JK+KKL)+&
+                           (PUM(:,JK)-PUM(:,JK-KKL))/PDZZ(:,JK))        )   &
+                          /(1+0.5*ZMIX2(:))
+        PV_UP(:,JK+KKL) = (PV_UP (:,JK)*(1-0.5*ZMIX2(:)) + PVM(:,JK)*ZMIX2(:)+ &
+                          0.5*XPRES_UV*(PZZ(:,JK+KKL)-PZZ(:,JK))*&
+                          ((PVM(:,JK+KKL)-PVM(:,JK))/PDZZ(:,JK+KKL)+&
+                           (PVM(:,JK)-PVM(:,JK-KKL))/PDZZ(:,JK))    )   &
+                          /(1+0.5*ZMIX2(:))
+      ENDWHERE
+    ELSE
+      WHERE(GTEST)
+        PU_UP(:,JK+KKL) = (PU_UP (:,JK)*(1-0.5*ZMIX2(:)) + PUM(:,JK)*ZMIX2(:)+ &
+                          0.5*XPRES_UV*(PZZ(:,JK+KKL)-PZZ(:,JK))*&
+                          ((PUM(:,JK+KKL)-PUM(:,JK))/PDZZ(:,JK+KKL))        )   &
+                          /(1+0.5*ZMIX2(:))
+        PV_UP(:,JK+KKL) = (PV_UP (:,JK)*(1-0.5*ZMIX2(:)) + PVM(:,JK)*ZMIX2(:)+ &
+                          0.5*XPRES_UV*(PZZ(:,JK+KKL)-PZZ(:,JK))*&
+                          ((PVM(:,JK+KKL)-PVM(:,JK))/PDZZ(:,JK+KKL))    )   &
+                          /(1+0.5*ZMIX2(:))
+      ENDWHERE
+
+    ENDIF
+  ENDIF
+  DO JSV=1,ISV 
+     IF (ONOMIXLG .AND. JSV >= KSV_LGBEG .AND. JSV<= KSV_LGEND) CYCLE
+      WHERE(GTEST) 
+           PSV_UP(:,JK+KKL,JSV) = (PSV_UP (:,JK,JSV)*(1-0.5*ZMIX2(:)) + &
+                        PSVM(:,JK,JSV)*ZMIX2(:))  /(1+0.5*ZMIX2(:))
+      ENDWHERE                        
+  END DO  
+  
+! Compute non cons. var. at level JK+KKL
+  ZRC_UP(:)=PRC_UP(:,JK) ! guess = level just below
+  ZRI_UP(:)=PRI_UP(:,JK) ! guess = level just below
+  CALL TH_R_FROM_THL_RT_1D(HFRAC_ICE,PFRAC_ICE_UP(:,JK+KKL),ZPRES_F(:,JK+KKL), &
+          PTHL_UP(:,JK+KKL),PRT_UP(:,JK+KKL),ZTH_UP(:,JK+KKL),              &
+          ZRV_UP(:),ZRC_UP(:),ZRI_UP(:),ZRSATW(:),ZRSATI(:))
+  WHERE(GTEST)
+    PRC_UP(:,JK+KKL)=ZRC_UP(:)
+    PRV_UP(:,JK+KKL)=ZRV_UP(:)
+    PRI_UP(:,JK+KKL)=ZRI_UP(:)
+    PRSAT_UP(:,JK+KKL) = ZRSATW(:)*(1-PFRAC_ICE_UP(:,JK+KKL)) + ZRSATI(:)*PFRAC_ICE_UP(:,JK+KKL)
+  ENDWHERE
+  
+
+! Compute the updraft theta_v, buoyancy and w**2 for level JK+KKL
+  WHERE(GTEST)
+      PTHV_UP(:,JK+KKL) = ZTH_UP(:,JK+KKL)*((1+ZRVORD*PRV_UP(:,JK+KKL))/(1+PRT_UP(:,JK+KKL)))
+ ENDWHERE
+   !IF(LDUMMY1) THEN
+   !print*,"PTHV_UP(:,",JK+KKL,")=",minval(PTHV_UP(:,JK+KKL)),maxval(PTHV_UP(:,JK+KKL))
+   !print*,"ZTHVM_F(:,",JK+KKL,")=",minval(ZTHVM_F(:,JK+KKL)),maxval(ZTHVM_F(:,JK+KKL))
+   !END IF
+   !================================================================================
+   ! CALCUL DU FLUX DE MASSE   
+   !================================================================================
+ ZMIX1(:)=0.
+ WHERE(GTEST)
+   ! identique dans Rio, EDKF ou dans la zone grise      
+    ZMIX1(:)=ZZDZ(:,JK)*(PENTR(:,JK)-PDETR(:,JK))
+    PEMF(:,JK+KKL)=PEMF(:,JK)*EXP(ZMIX1(:))
+ ENDWHERE  
+   IF(LDUMMY1) THEN
+   print*,"PEMF(:,",JK+KKL,")=",minval(PEMF(:,JK+KKL)),maxval(PEMF(:,JK+KKL))
+   END IF
+   !================================================================================
+   ! FRACTION DE THERMIQUE   
+   !================================================================================
+        ! on cherche � savoir s'il y a des vitesses verticales non d�finies
+        ! je n'utilise que ZW_UP2 pour pouvoir avoir une valeur si ZW_UP
+        ! n'est pas d�fini 
+IF (maxval(ZW_UP2(:,JK+KKL)) .NE. maxval(ZW_UP2(:,JK+KKL))) STOP 'probleme ici'
+! si on est dans la zone grise la d�finition du flux de masse change
+! donc celle de alpha aussi
+WHERE(GTEST)
+       !attention je ne suis pas au point de masse
+WHERE ((SQRT(ZW_UP2(:,JK+KKL))-PWM(:,JK+KKL))>ZEPS)
+  PFRAC_UP(:,JK+KKL)=PEMF(:,JK+KKL)/((SQRT(ZW_UP2(:,JK+KKL))-PWM(:,JK+KKL))*ZRHO_F(:,JK+KKL))
+ELSEWHERE
+  PFRAC_UP(:,JK+KKL)=0.
+ENDWHERE
+  PFRAC_UP(:,JK+KKL)=MIN(PFRAC_UP(:,JK+KKL),XFRAC_LIM)
+ENDWHERE
+
+
+   IF(LDUMMY1)THEN
+   print*,"PFRAC_UP(:,",JK+KKL,")=",minval(PFRAC_UP(:,JK+KKL)),maxval(PFRAC_UP(:,JK+KKL))
+   END IF
+! calcul des termes environmentaux au point de flux
+  WHERE(GTEST) 
+     !WHERE(PFRAC_UP(:,JK+KKL)>0 .AND. PFRAC_UP(:,JK+KKL)< XFRAC_LIM) 
+     WHERE( PFRAC_UP(:,JK+KKL)>0 ) 
+     PTHL_DO(:,JK+KKL)=((PTHLM(:,JK)+PTHLM(:,JK+KKL))*0.5-PFRAC_UP(:,JK+KKL)*PTHL_UP(:,JK+KKL)) &
+                         /(1.-PFRAC_UP(:,JK+KKL))
+     PRT_DO(:,JK+KKL) =((PRTM(:,JK)+PRTM(:,JK+KKL))*0.5-PFRAC_UP(:,JK+KKL)*PRT_UP(:,JK+KKL)) &
+                         /(1.-PFRAC_UP(:,JK+KKL))
+     PU_DO(:,JK+KKL)  = ((PUM(:,JK)+PUM(:,JK+KKL))*0.5-PFRAC_UP(:,JK+KKL)*PU_UP(:,JK+KKL)) &
+                         /(1.-PFRAC_UP(:,JK+KKL))
+     PV_DO(:,JK+KKL)  = ((PVM(:,JK)+PVM(:,JK+KKL))*0.5-PFRAC_UP(:,JK+KKL)*PV_UP(:,JK+KKL)) &
+                         /(1.-PFRAC_UP(:,JK+KKL))
+     PTHV_DO(:,JK+KKL)=(ZTHVM_F(:,JK+KKL)-PFRAC_UP(:,JK+KKL)*PTHV_UP(:,JK+KKL))&
+                          /(1.-PFRAC_UP(:,JK+KKL))
+    ENDWHERE  
+  ENDWHERE  
+  DO JSV=1,ISV 
+     IF (ONOMIXLG .AND. JSV >= KSV_LGBEG .AND. JSV<= KSV_LGEND) CYCLE
+      WHERE(GTEST) 
+      !WHERE(PFRAC_UP(:,JK+KKL)>0 .AND. PFRAC_UP(:,JK+KKL)<= XFRAC_LIM) 
+      WHERE(PFRAC_UP(:,JK+KKL)>0 ) 
+           PSV_DO(:,JK+KKL,JSV) = ((PSVM(:,JK,JSV)+PSVM(:,JK+1,JSV))*0.5-PFRAC_UP(:,JK+KKL)*PSV_UP(:,JK+KKL,JSV))&
+                                  /(1.-PFRAC_UP(:,JK+KKL))
+      ENDWHERE  
+      ENDWHERE                        
+  ENDDO  
+
+  WHERE(GTEST) 
+  PFRAC_UP(:,JK+KKL)=MIN(XFRAC_UP_MAX,PFRAC_UP(:,JK+KKL))
+  ENDWHERE  
+! Test if the updraft has reach the ETL
+  GTESTETL(:)=.FALSE.
+  WHERE (GTEST.AND.(PBUO_INTEG(:,JK)<=0.))
+      KKETL(:) = JK+KKL
+      GTESTETL(:)=.TRUE.
+  ENDWHERE
+IF(LDUMMY1)THEN
+print*,"GTESTETL=",GTESTETL
+END IF
+
+! Test is we have reached the top of the updraft
+IF(LDUMMY1)THEN
+print*,"ZW_UP2(:,",JK+KKL,")=",minval(ZW_UP2(:,JK+KKL)),maxval(ZW_UP2(:,JK+KKL))
+print*,"ZEPS=",ZEPS
+END IF
+
+!  WHERE (GTEST.AND.((ZW_UP2(:,JK+KKL)<=ZEPS).OR.(PEMF(:,JK+KKL)<=ZEPS) .OR. PFRAC_UP(:,JK+KKL)<= XALPHA_SEUIL))
+  WHERE ( GTEST .AND. ( (ZW_UP2(:,JK+KKL)<=10E-5) .OR. (PEMF(:,JK+KKL)<=10E-5)) )
+      ZW_UP2   (:,JK+KKL)=0.
+      PEMF     (:,JK+KKL)=0.
+      GTEST    (:)       =.FALSE.
+      PTHL_UP  (:,JK+KKL)=ZTHLM_F(:,JK+KKL)
+      PRT_UP   (:,JK+KKL)=ZRTM_F(:,JK+KKL)
+      PRC_UP   (:,JK+KKL)=0.
+      PRI_UP   (:,JK+KKL)=0.
+      PRV_UP   (:,JK+KKL)=ZRVM_F (:,JK+KKL)
+      PTHV_UP  (:,JK+KKL)=ZTHVM_F(:,JK+KKL)
+      
+      PFRAC_UP (:,JK+KKL)=0.
+      KKCTL    (:)       =JK+KKL
+      PTHL_DO  (:,JK+KKL)=ZTHLM_F(:,JK+KKL)
+      PRT_DO   (:,JK+KKL)=ZRTM_F(:,JK+KKL)
+      PTHV_DO  (:,JK+KKL)=ZTHVM_F(:,JK+KKL)
+  ENDWHERE
+
+ENDDO ! boucle JK
+!STOP
+  PW_UP(:,:)=SQRT(ZW_UP2(:,:))
+
+  PEMF(:,KKB) =0.
+
+! Limits the shallow convection scheme when cloud heigth is higher than 3000m.
+! To do this, mass flux is multiplied by a coefficient decreasing linearly
+! from 1 (for clouds of ZDEPTH_MAX1 m of depth) to 0 (for clouds of ZDEPTH_MAX2 m of depth).
+! This way, all MF fluxes are diminished by this amount.
+! Diagnosed cloud fraction is also multiplied by the same coefficient.
+!
+  DO JI=1,SIZE(PTHM,1) 
+     PDEPTH(JI) = MAX(0., PZZ(JI,KKCTL(JI)) -  PZZ(JI,KKLCL(JI)) )
+  END DO
+
+GWORK1(:)= (GTESTLCL(:) .AND. (PDEPTH(:) > ZDEPTH_MAX1) )
+GWORK2(:,:) = SPREAD( GWORK1(:), DIM=2, NCOPIES=MAX(KKU,KKA) )
+ZCOEF(:,:) = SPREAD( (1.-(PDEPTH(:)-ZDEPTH_MAX1)/(ZDEPTH_MAX2-ZDEPTH_MAX1)), DIM=2, NCOPIES=SIZE(ZCOEF,2))
+print*,"je sors de compute_updraft"
+
+END SUBROUTINE COMPUTE_UPDRAFT_HRIO
diff --git a/src/MNH/mf_turb_greyzone.f90 b/src/MNH/mf_turb_greyzone.f90
new file mode 100644
index 0000000000000000000000000000000000000000..bfa76cf075c85087ab3b9cba2ed5b1911e13ae6f
--- /dev/null
+++ b/src/MNH/mf_turb_greyzone.f90
@@ -0,0 +1,336 @@
+!     ######spl
+     MODULE MODI_MF_TURB_GREYZONE
+!    ######################
+!
+INTERFACE
+!     #################################################################
+      SUBROUTINE MF_TURB_GREYZONE(KKA,KKB,KKE,KKU,KKL,OMIXUV,                  &
+                ONOMIXLG,KSV_LGBEG,KSV_LGEND,                         &
+                PIMPL, PTSTEP,                              &
+                PDZZ,                                                 &
+                PRHODJ,                                               &
+                PTHLM,PTHVM,PRTM,PUM,PVM,PSVM,                        &
+                PTHLDT,PRTDT,PUDT,PVDT,PSVDT,                         &
+                PEMF,PTHL_UP,PTHV_UP,PRT_UP,PU_UP,PV_UP,PSV_UP,       &
+                     PTHL_DO,PTHV_DO,PRT_DO,PU_DO,PV_DO,PSV_DO,       &
+                PFLXZTHMF,PFLXZTHVMF,PFLXZRMF,PFLXZUMF,PFLXZVMF,      &
+                PFLXZSVMF                                             )
+
+!     #################################################################
+!
+!               
+!*               1.1  Declaration of Arguments
+!
+!
+INTEGER,                INTENT(IN)   :: KKA          ! near ground array index
+INTEGER,                INTENT(IN)   :: KKB          ! near ground physical index
+INTEGER,                INTENT(IN)   :: KKE          ! uppest atmosphere physical index
+INTEGER,                INTENT(IN)   :: KKU          ! uppest atmosphere array index
+INTEGER,                INTENT(IN)   :: KKL          ! +1 if grid goes from ground to atmosphere top, -1 otherwise
+
+LOGICAL,                INTENT(IN)   :: OMIXUV      ! True if mixing of momentum
+LOGICAL,                INTENT(IN)   :: ONOMIXLG  ! False if mixing of lagrangian tracer
+INTEGER,                INTENT(IN)   :: KSV_LGBEG ! first index of lag. tracer
+INTEGER,                INTENT(IN)   :: KSV_LGEND ! last  index of lag. tracer
+REAL,                   INTENT(IN)   :: PIMPL       ! degree of implicitness
+REAL,                 INTENT(IN)     ::  PTSTEP   ! Dynamical timestep 
+!
+REAL, DIMENSION(:,:), INTENT(IN)   :: PDZZ        ! metric coefficients
+
+REAL, DIMENSION(:,:), INTENT(IN)   ::  PRHODJ    ! dry density * Grid size
+
+!   Conservative var. at t-dt
+REAL, DIMENSION(:,:), INTENT(IN) ::  PTHLM       ! conservative pot. temp.
+REAL, DIMENSION(:,:), INTENT(IN) ::  PRTM         ! water var.  where 
+!  Virtual potential temperature at t-dt
+REAL, DIMENSION(:,:), INTENT(IN) ::  PTHVM 
+!  Momentum at t-dt
+REAL, DIMENSION(:,:), INTENT(IN) ::  PUM
+REAL, DIMENSION(:,:), INTENT(IN) ::  PVM
+!  scalar variables at t-dt
+REAL, DIMENSION(:,:,:), INTENT(IN) ::  PSVM
+!
+! Tendencies of conservative variables
+REAL, DIMENSION(:,:),   INTENT(OUT) ::  PTHLDT
+
+REAL, DIMENSION(:,:),   INTENT(OUT) ::  PRTDT 
+! Tendencies of momentum
+REAL, DIMENSION(:,:),   INTENT(OUT) ::  PUDT
+REAL, DIMENSION(:,:),   INTENT(OUT) ::  PVDT
+! Tendencies of scalar variables
+REAL, DIMENSION(:,:,:), INTENT(OUT) ::  PSVDT
+
+
+! Updraft characteritics
+REAL, DIMENSION(:,:), INTENT(IN)   ::  PEMF,PTHL_UP,PTHV_UP,PRT_UP,PU_UP,PV_UP
+REAL, DIMENSION(:,:), INTENT(IN)   ::       PTHL_DO,PTHV_DO,PRT_DO,PU_DO,PV_DO
+REAL, DIMENSION(:,:,:), INTENT(IN) ::  PSV_UP, PSV_DO
+! Fluxes
+REAL, DIMENSION(:,:), INTENT(OUT)  ::  PFLXZTHMF,PFLXZTHVMF,PFLXZRMF,PFLXZUMF,PFLXZVMF
+
+REAL, DIMENSION(:,:,:), INTENT(OUT)::  PFLXZSVMF
+
+END SUBROUTINE MF_TURB_GREYZONE
+
+END INTERFACE
+!
+END MODULE MODI_MF_TURB_GREYZONE
+!     #################################################################
+      SUBROUTINE MF_TURB_GREYZONE(KKA, KKB, KKE, KKU, KKL,OMIXUV,                  &
+                ONOMIXLG,KSV_LGBEG,KSV_LGEND,                         &
+                PIMPL, PTSTEP,                                        &
+                PDZZ,                                                 &
+                PRHODJ,                                               &
+                PTHLM,PTHVM,PRTM,PUM,PVM,PSVM,                        &
+                PTHLDT,PRTDT,PUDT,PVDT,PSVDT,                         &
+                PEMF,PTHL_UP,PTHV_UP,PRT_UP,PU_UP,PV_UP,PSV_UP,       &
+                     PTHL_DO,PTHV_DO,PRT_DO,PU_DO,PV_DO,PSV_DO,       &
+                PFLXZTHMF,PFLXZTHVMF,PFLXZRMF,PFLXZUMF,PFLXZVMF,      &
+                PFLXZSVMF                                             )
+
+!     #################################################################
+!
+!
+!!****  *MF_TURB_GREYZONE* - computes the MF_turbulent source terms for the prognostic
+!!                  variables. 
+!!
+!!    PURPOSE
+!!    -------
+!!****  The purpose of this routine is to compute the source terms in 
+!!    the evolution equations due to the MF turbulent mixing. 
+!!      The source term is computed as the divergence of the turbulent fluxes.
+!
+!!**  METHOD
+!!    ------
+!!    
+!!
+!!    EXTERNAL
+!!    --------
+!!
+!!    IMPLICIT ARGUMENTS
+!!    ------------------
+!!
+!!
+!!    REFERENCE
+!!    ---------
+!!
+!!    AUTHOR
+!!    ------
+!!     
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!  10/2009     (C.Lac)        Introduction of different PTSTEP according to the
+!!                              advection schemes
+!!  09/2010     (V.Masson)     Optimization
+!!     S. Riette Jan 2012: support for both order of vertical levels
+!!                         suppression of useless initialisations
+!!
+!! --------------------------------------------------------------------------
+!       
+!*      0. DECLARATIONS
+!          ------------
+!
+USE MODD_PARAM_MFSHALL_n
+!
+USE MODI_SHUMAN_MF
+USE MODI_TRIDIAG_MASSFLUX
+!
+IMPLICIT NONE
+!
+!
+!*      0.1  declarations of arguments
+!
+!
+INTEGER,                INTENT(IN)   :: KKA          ! near ground array index
+INTEGER,                INTENT(IN)   :: KKB          ! near ground physical index
+INTEGER,                INTENT(IN)   :: KKE          ! uppest atmosphere physical index
+INTEGER,                INTENT(IN)   :: KKU          ! uppest atmosphere array index
+INTEGER,                INTENT(IN)   :: KKL          ! +1 if grid goes from ground to atmosphere top, -1 otherwise
+LOGICAL,                INTENT(IN)   :: OMIXUV      ! True if mixing of momentum
+LOGICAL,                INTENT(IN)   :: ONOMIXLG  ! False if mixing of lagrangian tracer
+INTEGER,                INTENT(IN)   :: KSV_LGBEG ! first index of lag. tracer
+INTEGER,                INTENT(IN)   :: KSV_LGEND ! last  index of lag. tracer
+REAL,                   INTENT(IN)   :: PIMPL       ! degree of implicitness
+REAL,                 INTENT(IN)     ::  PTSTEP   ! Dynamical timestep 
+!
+REAL, DIMENSION(:,:), INTENT(IN)   :: PDZZ        ! metric coefficients
+
+REAL, DIMENSION(:,:), INTENT(IN)   :: PRHODJ      ! dry density * Grid size
+
+!   Conservative var. at t-dt
+REAL, DIMENSION(:,:), INTENT(IN) ::  PTHLM        ! conservative pot. temp.
+REAL, DIMENSION(:,:), INTENT(IN) ::  PRTM         ! water var.  where 
+!  Virtual potential temperature at t-dt
+REAL, DIMENSION(:,:), INTENT(IN) ::  PTHVM 
+!  Momentum at t-dt
+REAL, DIMENSION(:,:), INTENT(IN) ::  PUM
+REAL, DIMENSION(:,:), INTENT(IN) ::  PVM
+!  scalar variables at t-dt
+REAL, DIMENSION(:,:,:), INTENT(IN) ::  PSVM
+!
+! Tendencies of conservative variables
+REAL, DIMENSION(:,:),   INTENT(OUT) ::  PTHLDT
+
+REAL, DIMENSION(:,:),   INTENT(OUT) ::  PRTDT 
+! Tendencies of momentum
+REAL, DIMENSION(:,:),   INTENT(OUT) ::  PUDT
+REAL, DIMENSION(:,:),   INTENT(OUT) ::  PVDT
+! Tendencies of scalar variables
+REAL, DIMENSION(:,:,:), INTENT(OUT) ::  PSVDT
+
+
+! Updraft/environment characteritics
+REAL, DIMENSION(:,:), INTENT(IN)   ::  PEMF,PTHL_UP,PTHV_UP,PRT_UP,PU_UP,PV_UP
+REAL, DIMENSION(:,:), INTENT(IN)   ::  PTHL_DO,PTHV_DO,PRT_DO,PU_DO,PV_DO
+REAL, DIMENSION(:,:,:), INTENT(IN) ::  PSV_UP,PSV_DO
+! Fluxes
+REAL, DIMENSION(:,:), INTENT(OUT)  ::  PFLXZTHMF,PFLXZTHVMF,PFLXZRMF,PFLXZUMF,PFLXZVMF
+
+REAL, DIMENSION(:,:,:), INTENT(OUT)::  PFLXZSVMF
+!
+!
+!
+!-------------------------------------------------------------------------------
+!
+!       0.2  declaration of local variables
+!
+
+REAL, DIMENSION(SIZE(PTHLM,1),SIZE(PTHLM,2)) :: ZVARS
+
+!
+INTEGER :: ISV,JSV          !number of scalar variables and Loop counter
+!
+!----------------------------------------------------------------------------
+!
+!*      1.PRELIMINARIES
+!         -------------
+!
+!
+! number of scalar var
+ISV=SIZE(PSVM,3)
+
+!
+PFLXZSVMF = 0.
+PSVDT = 0.
+
+!
+!----------------------------------------------------------------------------
+!
+!*      2. COMPUTE THE MEAN FLUX OF CONSERVATIVE VARIABLES at time t-dt
+!          (equation (3) of Soares et al)
+!          + THE MEAN FLUX OF THETA_V (buoyancy flux)
+!          -----------------------------------------------
+!   ( Resulting fluxes are in flux level (w-point) as PEMF and PTHL_UP )
+!
+! downdraft data are on the flux points
+PFLXZTHMF(:,:) = PEMF(:,:)*(PTHL_UP(:,:)-PTHL_DO(:,:))
+
+PFLXZRMF(:,:) =  PEMF(:,:)*(PRT_UP(:,:)-PRT_DO(:,:))
+
+PFLXZTHVMF(:,:) = PEMF(:,:)*(PTHV_UP(:,:)-PTHV_DO(:,:))
+
+IF (OMIXUV) THEN
+  PFLXZUMF(:,:) =  PEMF(:,:)*(PU_UP(:,:)-PU_DO(:,:))
+  PFLXZVMF(:,:) =  PEMF(:,:)*(PV_UP(:,:)-PV_DO(:,:))
+ELSE
+  PFLXZUMF(:,:) = 0.
+  PFLXZVMF(:,:) = 0.
+ENDIF
+!
+!
+!----------------------------------------------------------------------------
+!
+!*      3. COMPUTE TENDENCIES OF CONSERVATIVE VARIABLES (or treated as such...)
+!          (implicit formulation)
+!          --------------------------------------------
+!
+
+!
+!
+! 3.1 Compute the tendency for the conservative potential temperature
+!     (PDZZ and flux in w-point and PRHODJ is mass point, result in mass point)
+!
+CALL TRIDIAG_MASSFLUX(KKA,KKB,KKE,KKU,KKL,PTHLM,PFLXZTHMF,-PEMF,PTSTEP,PIMPL,  &
+                      PDZZ,PRHODJ,ZVARS )
+! compute new flux
+!!!!!!!!!!!!!!!!!!!!!!!!!!
+! Pourquoi on le recalcule ici alors qu'il n'est pas utilisé ailleurs
+! sauf pour l'écriture ?
+! Est ce que ZVARS est au point de masse pour qu'il doivent être remis au point
+! de flux ?
+!!!!!!!!!!!!!!!!!!!!!!!!!!
+PFLXZTHMF(:,:) = PEMF(:,:)*(PTHL_UP(:,:)-MZM_MF(KKA,KKU,KKL,ZVARS(:,:)))
+
+!!! compute THL tendency
+!
+PTHLDT(:,:)= (ZVARS(:,:)-PTHLM(:,:))/PTSTEP
+
+!
+! 3.2 Compute the tendency for the conservative mixing ratio
+!
+CALL TRIDIAG_MASSFLUX(KKA,KKB,KKE,KKU,KKL,PRTM(:,:),PFLXZRMF,-PEMF,PTSTEP,PIMPL,  &
+                                 PDZZ,PRHODJ,ZVARS )
+! compute new flux
+PFLXZRMF(:,:) =  PEMF(:,:)*(PRT_UP(:,:)-MZM_MF(KKA,KKU,KKL,ZVARS(:,:)))
+
+!!! compute RT tendency
+PRTDT(:,:) = (ZVARS(:,:)-PRTM(:,:))/PTSTEP
+!
+
+IF (OMIXUV) THEN
+  !
+  ! 3.3 Compute the tendency for the (non conservative but treated as it) zonal momentum
+  !     (PDZZ and flux in w-point and PRHODJ is mass point, result in mass point)
+  !
+
+  CALL TRIDIAG_MASSFLUX(KKA,KKB,KKE,KKU,KKL,PUM,PFLXZUMF,-PEMF,PTSTEP,PIMPL,  &
+                                 PDZZ,PRHODJ,ZVARS )
+  ! compute new flux
+  PFLXZUMF(:,:) = PEMF(:,:)*(PU_UP(:,:)-MZM_MF(KKA,KKU,KKL,ZVARS(:,:)))
+
+  ! compute U tendency
+  PUDT(:,:)= (ZVARS(:,:)-PUM(:,:))/PTSTEP
+
+  !
+  !
+  ! 3.4 Compute the tendency for the (non conservative but treated as it for the time beiing)
+  !                                  meridian momentum
+  !     (PDZZ and flux in w-point and PRHODJ is mass point, result in mass point)
+  !
+  CALL TRIDIAG_MASSFLUX(KKA,KKB,KKE,KKU,KKL,PVM,PFLXZVMF,-PEMF,PTSTEP,PIMPL,  &
+                                 PDZZ,PRHODJ,ZVARS )
+  ! compute new flux
+  PFLXZVMF(:,:) = PEMF(:,:)*(PV_UP(:,:)-MZM_MF(KKA,KKU,KKL,ZVARS(:,:)))
+
+  ! compute V tendency
+  PVDT(:,:)= (ZVARS(:,:)-PVM(:,:))/PTSTEP
+ELSE
+  PUDT(:,:)=0.
+  PVDT(:,:)=0.
+ENDIF
+
+DO JSV=1,ISV 
+
+  IF (ONOMIXLG .AND. JSV >= KSV_LGBEG .AND. JSV<= KSV_LGEND) CYCLE
+  
+  !*     compute mean flux of scalar variables at time t-dt
+  !   ( Resulting fluxes are in flux level (w-point) as PEMF and PTHL_UP )
+
+  PFLXZSVMF(:,:,JSV) = PEMF(:,:)*(PSV_UP(:,:,JSV)-MZM_MF(KKA,KKU,KKL,PSVM(:,:,JSV)))
+  
+  !
+  ! 3.5 Compute the tendency for scalar variables
+  !     (PDZZ and flux in w-point and PRHODJ is mass point, result in mass point)
+  !
+  CALL TRIDIAG_MASSFLUX(KKA,KKB,KKE,KKU,KKL,PSVM(:,:,JSV),PFLXZSVMF(:,:,JSV),&
+                        -PEMF,PTSTEP,PIMPL,PDZZ,PRHODJ,ZVARS )
+  ! compute new flux
+  PFLXZSVMF(:,:,JSV) = PEMF(:,:)*(PSV_UP(:,:,JSV)-MZM_MF(KKA,KKU,KKL,ZVARS))
+
+  ! compute Sv tendency
+  PSVDT(:,:,JSV)= (ZVARS(:,:)-PSVM(:,:,JSV))/PTSTEP
+
+ENDDO
+!
+END SUBROUTINE MF_TURB_GREYZONE    
diff --git a/src/MNH/shallow_mf.f90 b/src/MNH/shallow_mf.f90
index c6592617e9cc2cc7b1275c084fb1b60965c6b1f9..0c9660fbe37d0c4afa7bfc1c2ded27f2b96057b6 100644
--- a/src/MNH/shallow_mf.f90
+++ b/src/MNH/shallow_mf.f90
@@ -1,7 +1,3 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
-!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
-!MNH_LIC for details. version 1.
 !     ######spl
      MODULE MODI_SHALLOW_MF
 !    ######################
@@ -16,13 +12,14 @@ INTERFACE
                 PRHODJ, PRHODREF,                                     &
                 PPABSM, PEXNM,                                        &
                 PSFTH,PSFRV,                                          &
-                PTHM,PRM,PUM,PVM,PTKEM,PSVM,                          &
+                PTHM,PRM,PUM,PVM,PWM,PTKEM,PSVM,                      &
                 PDUDT_MF,PDVDT_MF,                                    &
                 PDTHLDT_MF,PDRTDT_MF,PDSVDT_MF,                       &
                 PSIGMF,PRC_MF,PRI_MF,PCF_MF,PFLXZTHVMF,               &
                 PFLXZTHMF,PFLXZRMF,PFLXZUMF,PFLXZVMF,                 &
                 PTHL_UP,PRT_UP,PRV_UP,PRC_UP,PRI_UP,                  &
                 PU_UP, PV_UP, PTHV_UP, PW_UP,                         &
+                PTHL_DO,PTHV_DO,PRT_DO,PU_DO, PV_DO,                  &
                 PFRAC_UP,PEMF,PDETR,PENTR,                            &
                 KKLCL,KKETL,KKCTL                                     )
 !     #################################################################
@@ -60,7 +57,7 @@ REAL, DIMENSION(:,:),   INTENT(IN) ::  PEXNM       ! Exner function at t-dt
 REAL, DIMENSION(:),     INTENT(IN) ::  PSFTH,PSFRV ! normal surface fluxes of theta and Rv 
 REAL, DIMENSION(:,:),   INTENT(IN) ::  PTHM        ! Theta at t-dt
 REAL, DIMENSION(:,:,:), INTENT(IN) ::  PRM         ! water var. at t-dt
-REAL, DIMENSION(:,:),   INTENT(IN) ::  PUM,PVM     ! wind components at t-dt
+REAL, DIMENSION(:,:),   INTENT(IN) ::  PUM,PVM,PWM ! wind components at t-dt
 REAL, DIMENSION(:,:),   INTENT(IN) ::  PTKEM       ! tke at t-dt
 
 REAL, DIMENSION(:,:,:), INTENT(IN) ::  PSVM        ! scalar variable a t-dt
@@ -82,6 +79,13 @@ REAL, DIMENSION(:,:), INTENT(INOUT) ::  PRT_UP    ! Rt  updraft characteristics
 REAL, DIMENSION(:,:), INTENT(INOUT) ::  PRV_UP    ! Vapor updraft characteristics
 REAL, DIMENSION(:,:), INTENT(INOUT) ::  PU_UP     ! U wind updraft characteristics
 REAL, DIMENSION(:,:), INTENT(INOUT) ::  PV_UP     ! V wind updraft characteristics
+
+REAL, DIMENSION(:,:), INTENT(INOUT) ::  PTHL_DO   ! Thl environment characteristics
+REAL, DIMENSION(:,:), INTENT(INOUT) ::  PTHV_DO    ! Thv environment characteristics
+REAL, DIMENSION(:,:), INTENT(INOUT) ::  PRT_DO    ! Rt  environment characteristics
+REAL, DIMENSION(:,:), INTENT(INOUT) ::  PU_DO     ! U wind environment characteristics
+REAL, DIMENSION(:,:), INTENT(INOUT) ::  PV_DO     ! V wind environment characteristics
+
 REAL, DIMENSION(:,:), INTENT(INOUT) ::  PRC_UP    ! cloud content updraft characteristics
 REAL, DIMENSION(:,:), INTENT(INOUT) ::  PRI_UP    ! ice content   updraft characteristics
 REAL, DIMENSION(:,:), INTENT(INOUT) ::  PTHV_UP   ! Thv   updraft characteristics
@@ -98,7 +102,7 @@ END SUBROUTINE SHALLOW_MF
 END INTERFACE
 !
 END MODULE MODI_SHALLOW_MF
-!     ######spl
+!     ################################################################
       SUBROUTINE SHALLOW_MF(KKA,KKU,KKL,KRR,KRRL,KRRI,                &
                 HMF_UPDRAFT, HMF_CLOUD, HFRAC_ICE, OMIXUV,            &
                 ONOMIXLG,KSV_LGBEG,KSV_LGEND,                         &
@@ -107,13 +111,14 @@ END MODULE MODI_SHALLOW_MF
                 PRHODJ, PRHODREF,                                     &
                 PPABSM, PEXNM,                                        &
                 PSFTH,PSFRV,                                          &
-                PTHM,PRM,PUM,PVM,PTKEM,PSVM,                          &
+                PTHM,PRM,PUM,PVM,PWM,PTKEM,PSVM,                      &
                 PDUDT_MF,PDVDT_MF,                                    &
                 PDTHLDT_MF,PDRTDT_MF,PDSVDT_MF,                       &
                 PSIGMF,PRC_MF,PRI_MF,PCF_MF,PFLXZTHVMF,               &
                 PFLXZTHMF,PFLXZRMF,PFLXZUMF,PFLXZVMF,                 &
                 PTHL_UP,PRT_UP,PRV_UP,PRC_UP,PRI_UP,                  &
                 PU_UP, PV_UP, PTHV_UP, PW_UP,                         &
+                PTHL_DO,PTHV_DO,PRT_DO,PU_DO, PV_DO,                  &
                 PFRAC_UP,PEMF,PDETR,PENTR,                            &
                 KKLCL,KKETL,KKCTL                                     )
 
@@ -151,6 +156,8 @@ END MODULE MODI_SHALLOW_MF
 !!      S. Riette 18 May 2010 interface changed due to ice correction
 !!      S.Riette DUAL case
 !!      S. Riette Jan 2012: support for both order of vertical levels
+!!      R.Honnert 07/2012 : elemnts of Rio according to Bouteloup
+!!      R.Honnert 07/2012 : EDKF gray zone 
 !! --------------------------------------------------------------------------
 !
 !*      0. DECLARATIONS
@@ -163,10 +170,17 @@ USE MODD_PARAM_MFSHALL_n
 USE MODI_THL_RT_FROM_TH_R_MF
 USE MODI_COMPUTE_UPDRAFT
 USE MODI_COMPUTE_UPDRAFT_RHCJ10
+USE MODI_COMPUTE_UPDRAFT_HRIO
 USE MODI_MF_TURB
+USE MODI_MF_TURB_GREYZONE
 USE MODI_COMPUTE_MF_CLOUD
 USE MODI_COMPUTE_FRAC_ICE
 !
+!
+USE MODI_COMPUTE_BL89_ML
+USE MODD_GRID_n, ONLY : XDXHAT, XDYHAT
+USE MODD_REF_n, ONLY : XTHVREF
+!
 IMPLICIT NONE
 
 !*                    0.1  Declaration of Arguments
@@ -189,7 +203,7 @@ LOGICAL,                INTENT(IN)   :: ONOMIXLG  ! False if mixing of lagrangia
 INTEGER,                INTENT(IN)   :: KSV_LGBEG ! first index of lag. tracer
 INTEGER,                INTENT(IN)   :: KSV_LGEND ! last  index of lag. tracer
 REAL,                   INTENT(IN)   :: PIMPL_MF     ! degre of implicitness
-REAL,              INTENT(IN)     ::  PTSTEP   ! Dynamical timestep 
+REAL,                   INTENT(IN)   :: PTSTEP    ! Dynamical timestep 
 
 REAL, DIMENSION(:,:),   INTENT(IN) ::  PZZ         ! Height of flux point
 REAL, DIMENSION(:,:),   INTENT(IN) ::  PDZZ        ! Metric coefficients
@@ -202,7 +216,7 @@ REAL, DIMENSION(:,:),   INTENT(IN) ::  PEXNM       ! Exner function at t-dt
 REAL, DIMENSION(:),   INTENT(IN)   ::  PSFTH,PSFRV ! normal surface fluxes of theta and Rv 
 REAL, DIMENSION(:,:), INTENT(IN)   ::  PTHM        ! Theta at t-dt
 REAL, DIMENSION(:,:,:), INTENT(IN) ::  PRM         ! water var. at t-dt
-REAL, DIMENSION(:,:),   INTENT(IN) ::  PUM,PVM     ! wind components at t-dt
+REAL, DIMENSION(:,:),   INTENT(IN) ::  PUM,PVM,PWM ! wind components at t-dt
 REAL, DIMENSION(:,:),   INTENT(IN) ::  PTKEM       ! tke at t-dt
 
 REAL, DIMENSION(:,:,:), INTENT(IN) ::  PSVM        ! scalar variable a t-dt
@@ -224,6 +238,13 @@ REAL, DIMENSION(:,:), INTENT(INOUT) ::  PRT_UP    ! Rt  updraft characteristics
 REAL, DIMENSION(:,:), INTENT(INOUT) ::  PRV_UP    ! Vapor updraft characteristics
 REAL, DIMENSION(:,:), INTENT(INOUT) ::  PU_UP     ! U wind updraft characteristics
 REAL, DIMENSION(:,:), INTENT(INOUT) ::  PV_UP     ! V wind updraft characteristics
+
+REAL, DIMENSION(:,:), INTENT(INOUT) ::  PTHL_DO   ! Thl environment characteristics
+REAL, DIMENSION(:,:), INTENT(INOUT) ::  PTHV_DO    ! Thv environment characteristics
+REAL, DIMENSION(:,:), INTENT(INOUT) ::  PRT_DO    ! Rt  environment characteristics
+REAL, DIMENSION(:,:), INTENT(INOUT) ::  PU_DO     ! U wind environment characteristics
+REAL, DIMENSION(:,:), INTENT(INOUT) ::  PV_DO     ! V wind environment characteristics
+
 REAL, DIMENSION(:,:), INTENT(INOUT) ::  PRC_UP    ! cloud content updraft characteristics
 REAL, DIMENSION(:,:), INTENT(INOUT) ::  PRI_UP    ! ice content   updraft characteristics
 REAL, DIMENSION(:,:), INTENT(INOUT) ::  PTHV_UP   ! Thv   updraft characteristics
@@ -246,6 +267,7 @@ REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2)) :: ZFRAC_ICE
 
 REAL, DIMENSION(SIZE(PSVM,1),SIZE(PSVM,2),SIZE(PSVM,3)) ::  &
                                           ZSV_UP,&  ! updraft scalar var.
+                                          ZSV_DO,&  ! updraft scalar var.
                                           ZFLXZSVMF ! Flux     
 REAL, DIMENSION(SIZE(PTHM,1)) :: ZDEPTH             ! Deepness of cloud
 REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2)) :: ZFRAC_ICE_UP ! liquid/solid fraction in updraft
@@ -254,6 +276,11 @@ REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2)) :: ZRSAT_UP ! Rsat in updraft
 LOGICAL :: GENTR_DETR  ! flag to recompute entrainment, detrainment and mass flux
 INTEGER :: IKB         ! near ground physical index
 INTEGER :: IKE         ! uppest atmosphere physical index
+! pour bouttle et al.
+REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2)) ::  ZG_O_THVREF,PTHVREF  
+REAL, DIMENSION(SIZE(PTHM,1)) ::  ZRESOL_NORM, ZRESOL_GRID,& ! normalized grid
+                                  ZLUP, ZPLAW
+    INTEGER :: JI,JJ,JK         ! loop counter
 !------------------------------------------------------------------------
 
 !!! 1. Initialisation
@@ -263,7 +290,8 @@ IKB=KKA+KKL*JPVEXT
 IKE=KKU-KKL*JPVEXT
 
 ! updraft governing variables
-IF (HMF_UPDRAFT == 'EDKF') THEN
+IF (HMF_UPDRAFT == 'EDKF'.OR. HMF_UPDRAFT == 'HRIO' .OR. &
+    HMF_UPDRAFT == 'RHCJ'.OR. HMF_UPDRAFT == 'BOUT'  ) THEN
   PENTR      = 1.E20
   PDETR      = 1.E20
   PEMF       = 1.E20
@@ -285,7 +313,7 @@ ZTHVM(:,:) = PTHM(:,:)*((1.+XRV / XRD *PRM(:,:,1))/(1.+ZRTM(:,:)))
 !!! 2. Compute updraft
 !!!    ---------------
 !
-IF (HMF_UPDRAFT == 'EDKF') THEN
+IF (HMF_UPDRAFT == 'EDKF' .OR. HMF_UPDRAFT == 'BOUT') THEN
   GENTR_DETR = .TRUE.
   CALL COMPUTE_UPDRAFT(KKA,IKB,IKE,KKU,KKL,HFRAC_ICE,GENTR_DETR,OMIXUV,&
                        ONOMIXLG,KSV_LGBEG,KSV_LGEND,             &
@@ -311,6 +339,22 @@ ELSEIF (HMF_UPDRAFT == 'RHCJ') THEN
                        PENTR,ZBUO_INTEG,KKLCL,KKETL,KKCTL,ZDEPTH )
 ELSEIF (HMF_UPDRAFT == 'DUAL') THEN
   !Updraft characteristics are already computed and received by interface
+ELSEIF (HMF_UPDRAFT == 'HRIO') THEN
+  GENTR_DETR = .TRUE.
+  ! ma version avec l'entrainement de Rio et al.
+  CALL COMPUTE_UPDRAFT_HRIO(KKA,IKB,IKE,KKU,KKL,HFRAC_ICE,GENTR_DETR,OMIXUV,                   &
+                       ONOMIXLG,KSV_LGBEG,KSV_LGEND,             &
+                       PZZ,PDZZ,                                 &
+                       PSFTH,PSFRV,PPABSM,PRHODREF,              &
+                       PUM,PVM,PTKEM,PWM,                        &                                                 
+                       PTHM,PRM(:,:,1),ZTHLM,ZRTM, PSVM,         &
+                       PTHL_UP,PRT_UP,PRV_UP,PRC_UP,PRI_UP,      &
+                       PTHV_UP,PW_UP, PU_UP, PV_UP, ZSV_UP,      &
+                       PFRAC_UP,ZFRAC_ICE_UP,ZRSAT_UP,           &
+                       PTHL_DO, PTHV_DO, PRT_DO,                 &
+                       PU_DO, PV_DO, ZSV_DO,                     &
+                       PEMF,PDETR,                               &
+                       PENTR,ZBUO_INTEG,KKLCL,KKETL,KKCTL,ZDEPTH )
 ELSE
   WRITE(*,*) ' STOP'                                                     
   WRITE(*,*) ' NO UPDRAFT MODEL FOR EDKF : CMF_UPDRAFT =',HMF_UPDRAFT 
@@ -337,17 +381,65 @@ CALL COMPUTE_MF_CLOUD(KKA,IKB,IKE,KKU,KKL,KRR,KRRL,KRRI,&
 !!!    ------------------------------------------------------------------------
 !
 ZEMF_O_RHODREF=PEMF/PRHODREF
-CALL MF_TURB(KKA, IKB, IKE, KKU, KKL, OMIXUV,                         &
-             ONOMIXLG,KSV_LGBEG,KSV_LGEND,                            &
-             PIMPL_MF, PTSTEP,                                        &
-             PDZZ,                                                    &
-             PRHODJ,                                                  &
-             ZTHLM,ZTHVM,ZRTM,PUM,PVM,PSVM,                           &
-             PDTHLDT_MF,PDRTDT_MF,PDUDT_MF,PDVDT_MF,PDSVDT_MF,        &
-             ZEMF_O_RHODREF,PTHL_UP,PTHV_UP,PRT_UP,PU_UP,PV_UP,ZSV_UP,&
-             PFLXZTHMF,PFLXZTHVMF,PFLXZRMF,PFLXZUMF,PFLXZVMF,         &
-             ZFLXZSVMF                                                )
+      IF(HMF_UPDRAFT == 'EDKF' .OR. HMF_UPDRAFT == 'RHCJ'.OR. HMF_UPDRAFT == 'BOUT') THEN
+       CALL MF_TURB(KKA, IKB, IKE, KKU, KKL, OMIXUV,                     &
+                ONOMIXLG,KSV_LGBEG,KSV_LGEND,                            &
+                PIMPL_MF, PTSTEP,                                        &
+                PDZZ,                                                    &
+                PRHODJ,                                                  &
+                ZTHLM,ZTHVM,ZRTM,PUM,PVM,PSVM,                           &
+                PDTHLDT_MF,PDRTDT_MF,PDUDT_MF,PDVDT_MF,PDSVDT_MF,        &
+                ZEMF_O_RHODREF,PTHL_UP,PTHV_UP,PRT_UP,PU_UP,PV_UP,ZSV_UP,&
+                PFLXZTHMF,PFLXZTHVMF,PFLXZRMF,PFLXZUMF,PFLXZVMF,         &
+                ZFLXZSVMF                                                )
+      ELSEIF (HMF_UPDRAFT == 'HRIO') THEN
+       CALL MF_TURB_GREYZONE(KKA, IKB, IKE, KKU, KKL,OMIXUV,             &
+                ONOMIXLG,KSV_LGBEG,KSV_LGEND,                            &
+                PIMPL_MF, PTSTEP,                                        &
+                PDZZ,                                                    &
+                PRHODJ,                                                  &
+                ZTHLM,ZTHVM,ZRTM,PUM,PVM,PSVM,                           &
+                PDTHLDT_MF,PDRTDT_MF,PDUDT_MF,PDVDT_MF,PDSVDT_MF,        &
+                ZEMF_O_RHODREF,PTHL_UP,PTHV_UP,PRT_UP,PU_UP,PV_UP,ZSV_UP,&
+                PTHL_DO,PTHV_DO,PRT_DO,PU_DO,PV_DO,ZSV_DO,               &
+                PFLXZTHMF,PFLXZTHVMF,PFLXZRMF,PFLXZUMF,PFLXZVMF,         &
+                ZFLXZSVMF                                                )
+       ELSE
+         WRITE(*,*) ' STOP'                                                     
+         WRITE(*,*) ' NO UPDRAFT MODEL FOR EDKF : CMF_UPDRAFT =',HMF_UPDRAFT 
+         CALL ABORT
+         STOP
+      ENDIF  
 
+     IF (HMF_UPDRAFT == 'BOUT') THEN
+      !! calcul de la hauteur de la couche limite ou de L_up
+      DO JK=1,IKE-KKL
+       PTHVREF(:,JK)=RESHAPE(XTHVREF(:,:,JK),(/SIZE(PTHM,1)*SIZE(PTHM,2)/) )
+      ENDDO
+      ZG_O_THVREF=XG/PTHVREF
+      CALL COMPUTE_BL89_ML(KKA,IKB,IKE,KKU,KKL,PDZZ,PTKEM,ZG_O_THVREF,ZTHVM,IKB,.TRUE.,ZLUP)
+      !! calcul de Dx/(h+hc)
+      DO JI=1,SIZE(XDXHAT)
+       DO JJ=1,SIZE(XDYHAT)
+          ZRESOL_GRID((JJ-1)*SIZE(XDXHAT)+JI)=SQRT(XDXHAT(JI)*XDYHAT(JJ))
+       ENDDO
+      ENDDO
+      ZRESOL_NORM=ZRESOL_GRID/ZLUP
+      !! P=loi pour MF, on utilise la même loi à chaque fois
+      ZPLAW=(ZRESOL_NORM*ZRESOL_NORM+0.19*ZRESOL_NORM**(2/3))/ &
+      (ZRESOL_NORM*ZRESOL_NORM+0.15*ZRESOL_NORM**(2/3)+0.33)
+      !! reduction des flux a posteriori
+      !! MF=P*MF en première approximation, on oublie w'f' (Kgrad) et w'f'resol (nul avec ce flux)
+      !  
+      DO JK=1,IKE-KKL
+       PFLXZTHMF(:,JK)=PFLXZTHMF(:,JK)*ZPLAW
+       PFLXZTHVMF(:,JK)=PFLXZTHVMF(:,JK)*ZPLAW
+       PFLXZRMF(:,JK)=PFLXZRMF(:,JK)*ZPLAW
+       PFLXZUMF(:,JK)=PFLXZUMF(:,JK)*ZPLAW
+       PFLXZVMF(:,JK)=PFLXZVMF(:,JK)*ZPLAW
+      ENDDO
+     END IF
+  
 ! security in the case HMF_UPDRAFT = 'DUAL'
 ! to be modified if 'DUAL' is evolving (momentum mixing for example)
 IF( HMF_UPDRAFT == 'DUAL') THEN
diff --git a/src/MNH/shallow_mf_pack.f90 b/src/MNH/shallow_mf_pack.f90
index bfa94db1d7d4e30dfc229024daf5246a4d8c230a..421a54d6b3598337e2c498090c7bedbd62f2d385 100644
--- a/src/MNH/shallow_mf_pack.f90
+++ b/src/MNH/shallow_mf_pack.f90
@@ -16,7 +16,7 @@ INTERFACE
                 PRHODJ, PRHODREF,                                     &
                 PPABSM, PEXN,                                         &
                 PSFTH,PSFRV,                                          &
-                PTHM,PRM,PUM,PVM,PTKEM,PSVM,                          &
+                PTHM,PRM,PUM,PVM,PWM,PTKEM,PSVM,                          &
                 PRTHS,PRRS,PRUS,PRVS,PRSVS,                           &
                 PSIGMF,PRC_MF,PRI_MF,PCF_MF,PFLXZTHVMF  )
 !     #################################################################
@@ -56,7 +56,7 @@ REAL, DIMENSION(:,:,:), INTENT(IN) ::  PEXN        ! Exner function at t-dt
 REAL, DIMENSION(:,:),   INTENT(IN) ::  PSFTH,PSFRV ! normal surface fluxes of theta and Rv 
 REAL, DIMENSION(:,:,:), INTENT(IN) ::  PTHM        ! Theta at t-dt
 REAL, DIMENSION(:,:,:,:),INTENT(IN)::  PRM         ! water var. at t-dt
-REAL, DIMENSION(:,:,:), INTENT(IN) ::  PUM,PVM     ! wind components at t-dt
+REAL, DIMENSION(:,:,:), INTENT(IN) ::  PUM,PVM,PWM ! wind components at t-dt
 REAL, DIMENSION(:,:,:), INTENT(IN) ::  PTKEM       ! tke at t-dt
 
 REAL, DIMENSION(:,:,:,:), INTENT(IN) ::  PSVM        ! scalar variable a t-dt
@@ -83,7 +83,7 @@ END MODULE MODI_SHALLOW_MF_PACK
                 PRHODJ, PRHODREF,                                     &
                 PPABSM, PEXN,                                         &
                 PSFTH,PSFRV,                                          &
-                PTHM,PRM,PUM,PVM,PTKEM,PSVM,                          &
+                PTHM,PRM,PUM,PVM,PWM,PTKEM,PSVM,                          &
                 PRTHS,PRRS,PRUS,PRVS,PRSVS,                           &
                 PSIGMF,PRC_MF,PRI_MF,PCF_MF,PFLXZTHVMF  )
 !     #################################################################
@@ -112,6 +112,8 @@ END MODULE MODI_SHALLOW_MF_PACK
 !!     AUTHOR
 !!     ------
 !!      V.Masson 09/2010
+!!      Modification R. Honnert 07/2012 : introduction of vertical wind 
+!!                                        for the height of the thermal
 !! --------------------------------------------------------------------------
 !
 !*      0. DECLARATIONS
@@ -169,7 +171,7 @@ REAL, DIMENSION(:,:,:), INTENT(IN) ::  PEXN        ! Exner function at t-dt
 REAL, DIMENSION(:,:),   INTENT(IN) ::  PSFTH,PSFRV ! normal surface fluxes of theta and Rv 
 REAL, DIMENSION(:,:,:), INTENT(IN) ::  PTHM        ! Theta at t-dt
 REAL, DIMENSION(:,:,:,:),INTENT(IN)::  PRM         ! water var. at t-dt
-REAL, DIMENSION(:,:,:), INTENT(IN) ::  PUM,PVM     ! wind components at t-dt
+REAL, DIMENSION(:,:,:), INTENT(IN) ::  PUM,PVM,PWM ! wind components at t-dt
 REAL, DIMENSION(:,:,:), INTENT(IN) ::  PTKEM       ! tke at t-dt
 
 REAL, DIMENSION(:,:,:,:), INTENT(IN) ::  PSVM        ! scalar variable a t-dt
@@ -192,7 +194,7 @@ REAL, DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2),SIZE(PTHM,3)) ::  ZEXN        ! Exner
 
 REAL, DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2),SIZE(PTHM,3)) ::  ZTHM        ! Theta at t-dt
 REAL, DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2),SIZE(PTHM,3),SIZE(PRM,4)) ::  ZRM         ! water var. at t-dt
-REAL, DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2),SIZE(PTHM,3)) ::  ZUM,ZVM     ! wind components at t-dt
+REAL, DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2),SIZE(PTHM,3)) ::  ZUM,ZVM,ZWM ! wind components at t-dt
 REAL, DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2),SIZE(PTHM,3)) ::  ZTKEM       ! tke at t-dt
 
 REAL, DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2),SIZE(PTHM,3),SIZE(PSVM,4)) ::  ZSVM        ! scalar variable a t-dt
@@ -221,6 +223,13 @@ REAL, DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2),SIZE(PTHM,3)) ::  ZV_UP     ! updraft
 REAL, DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2),SIZE(PTHM,3)) ::  ZRC_UP    ! updraft characteristics
 REAL, DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2),SIZE(PTHM,3)) ::  ZRI_UP    ! updraft characteristics
 REAL, DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2),SIZE(PTHM,3)) ::  ZTHV_UP   ! updraft characteristics
+
+REAL, DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2),SIZE(PTHM,3)) ::  ZTHL_DO   ! downdraft characteristics
+REAL, DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2),SIZE(PTHM,3)) ::  ZTHV_DO   ! downdraft characteristics
+REAL, DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2),SIZE(PTHM,3)) ::  ZRT_DO    ! downdraft characteristics
+REAL, DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2),SIZE(PTHM,3)) ::  ZU_DO     ! downdraft characteristics
+REAL, DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2),SIZE(PTHM,3)) ::  ZV_DO     ! downdraft characteristics
+
 REAL, DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2),SIZE(PTHM,3)) ::  ZW_UP     ! updraft characteristics
 REAL, DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2),SIZE(PTHM,3)) ::  ZFRAC_UP  ! updraft characteristics
 REAL, DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2),SIZE(PTHM,3)) ::  ZEMF      ! updraft characteristics
@@ -235,6 +244,7 @@ REAL, DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2)) ::  ZSFRV    ! Surface latent   heat
 REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) ::  ZWORK    ! work array
 REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) ::  ZUMM     ! wind on mass point
 REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) ::  ZVMM     ! wind on mass point
+REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) ::  ZWMM     ! wind on mass point
 REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) ::  ZDUDT    ! tendency of U   by massflux scheme
 REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) ::  ZDVDT    ! tendency of V   by massflux scheme
 REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) ::  ZDTHLDT  ! tendency of thl by massflux scheme
@@ -271,6 +281,7 @@ ZSVM(:,:,:) = 0.
 ! wind on mass points
 ZUMM=MXF(PUM)
 ZVMM=MYF(PVM)
+ZWMM=MZF(1,IKU,1,PWM)
 !
 !!! 2. Pack input variables
 !
@@ -286,6 +297,7 @@ DO JK=1,IKU
   ZRHODREF(:,JK) = RESHAPE(PRHODREF(:,:,JK),(/ IIU*IJU /) )  
   ZUM    (:,JK) = RESHAPE(ZUMM   (:,:,JK),(/ IIU*IJU /) )
   ZVM    (:,JK) = RESHAPE(ZVMM   (:,:,JK),(/ IIU*IJU /) )
+  ZWM    (:,JK) = RESHAPE(ZWMM   (:,:,JK),(/ IIU*IJU /) )
   DO JRR=1,IRR
     ZRM   (:,JK,JRR) = RESHAPE(PRM    (:,:,JK,JRR),(/ IIU*IJU /) ) 
   END DO
@@ -308,13 +320,14 @@ CALL SHALLOW_MF(1,IKU,1,KRR,KRRL,KRRI,                              &
                 ZRHODJ,ZRHODREF,                                      &
                 ZPABSM, ZEXN,                                         &
                 ZSFTH,ZSFRV,                                          &
-                ZTHM,ZRM,ZUM,ZVM,ZTKEM,ZSVM,                          &
+                ZTHM,ZRM,ZUM,ZVM,ZWM,ZTKEM,ZSVM,                      &
                 ZDUDT_MF,ZDVDT_MF,                                    &
                 ZDTHLDT_MF,ZDRTDT_MF,ZDSVDT_MF,                       &
                 ZSIGMF,ZRC_MF,ZRI_MF,ZCF_MF,ZFLXZTHVMF,               &
                 ZFLXZTHMF,ZFLXZRMF,ZFLXZUMF,ZFLXZVMF,                 &
                 ZTHL_UP,ZRT_UP,ZRV_UP,ZRC_UP,ZRI_UP,                  &
                 ZU_UP, ZV_UP, ZTHV_UP, ZW_UP,                         &
+                ZTHL_DO,ZTHV_DO,ZRT_DO,ZU_DO, ZV_DO,                  &
                 ZFRAC_UP,ZEMF,ZDETR,ZENTR,                            &
                 IKLCL,IKETL,IKCTL                                     )