diff --git a/src/MNH/diag.f90 b/src/MNH/diag.f90
index 3349a29e1c2b5ea732df591a5f9aa53de5876b26..55b9599aa4d43cbcb0ae9aca5467527a8370383e 100644
--- a/src/MNH/diag.f90
+++ b/src/MNH/diag.f90
@@ -78,6 +78,7 @@
 !!  09/2016      (JP Pinty) Add LIMA
 !!  10/2016      (C.LAC) add LVISI
 !!  10/2016     (F Brosse) Add prod/loss terms computation for chemistry  
+!! 10/2017      (G.Delautier) New boundary layer height : replace LBLTOP by CBLTOP 
 !-------------------------------------------------------------------------------
 !
 !*       0.     DECLARATIONS
@@ -214,7 +215,7 @@ NAMELIST/NAM_DIAG/ CISO, LVAR_RS, LVAR_LS,   &
                    LVORT, LDIV, LMEAN_POVO, XMEAN_POVO, &
                    LGEO, LAGEO, LWIND_ZM, LMSLP, LTHW, &
                    LCLD_COV, LVAR_PR, LTOTAL_PR, LMEAN_PR, XMEAN_PR, &
-                   NCAPE, LBV_FR, LRADAR, LBLTOP, LTRAJ, &
+                   NCAPE, LBV_FR, LRADAR, CBLTOP, LTRAJ, &
                    LDIAG,XDIAG,LCHEMDIAG,LCHAQDIAG,XCHEMLAT,XCHEMLON,&
                    CSPEC_BU_DIAG,CSPEC_DIAG,LAIRCRAFT_BALLOON,NTIME_AIRCRAFT_BALLOON,&
                    XSTEP_AIRCRAFT_BALLOON,&
@@ -289,7 +290,7 @@ XMEAN_PR(1:2)=1.
 NCAPE=-1
 LBV_FR=.FALSE.
 LRADAR=.FALSE.
-LBLTOP=.FALSE.
+CBLTOP='NONE'
 LVISI=.FALSE.
 LVAR_FRC=.FALSE.
 LCHEMDIAG=.FALSE.
diff --git a/src/MNH/modd_diag_flag.f90 b/src/MNH/modd_diag_flag.f90
index 589faa6df032df5846db417b5a870e466400e5cb..fda235d7a4d8fdeb005dde66660cd6a9c66ce8ff 100644
--- a/src/MNH/modd_diag_flag.f90
+++ b/src/MNH/modd_diag_flag.f90
@@ -39,6 +39,7 @@
 !!       D.Ricard 2015 : add LMOIST_ES
 !!     C.Lac 10/2016  Add visibility diagnostic
 !!  10/2016     (F Brosse) Add prod/loss terms computation for chemistry  
+!! 10/2017      (G.Delautier) New boundary layer height : replace LBLTOP by CBLTOP 
 !!
 !-------------------------------------------------------------------------------
 !
@@ -92,7 +93,7 @@ REAL, DIMENSION(2) :: XMEAN_PR
 INTEGER     :: NCAPE       ! CAPE, DCAPE, CIN, CAPEMAX, CINMAX
 LOGICAL     :: LBV_FR
 LOGICAL     :: LRADAR
-LOGICAL     :: LBLTOP
+CHARACTER (LEN=5)  :: CBLTOP
 LOGICAL     :: LVISI
 LOGICAL     :: LTRAJ       ! to compute trajectories
 LOGICAL     :: LCHEMDIAG = .FALSE.  ! flag for chemistry
diff --git a/src/MNH/write_lfifm1_for_diag.f90 b/src/MNH/write_lfifm1_for_diag.f90
index 9cfabface0b3e82b2a04ba23edfa054343f123b0..081980b2dc6dd7a6a5e07f658202efd884b41832 100644
--- a/src/MNH/write_lfifm1_for_diag.f90
+++ b/src/MNH/write_lfifm1_for_diag.f90
@@ -141,6 +141,7 @@ END MODULE MODI_WRITE_LFIFM1_FOR_DIAG
 !!       D.Ricard 2015 : add THETAES + POVOES  (LMOIST_ES=T)
 !!      Modification    01/2016  (JP Pinty) Add LIMA
 !!       C.Lac  04/2016 : add visibility and droplet deposition
+!! 10/2017      (G.Delautier) New boundary layer height : replace LBLTOP by CBLTOP 
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -326,6 +327,14 @@ INTEGER           :: I
 !
 ! LIMA LIDAR
 REAL,DIMENSION(:,:,:,:), ALLOCATABLE :: ZTMP1, ZTMP2, ZTMP3, ZTMP4
+!
+! hauteur couche limite
+REAL,DIMENSION(:,:,:),ALLOCATABLE :: ZZZ_GRID1
+REAL,DIMENSION(:,:),ALLOCATABLE :: ZTHVSOL,ZSHMIX
+REAL,DIMENSION(:,:,:),ALLOCATABLE :: ZZONWIND,ZMERWIND,ZFFWIND2,ZRIB
+
+  !
+
 !
 !-------------------------------------------------------------------------------
 !
@@ -2205,7 +2214,7 @@ END IF
 !
 !* Virtual potential temperature
 !
-IF ( LMOIST_V .OR. LMSLP .OR. LBLTOP ) THEN
+IF ( LMOIST_V .OR. LMSLP .OR. CBLTOP/='NONE' ) THEN
   ALLOCATE(ZTHETAV(IIU,IJU,IKU))
 !
   IF(NRR > 0) THEN
