Index: LMDZ5/trunk/libf/phylmd/cv3_routines.F90
===================================================================
--- LMDZ5/trunk/libf/phylmd/cv3_routines.F90	(revision 2397)
+++ LMDZ5/trunk/libf/phylmd/cv3_routines.F90	(revision 2398)
@@ -93,4 +93,11 @@
     tau = 8000.
 
+! -- end of convection
+
+    tau_stop = 15000.
+    ok_convstop = .False.
+
+    ok_intermittent = .False.
+
 ! -- interface cloud parameterization:
 
@@ -111,4 +118,7 @@
     READ (99, *, END=9998) flag_wb
     READ (99, *, END=9998) wbmax
+    READ (99, *, END=9998) ok_convstop
+    READ (99, *, END=9998) tau_stop
+    READ (99, *, END=9998) ok_intermittent
 9998 CONTINUE
     CLOSE (99)
@@ -122,4 +132,7 @@
     WRITE (*, *) 'flag_wb =', flag_wb
     WRITE (*, *) 'wbmax =', wbmax
+    WRITE (*, *) 'ok_convstop =', ok_convstop
+    WRITE (*, *) 'tau_stop =', tau_stop
+    WRITE (*, *) 'ok_intermittent =', ok_intermittent
 
 ! IM Lecture du fichier ep_param.data
@@ -145,4 +158,7 @@
    CALL bcast(flag_wb)
    CALL bcast(wbmax)
+   CALL bcast(ok_convstop)
+   CALL bcast(tau_stop)
+   CALL bcast(ok_intermittent)
 
    CALL bcast(flag_epkeorig)
@@ -163,6 +179,47 @@
 ! c      alpha  = alpha*1.5
 
+  noconv_stop = max(2.,tau_stop/delt)
+
   RETURN
 END SUBROUTINE cv3_param
