Index: /LMDZ4/trunk/libf/phylmd/concvl.F
===================================================================
--- /LMDZ4/trunk/libf/phylmd/concvl.F	(revision 618)
+++ /LMDZ4/trunk/libf/phylmd/concvl.F	(revision 619)
@@ -7,5 +7,7 @@
      .             upwd,dnwd,dnwdbis,Ma,cape,tvp,iflag,
      .             pbase,bbase,dtvpdt1,dtvpdq1,dplcldt,dplcldr,
-     .             qcondc,wd)
+     .             qcondc,wd,
+     .             pmflxr,pmflxs,
+     .             da,phi,mp)
  
 c
@@ -56,4 +58,5 @@
        INTEGER ntra
        REAL work1(klon,klev),work2(klon,klev)
+       REAL pmflxr(klon,klev+1),pmflxs(klon,klev+1)
 c
        REAL d_t(klon,klev),d_q(klon,klev),d_u(klon,klev),d_v(klon,klev)
@@ -65,4 +68,5 @@
        REAL upwd(klon,klev),dnwd(klon,klev),dnwdbis(klon,klev)
        REAL Ma(klon,klev),cape(klon),tvp(klon,klev)
+       real da(klon,klev),phi(klon,klev,klev),mp(klon,klev)
        INTEGER iflag(klon)
        REAL rflag(klon)
@@ -101,4 +105,5 @@
          DO i=1,klon
          em_ph(i,k) = paprs(i,k) / 100.0
+         pmflxs(i,k)=0.
       ENDDO
       ENDDO
@@ -145,6 +150,8 @@
      $              em_p,em_ph,iflag,
      $              d_t,d_q,d_u,d_v,d_tra,rain,
-     $              cbmf,work1,work2,
-     $              dtime,Ma,upwd,dnwd,dnwdbis,qcondc,wd,cape)
+     $              pmflxr,cbmf,work1,work2,
+     $              kbas,ktop,
+     $              dtime,Ma,upwd,dnwd,dnwdbis,qcondc,wd,cape,
+     $              da,phi,mp)
 
 C------------------------------------------------------------------
@@ -163,5 +170,11 @@
         ENDDO
       ENDDO
- 
+       DO itra = 1,ntra
+        DO k = 1, klev
+         DO i = 1, klon
+            d_tra(i,k,itra) =dtime*d_tra(i,k,itra) 
+         ENDDO
+        ENDDO
+       ENDDO
 c les traceurs ne sont pas mis dans cette version de convect4:
       if (iflag_con.eq.4) then
Index: /LMDZ4/trunk/libf/phylmd/cv3_routines.F
===================================================================
--- /LMDZ4/trunk/libf/phylmd/cv3_routines.F	(revision 618)
+++ /LMDZ4/trunk/libf/phylmd/cv3_routines.F	(revision 619)
@@ -2164,5 +2164,5 @@
      :                    ,ment,qent,uent,vent,nent,elij,traent,sig
      :                    ,tv,tvp
-     :                    ,iflag,precip,ft,fr,fu,fv,ftra
+     :                    ,iflag,precip,VPrecip,ft,fr,fu,fv,ftra
      :                    ,upwd,dnwd,dnwd0,ma,mike,tls,tps,qcondc,wd)
       implicit none
@@ -2197,4 +2197,5 @@
 c outputs:
       real precip(nloc)
+      real VPrecip(nloc,nd+1)
       real ft(nloc,nd), fr(nloc,nd), fu(nloc,nd), fv(nloc,nd)
       real ftra(nloc,nd,ntra)
@@ -2228,8 +2229,10 @@
        precip(il)=0.0
        wd(il)=0.0     ! gust
+       VPrecip(il,nd+1)=0.
       enddo
 
       do i=1,nd
        do il=1,ncum
+         VPrecip(il,i)=0.0
          ft(il,i)=0.0
          fr(il,i)=0.0
@@ -2270,4 +2273,19 @@
       enddo 
 
+C   ***  CALCULATE VERTICAL PROFILE OF  PRECIPITATIONs IN kg/m2/s  ===
+C
+c MAF rajout pour lessivage
+       do k=1,nl
+         do il=1,ncum
+          if (k.le.inb(il)) then
+            if (cvflag_grav) then
+             VPrecip(il,k) = wt(il,k)*sigd*water(il,k)/grav
+            else
+             VPrecip(il,k) = wt(il,k)*sigd*water(il,k)/10.
+            endif 
+          endif
+         end do
+       end do
+C
 c
 c   ***  Calculate downdraft velocity scale    ***
