Index: /LMDZ5/trunk/libf/phylmd/add_pbl_tend.F90
===================================================================
--- /LMDZ5/trunk/libf/phylmd/add_pbl_tend.F90	(revision 1997)
+++ /LMDZ5/trunk/libf/phylmd/add_pbl_tend.F90	(revision 1998)
@@ -1,3 +1,3 @@
-SUBROUTINE add_pbl_tend(zdu, zdv, zdt, zdq, zdql, text)
+SUBROUTINE add_pbl_tend(zdu, zdv, zdt, zdq, zdql, paprs, text)
   ! ======================================================================
   ! Ajoute les tendances de couche limite, soit determinees par la
@@ -29,4 +29,5 @@
   REAL zdt(klon, klev), zdq(klon, klev), zdql(klon, klev)
   CHARACTER *(*) text
+  REAL paprs(klon,klev+1)
 
   ! Local :
@@ -45,7 +46,7 @@
     PRINT *, ' add_pbl_tend, zzdt ', zzdt
     PRINT *, ' add_pbl_tend, zzdq ', zzdq
-    CALL add_phys_tend(zdu, zdv, zzdt, zzdq, zdql, text)
+    CALL add_phys_tend(zdu, zdv, zzdt, zzdq, zdql, paprs, text)
   ELSE
-    CALL add_phys_tend(zdu, zdv, zdt, zdq, zdql, text)
+    CALL add_phys_tend(zdu, zdv, zdt, zdq, zdql, paprs, text)
   END IF
 
Index: /LMDZ5/trunk/libf/phylmd/add_phys_tend.F90
===================================================================
--- /LMDZ5/trunk/libf/phylmd/add_phys_tend.F90	(revision 1997)
+++ /LMDZ5/trunk/libf/phylmd/add_phys_tend.F90	(revision 1998)
@@ -2,5 +2,5 @@
 ! $Id$
 !
-SUBROUTINE add_phys_tend (zdu,zdv,zdt,zdq,zdql,text)
+SUBROUTINE add_phys_tend (zdu,zdv,zdt,zdq,zdql,paprs,text)
 !======================================================================
 ! Ajoute les tendances des variables physiques aux variables 
@@ -19,4 +19,5 @@
 IMPLICIT none
 #include "iniprint.h"
+#include "YOMCST.h"
 
 ! Arguments :
@@ -24,4 +25,5 @@
 REAL zdu(klon,klev),zdv(klon,klev)
 REAL zdt(klon,klev),zdq(klon,klev),zdql(klon,klev)
+REAL paprs(klon,klev+1)
 CHARACTER*(*) text
 
@@ -29,4 +31,7 @@
 !--------
 REAL zt,zq
+REAL zq_int, zqp_int, zq_new
+
+REAL zqp(klev)
 
 INTEGER i, k,j
@@ -35,4 +40,6 @@
 INTEGER kadrs(klon*klev)
 INTEGER kqadrs(klon*klev)
+
+LOGICAL done(klon)
 
 integer debug_level
@@ -107,26 +114,54 @@
 !=====================================================================================
 IF (jqbad .GT. 0) THEN
+      done(:) = .false.                         !jyg
       DO j = 1, jqbad