+
+SUBROUTINE cv3_incrcount(len, nd, delt, sig)
+
+IMPLICIT NONE
+
+! =====================================================================
+!  Increment the counter sig(nd)
+! =====================================================================
+
+  include "cv3param.h"
+
+!inputs:
+  INTEGER, INTENT(IN)                     :: len
+  INTEGER, INTENT(IN)                     :: nd
+  REAL, INTENT(IN)                        :: delt ! timestep (seconds)
+
+!input/output
+  REAL, DIMENSION(len,nd), INTENT(INOUT)  :: sig
+
+!local variables
+  INTEGER il
+
+!    print *,'cv3_incrcount : noconv_stop ',noconv_stop
+!    print *,'cv3_incrcount in, sig(1,nd) ',sig(1,nd)
+    IF(ok_convstop) THEN
+      DO il = 1, len
+        sig(il, nd) = sig(il, nd) + 1.
+        sig(il, nd) = min(sig(il,nd), noconv_stop+0.1)
+      END DO
+    ELSE
+      DO il = 1, len
+        sig(il, nd) = sig(il, nd) + 1.
+        sig(il, nd) = min(sig(il,nd), 12.1)
+      END DO
+    ENDIF  ! (ok_convstop)
+!    print *,'cv3_incrcount out, sig(1,nd) ',sig(1,nd)
+
+  RETURN
+END SUBROUTINE cv3_incrcount
 
 SUBROUTINE cv3_prelim(len, nd, ndp1, t, q, p, ph, &
Index: LMDZ5/trunk/libf/phylmd/cv3p2_closure.F90
===================================================================
--- LMDZ5/trunk/libf/phylmd/cv3p2_closure.F90	(revision 2397)
+++ LMDZ5/trunk/libf/phylmd/cv3p2_closure.F90	(revision 2398)
@@ -62,4 +62,5 @@
   REAL, DIMENSION (nloc, nd)                         :: dtmin, sigold
   REAL, DIMENSION (nloc, nd)                         :: coefmix
+  REAL, DIMENSION (nloc)                             :: dtminmax
   REAL, DIMENSION (nloc)                             :: pzero, ptop2old
   REAL, DIMENSION (nloc)                             :: cina, cinb
@@ -163,4 +164,15 @@
   ! -------------------------------------------------------------
 
+!jyg<
+  IF (ok_convstop) THEN
+    DO k = 1, nl - 1
+      DO il = 1, ncum
+        IF (sig(il,nd)<1.5 .OR. sig(il,nd)>noconv_stop) THEN
+          sig(il, k) = 0.0
+          w0(il, k) = 0.0
+        END IF
+      END DO
+    END DO
+  ELSE
   DO k = 1, nl - 1
     DO il = 1, ncum
@@ -171,4 +183,6 @@
     END DO
   END DO
+  ENDIF  ! (ok_convstop)
+!>jyg
   IF (prt_level>=20) PRINT *, 'cv3p2_closure apres 400'
 
@@ -427,4 +441,5 @@
   DO il = 1, ncum
     cape(il) = 0.0
+    dtminmax(il) = -100.
   END DO
 
@@ -447,7 +462,29 @@
     END DO
   END DO
+!jyg<
+!  Store maximum of dtmin
+!  C est pas terrible d avoir ce test sur Ale+Cin encore une fois ici.
+!                      A REVOIR !
+  DO k = 1, nl
+    DO il = 1, ncum
+      IF (k>=(icb(il)+1) .AND. k<=inb(il) .AND. ale(il)+cin(il)>0.) THEN
+        dtminmax(il) = max(dtmin(il,k), dtminmax(il))
+      ENDIF
+    END DO
+  END DO
+!
+!    prevent convection when ale+cin <= 0
+  DO k = 1, nl
+    DO il = 1, ncum
+      IF (k>=(icb(il)+1) .AND. k<=inb(il)) THEN
+        dtmin(il,k) = min(dtmin(il,k), dtminmax(il))
+      ENDIF
+    END DO
+  END DO
+!>jyg
 !
   IF (prt_level >= 20) THEN
     print *,'cv3p2_closure: dtmin ', (k, dtmin(igout,k), k=1,nl)
+    print *,'cv3p2_closure: dtminmax ', dtminmax(igout)
   ENDIF
 !
@@ -588,4 +625,14 @@
   END DO
 
+!jyg<
+  IF (OK_intermittent) THEN
+    DO il = 1, ncum
+      IF (cbmflim(il)>1.E-6) THEN
+        cbmfalpb(il) = min(cbmfalp(il), (cbmfmax(il)-beta*cbmf0(il))/(1.-beta))
+        ! print*,'cbmfalpb',cbmfalpb(il),cbmfmax(il)
+      END IF
+    END DO
+  ELSE
+!>jyg
   DO il = 1, ncum
     IF (cbmflim(il)>1.E-6) THEN
@@ -599,4 +646,5 @@
     END IF
   END DO
+  ENDIF  !(OK_intermittent)
   IF (prt_level>=20) PRINT *, 'cv3p2_closure apres cbmfalpb: cbmfalpb ',cbmfalpb(igout)
 
@@ -637,4 +685,5 @@
   ! c     decreasing (i.e. if the final mass flux (cbmflast) is greater than 
   ! c     the target mass flux (cbmfalpb)).
+  ! c    If(ok_convstop): set iflag to 4 if no positive buoyancy has been met
 
 !jyg  DO il = 1, ncum
@@ -658,4 +707,13 @@
   END DO
 
+!jyg<
+  IF (ok_convstop) THEN
+    DO il = 1, ncum
+      IF (dtminmax(il) .LE. 0.) THEN
+        iflag(il) = 4
+      END IF
+    END DO
+  ELSE
+!>jyg
   DO k = 1, nl
     DO il = 1, ncum
@@ -667,4 +725,5 @@
     END DO
   END DO
+  ENDIF ! (ok_convstop)
 !
   IF (prt_level >= 10) THEN
Index: LMDZ5/trunk/libf/phylmd/cv3param.h
===================================================================
--- LMDZ5/trunk/libf/phylmd/cv3param.h	(revision 2397)
+++ LMDZ5/trunk/libf/phylmd/cv3param.h	(revision 2398)
@@ -7,4 +7,6 @@
 !------------------------------------------------------------
 
+      logical ok_convstop
+      logical ok_intermittent
       integer noff, minorig, nl, nlp, nlm
       real sigdz, spfac
@@ -15,4 +17,5 @@
       real dtovsh, dpbase, dttrig
       real dtcrit, tau, beta, alpha, alpha1
+      real tau_stop, noconv_stop
       real wbmax
       real delta
@@ -25,9 +28,11 @@
                       ,dtovsh, dpbase, dttrig &
                       ,dtcrit, tau, beta, alpha, alpha1 &
+                      ,tau_stop, noconv_stop &
                       ,wbmax &
                       ,delta, betad  &
                       ,flag_epKEorig &
                       ,flag_wb &
-                      ,noff, minorig, nl, nlp, nlm
+                      ,noff, minorig, nl, nlp, nlm  &
+                      ,ok_convstop, ok_intermittent
 !$OMP THREADPRIVATE(/cv3param/)
 
Index: LMDZ5/trunk/libf/phylmd/cva_driver.F90
===================================================================
--- LMDZ5/trunk/libf/phylmd/cva_driver.F90	(revision 2397)
+++ LMDZ5/trunk/libf/phylmd/cva_driver.F90	(revision 2398)
@@ -622,10 +622,14 @@
   END DO
 
+!!  IF (iflag_con==3) THEN
+!!    DO il = 1, len
+!!      sig1(il, nd) = sig1(il, nd) + 1.
+!!      sig1(il, nd) = amin1(sig1(il,nd), 12.1)
+!!    END DO
+!!  END IF
+
   IF (iflag_con==3) THEN
-    DO il = 1, len
-      sig1(il, nd) = sig1(il, nd) + 1.
-      sig1(il, nd) = amin1(sig1(il,nd), 12.1)
-    END DO
-  END IF
+      CALL cv3_incrcount(len,nd,delt,sig1)
+  END IF  ! (iflag_con==3)
 
 ! RomP >>>