@@ -3025,12 +3043,15 @@
       SUBROUTINE cv3_uncompress(nloc,len,ncum,nd,ntra,idcum
      :         ,iflag
-     :         ,precip,sig,w0
+     :         ,precip,VPrecip,sig,w0
      :         ,ft,fq,fu,fv,ftra
+     :         ,inb
      :         ,Ma,upwd,dnwd,dnwd0,qcondc,wd,cape
+     :         ,da,phi,mp
      :         ,iflag1
-     :         ,precip1,sig1,w01
+     :         ,precip1,VPrecip1,sig1,w01
      :         ,ft1,fq1,fu1,fv1,ftra1
+     :         ,inb1
      :         ,Ma1,upwd1,dnwd1,dnwd01,qcondc1,wd1,cape1
-     :                               )
+     :         ,da1,phi1,mp1)
       implicit none
 
@@ -3041,5 +3062,7 @@
       integer idcum(nloc)
       integer iflag(nloc)
+      integer inb(nloc)
       real precip(nloc)
+      real VPrecip(nloc,nd+1)
       real sig(nloc,nd), w0(nloc,nd)
       real ft(nloc,nd), fq(nloc,nd), fu(nloc,nd), fv(nloc,nd)
@@ -3049,8 +3072,11 @@
       real qcondc(nloc,nd)
       real wd(nloc),cape(nloc)
+      real da(nloc,nd),phi(nloc,nd,nd),mp(nloc,nd)
 
 c outputs:
       integer iflag1(len)
+      integer inb1(len)
       real precip1(len)
+      real VPrecip1(len,nd+1)
       real sig1(len,nd), w01(len,nd)
       real ft1(len,nd), fq1(len,nd), fu1(len,nd), fv1(len,nd)
@@ -3060,4 +3086,5 @@
       real qcondc1(nloc,nd)
       real wd1(nloc),cape1(nloc)
+      real da1(nloc,nd),phi1(nloc,nd,nd),mp1(nloc,nd)
 
 c local variables:
@@ -3068,4 +3095,5 @@
          iflag1(idcum(i))=iflag(i)
          wd1(idcum(i))=wd(i)
+         inb1(idcum(i))=inb(i)
          cape1(idcum(i))=cape(i)
  2000   continue
@@ -3073,4 +3101,5 @@
         do 2020 k=1,nl
           do 2010 i=1,ncum
+            VPrecip1(idcum(i),k)=VPrecip(i,k)
             sig1(idcum(i),k)=sig(i,k)
             w01(idcum(i),k)=w0(i,k)
@@ -3084,4 +3113,6 @@
             dnwd01(idcum(i),k)=dnwd0(i,k)
             qcondc1(idcum(i),k)=qcondc(i,k)
+            da1(idcum(i),k)=da(i,k)
+            mp1(idcum(i),k)=mp(i,k)
  2010     continue
  2020   continue
@@ -3099,4 +3130,11 @@
 c 2110    continue
 c 2100   continue
+        do j=1,nd
+         do k=1,nd 
+          do i=1,ncum
+            phi1(idcum(i),k,j)=phi(i,k,j)
+          end do
+         end do
+        end do
 
         return
Index: /LMDZ4/trunk/libf/phylmd/cv_driver.F
===================================================================
--- /LMDZ4/trunk/libf/phylmd/cv_driver.F	(revision 618)
+++ /LMDZ4/trunk/libf/phylmd/cv_driver.F	(revision 619)
@@ -5,7 +5,9 @@
      &                   t1,q1,qs1,u1,v1,tra1,
      &                   p1,ph1,iflag1,ft1,fq1,fu1,fv1,ftra1,
-     &                   precip1,
+     &                   precip1,VPrecip1,
      &                   cbmf1,sig1,w01,
-     &                   delt,Ma1,upwd1,dnwd1,dnwd01,qcondc1,wd1,cape1)
+     &                   icb1,inb1,
+     &                   delt,Ma1,upwd1,dnwd1,dnwd01,qcondc1,wd1,cape1,
+     &                   da1,phi1,mp1)
 C
       implicit none
@@ -37,4 +39,5 @@
 C      ftra1         Real           Output       tracor tend
 C      precip1       Real           Output       precipitation
+C      VPrecip1      Real           Output       vertical profile of precipitations
 C      cbmf1         Real           Output       cloud base mass flux
 C      sig1          Real           In/Out       section adiabatic updraft
@@ -84,4 +87,5 @@
       real precip1(len)
       real cbmf1(len)
+      real VPrecip1(len,nd+1)
       real Ma1(len,nd)
       real upwd1(len,nd)
@@ -93,4 +97,6 @@
       real cape1(len)     
 
