diff --git a/src/MNH/default_desfmn.f90 b/src/MNH/default_desfmn.f90
index 960f34cbf154a52590a498524d839ebda930b474..f39f694235ad68d13968bc9bcef562f05e42aa95 100644
--- a/src/MNH/default_desfmn.f90
+++ b/src/MNH/default_desfmn.f90
@@ -212,7 +212,7 @@ END MODULE MODI_DEFAULT_DESFM_n
 !!                   02/2021 (T.Nagel) add turbulence recycling defaults parameters
 !  P-A Joulin  21/05/2021: add Wind turbines
 !  S. Riette   21/05/2021: add options to PDF subgrid scheme
-!
+!                    05/2021 D. Ricard add the contribution of Leonard terms in the turbulence scheme
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -533,6 +533,12 @@ VSIGQSAT  = 0.02
 CCONDENS='CB02'
 CLAMBDA3='CB'
 CSUBG_MF_PDF='TRIANGLE'
+LHGRAD =.FALSE.
+XCOEFHGRADTHL = 1.0
+XCOEFHGRADRM = 1.0
+XALTHGRAD = 2000.0
+XCLDTHOLD = -1.0
+
 !-------------------------------------------------------------------------------
 !
 !*      10b.   SET DEFAULT VALUES FOR MODD_DRAGTREE :
diff --git a/src/MNH/modd_turbn.f90 b/src/MNH/modd_turbn.f90
index a108cce8fe278a4d0df9e01a0d0681974e5a4b80..ac0b49ae30cbb2ee5af3243352036ed35f538986 100644
--- a/src/MNH/modd_turbn.f90
+++ b/src/MNH/modd_turbn.f90
@@ -39,6 +39,7 @@
 !!                   May   2006    Remove KEPS
 !!      C.Lac        Nov 2014      add terms of TKE production for LES diag
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!!      D. Ricard     May 2021      add the switches for Leonard terms
 !!
 !-------------------------------------------------------------------------------
 !
@@ -93,6 +94,13 @@ TYPE TURB_t
   REAL, DIMENSION(:,:,:), POINTER :: XTR=>NULL()    ! Transport production of Kinetic energy
   REAL, DIMENSION(:,:,:), POINTER :: XDISS=>NULL()    ! Dissipation of Kinetic energy
   REAL, DIMENSION(:,:,:), POINTER :: XLEM=>NULL()    ! Mixing length
+  LOGICAL            :: LHGRAD ! logical switch for the computation of the Leornard Terms
+  REAL               :: XCOEFHGRADTHL  ! coeff applied to thl contribution
+  REAL               :: XCOEFHGRADRM  ! coeff applied to mixing ratio contribution
+  REAL               :: XALTHGRAD  ! altitude from which to apply the Leonard terms
+  REAL               :: XCLDTHOLD  ! cloud threshold to apply the Leonard terms
+                                   ! negative value : applied everywhere
+                                   ! 0.000001 applied only inside the clouds ri+rc > 10**-6 kg/kg
 !
 END TYPE TURB_t
 
@@ -125,6 +133,11 @@ REAL, DIMENSION(:,:,:), POINTER :: XTHP=>NULL()
 REAL, DIMENSION(:,:,:), POINTER :: XTR=>NULL()
 REAL, DIMENSION(:,:,:), POINTER :: XDISS=>NULL()
 REAL, DIMENSION(:,:,:), POINTER :: XLEM=>NULL()
+LOGICAL, POINTER :: LHGRAD=>NULL()
+REAL, POINTER :: XCOEFHGRADTHL=>NULL()
+REAL, POINTER :: XCOEFHGRADRM=>NULL()
+REAL, POINTER :: XALTHGRAD=>NULL()
+REAL, POINTER :: XCLDTHOLD=>NULL()
 
 CONTAINS
 
@@ -170,6 +183,11 @@ XTHP=>TURB_MODEL(KTO)%XTHP
 XTR=>TURB_MODEL(KTO)%XTR  
 XDISS=>TURB_MODEL(KTO)%XDISS
 XLEM=>TURB_MODEL(KTO)%XLEM