-         i=jqadrs(j)
-         if(prt_level.ge.debug_level) THEN
-          print*,'WARNING  : EAU POUR LE POINT i rlon rlat =',i,rlon(i),rlat(i),text
-          print*,'l    T     dT       Q     dQ    '
-         endif
-         DO k = 1, klev
-           zq=q_seri(i,k)+zdq(i,k)
-           if (zq.lt.1.e-15) then
-              if (q_seri(i,k).lt.1.e-15) then
-               if(prt_level.ge.debug_level) THEN
-                print*,' cas q_seri<1.e-15 i k q_seri zq zdq :',i,k,q_seri(i,k),zq,zdq(i,k)
-               endif
-               q_seri(i,k)=1.e-15
-               zdq(i,k)=(1.e-15-q_seri(i,k))
-              endif
-           endif
+        i=jqadrs(j)
+        IF (.NOT.done(i)) THEN                  !jyg
+          if(prt_level.ge.debug_level) THEN
+           print*,'WARNING  : EAU POUR LE POINT i rlon rlat =',i,rlon(i),rlat(i),text
+           print*,'l    T     dT       Q     dQ    '
+           DO k = 1, klev
+              write(*,'(i3,2f14.4,2e14.2)') k,t_seri(i,k),zdt(i,k),q_seri(i,k),zdq(i,k)
+           ENDDO
+          endif
+!jyg<20140228 Corrections pour conservation de l'eau
+          DO k = 1, klev
+            zqp(k) = max(q_seri(i,k),1.e-15)
+          ENDDO
+          zq_int  = 0.
+          zqp_int = 0.
+          DO k = 1, klev
+            zq_int  = zq_int  + q_seri(i,k)*(paprs(i,k)-paprs(i,k+1))/Rg
+            zqp_int = zqp_int + zqp(k)     *(paprs(i,k)-paprs(i,k+1))/Rg
+          ENDDO
+          if(prt_level.ge.debug_level) THEN
+           print*,' cas q_seri<1.e-15 i k zq_int zqp_int zq_int/zqp_int :', &
+                                i, kqadrs(j), zq_int, zqp_int, zq_int/zqp_int
+          endif
+          DO k = 1, klev
+            zq_new = zqp(k)*zq_int/zqp_int
+            zdq(i,k) = zdq(i,k) + zq_new - q_seri(i,k)
+            q_seri(i,k) = zq_new
+          ENDDO
+          done(i) = .true.
+        ENDIF !(.NOT.done(i))
+
+!         DO k = 1, klev
 !           zq=q_seri(i,k)+zdq(i,k)
 !           if (zq.lt.1.e-15) then
-!              zdq(i,k)=(1.e-15-q_seri(i,k))
+!              if (q_seri(i,k).lt.1.e-15) then
+!               if(prt_level.ge.debug_level) THEN
+!                print*,' cas q_seri<1.e-15 i k q_seri zq zdq :',i,k,q_seri(i,k),zq,zdq(i,k)
+!               endif
+!               q_seri(i,k)=1.e-15
+!               zdq(i,k)=(1.e-15-q_seri(i,k))
+!              endif
 !           endif
-         ENDDO
+!!           zq=q_seri(i,k)+zdq(i,k)
+!!           if (zq.lt.1.e-15) then
+!!              zdq(i,k)=(1.e-15-q_seri(i,k))
+!!           endif
+!         ENDDO
+!jyg>
       ENDDO
 ENDIF
Index: /LMDZ5/trunk/libf/phylmd/conf_phys_m.F90
===================================================================
--- /LMDZ5/trunk/libf/phylmd/conf_phys_m.F90	(revision 1997)
+++ /LMDZ5/trunk/libf/phylmd/conf_phys_m.F90	(revision 1998)
@@ -114,5 +114,5 @@
     real,save :: seuil_inversion_omp
 
-    integer,SAVE :: iflag_thermals_ed_omp,iflag_thermals_optflux_omp
+    integer,SAVE :: iflag_thermals_ed_omp,iflag_thermals_optflux_omp,iflag_thermals_closure_omp
     integer,SAVE :: iflag_thermals_omp,nsplit_thermals_omp
     real,save :: tau_thermals_omp,alp_bl_k_omp
@@ -1159,4 +1159,14 @@
     iflag_thermals_optflux_omp = 0
     call getin('iflag_thermals_optflux',iflag_thermals_optflux_omp)
+    !
+    !Config Key  = iflag_thermals_closure
+    !Config Desc =
+    !Config Def  = 0
+    !Config Help =
+    !
+    iflag_thermals_closure_omp = 1
+    call getin('iflag_thermals_closure',iflag_thermals_closure_omp)
+    !
+    !
     !
     !
@@ -1814,4 +1824,5 @@
     iflag_thermals_ed = iflag_thermals_ed_omp
     iflag_thermals_optflux = iflag_thermals_optflux_omp