+      real da1(len,nd),phi1(len,nd,nd),mp1(len,nd)
+      real da(len,nd),phi(len,nd,nd),mp(len,nd)
       real tra1(len,nd,ntra)
       real ftra1(len,nd,ntra)
@@ -185,4 +191,6 @@
 !  precip: Scalar convective precipitation rate (mm/day).
 !
+!  VPrecip: Vertical profile of convective precipitation (kg/m2/s).
+!
 !  wd:   A convective downdraft velocity scale. For use in surface
 !        flux parameterizations. See convect.ps file for details.
@@ -213,4 +221,5 @@
       integer nk1(klon)
       integer icb1(klon)
+      integer inb1(klon)
       integer icbs1(klon)
 
@@ -267,5 +276,5 @@
       real ments(nloc,klev,klev), qents(nloc,klev,klev)
       real sij(nloc,klev,klev), elij(nloc,klev,klev)
-      real mp(nloc,klev), qp(nloc,klev), up(nloc,klev), vp(nloc,klev)
+      real qp(nloc,klev), up(nloc,klev), vp(nloc,klev)
       real wt(nloc,klev), water(nloc,klev), evap(nloc,klev)
       real b(nloc,klev), ft(nloc,klev), fq(nloc,klev)
@@ -275,4 +284,5 @@
       real tps(nloc,klev), qprime(nloc), tprime(nloc)
       real precip(nloc)
+      real VPrecip(nloc,klev+1)
       real tra(nloc,klev,ntra), trap(nloc,klev,ntra)
       real ftra(nloc,klev,ntra), traent(nloc,klev,klev,ntra)
@@ -324,5 +334,5 @@
          clw(i,k)=0.0	 
          gz1(i,k) = 0.
-
+         VPrecip1(i,k) = 0.
          Ma1(i,k)=0.0
          upwd1(i,k)=0.0
@@ -346,4 +356,5 @@
         wd1(i)=0.0
         cape1(i)=0.0
+        VPrecip1(i,nd+1)=0.0
  60   continue
 
@@ -552,5 +563,5 @@
      :                     ,ment,qent,uent,vent,nent,elij,traent,sig
      :                     ,tv,tvp
-     o                     ,iflag,precip,ft,fq,fu,fv,ftra
+     o                     ,iflag,precip,VPrecip,ft,fq,fu,fv,ftra
      o                     ,upwd,dnwd,dnwd0,ma,mike,tls,tps,qcondc,wd)
       endif
@@ -568,18 +579,34 @@
 
 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+! --- passive tracers
+!^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+      if (iflag_con.eq.3) then
+       CALL cv3_tracer(nloc,len,ncum,nd,nd,
+     :                  ment,sij,da,phi)
+      endif
+
+!^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 ! --- UNCOMPRESS THE FIELDS
 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-
+c set iflag1 =42 for non convective points 
+      do  i=1,len
+        iflag1(i)=42
+      end do
+c
       if (iflag_con.eq.3) then
        CALL cv3_uncompress(nloc,len,ncum,nd,ntra,idcum
      :          ,iflag
-     :          ,precip,sig,w0
+     :          ,precip,VPrecip,sig,w0
      :          ,ft,fq,fu,fv,ftra
+     :          ,inb 
      :          ,Ma,upwd,dnwd,dnwd0,qcondc,wd,cape
+     :          ,da,phi,mp
      o          ,iflag1
-     o          ,precip1,sig1,w01
+     o          ,precip1,VPrecip1,sig1,w01
      o          ,ft1,fq1,fu1,fv1,ftra1
-     o          ,Ma1,upwd1,dnwd1,dnwd01,qcondc1,wd1,cape1 )
+     o          ,inb1
+     o          ,Ma1,upwd1,dnwd1,dnwd01,qcondc1,wd1,cape1 
+     o          ,da1,phi1,mp1)
       endif
 
@@ -611,5 +638,5 @@
 c -- si .TRUE., on rend la gravite plus explicite et eventuellement
 c differente de 10.0 dans convect3: 
-      cvflag_grav = .FALSE.
+      cvflag_grav = .TRUE.
 
       return
@@ -654,5 +681,6 @@
 c ori      t0  = RTT
        t0  = 273.15 ! convect3 (RTT=273.16)
-       grav= 10.    ! implicitely or explicitely used in convect3
+c maf       grav= 10.    ! implicitely or explicitely used in convect3
+       grav= g    ! implicitely or explicitely used in convect3
       endif
 