+LHGRAD=>TURB_MODEL(KTO)%LHGRAD
+XCOEFHGRADTHL=>TURB_MODEL(KTO)%XCOEFHGRADTHL
+XCOEFHGRADRM=>TURB_MODEL(KTO)%XCOEFHGRADRM
+XALTHGRAD=>TURB_MODEL(KTO)%XALTHGRAD
+XCLDTHOLD=>TURB_MODEL(KTO)%XCLDTHOLD
 
 END SUBROUTINE TURB_GOTO_MODEL
 
diff --git a/src/MNH/modn_turbn.f90 b/src/MNH/modn_turbn.f90
index 96a4b347c6a4022cd86a743b566812addd37c938..952412dbecf3384c8be245b0561f1447719cd0e6 100644
--- a/src/MNH/modn_turbn.f90
+++ b/src/MNH/modn_turbn.f90
@@ -47,6 +47,7 @@
 !!      P. Bechtold Feb 11, 2002    add switch for Sigma_s computation
 !!      P. Jabouille Apr 4, 2002    add switch for Sigma_s convection
 !!      V. Masson    Nov 13 2002    add switch for SBL lengths
+!!      D. Ricard    May, 2021      add switch for Leonard Terms
 !-------------------------------------------------------------------------------
 !
 !*       0.   DECLARATIONS
@@ -71,7 +72,12 @@ USE MODD_TURB_n, ONLY: &
          CSUBG_AUCV_RI_n => CSUBG_AUCV_RI, &
          CCONDENS_n => CCONDENS, &
          CLAMBDA3_n => CLAMBDA3, &
-         CSUBG_MF_PDF_n => CSUBG_MF_PDF
+         CSUBG_MF_PDF_n => CSUBG_MF_PDF, &
+         LHGRAD_n => LHGRAD, &
+         XCOEFHGRADTHL_n => XCOEFHGRADTHL, &
+         XCOEFHGRADRM_n => XCOEFHGRADRM, &
+         XALTHGRAD_n => XALTHGRAD, &
+         XCLDTHOLD_n => XCLDTHOLD
 !
 IMPLICIT NONE
 !
@@ -94,11 +100,17 @@ CHARACTER (LEN=80),SAVE  :: CCONDENS
 CHARACTER (LEN=4),SAVE  :: CLAMBDA3
 CHARACTER (LEN=80),SAVE  :: CSUBG_MF_PDF
 REAL,SAVE :: VSIGQSAT
+LOGICAL,SAVE  :: LHGRAD
+REAL,SAVE :: XCOEFHGRADTHL
+REAL,SAVE :: XCOEFHGRADRM
+REAL,SAVE :: XALTHGRAD
+REAL,SAVE :: XCLDTHOLD
 !
 NAMELIST/NAM_TURBn/XIMPL,CTURBLEN,CTURBDIM,LTURB_FLX,LTURB_DIAG,  &
                    LSUBG_COND,LSIGMAS,LSIG_CONV,LRMC01,CTOM,CSUBG_AUCV,&
                    XKEMIN,VSIGQSAT,XCEDIS,XCADAP,CSUBG_AUCV_RI,CCONDENS,&
-                   CLAMBDA3,CSUBG_MF_PDF
+                   CLAMBDA3,CSUBG_MF_PDF,LHGRAD,XCOEFHGRADTHL, XCOEFHGRADRM, &
+                   XALTHGRAD, XCLDTHOLD
 
 !
 CONTAINS
@@ -123,6 +135,11 @@ SUBROUTINE INIT_NAM_TURBn
   CCONDENS = CCONDENS_n
   CLAMBDA3 = CLAMBDA3_n
   CSUBG_MF_PDF = CSUBG_MF_PDF_n
+  LHGRAD = LHGRAD_n
+  XCOEFHGRADTHL = XCOEFHGRADTHL_n
+  XCOEFHGRADRM = XCOEFHGRADRM_n
+  XALTHGRAD = XALTHGRAD_n
+  XCLDTHOLD = XCLDTHOLD_n
 END SUBROUTINE INIT_NAM_TURBn
 
 SUBROUTINE UPDATE_NAM_TURBn