+    iflag_thermals_closure = iflag_thermals_closure_omp
     nsplit_thermals = nsplit_thermals_omp
     tau_thermals = tau_thermals_omp
@@ -2005,4 +2016,5 @@
     write(lunout,*)' iflag_thermals_ed = ', iflag_thermals_ed
     write(lunout,*)' iflag_thermals_optflux = ', iflag_thermals_optflux
+    write(lunout,*)' iflag_thermals_closure = ', iflag_thermals_closure
     write(lunout,*)' iflag_clos = ', iflag_clos
     write(lunout,*)' type_run = ',type_run 
Index: /LMDZ5/trunk/libf/phylmd/physiq.F90
===================================================================
--- /LMDZ5/trunk/libf/phylmd/physiq.F90	(revision 1997)
+++ /LMDZ5/trunk/libf/phylmd/physiq.F90	(revision 1998)
@@ -1785,8 +1785,8 @@
      IF (klon_glo==1) THEN
         CALL add_pbl_tend &
-          (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,'vdf')
+          (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,paprs,'vdf')
      ELSE
         CALL add_phys_tend &
-          (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,'vdf')
+          (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,paprs,'vdf')
      ENDIF
      !--------------------------------------------------------------------
@@ -2155,5 +2155,5 @@
   !-----------------------------------------------------------------------------------------
   ! ajout des tendances de la diffusion turbulente
-  CALL add_phys_tend(d_u_con,d_v_con,d_t_con,d_q_con,dql0,'con')
+  CALL add_phys_tend(d_u_con,d_v_con,d_t_con,d_q_con,dql0,paprs,'con')
   !-----------------------------------------------------------------------------------------
 
@@ -2272,5 +2272,5 @@
      d_t_wake(:,:)=dt_wake(:,:)*dtime
      d_q_wake(:,:)=dq_wake(:,:)*dtime
-     CALL add_phys_tend(du0,dv0,d_t_wake,d_q_wake,dql0,'wake')
+     CALL add_phys_tend(du0,dv0,d_t_wake,d_q_wake,dql0,paprs,'wake')
      !-----------------------------------------------------------------------------------------
 
@@ -2372,4 +2372,5 @@
            ENDIF
 
+
            !----Initialisations
            do i=1,klon
@@ -2389,4 +2390,7 @@
                    s_trig,s2,n2
            ENDIF
+ 
+!Option pour re-activer l'ancien calcul de Ale_bl (iflag_trig_bl=2)
+           IF (iflag_trig_bl.eq.1) then
 
            !----Tirage al\'eatoire et calcul de ale_bl_trig
@@ -2407,4 +2411,26 @@
               endif
            enddo
+
+           ELSE IF (iflag_trig_bl.eq.2) then
+
+           do i=1,klon
+              if ( (Ale_bl(i) .gt. abs(cin(i))+1.e-10) )  then
+                 proba_notrig(i)=(1.-exp(-s_trig/s2(i)))** &
+                      (n2(i)*dtime/tau_trig(i))
+                 !        print *, 'proba_notrig(i) ',proba_notrig(i)
+                 if (random_notrig(i) .ge. proba_notrig(i)) then 
+                    ale_bl_trig(i)=Ale_bl(i)
+                 else
+                    ale_bl_trig(i)=0.
+                 endif
+              else
+                 proba_notrig(i)=1.
+                 random_notrig(i)=0.
+                 ale_bl_trig(i)=0.
+              endif
+           enddo
+
+           ENDIF
+
            !
            IF (prt_level .GE. 10) THEN
@@ -2416,6 +2442,16 @@
 
         !-----------Statistical closure-----------
-        if (iflag_clos_bl.ge.1) then 
-
+        if (iflag_clos_bl.eq.1) then 
+
+           do i=1,klon
+!CR: alp probabiliste
+               if (ale_bl_trig(i).gt.0.) then
+                  alp_bl(i)=alp_bl(i)/(1.-min(proba_notrig(i),0.999))
+               endif
+           enddo        
+  
+        else if (iflag_clos_bl.eq.2) then
+
+!CR: alp calculee dans thermcell_main
            do i=1,klon
               alp_bl(i)=alp_bl_stat(i)