Index: /LMDZ4/trunk/libf/phylmd/cvltr.F
===================================================================
--- /LMDZ4/trunk/libf/phylmd/cvltr.F	(revision 619)
+++ /LMDZ4/trunk/libf/phylmd/cvltr.F	(revision 619)
@@ -0,0 +1,144 @@
+c
+c $Header$
+c
+      SUBROUTINE cvltr(pdtime,da, phi, mp,paprs,pplay,x,upd,dnd,dx)
+      IMPLICIT NONE 
+c=====================================================================
+c Objet : convection des traceurs / KE
+c Auteurs: M-A Filiberti and J-Y Grandpeix
+c=====================================================================
+c
+#include "dimensions.h"
+#include "dimphy.h"
+#include "YOMCST.h"
+#include "YOECUMF.h" 
+c
+      REAL pdtime
+      REAL paprs(klon,klev+1) ! pression aux 1/2 couches (bas en haut)
+      REAL pplay(klon,klev)  ! pression pour le milieu de chaque couche
+      REAL x(klon,klev)        ! q de traceur (bas en haut) 
+      REAL dx(klon,klev)     ! tendance de traceur  (bas en haut)
+      real da(klon,klev),phi(klon,klev,klev),mp(klon,klev)
+      REAL upd(klon,klev)      ! saturated updraft mass flux
+      REAL dnd(klon,klev)      ! saturated downdraft mass flux
+c
+c--variables locales      
+      real zed(klon,klev),zmd(klon,klev,klev)
+      real za(klon,klev,klev)
+      real zmfd(klon,klev),zmfa(klon,klev)
+      real zmfp(klon,klev),zmfu(klon,klev)
+      integer i,k,j 
+c test conservation
+c      real conserv
+c =========================================
+c calcul des tendances liees au downdraft
+c =========================================
+      zed(:,:)=0.
+      zmfd(:,:)=0.
+      zmfa(:,:)=0.
+      zmfu(:,:)=0.
+      zmfp(:,:)=0.
+      zmd(:,:,:)=0.
+      za(:,:,:)=0.
+c entrainement
+      do k=1,klev-1
+        do i=1,klon
+          zed(i,k)=max(0.,mp(i,k)-mp(i,k+1))
+        end do
+      end do
+c
+c calcul de la matrice d echange
+c matrice de distribution de la masse entrainee en k
+c
+      do k=1,klev
+        do i=1,klon
+          zmd(i,k,k)=zed(i,k)
+        end do
+      end do
+      do k=2,klev
+        do j=k-1,1,-1
+          do i=1,klon
+          if(mp(i,j+1).ne.0) then
+          zmd(i,j,k)=zmd(i,j+1,k)*min(1.,mp(i,j)/mp(i,j+1))
+          endif
+          end do
+        end do
+      end do
+      do k=1,klev
+        do j=1,klev-1
+          do i=1,klon
+          za(i,j,k)=max(0.,zmd(i,j+1,k)-zmd(i,j,k))
+          end do
+        end do
+      end do
+c
+c rajout du terme lie a l ascendance induite
+c
+        do j=2,klev
+         do i=1,klon
+          za(i,j,j-1)=za(i,j,j-1)+mp(i,j)
+         end do
+        end do
+C
+c tendances
+c            
+      do k=1,klev
+        do j=1,klev
+          do i=1,klon
+          zmfd(i,j)=zmfd(i,j)+za(i,j,k)*(x(i,k)-x(i,j))
+          end do
+        end do
+      end do
+c
+c =========================================
+c calcul des tendances liees aux flux satures
+c =========================================
+      do j=1,klev
+        do i=1,klon
+          zmfa(i,j)=da(i,j)*(x(i,1)-x(i,j))
+        end do
+      end do
+      do k=1,klev
+        do j=1,klev
+          do i=1,klon
+          zmfp(i,j)=zmfp(i,j)+phi(i,j,k)*(x(i,k)-x(i,j))
+          end do
+        end do
+      end do
+      do j=1,klev-1
+        do i=1,klon
+          zmfu(i,j)=max(0.,upd(i,j+1)+dnd(i,j+1))*(x(i,j+1)-x(i,j))
+        end do
+      end do
+      do j=2,klev
+        do i=1,klon
+          zmfu(i,j)=zmfu(i,j)
+     .             +min(0.,upd(i,j)+dnd(i,j))*(x(i,j)-x(i,j-1))
+        end do
+      end do
+
+c =========================================
+c--calcul final des tendances
+c =========================================
+      do k=1, klev
+        do i=1, klon
+          dx(i,k)=(zmfd(i,k)+zmfu(i,k)
+     .      +zmfa(i,k)+zmfp(i,k))*pdtime
+     .      *RG/(paprs(i,k)-paprs(i,k+1))
+c          print*,'dx',k,dx(i,k)
+        enddo
+      enddo
+c
+c test de conservation du traceur
+c      conserv=0.
+c      do k=1, klev
+c        do i=1, klon
+c         conserv=conserv+dx(i,k)*
+c     .     (paprs(i,k)-paprs(i,k+1))/RG
+C
+c        enddo
+c      enddo
+c      print *,'conserv',conserv
+     
+      return
+      end
Index: /LMDZ4/trunk/libf/phylmd/ini_histmth.h
===================================================================
--- /LMDZ4/trunk/libf/phylmd/ini_histmth.h	(revision 618)
+++ /LMDZ4/trunk/libf/phylmd/ini_histmth.h	(revision 619)
@@ -538,8 +538,4 @@
      .                "ave(X)", zsto,zout)
 c