@@ -145,6 +162,11 @@ SUBROUTINE UPDATE_NAM_TURBn
   CCONDENS_n = CCONDENS
   CLAMBDA3_n = CLAMBDA3
   CSUBG_MF_PDF_n = CSUBG_MF_PDF
+  LHGRAD_n = LHGRAD
+  XCOEFHGRADTHL_n = XCOEFHGRADTHL
+  XCOEFHGRADRM_n = XCOEFHGRADRM
+  XALTHGRAD_n = XALTHGRAD
+  XCLDTHOLD_n = XCLDTHOLD
 END SUBROUTINE UPDATE_NAM_TURBn
 
 END MODULE MODN_TURB_n
diff --git a/src/MNH/turb_ver_thermo_flux.f90 b/src/MNH/turb_ver_thermo_flux.f90
index 80825e315814042a0c25a11789f9e41e575ebe87..22fdeae7c5a21016639ef91217ece653545fba23 100644
--- a/src/MNH/turb_ver_thermo_flux.f90
+++ b/src/MNH/turb_ver_thermo_flux.f90
@@ -323,6 +323,11 @@ END MODULE MODI_TURB_VER_THERMO_FLUX
 !!                     2012-02 (Y. Seity) add possibility to run with reversed
 !!                                             vertical levels
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!!                     2018 (D. Ricard) last version of HGRAD turbulence scheme
+!!                                 Leronard terms instead of Reynolds terms
+!!                                 applied to vertical fluxes of r_np and Thl
+!!                                 for implicit version of turbulence scheme
+!!                                 corrections and cleaning
 !!--------------------------------------------------------------------------
 !       
 !*      0. DECLARATIONS
@@ -331,8 +336,11 @@ END MODULE MODI_TURB_VER_THERMO_FLUX
 USE MODD_CST
 USE MODD_CTURB
 use modd_field,          only: tfielddata, TYPEREAL
+USE MODD_GRID_n, ONLY: XZS, XXHAT
 USE MODD_IO,             ONLY: TFILEDATA
+USE MODD_METRICS_n
 USE MODD_PARAMETERS
+USE MODD_TURB_n, ONLY: LHGRAD, XCOEFHGRADTHL, XCOEFHGRADRM, XALTHGRAD, XCLDTHOLD
 USE MODD_CONF
 USE MODD_LES
 !
@@ -340,6 +348,9 @@ USE MODI_GRADIENT_U
 USE MODI_GRADIENT_V
 USE MODI_GRADIENT_W
 USE MODI_GRADIENT_M
+USE MODI_GRADIENT_UV
+USE MODI_GRADIENT_UW
+USE MODI_GRADIENT_VW
 USE MODI_SHUMAN 
 USE MODI_TRIDIAG 
 USE MODI_LES_MEAN_SUBGRID
@@ -452,13 +463,21 @@ REAL, DIMENSION(SIZE(PTHLM,1),SIZE(PTHLM,2),SIZE(PTHLM,3))  ::  &
        ZF,       & ! Flux in dTh/dt =-dF/dz (evaluated at t-1)(or rt instead of Th)
        ZDFDDTDZ, & ! dF/d(dTh/dz)
        ZDFDDRDZ, & ! dF/d(dr/dz)
-       Z3RDMOMENT  ! 3 order term in flux or variance equation
+       Z3RDMOMENT,&  ! 3 order term in flux or variance equation
+       ZF_NEW,    &
+       ZRWTHL,    &
+       ZRWRNP,    &
+       ZCLD_THOLD
+!
+REAL,DIMENSION(SIZE(XZS,1),SIZE(XZS,2),KKU)  :: ZALT
+!
 INTEGER             :: IKB,IKE      ! I index values for the Beginning and End
                                     ! mass points of the domain in the 3 direct.
 INTEGER             :: IKT          ! array size in k direction
 INTEGER             :: IKTB,IKTE    ! start, end of k loops in physical domain 
 !
 REAL :: ZTIME1, ZTIME2