@@ -2454,5 +2490,7 @@
 
         do i=1,klon
-           zmax_th(i)=pphi(i,lmax_th(i))/rg
+!           zmax_th(i)=pphi(i,lmax_th(i))/rg
+!CR:04/05/12:correction calcul zmax
+         zmax_th(i)=zmax0(i) 
         enddo
 
@@ -2494,5 +2532,5 @@
         !-----------------------------------------------------------------------------------------
         ! ajout des tendances de l'ajustement sec ou des thermiques
-        CALL add_phys_tend(du0,dv0,d_t_ajsb,d_q_ajsb,dql0,'ajsb')
+        CALL add_phys_tend(du0,dv0,d_t_ajsb,d_q_ajsb,dql0,paprs,'ajsb')
         d_t_ajs(:,:)=d_t_ajs(:,:)+d_t_ajsb(:,:)
         d_q_ajs(:,:)=d_q_ajs(:,:)+d_q_ajsb(:,:)
@@ -2552,5 +2590,5 @@
   !-----------------------------------------------------------------------------------------
   ! ajout des tendances de la diffusion turbulente
-  CALL add_phys_tend(du0,dv0,d_t_lsc,d_q_lsc,d_ql_lsc,'lsc')
+  CALL add_phys_tend(du0,dv0,d_t_lsc,d_q_lsc,d_ql_lsc,paprs,'lsc')
   !-----------------------------------------------------------------------------------------
   DO k = 1, klev
@@ -3220,5 +3258,5 @@
      !-----------------------------------------------------------------------------------------
      ! ajout des tendances de la trainee de l'orographie
-     CALL add_phys_tend(d_u_oro,d_v_oro,d_t_oro,dq0,dql0,'oro')
+     CALL add_phys_tend(d_u_oro,d_v_oro,d_t_oro,dq0,dql0,paprs,'oro')
      !-----------------------------------------------------------------------------------------
      !
@@ -3266,5 +3304,5 @@
      !-----------------------------------------------------------------------------------------
      ! ajout des tendances de la portance de l'orographie
-     CALL add_phys_tend(d_u_lif,d_v_lif,d_t_lif,dq0,dql0,'lif')
+     CALL add_phys_tend(d_u_lif,d_v_lif,d_t_lif,dq0,dql0,paprs,'lif')
      !-----------------------------------------------------------------------------------------
      !
@@ -3280,5 +3318,5 @@
      !
      !  ajout des tendances
-     CALL add_phys_tend(d_u_hin,d_v_hin,d_t_hin,dq0,dql0,'hin')
+     CALL add_phys_tend(d_u_hin,d_v_hin,d_t_hin,dq0,dql0,paprs,'hin')
 
   ENDIF
@@ -3288,5 +3326,5 @@
           rain_fall + snow_fall, zustr_gwd_rando, zvstr_gwd_rando, &
           du_gwd_rando, dv_gwd_rando)
