Index: LMDZ4/trunk/libf/phylmd/physiq.F
===================================================================
--- LMDZ4/trunk/libf/phylmd/physiq.F	(revision 1015)
+++ LMDZ4/trunk/libf/phylmd/physiq.F	(revision 1032)
@@ -163,4 +163,8 @@
       save iflag_ratqs
 c$OMP THREADPRIVATE(iflag_ratqs)
+      REAL lambda_th(klon,klev),zz,znum,zden
+      REAL wmax_th(klon)
+      REAL zmax_th(klon)
+      REAL tau_overturning_th(klon)
 
       integer lmax_th(klon)
@@ -537,5 +541,4 @@
 c
 cc      INTEGER iflag_con
-cc      SAVE iflag_con              ! indicateur de la convection
 c
       INTEGER itap
@@ -650,4 +653,7 @@
 cRR:fin declarations poches froides
 c=======================================================================================================
+
+      REAL zw2(klon,klev+1)
+      REAL fraca(klon,klev+1)
 
 c Variables locales pour la couche limite (al1):
@@ -1128,4 +1134,5 @@
       pde_u(:,:) = 0.
       aam=0.
+
       torsfc=0.
 
@@ -1202,4 +1209,7 @@
          solswad(:)=0.
 
+         lambda_th(:,:)=0.
+         wmax_th(:)=0.
+         tau_overturning_th(:)=0.
          IF (config_inca /= 'none') THEN
             tau_inca(:,:,:,:) = 0.
@@ -1237,4 +1247,5 @@
      .                  bl95_b0, bl95_b1,
      .                  iflag_thermals,nsplit_thermals,tau_thermals,
+     .                  iflag_thermals_ed,iflag_thermals_optflux,
 cnv flags pour la convection et les poches froides
      .                   iflag_coupl,iflag_clos,iflag_wake)
@@ -2307,12 +2318,7 @@
      s      ,ratqsdiff,zqsatth
 con rajoute ale et alp, et les caracteristiques de la couche alim
-     s      ,Ale_bl,Alp_bl,lalim_conv,wght_th, zmax0, f0)
+     s      ,Ale_bl,Alp_bl,lalim_conv,wght_th, zmax0, f0, zw2,fraca)
          endif
 
-!        call calltherm(pdtphys
-!    s      ,pplay,paprs,pphi
-!    s      ,u_seri,v_seri,t_seri,q_seri
-!    s      ,d_u_ajs,d_v_ajs,d_t_ajs,d_q_ajs
-!    s      ,fm_therm,entr_therm)
 
 c  Ajustement sec
@@ -2387,4 +2393,8 @@
          enddo
          enddo
+
+c-----------------------------------------------------------------------
+c  par nversion de la fonction log normale
+c-----------------------------------------------------------------------
       else if (iflag_cldcon.eq.4) then
          ptconvth(:,:)=.false.
@@ -2394,4 +2404,53 @@
      s   (klon,klev,q_seri,zqsat,clwcon0th,ptconvth,ratqsc,rnebcon0th)
          if(prt_level.ge.9) print*,' CLOUDS_GNO OK'
+
+c-----------------------------------------------------------------------
+c   par calcul direct de l'ecart-type
+c-----------------------------------------------------------------------
+
+      else if (iflag_cldcon>=5) then
+         wmax_th(:)=0.
+         zmax_th(:)=0.
+         do k=1,klev
+            do i=1,klon
+               wmax_th(i)=max(wmax_th(i),zw2(i,k))
+               if (detr_therm(i,k).gt.0.) zmax_th(i)=pphi(i,k)/rg
+            enddo
+         enddo
+         tau_overturning_th(:)=zmax_th(:)/max(0.5*wmax_th(:),0.1)
+         print*,'TAU TH OK ',tau_overturning_th(1),detr_therm(1,3)
+
+c On impose que l'air autour de la fraction couverte par le thermique
+c plus son air detraine durant tau_overturning_th soit superieur
+c a 0.1 q_seri
+         zz=0.1
+         do k=1,klev
+            do i=1,klon
+               lambda_th(i,k)=0.5*(fraca(i,k)+fraca(i,k+1))+
+     s         tau_overturning_th(i)*detr_therm(i,k)
+     s         *rg/(paprs(i,k)-paprs(i,k+1))
+               znum=(1.-zz)*q_seri(i,k)
+               zden=zqasc(i,k)-zz*q_seri(i,k)
+               if (znum-lambda_th(i,k)*zden<0.) lambda_th(i,k)=znum/zden
+               lambda_th(i,k)=min(lambda_th(i,k),0.9)
+            enddo
+         enddo
+
+         if(iflag_cldcon==5) then
+            do k=1,klev
+               do i=1,klon
+                  ratqsc(i,k)=sqrt(lambda_th(i,k)/(1.-lambda_th(i,k)))*
+     s            abs((zqasc(i,k)-q_seri(i,k))/q_seri(i,k))
+               enddo
+            enddo
+         else if(iflag_cldcon==6) then
+            do k=1,klev
+               do i=1,klon
+                  ratqsc(i,k)=sqrt(lambda_th(i,k))*
+     s            (zqasc(i,k)-q_seri(i,k))/q_seri(i,k)
+               enddo
+            enddo
+         endif
+
       endif
 
@@ -2457,5 +2516,5 @@
 
       if (iflag_cldcon.eq.1 .or.iflag_cldcon.eq.2
-     s    .or.iflag_cldcon.eq.4) then
+     s    .or.iflag_cldcon.ge.4) then
 
 ! On ajoute une constante au ratqsc*2 pour tenir compte de 