@@ -3315,15 +3324,84 @@ END IF
 !
 !* Height of boundary layer
 !
-IF (LBLTOP) THEN
-  ZGAMREF=3.5E-3 ! K/m
+IF (CBLTOP == 'THETA') THEN
+  !
+  ! m�thode de la parcelle
+  !
+  ALLOCATE(ZSHMIX(IIU,IJU))
+
   ZWORK31(:,:,1:IKU-1)=0.5*(XZZ(:,:,1:IKU-1)+XZZ(:,:,2:IKU))
   ZWORK31(:,:,IKU)=2.*ZWORK31(:,:,IKU-1)-ZWORK31(:,:,IKU-2)
-  YFMFILE=CINIFILE
-  CINIFILE=HFMFILE
-  CALL FREE_ATM_PROFILE(ZTHETAV,ZWORK31,XZS,XZSMT,ZGAMREF,ZWORK32,ZWORK33)
-  CINIFILE=YFMFILE
-END IF
+  ZWORK21(:,:) = ZTHETAV(:,:,IKB)+0.5
+  ZSHMIX(:,:)  = 0.0
+  DO JJ=1,IJU
+    DO JI=1,IIU 
+      DO JK=IKB,IKE
+        IF ( ZTHETAV(JI,JJ,JK).GT.ZWORK21(JI,JJ) ) THEN
+          ZSHMIX(JI,JJ) =  ZWORK31(JI,JJ,JK-1)  &
+                        +( ZWORK31(JI,JJ,JK) - ZWORK31 (JI,JJ,JK-1) )  &
+                        /( ZTHETAV(JI,JJ,JK) - ZTHETAV(JI,JJ,JK-1) )  &
+                        *( ZWORK21(JI,JJ)    - ZTHETAV(JI,JJ,JK-1) )
+          EXIT
+        END IF
+      END DO
+    END DO
+  END DO
+  ZSHMIX(:,:)=ZSHMIX(:,:)-XZS(:,:)
+  ZSHMIX(:,:)=MAX(ZSHMIX(:,:),50.0)
+  YRECFM='HBLTOP'
+  YCOMMENT='Height of Boundary Layer TOP (M)'
+  ILENCH=LEN(YCOMMENT)
+  IGRID=1
+  CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,'XY',ZSHMIX,IGRID,ILENCH,YCOMMENT,IRESP)  !
+  DEALLOCATE(ZSHMIX)
+
+ELSEIF (CBLTOP == 'RICHA') THEN
+  !
+  ! m�thode du "bulk Richardson number"
+  !
+  ALLOCATE(ZRIB(IIU,IJU,IKU))
+  ALLOCATE(ZSHMIX(IIU,IJU))
+
+  ZWORK31(:,:,1:IKU-1)=0.5*(XZZ(:,:,1:IKU-1)+XZZ(:,:,2:IKU))
+  ZWORK31(:,:,IKU)=2.*ZWORK31(:,:,IKU-1)-ZWORK31(:,:,IKU-2)
+  ZWORK32=MXF(XUT)
+  ZWORK33=MYF(XVT)
+  ZWORK34=ZWORK32**2+ZWORK33**2
+  DO JK=IKB,IKE  
+    ZRIB(:,:,JK)=XG*ZWORK31(:,:,JK)*(ZTHETAV(:,:,JK)-ZTHETAV(:,:,IKB))/(ZTHETAV(:,:,IKB)*ZWORK34(:,:,JK))
+  ENDDO
+  ZSHMIX=0.0
+  DO JJ=1,IJU
+    DO JI=1,IIU 
+      DO JK=IKB,IKE
+        IF ( ZRIB(JI,JJ,JK).GT.0.25 ) THEN
+          ZSHMIX(JI,JJ) = ZWORK31(JI,JJ,JK-1)  &
+                        +( ZWORK31(JI,JJ,JK) - ZWORK31(JI,JJ,JK-1) )  &
+                        *( 0.25 - ZRIB(JI,JJ,JK-1) )  &
+                        /( ZRIB(JI,JJ,JK)    - ZRIB(JI,JJ,JK-1) )
+          EXIT
+        END IF
+      END DO
+    END DO
+  END DO
+  ZSHMIX(:,:)=ZSHMIX(:,:)-XZS(:,:)
+  YRECFM='HBLTOP'
+  YCOMMENT='Height of Boundary Layer TOP (M)'
+  ILENCH=LEN(YCOMMENT)
+  IGRID=1
+  CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,'XY',ZSHMIX,IGRID,ILENCH,YCOMMENT,IRESP)  !
+  DEALLOCATE(ZRIB,ZSHMIX)
+ENDIF
+  ! used before 5-3-1 version
+  !
+  !ZGAMREF=3.5E-3 ! K/m
+  !ZWORK31(:,:,1:IKU-1)=0.5*(XZZ(:,:,1:IKU-1)+XZZ(:,:,2:IKU))
+  !ZWORK31(:,:,IKU)=2.*ZWORK31(:,:,IKU-1)-ZWORK31(:,:,IKU-2)
+  !YFMFILE=CINIFILE
+  !CINIFILE=HFMFILE
+  !CALL FREE_ATM_PROFILE(ZTHETAV,ZWORK31,XZS,XZSMT,ZGAMREF,ZWORK32,ZWORK33)
+  !CINIFILE=YFMFILE
 !
 IF (ALLOCATED(ZTHETAV)) DEALLOCATE(ZTHETAV)
 !