-         CALL histdef(nid_mth, "upwd", "saturated updraft", "kg/m2/s",
-     .                iim,jjmp1,nhori, klev,1,klev,nvert, 32,
-     .                "ave(X)", zsto,zout)
-c
          CALL histdef(nid_mth, "dtphy", "Physics dT", "K/s",
      .                iim,jjmp1,nhori, klev,1,klev,nvert, 32,
@@ -594,8 +590,14 @@
      .                "ave(X)", zsto,zout)
 c
+      IF (iflag_con.GE.3) THEN 
+c
          CALL histdef(nid_mth,"Ma","undilute adiab updraft","kg/m2/s",
      .                iim,jjmp1,nhori, klev,1,klev,nvert, 32,
      .                "ave(X)", zsto,zout)
 c
+         CALL histdef(nid_mth, "upwd", "saturated updraft", "kg/m2/s",
+     .                iim,jjmp1,nhori, klev,1,klev,nvert, 32,
+     .                "ave(X)", zsto,zout)
+c
          CALL histdef(nid_mth, "dnwd", "saturated downdraft","kg/m2/s",
      .                iim,jjmp1,nhori, klev,1,klev,nvert, 32,
@@ -605,4 +607,6 @@
      .                iim,jjmp1,nhori, klev,1,klev,nvert, 32,
      .                "ave(X)", zsto,zout)
+      ENDIF !iflag_con.GE.3
+c
 c
          CALL histdef(nid_mth, "dtdyn", "Dynamics dT", "K/s",
@@ -741,14 +745,9 @@
 c
          if (nqmax.GE.3) THEN
-         DO iq=1,nqmax-2
-         IF (iq.LE.99) THEN
-         WRITE(str2,'(i2.2)') iq
-         CALL histdef(nid_mth, "trac"//str2, "Tracer No."//str2, "-",
-     .                iim,jjmp1,nhori, klev,1,klev,nvert, 32,
-     .                "ave(X)", zsto,zout)
-         ELSE
-         PRINT*, "Trop de traceurs"
-         CALL abort
-         ENDIF
+         DO iq=3,nqmax
+         iiq=niadv(iq)
+         CALL histdef(nid_mth, tnom(iq), ttext(iiq), "-",
+     .                iim,jjmp1,nhori, klev,1,klev,nvert, 32,
+     .                "ave(X)", zsto,zout)
          ENDDO
          ENDIF
Index: /LMDZ4/trunk/libf/phylmd/physiq.F
===================================================================
--- /LMDZ4/trunk/libf/phylmd/physiq.F	(revision 618)
+++ /LMDZ4/trunk/libf/phylmd/physiq.F	(revision 619)
@@ -212,4 +212,5 @@
       REAL d_qx(klon,klev,nqmax)
       REAL d_ps(klon)
+      real da(klon,klev),phi(klon,klev,klev),mp(klon,klev)
 
       INTEGER klevp1, klevm1
@@ -769,5 +770,5 @@
       REAL zx_t, zx_qs, zdelta, zcor, zfra, zlvdcp, zlsdcp
       real zqsat(klon,klev)
-      INTEGER i, k, iq, ig, j, nsrf, ll
+      INTEGER i, k, iq, ig, j, iiq, nsrf, ll
       REAL t_coup
       PARAMETER (t_coup=234.0)
@@ -795,5 +796,5 @@
       INTEGER iflagctrl(klon)          ! flag fonctionnement de convect
 c -- convect43:
-      INTEGER ntra              ! nb traceurs pour convect4.3
+      INTEGER ntra              ! nb traceurs 
       REAL pori_con(klon)    ! pressure at the origin level of lifted parcel
       REAL plcl_con(klon),dtma_con(klon),dtlcl_con(klon)
@@ -1153,8 +1154,4 @@
 
          WRITE(lunout,*)"*** Convection de Kerry Emanuel 4.3  "
-         WRITE(lunout,*)
-     .      "On va utiliser le melange convectif des traceurs qui"
-         WRITE(lunout,*)"est calcule dans convect4.3"
-         WRITE(lunout,*)" !!! penser aux logical flags de phytrac"
 
           DO i = 1, klon
@@ -1167,5 +1164,5 @@
           DO i = 1, klon
            ibas_con(i) = 1
-           itop_con(i) = klev+1
+           itop_con(i) = 1
           ENDDO
 cIM15/11/02 rajout initialisation ibas_con,itop_con cf. SB =>END
@@ -1733,10 +1730,8 @@
       ELSE IF (iflag_con.GE.3) THEN
 c nb of tracers for the KE convection:
-          if (nqmax .GE. 4) then
-              ntra = nbtr
-          else
-              ntra = 1 
-          endif
-c
+c MAF la partie traceurs est faite dans phytrac
+c on met ntra=1 pour limiter les appels mais on peut
+c supprimer les calculs / ftra.
+              ntra = 1
 c sb, oct02:
 c Schema de convection modularise et vectorise:
@@ -1747,5 +1742,5 @@
           CALL concvl (iflag_con,
      .        dtime,paprs,pplay,t_seri,q_seri,
-     .        u_seri,v_seri,tr_seri,nbtr,
+     .        u_seri,v_seri,tr_seri,ntra,
      .        ema_work1,ema_work2,
      .        d_t_con,d_q_con,d_u_con,d_v_con,d_tr,
@@ -1753,13 +1748,17 @@
      .        upwd,dnwd,dnwd0,
      .        Ma,cape,tvp,iflagctrl,
-     .        pbase,bbase,dtvpdt1,dtvpdq1,dplcldt,dplcldr,qcondc,wd)
+     .        pbase,bbase,dtvpdt1,dtvpdq1,dplcldt,dplcldr,qcondc,wd,
+     .        pmflxr,pmflxs,
+     .        da,phi,mp)
+
 cIM cf. FH
               clwcon0=qcondc