+REAL :: ZDELTAX
 !
 INTEGER :: JK
 LOGICAL :: GUSERV   ! flag to use water
@@ -486,6 +505,18 @@ GUSERV = (KRR/=0)
 !
 ZKEFF(:,:,:) = MZM( PLM(:,:,:) * SQRT(PTKEM(:,:,:)) )
 !
+! define a cloud mask with ri and rc (used after with a threshold) for Leonard terms
+!
+IF(LHGRAD) THEN
+  IF ( KRRL >= 1 ) THEN
+    IF ( KRRI >= 1 ) THEN
+      ZCLD_THOLD(:,:,:) = PRM(:,:,:,2) + PRM(:,:,:,4)
+    ELSE
+      ZCLD_THOLD(:,:,:) = PRM(:,:,:,2)
+    END IF
+  END IF
+END IF
+!
 ! Flags for 3rd order quantities
 !
 GFTH2 = .FALSE.
@@ -514,6 +545,16 @@ END IF
 ZF      (:,:,:) = -XCSHF*PPHI3*ZKEFF*DZM(PTHLM)/PDZZ
 ZDFDDTDZ(:,:,:) = -XCSHF*ZKEFF*D_PHI3DTDZ_O_DDTDZ(PPHI3,PREDTH1,PREDR1,PRED2TH3,PRED2THR3,HTURBDIM,GUSERV)
 
+!
+IF (LHGRAD) THEN
+ ! Compute the Leonard terms for thl
+ ZDELTAX= XXHAT(3) - XXHAT(2)
+ ZF_NEW (:,:,:)= XCOEFHGRADTHL*ZDELTAX*ZDELTAX/12.0*(      &
+                 MXF(GX_W_UW(PWM(:,:,:), XDXX, XDZZ, XDZX))&
+                *MZM(GX_M_M(PTHLM(:,:,:),XDXX,XDZZ,XDZX))  &
+              +  MYF(GY_W_VW(PWM(:,:,:), XDYY,XDZZ,XDZY))  &
+                *MZM(GY_M_M(PTHLM(:,:,:),XDYY,XDZZ,XDZY)) )
+END IF
 !
 ! Effect of 3rd order terms in temperature flux (at flux point)
 !
@@ -581,8 +622,19 @@ CALL TRIDIAG_THERMO(KKA,KKU,KKL,PTHLM,ZF,ZDFDDTDZ,PTSTEP,PIMPL,PDZZ,&
                     PRHODJ,PTHLP)
 !
 ! Compute the equivalent tendency for the conservative potential temperature
-PRTHLS(:,:,:)= PRTHLS(:,:,:)  +    &
-               PRHODJ(:,:,:)*(PTHLP(:,:,:)-PTHLM(:,:,:))/PTSTEP
+!
+ZRWTHL(:,:,:)= PRHODJ(:,:,:)*(PTHLP(:,:,:)-PTHLM(:,:,:))/PTSTEP
+! replace the flux by the Leonard terms above ZALT and ZCLD_THOLD
+IF (LHGRAD) THEN
+ DO JK=1,KKU
+  ZALT(:,:,JK) = PZZ(:,:,JK)-XZS(:,:)
+ END DO
+ WHERE ( (ZCLD_THOLD(:,:,:) >= XCLDTHOLD) .AND. ( ZALT(:,:,:) >= XALTHGRAD) )
+  ZRWTHL(:,:,:) = -GZ_W_M(MZM(PRHODJ(:,:,:))*ZF_NEW(:,:,:),XDZZ)
+ END WHERE
+END IF
+!
+PRTHLS(:,:,:)= PRTHLS(:,:,:)  + ZRWTHL(:,:,:)
 !
 !*       2.2  Partial Thermal Production
 !
@@ -590,6 +642,12 @@ PRTHLS(:,:,:)= PRTHLS(:,:,:)  +    &
 !
 ZFLXZ(:,:,:)   = ZF                                                &
                + PIMPL * ZDFDDTDZ * DZM(PTHLP - PTHLM) / PDZZ