-     CALL add_phys_tend(du_gwd_rando, dv_gwd_rando, dt0, dq0, dql0, &
+     CALL add_phys_tend(du_gwd_rando, dv_gwd_rando, dt0, dq0, dql0,paprs, &
           'flott_gwd_rando')
   end if
Index: /LMDZ5/trunk/libf/phylmd/thermcell.h
===================================================================
--- /LMDZ5/trunk/libf/phylmd/thermcell.h	(revision 1997)
+++ /LMDZ5/trunk/libf/phylmd/thermcell.h	(revision 1998)
@@ -14,7 +14,7 @@
 
       integer            :: iflag_coupl,iflag_clos,iflag_wake
-      integer            :: iflag_thermals_ed,iflag_thermals_optflux
+      integer            :: iflag_thermals_ed,iflag_thermals_optflux,iflag_thermals_closure
 
-      common/ctherm1/iflag_thermals,nsplit_thermals
+      common/ctherm1/iflag_thermals,nsplit_thermals,iflag_thermals_closure
       common/ctherm2/tau_thermals,alp_bl_k
       common/ctherm4/iflag_coupl,iflag_clos,iflag_wake
Index: /LMDZ5/trunk/libf/phylmd/thermcell_dry.F90
===================================================================
--- /LMDZ5/trunk/libf/phylmd/thermcell_dry.F90	(revision 1997)
+++ /LMDZ5/trunk/libf/phylmd/thermcell_dry.F90	(revision 1998)
@@ -122,6 +122,13 @@
                zw2(ig,l+1)=0.
                lmax(ig)=l
+!            endif
+!CR:zmax continu 06/05/12: calcul de linter quand le thermique est stoppe par le detrainement
+            elseif (f_star(ig,l+1).lt.0.) then
+               linter(ig)=(l*(f_star(ig,l+1)-f_star(ig,l))  &
+     &           -f_star(ig,l))/(f_star(ig,l+1)-f_star(ig,l))
+               zw2(ig,l+1)=0.
+               lmax(ig)=l
             endif
-
+!CRfin
                wa_moy(ig,l+1)=sqrt(zw2(ig,l+1))
 
Index: /LMDZ5/trunk/libf/phylmd/thermcell_height.F90
===================================================================
--- /LMDZ5/trunk/libf/phylmd/thermcell_height.F90	(revision 1997)
+++ /LMDZ5/trunk/libf/phylmd/thermcell_height.F90	(revision 1998)
@@ -84,6 +84,7 @@
       enddo
 
-      if (iflag_thermals_ed.ge.1) then
-
+!     if (iflag_thermals_ed.ge.1) then
+      if (1==0) then
+!CR:date de quand le calcul du zmax continu etait buggue 
          num(:)=0.
          denom(:)=0.
@@ -100,7 +101,7 @@
        endif 
        enddo
-
-       else
-
+ 
+      else
+!CR:Calcul de zmax continu via le linter      
       do  ig=1,ngrid
 ! calcul de zlevinter
Index: /LMDZ5/trunk/libf/phylmd/thermcell_main.F90
===================================================================
--- /LMDZ5/trunk/libf/phylmd/thermcell_main.F90	(revision 1997)
+++ /LMDZ5/trunk/libf/phylmd/thermcell_main.F90	(revision 1998)
@@ -513,4 +513,5 @@
     &                      lalim,lmin,zmax_sec,wmax_sec,lev_out)
 
+ 
 call test_ltherm(ngrid,nlay,pplev,pplay,lmin,seuil,ztv,po,ztva,zqla,f_star,zw2,'thermcell_dry  lmin  ')
 call test_ltherm(ngrid,nlay,pplev,pplay,lalim,seuil,ztv,po,ztva,zqla,f_star,zw2,'thermcell_dry  lalim ')
@@ -533,6 +534,8 @@
       alim_star_clos(:,:)=alim_star(:,:)
       alim_star_clos(:,:)=entr_star(:,:)+alim_star(:,:)
-
-! Appel avec la version seche
+!
+!CR Appel de la fermeture seche 
+      if (iflag_thermals_closure.eq.1) then
+
       CALL thermcell_closure(ngrid,nlay,r_aspect_thermals,ptimestep,rho,  &
      &   zlev,lalim,alim_star_clos,f_star,zmax_sec,wmax_sec,f,lev_out)
@@ -541,6 +544,11 @@
 ! Appel avec les zmax et wmax tenant compte de la condensation
 ! Semble moins bien marcher
-!     CALL thermcell_closure(ngrid,nlay,r_aspect_thermals,ptimestep,rho,  &
-!    &   zlev,lalim,alim_star,f_star,zmax,wmax,f,lev_out)
+     else if (iflag_thermals_closure.eq.2) then
+
+     CALL thermcell_closure(ngrid,nlay,r_aspect_thermals,ptimestep,rho,  &
+    &   zlev,lalim,alim_star,f_star,zmax,wmax,f,lev_out)
+
+     endif
+
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
@@ -754,7 +762,12 @@
       do ig=1,ngrid
         if (ok_lcl(ig)) then 