+              pmfu(:,:)=upwd(:,:)+dnwd(:,:)
 
           ELSE ! ok_cvl
-
+c MAF conema3 ne contient pas les traceurs
           CALL conema3 (dtime,
      .        paprs,pplay,t_seri,q_seri,
-     .        u_seri,v_seri,tr_seri,nbtr,
+     .        u_seri,v_seri,tr_seri,ntra,
      .        ema_work1,ema_work2,
      .        d_t_con,d_q_con,d_u_con,d_v_con,d_tr,
@@ -1885,18 +1884,4 @@
       zx_ajustq=.FALSE.
 c
-      IF (nqmax.GT.2) THEN !--melange convectif de traceurs
-c
-          IF (iflag_con .NE. 2 .AND. debut) THEN 
-              WRITE(lunout,*)'Pour l instant, seul conflx fonctionne ',
-     $            'avec traceurs', iflag_con
-              WRITE(lunout,*)' Mettre iflag_con', 
-     $            ' = 2 dans run.def et repasser'
-c              CALL abort
-              ENDIF 
-c
-      ENDIF !--nqmax.GT.2
-c
-c Appeler l'ajustement sec
-c
 c===================================================================
 c Convection seche (thermiques ou ajustement)
@@ -2644,26 +2629,6 @@
 c   Calcul  des tendances traceurs
 c====================================================================
-C Pascale : il faut quand meme apeller phytrac car il gere les sorties
-cKE43       des traceurs => il faut donc mettre des flags a .false.
-      IF (iflag_con.GE.3) THEN
-c           on ajoute les tendances calculees par KE43
-cXXX OM on onhibe la convection sur les traceurs
-        DO iq=1, nqmax-2 ! Sandrine a -3 ???
-cXXX OM on inhibe la convection sur les traceur
-cXXX        DO k = 1, nlev
-cXXX        DO i = 1, klon
-cXXX          tr_seri(i,k,iq) = tr_seri(i,k,iq) + d_tr(i,k,iq)
-cXXX        ENDDO
-cXXX        ENDDO
-        WRITE(iqn,'(i2.2)') iq
-        CALL minmaxqfi(tr_seri(1,1,iq),0.,1.e33,'couche lim iq='//iqn)
-        ENDDO
-CMAF modif pour garder info du nombre de traceurs auxquels
-C la physique s'applique
-      ELSE
-CMAF modif pour garder info du nombre de traceurs auxquels
-C la physique s'applique
 C
-      call phytrac (rnpb,
+      call phytrac (iflag_con,rnpb,
      I                   itap, julien, gmtime,
      I                   debut,lafin,
@@ -2680,9 +2645,10 @@
      I                   ibas_con,
      I                   pmflxr,pmflxs,prfl,psfl,
-#ifdef INCA
+     I                   da,phi,mp,
+     I                   upwd,dnwd,
+#ifdef INCA_CH4
      I                   flxmass_w,
 #endif
      O                   tr_seri)
-      ENDIF 
 
       IF (offline) THEN
Index: /LMDZ4/trunk/libf/phylmd/phytrac.F
===================================================================
--- /LMDZ4/trunk/libf/phylmd/phytrac.F	(revision 618)
+++ /LMDZ4/trunk/libf/phylmd/phytrac.F	(revision 619)
@@ -4,5 +4,5 @@
 c
 c
-      SUBROUTINE phytrac (rnpb,nstep,
+      SUBROUTINE phytrac (iflag_con,rnpb,nstep,
      I                    julien,gmtime,
      I                    debutphy,lafin,
@@ -146,4 +146,5 @@
       REAL flxmass_w(klon,klev)
 #endif
+      integer iflag_con
 
 cAA Rem : nbtr : nombre de vrais traceurs est defini dans dimphy.h
@@ -166,4 +167,9 @@
       REAL pen_d(nlon,nlev) ! flux entraine dans le panache descendant
       REAL pde_d(nlon,nlev) ! flux detraine dans le panache descendant
+c KE
+      real da(nlon,nlev),phi(nlon,nlev,nlev),mp(nlon,nlev)
+      REAL upwd(nlon,nlev)      ! saturated updraft mass flux
+      REAL dnwd(nlon,nlev)      ! saturated downdraft mass flux
+
 c
 c   Couche limite:
@@ -281,8 +287,6 @@
 c
       REAL d_tr(klon,klev), d_trs(klon) ! tendances de traceurs 
-      REAL d_tr_cl(klon,klev) ! tendance de traceurs  couche limite
-      REAL d_tr_cli(klon,klev,nbtr) ! tendance de traceurs  CL pour chq traceur
-      REAL d_tr_cv(klon,klev) ! tendance de traceurs  convection
-      REAL d_tr_cvi(klon,klev,nbtr) ! tendance de traceurs  conv pour chq traceur
+      REAL d_tr_cl(klon,klev,nbtr) ! tendance de traceurs  couche limite
+      REAL d_tr_cv(klon,klev,nbtr) ! tendance de traceurs  conv pour chq traceur
       REAL d_tr_th(klon,klev,nbtr) ! la tendance des thermiques
       REAL d_tr_dec(klon,klev,nbtr) ! la tendance de la decroissance 
@@ -528,5 +532,5 @@
 
 c Abder
-      if(nqmax.gt.2) aerosol(3)=.true.
+ctestmaf      if(nqmax.gt.2) aerosol(3)=.true.
 
        do i=1,nlon
@@ -548,8 +552,8 @@
 c======================================================================
 c     print*,'Avant convection'
-      do it=1,nqmax
-         WRITE(itn,'(i2)') it
+c      do it=1,nqmax
+c         WRITE(itn,'(i2)') it
 c        call diagtracphy(tr_seri(:,:,it),paprs,'Avant conv'//itn)
-      enddo
+c      enddo
 
       if (convection) then
@@ -560,14 +564,19 @@
       IF ( conv_flg(it) == 0 ) CYCLE
 #endif
+      if (iflag_con.eq.2) then
+c tiedke
       CALL nflxtr(pdtphys, pmfu, pmfd, pen_u, pde_u, pen_d, pde_d,
-     .            pplay, paprs, tr_seri(1,1,it), d_tr_cv)
+     .            pplay, paprs, tr_seri(1,1,it), d_tr_cv(1,1,it))
+      else if (iflag_con.eq.3) then
+c KE
+      call cvltr(pdtphys, da, phi, mp, paprs,pplay, tr_seri(1,1,it),
+     .           upwd,dnwd,d_tr_cv(1,1,it))
+      endif
+
       DO k = 1, nlev
       DO i = 1, klon
-         tr_seri(i,k,it) = tr_seri(i,k,it) + d_tr_cv(i,k)
-	 d_tr_cvi(i,k,it)=d_tr_cv(i,k)
-c	 print*,'en k i d_tr_cv=',k,i,d_tr_cv(i,k)
+         tr_seri(i,k,it) = tr_seri(i,k,it) + d_tr_cv(i,k,it)
       ENDDO
       ENDDO
-c      WRITE(itn,'(i1)') it
 #ifdef INCA
       CALL minmaxqfi(tr_seri(1,1,it),0.,1.e33,'convection it = '
@@ -676,9 +685,8 @@
      e                    tautr(it),vdeptr(it),
      e                    xlat,
-     s                    d_tr_cl,d_trs)
+     s                    d_tr_cl(1,1,it),d_trs)
           DO k = 1, nlev
             DO i = 1, klon
-              tr_seri(i,k,it) = tr_seri(i,k,it) + d_tr_cl(i,k)
-	      d_tr_cli(i,k,it)=d_tr_cl(i,k)
+              tr_seri(i,k,it) = tr_seri(i,k,it) + d_tr_cl(i,k,it)
             ENDDO
           ENDDO
@@ -709,12 +717,10 @@
      s               tr_seri(1,1,it), source,
      e               paprs, pplay, delp,
-     s               d_tr )
+     s               d_tr_cl(1,1,it))
             DO k = 1, nlev
                DO i = 1, klon
-                  tr_seri(i,k,it) = tr_seri(i,k,it) + d_tr(i,k)
-		  d_tr_cli(i,k,it)=d_tr_cl(i,k)
+                  tr_seri(i,k,it) = tr_seri(i,k,it) + d_tr_cl(i,k,it)
                ENDDO
             ENDDO
-Cmaf provisoire suppression des prints
 Cmaf          WRITE(itn,'(i1)') it
 cmaf          CALL minmaxqfi(tr_seri(1,1,it),0.,1.e33,'cltracn it='//itn)
Index: /LMDZ4/trunk/libf/phylmd/write_histmth.h
===================================================================
--- /LMDZ4/trunk/libf/phylmd/write_histmth.h	(revision 618)
+++ /LMDZ4/trunk/libf/phylmd/write_histmth.h	(revision 619)
@@ -586,4 +586,6 @@
      .                                   iim*jjmp1*klev,ndex3d)
 c
+      IF (iflag_con.GE.3) THEN
+c
       CALL gr_fi_ecrit(klev,klon,iim,jjmp1, Ma, zx_tmp_3d)
       CALL histwrite(nid_mth,"Ma",itau_w,zx_tmp_3d,
@@ -602,4 +604,5 @@
      .                                   iim*jjmp1*klev,ndex3d)
 c
+      ENDIF !iflag_con.GE.3
 c
       CALL gr_fi_ecrit(klev,klon,iim,jjmp1, d_t_dyn, zx_tmp_3d)
@@ -763,14 +766,8 @@
 c
       IF (nqmax.GE.3) THEN
-      DO iq=1,nqmax-2
-      IF (iq.LE.99) THEN
-         CALL gr_fi_ecrit(klev,klon,iim,jjmp1, qx(1,1,iq+2), zx_tmp_3d)
-         WRITE(str2,'(i2.2)') iq
-         CALL histwrite(nid_mth,"trac"//str2,itau_w,zx_tmp_3d,
-     .                                   iim*jjmp1*klev,ndex3d)
-      ELSE
-         PRINT*, "Trop de traceurs"
-         CALL abort
-      ENDIF
+      DO iq=3,nqmax
+         CALL gr_fi_ecrit(klev,klon,iim,jjmp1, qx(1,1,iq), zx_tmp_3d)
+         CALL histwrite(nid_mth,tnom(iq),itau_w,zx_tmp_3d,
+     .                                   iim*jjmp1*klev,ndex3d)
       ENDDO
       ENDIF
Index: /LMDZ4/trunk/libf/phylmd/write_histrac.h
===================================================================
--- /LMDZ4/trunk/libf/phylmd/write_histrac.h	(revision 618)
+++ /LMDZ4/trunk/libf/phylmd/write_histrac.h	(revision 619)
@@ -248,8 +248,8 @@
        CALL histwrite(nid_tra,"d_tr_th_"//tnom(it+2),itau_w,zx_tmp_3d,
      .                                   iim*(jjm+1)*klev,ndex3d)
-       CALL gr_fi_ecrit(klev,klon,iim,jjm+1,d_tr_cvi(1,1,it),zx_tmp_3d)
+       CALL gr_fi_ecrit(klev,klon,iim,jjm+1,d_tr_cv(1,1,it),zx_tmp_3d)
        CALL histwrite(nid_tra,"d_tr_cv_"//tnom(it+2),itau_w,zx_tmp_3d,
      .                                   iim*(jjm+1)*klev,ndex3d)
-       CALL gr_fi_ecrit(klev,klon,iim,jjm+1,d_tr_cli(1,1,it),zx_tmp_3d)
+       CALL gr_fi_ecrit(klev,klon,iim,jjm+1,d_tr_cl(1,1,it),zx_tmp_3d)
        CALL histwrite(nid_tra,"d_tr_cl_"//tnom(it+2),itau_w,zx_tmp_3d,
      .                                   iim*(jjm+1)*klev,ndex3d)