+! replace the flux by the Leonard terms
+IF (LHGRAD) THEN
+ WHERE ( (ZCLD_THOLD(:,:,:) >= XCLDTHOLD) .AND. ( ZALT(:,:,:) >= XALTHGRAD) )
+  ZFLXZ(:,:,:) = ZF_NEW(:,:,:)
+ END WHERE
+END IF
 !
 ZFLXZ(:,:,KKA) = ZFLXZ(:,:,IKB) 
 !  
@@ -693,6 +751,16 @@ IF (KRR /= 0) THEN
   ZF      (:,:,:) = -XCSHF*PPSI3*ZKEFF*DZM(PRM(:,:,:,1))/PDZZ
   ZDFDDRDZ(:,:,:) = -XCSHF*ZKEFF*D_PSI3DRDZ_O_DDRDZ(PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,HTURBDIM,GUSERV)
   !
+  ! Compute Leonard Terms for Cloud mixing ratio
+  IF (LHGRAD) THEN
+    ZDELTAX= XXHAT(3) - XXHAT(2)
+    ZF_NEW (:,:,:)= XCOEFHGRADRM*ZDELTAX*ZDELTAX/12.0*(        &
+                MXF(GX_W_UW(PWM(:,:,:), XDXX, XDZZ, XDZX))       &
+                *MZM(GX_M_M(PRM(:,:,:,1),XDXX,XDZZ,XDZX)) &
+                +MYF(GY_W_VW(PWM(:,:,:), XDYY,XDZZ,XDZY))        &
+                *MZM(GY_M_M(PRM(:,:,:,1),XDYY,XDZZ,XDZY)) )
+   END IF
+  !
   ! Effect of 3rd order terms in temperature flux (at flux point)
   !
   ! d(w'2r')/dz
@@ -759,8 +827,20 @@ IF (KRR /= 0) THEN
                       PDZZ,PRHODJ,PRP)
   !
   ! Compute the equivalent tendency for the conservative mixing ratio
-  PRRS(:,:,:,1) = PRRS(:,:,:,1) + PRHODJ(:,:,:) *     &
-                  (PRP(:,:,:)-PRM(:,:,:,1))/PTSTEP
+  !
+  ZRWRNP (:,:,:) = PRHODJ(:,:,:)*(PRP(:,:,:)-PRM(:,:,:,1))/PTSTEP
+  !
+  ! replace the flux by the Leonard terms above ZALT and ZCLD_THOLD
+  IF (LHGRAD) THEN
+   DO JK=1,KKU
+    ZALT(:,:,JK) = PZZ(:,:,JK)-XZS(:,:)
+   END DO
+   WHERE ( (ZCLD_THOLD(:,:,:) >= XCLDTHOLD ) .AND. ( ZALT(:,:,:) >= XALTHGRAD ) )
+    ZRWRNP (:,:,:) =  -GZ_W_M(MZM(PRHODJ(:,:,:))*ZF_NEW(:,:,:),XDZZ)
+   END WHERE
+  END IF
+  !
+  PRRS(:,:,:,1) = PRRS(:,:,:,1) + ZRWRNP (:,:,:)
   !
   !*       3.2  Complete thermal production
   !
@@ -769,6 +849,13 @@ IF (KRR /= 0) THEN
   ZFLXZ(:,:,:)   = ZF                                                &
                  + PIMPL * ZDFDDRDZ * DZM(PRP - PRM(:,:,:,1)) / PDZZ
   !
+  ! replace the flux by the Leonard terms above ZALT and ZCLD_THOLD
+  IF (LHGRAD) THEN
+   WHERE ( (ZCLD_THOLD(:,:,:) >= XCLDTHOLD ) .AND. ( ZALT(:,:,:) >= XALTHGRAD ) )
+    ZFLXZ(:,:,:) = ZF_NEW(:,:,:)
+   END WHERE
+  END IF
+  !
   ZFLXZ(:,:,KKA) = ZFLXZ(:,:,IKB) 
   !
   DO JK=IKTB+1,IKTE-1