-          if ((pplay(ig,l) .ge. pcon(ig)) .and. (pplay(ig,l+1) .le. pcon(ig))) then
+!ATTENTION,zw2 calcule en pplev
+!          if ((pplay(ig,l) .ge. pcon(ig)) .and. (pplay(ig,l+1) .le. pcon(ig))) then
+!          klcl(ig)=l
+!          interp(ig)=(pcon(ig)-pplay(ig,klcl(ig)))/(pplay(ig,klcl(ig)+1)-pplay(ig,klcl(ig)))
+!          endif
+          if ((pplev(ig,l) .ge. pcon(ig)) .and. (pplev(ig,l+1) .le. pcon(ig))) then
           klcl(ig)=l
-          interp(ig)=(pcon(ig)-pplay(ig,klcl(ig)))/(pplay(ig,klcl(ig)+1)-pplay(ig,klcl(ig)))
+          interp(ig)=(pcon(ig)-pplev(ig,klcl(ig)))/(pplev(ig,klcl(ig)+1)-pplev(ig,klcl(ig)))
           endif
         endif
@@ -772,5 +785,6 @@
 !!    enddo
     do ig =1,ngrid
-     zmax(ig)=pphi(ig,lmax(ig))/rg
+!CR:REHABILITATION ZMAX CONTINU
+!     zmax(ig)=pphi(ig,lmax(ig))/rg
      if (ok_lcl(ig)) then 
       rhobarz0(ig)=rhobarz(ig,klcl(ig))+(rhobarz(ig,klcl(ig)+1) &
@@ -915,5 +929,5 @@
 !------------Closure------------------
 
-  IF (iflag_clos_bl.ge.1) THEN 
+  IF (iflag_clos_bl.ge.2) THEN 
 
 !-----Calcul de ALP_BL_STAT
@@ -938,5 +952,5 @@
   enddo
 
-  ENDIF ! (iflag_clos_bl.ge.1)
+  ENDIF ! (iflag_clos_bl.ge.2)
 
 !!! fin nrlmd le 10/04/2012
Index: /LMDZ5/trunk/libf/phylmd/thermcell_plume.F90
===================================================================
--- /LMDZ5/trunk/libf/phylmd/thermcell_plume.F90	(revision 1997)
+++ /LMDZ5/trunk/libf/phylmd/thermcell_plume.F90	(revision 1998)
@@ -6,10 +6,7 @@
      &           lalim,f0,detr_star,entr_star,f_star,csc,ztva,  &
      &           ztla,zqla,zqta,zha,zw2,w_est,ztva_est,zqsatth,lmix,lmix_bis,linter &
-     &           ,lev_out,lunout1,igout)
-
+     &           ,lev_out,lunout1,igout) 
 !--------------------------------------------------------------------------
-! thermcell_plume: calcule les valeurs de qt, thetal et w dans l ascendance
-! Last modified : Arnaud Jam 2014/02/11
-!                 Better representation of stratocumulus
+!thermcell_plume: calcule les valeurs de qt, thetal et w dans l ascendance
 !--------------------------------------------------------------------------
 
@@ -95,4 +92,5 @@
 ! Initialisation
 
+!     print*,'THERMCELL PLUME OK'
       RLvCp = RLVTT/RCPD
       fact_epsilon=0.002
@@ -322,8 +320,8 @@
 !          zbuoyjam(ig,l)=RG*(ztva_est(ig,l)-ztv(ig,l))/ztv(ig,l)
 
-          entr_star(ig,l)=f_star(ig,l)*zdz*zbetalpha*MAX(0.,  &
-    &     afact*zbuoyjam(ig,l)/zw2m - fact_epsilon ) 
-
-          entrbis=entr_star(ig,l)
+!          entr_star(ig,l)=f_star(ig,l)*zdz*zbetalpha*MAX(0.,  &
+!    &     afact*zbuoyjam(ig,l)/zw2m - fact_epsilon ) 
+
+!          entrbis=entr_star(ig,l)
 
 
@@ -332,10 +330,14 @@
     &     + 0.012*(zdqt(ig,l)/zw2m)**0.5 )
 
-
-!           zbuoy(ig,l)=RG*(ztva_est(ig,l)-ztv(ig,l))/ztv(ig,l)
-!
-!           entr_star(ig,l)=Max(0.,f_star(ig,l)*zdz*zbetalpha*  &     
-!     &     afact*zbuoy(ig,l)/zw2m &
-!     &     - 1.*fact_epsilon)
+          zbuoy(ig,l)=RG*(ztva_est(ig,l)-ztv(ig,l))/ztv(ig,l)
+
+          entr_star(ig,l)=f_star(ig,l)*zdz*zbetalpha*MAX(0.,  &
+    &     afact*zbuoy(ig,l)/zw2m - fact_epsilon )
+!   &     afact*zbuoy(ig,l)/zw2m - fact_epsilon+ 0.012*(zdqt(ig,l)/zw2m)**0.5)
+
+
+!          entr_star(ig,l)=Max(0.,f_star(ig,l)*zdz*zbetalpha*  &     
+!    &     afact*zbuoy(ig,l)/zw2m &
+!    &     - 1.*fact_epsilon)
 
           
@@ -350,5 +352,5 @@
 !        endif
 
-!print*,'alim0',l,lalim(ig),alim_star(ig,l),entrbis,f_star(ig,l)
+!print*,'alim0',zlev(ig,l),entr_star(ig,l),detr_star(ig,l),zw2m,zbuoy(ig,l),f_star(ig,l)
 ! Calcul du flux montant normalise
       f_star(ig,l+1)=f_star(ig,l)+alim_star(ig,l)+entr_star(ig,l)  &
@@ -425,4 +427,10 @@
      &               -zw2(ig,l))/(zw2(ig,l+1)-zw2(ig,l))
            zw2(ig,l+1)=0.
+!+CR:04/05/12:correction calcul linter pour calcul de zmax continu
+        elseif (f_star(ig,l+1).lt.0.) then
+           linter(ig)=(l*(f_star(ig,l+1)-f_star(ig,l))  &
+     &               -f_star(ig,l))/(f_star(ig,l+1)-f_star(ig,l))
+           zw2(ig,l+1)=0.
+!fin CR:04/05/12
         endif
 
@@ -464,4 +472,6 @@
      return 
      end
+
+
 
 
@@ -536,4 +546,5 @@
       REAL zqsatth(ngrid,klev)
       REAL zta_est(ngrid,klev)
+      REAL zbuoyjam(ngrid,klev)
       REAL ztemp(ngrid),zqsat(ngrid)
       REAL zdw2
@@ -572,5 +583,5 @@
 
 ! Initialisations des variables reeles
-if (1==0) then
+if (1==1) then
       ztva(:,:)=ztv(:,:)
       ztva_est(:,:)=ztva(:,:)
@@ -598,4 +609,5 @@
       zw2(:,:)=0.
       zbuoy(:,:)=0.
+      zbuoyjam(:,:)=0.
       gamma(:,:)=0.
       zeps(:,:)=0.
@@ -819,5 +831,12 @@
                 zw2(ig,l+1)=0.
                 linter(ig)=l+1
-            endif
+!CR:04/05/12:calcul linter
+        elseif (f_star(ig,l+1).lt.0.) then
+           linter(ig)=(l*(f_star(ig,l+1)-f_star(ig,l))  &
+     &               -f_star(ig,l))/(f_star(ig,l+1)-f_star(ig,l))
+           zw2(ig,l+1)=0.
+!fin CR:04/05/12
+        endif
+
 
         if (zw2(ig,l+1).lt.0.) then 
@@ -862,4 +881,6 @@
         if (prt_level.ge.20) print*,'coucou calcul detr 470: ig, l', ig, l
 
+
+
      return 
      end
