Index: LMDZ5/branches/testing/DefLists/config.def_IPSLCM5B_AGCM
===================================================================
--- LMDZ5/branches/testing/DefLists/config.def_IPSLCM5B_AGCM	(revision 1707)
+++ LMDZ5/branches/testing/DefLists/config.def_IPSLCM5B_AGCM	(revision 1750)
@@ -73,4 +73,7 @@
 # Parametres effets directs/indirects des "aerosols"
 #######################################
+### ok cloud droplet number concentration
+# n par defaut (sans aerosols), y avec aerosols
+ok_cdnc=y
 ### ok_ade=y/n   flag Aerosol direct effect
 ok_ade=y
@@ -79,5 +82,5 @@
 ### aer_type =   Aerosol variation type : actuel / preind / scenario / annuel
 aer_type=preind
-###  type of coupled aerosol =1 (default) =2 => bc  only =3 => pom only =4 => seasalt only =5 => dust only =6 => all aerosol
+###  If aerosol offline : type of coupled aerosol =0 (pas d aerosol) =1 (sulphate only default) =2 => bc  only =3 => pom only =4 => seasalt only =5 => dust only =6 => all aerosol
 flag_aerosol=6 
 ### bl95_b0 =    Parameter in CDNC-maer link (Boucher&Lohmann 1995)
Index: LMDZ5/branches/testing/DefLists/config.def_LMDZ5_AGCM
===================================================================
--- LMDZ5/branches/testing/DefLists/config.def_LMDZ5_AGCM	(revision 1707)
+++ LMDZ5/branches/testing/DefLists/config.def_LMDZ5_AGCM	(revision 1750)
@@ -72,4 +72,7 @@
 # Parametres effets directs/indirects des "aerosols"
 #######################################
+### ok cloud droplet number concentration
+# n par defaut (sans aerosols), y avec aerosols 
+ok_cdnc=y 
 ### ok_ade=y/n   flag Aerosol direct effect
 ok_ade=y
@@ -78,5 +81,5 @@
 ### aer_type =   Aerosol variation type : actuel / preind / scenario / annuel
 aer_type=actuel
-###  type of coupled aerosol =1 (default) =2 => bc  only =3 => pom only =4 => seasalt only =5 => dust only =6 => all aerosol
+###  If aerosol offline : type of coupled aerosol =0 (pas d aerosol) =1 (sulphate only default) =2 => bc  only =3 => pom only =4 => seasalt only =5 => dust only =6 => all aerosol 
 flag_aerosol=6 
 ### bl95_b0 =    Parameter in CDNC-maer link (Boucher&Lohmann 1995)
Index: LMDZ5/branches/testing/DefLists/gcm.def
===================================================================
--- LMDZ5/branches/testing/DefLists/gcm.def	(revision 1707)
+++ LMDZ5/branches/testing/DefLists/gcm.def	(revision 1750)
@@ -5,5 +5,5 @@
 iperiod=5
 ## periode de la dissipation (en pas)
-idissip=5
+## dissip_period=0
 ## choix de l'operateur de dissipation (star ou  non star )
 lstardis=y
Index: LMDZ5/branches/testing/arch/arch-X64_ADA.fcm
===================================================================
--- LMDZ5/branches/testing/arch/arch-X64_ADA.fcm	(revision 1707)
+++ LMDZ5/branches/testing/arch/arch-X64_ADA.fcm	(revision 1750)
@@ -3,14 +3,13 @@
 %AR                  ar
 %MAKE                gmake
-%FPP_FLAGS           -P -traditional
-%FPP_DEF             NC_DOUBLE BLAS SGEMV=DGEMV SGEMM=DGEMM 
-%BASE_FFLAGS         -integer-size 32 -real-size 64 -align all 
-%PROD_FFLAGS         -O3 -ip 
+%FPP_FLAGS           -P -traditional -I/smplocal/pub/FFTW/3.3.3/include/
+%FPP_DEF             NC_DOUBLE BLAS SGEMV=DGEMV SGEMM=DGEMM FFT_FFTW
+%BASE_FFLAGS         -mcmodel=large -integer-size 32 -real-size 64 -align all 
+%PROD_FFLAGS         -O2 -ip -fp-model strict -axAVX,SSE4.2
 %DEV_FFLAGS          -p -g -O1 -fpe0 -traceback
-%DEBUG_FFLAGS        -p -g -O0 -no-ftz -traceback -ftrapuv -fp-stack-check -check -fpe0
+%DEBUG_FFLAGS        -p -g -O0 -fpe-all=0 -traceback -ftrapuv -fp-stack-check -check all -debug
 %MPI_FFLAGS
 %OMP_FFLAGS          -openmp
-%%%%BASE_LD             -lmkl_intel_lp64 -lmkl_sequential -lmkl_core
-%BASE_LD             -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -lpthread
+%BASE_LD             -shared-intel  -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -lpthread -L/smplocal/pub/FFTW/3.3.3/lib -lfftw3
 %MPI_LD
 %OMP_LD              -openmp
Index: LMDZ5/branches/testing/arch/arch-X64_ADA.path
===================================================================
--- LMDZ5/branches/testing/arch/arch-X64_ADA.path	(revision 1707)
+++ LMDZ5/branches/testing/arch/arch-X64_ADA.path	(revision 1750)
@@ -1,3 +1,3 @@
-NETCDF_LIBDIR="${NETCDF_LDFLAGS:--L/smplocal/pub/NetCDF/4.1.3/lib -lnetcdff -lnetcdf}"
+NETCDF_LIBDIR="${NETCDF_LDFLAGS:--L/smplocal/pub/NetCDF/4.1.3/lib -lnetcdff -lnetcdf -L/smplocal/pub/HDF5/1.8.9/seq/lib -lhdf5hl_fortran -lhdf5_hl -lhdf5_fortran -lhdf5 -lz}"
 NETCDF_INCDIR="${NETCDF_FFLAGS:--I/smplocal/pub/HDF5/1.8.9/seq/include -I/smplocal/pub/NetCDF/4.1.3/include}"
 IOIPSL_INCDIR=$LMDGCM/../../lib
Index: LMDZ5/branches/testing/arch/arch-X64_CURIE.fcm
===================================================================
--- LMDZ5/branches/testing/arch/arch-X64_CURIE.fcm	(revision 1707)
+++ LMDZ5/branches/testing/arch/arch-X64_CURIE.fcm	(revision 1750)
@@ -7,5 +7,5 @@
 %BASE_FFLAGS         -i4 -r8 -auto -align all -I${MKLROOT}/include
 %PROD_FFLAGS         -O3
-%DEV_FFLAGS          -p -g -O2 -traceback -fp-stack-check -ftrapuv
+%DEV_FFLAGS          -p -g -O2 -traceback -fp-stack-check
 %DEBUG_FFLAGS        -p -g -traceback -fp-stack-check -ftrapuv
 %MPI_FFLAGS
Index: LMDZ5/branches/testing/beta_crf.data
===================================================================
--- LMDZ5/branches/testing/beta_crf.data	(revision 1750)
+++ LMDZ5/branches/testing/beta_crf.data	(revision 1750)
@@ -0,0 +1,8 @@
+70000. !pfree
+1.     !beta_pbl
+1.     !beta_free
+-180.  !lon1_beta
+180.   !lon2_beta
+90.    !lat1_beta
+-90    !lat2_beta
+.FALSE. !mskocean_beta
Index: LMDZ5/branches/testing/create_make_gcm
===================================================================
--- LMDZ5/branches/testing/create_make_gcm	(revision 1707)
+++ LMDZ5/branches/testing/create_make_gcm	(revision 1750)
@@ -4,4 +4,7 @@
 #
 #set -xv
+
+rm -f create_make_gcm.log
+
 machine=`hostname`
 os=`uname`
@@ -122,36 +125,30 @@
 echo
 cd $libf >/dev/null 2>&1
-for diri in ` ls `
-do
+
+for diri in ` ls ` ; do
+
    if [ -d $diri ] ; then
-   if [ "`ls $diri/*.F`" != "" ] || [ "`ls $diri/*.F90`" != "" ]  ; then 
-      cd $diri >/dev/null 2>&1
+   if [ "`ls $diri/*.F $diri/*/*.F`" != "" ] || [ "`ls $diri/*.F90 $diri/*/*.F90`" != "" ]  ; then 
+#      cd $diri >/dev/null 2>&1
       echo
       listlib=""
-      for i in `ls *.F`
-      do
-         fili=`basename $i .F`
-         test=` (  head $i | grep '      PROGRAM' ) `
-         if [ "$test" = "" ] ; then 
-            listlib=$listlib" "$fili
-         fi
-      done
-      for i in `ls *.F90`
-      do
-         fili=`basename $i .F90`
-         test=` (  head $i | grep '      PROGRAM' ) `
-         if [ "$test" = "" ] ; then
-            listlib=$listlib" "$fili
-         fi 
-      done
-#
-      echo
-      echo
-      echo "#======================================================================="
+# Liste des fichiers .F et .F90 n'etant pas des programmes principaux
+      for fili in `ls $diri/*.F $diri/*/*.F` ; do
+         test=` (  head $fili | grep '      PROGRAM' ) `
+         if [ "$test" = "" ] ; then listlib=$listlib" "$fili ; fi
+      done
+      for fili in `ls $diri/*.F90 $diri/*/*.F90` ; do
+         test=` (  head $fili | grep 'PROGRAM' ) `
+         if [ "$test" = "" ] ; then listlib=$listlib" "$fili ; fi 
+      done
+      echo
+      echo $listlib >> create_makeg_gcm.log
+      echo
+      echo "#=================================================================="
       echo "# Contenu de la bibliotheque correspondant au Directory "$diri
-      echo "#======================================================================="
-      echo
-      for fili in $listlib
-      do
+      echo "#=================================================================="
+      echo
+      for trufile in $listlib ; do
+         fili=`echo $trufile | awk -F/ ' { print $NF } ' | cut -d. -f1`
          echo '$(LIBO)/lib'$diri".a : " '$(LIBO)/lib'$diri".a("$fili".o)"
          echo
@@ -162,47 +159,46 @@
       echo "# Compilation des membres de la bibliotheque lib"$diri".a"
       echo
-      for fili in $listlib
-      do
-         if [ -f $fili.F90 ] ; then
-           trufile=$fili.F90
-         else
-           trufile=$fili.F
-         fi
+      for trufile in $listlib ; do
+         fili=`echo $trufile | awk -F/ ' { print $NF } ' | cut -d. -f1`
          F90=0 ; egrep -i '^ *use ' $trufile > /dev/null 2>&1 && F90=1
                  egrep -i '^ *module ' $trufile > /dev/null 2>&1 && F90=1
                  egrep -i '#include*.inc ' $trufile > /dev/null 2>&1 && F90=1
-         str1='$(LIBO)/lib'$diri'.a('$fili'.o) : $(LIBF)/'$diri/$trufile
-         [ "$fili" = "chem.subs" ] && str1=$str1' $(LIBF)/'$diri/chem.mods.F
-         for stri in ` ( sed -n "/\#include/s/\#include//p" $trufile | sed 's/\"//g' ; egrep -i '^ *use ' $trufile | sed -e 's/,/ /' | awk ' { print $2 } ' ) `
-         do
-
-
+         str1='$(LIBO)/lib'$diri'.a('$fili'.o) : $(LIBF)/'$trufile
+         [ "$fili" = "$diri/chem.subs" ] && str1=$str1' $(LIBF)/'$diri/chem.mods.F
+
+##########################################################################
+# TRAITEMENT DES DEPENDANCES
 # Differents cas de dependance correspondant a des include ou des
 # use module.
 # soit dans le repertoire local soit dans un autre.
-
-            stri=`echo $stri | tr [A-Z] [a-z]`
-            if [ -f $stri ] ; then
+# Pour dyn3d, il faudrait remplacer la chaine de caractere par $DYN
+# ou quelque chose du genre.
+##########################################################################
+
+         for stri in ` ( sed -e '/^[cC\!]/d' $trufile | sed -n "/\#include/s/\#include//p" | sed 's/\"//g' ; sed -e '/^[cC\!]/d' $trufile | egrep -i '^ *use ' | sed -e 's/,/ /' | awk ' { print $2 } ' ) ` ; do
+            echo $trufile $fili $stri >> create_make_gcm.log
+            strj=`echo $stri | tr [A-Z] [a-z]`
+            str2=""
+            for dirinc in filtrez bibio grid dyn3d $diri $diri/*/ ; do
+# Recherche dans l'ordre hierarchique inverse car seule la derniere
+# ligne est conservee
+               if [ -f $dirinc/$stri ] ; then
+                  str2='$(LIBF)/'$dirinc/$stri
+               elif [ -f $dirinc/$strj ] ; then
+                  str2='$(LIBF)/'$dirinc/$stri
+               elif [ -f $dirinc/$strj.F90 ]  || [ -f $dirinc/$strj.F ]  ; then 
+                  strlib=`echo $dirinc | awk -F/ ' { print $1 } '`
+                  str2='$(LIBO)/lib'$strlib'.a('$strj'.o)'
+               fi
+            done
+            if [ "$str2" = "" ] ; then
+               echo Warn: Include $diri $trufile $fili $stri pas trouve >> $gcm/create_make_gcm.log
+            elif [ "$str2" = "$str1" ] ; then
+               echo Warn: Include $diri $trufile $fili $stri $str1 trouve 2x >> $gcm/create_make_gcm.log
+            else
                echo $str1 \\
-               str1='$(LIBF)/'$diri'/'$stri
-            else
-               if [ -f $stri.F ] || [ -f $stri.F90 ] ; then
-                  echo $str1 \\
-                  str1='$(LIBO)/lib'$diri'.a('$stri'.o)'
-               else
-                  for dirinc in dyn3d grid bibio filtrez
-                  do
-                     if [ -f ../$dirinc/$stri ] ; then
-                        echo $str1 \\
-                        str1='$(LIBF)/'`cd .. ; ls */$stri | head -1`
-                     fi
-                     if [ -f ../$dirinc/$stri.F90 ] ; then
-                        echo $str1 \\
-                        str1='$(LIBO)/lib'$dirinc'.a('$stri'.o)'
-                     fi
-                  done
-               fi
+               str1=$str2
             fi
-         done
+         done # Fin de la boucle sur les dependances et ecriture de la derniere
          echo $str1
          # Compile in LIBO directory; and before compiling, remove
@@ -212,12 +208,12 @@
 	 if [ "$F90" -eq '0' ] ; then
          ## Fixed Form Fortran 77
-	   echo '	$(COMPILE) $(LIBF)/'$diri'/'$trufile' ; \'
+	   echo '	$(COMPILE) $(LIBF)/'$trufile' ; \'
 	 else
          ## Fortran 90
-           if [ -f $fili.F90 ] ; then
+           if [ `echo $trufile | cut -d. -f2` = F90 ] ; then
 	      ## Free Form
-              echo '	$(COMPTRU90) $(LIBF)/'$diri'/'$trufile' ; \'
+              echo '	$(COMPTRU90) $(LIBF)/'$trufile' ; \'
            else
-	      echo '	$(COMPILE90) $(LIBF)/'$diri'/'$trufile' ; \'
+	      echo '	$(COMPILE90) $(LIBF)/'$trufile' ; \'
            fi
 	 fi
Index: LMDZ5/branches/testing/libf/dyn3d/guide_mod.F90
===================================================================
--- LMDZ5/branches/testing/libf/dyn3d/guide_mod.F90	(revision 1707)
+++ LMDZ5/branches/testing/libf/dyn3d/guide_mod.F90	(revision 1750)
@@ -12,4 +12,5 @@
   USE Write_Field
   use netcdf, only: nf90_nowrite, nf90_open, nf90_inq_varid, nf90_close
+  use pres2lev_mod
 
   IMPLICIT NONE
Index: LMDZ5/branches/testing/libf/dyn3d/pres2lev.F90
===================================================================
--- LMDZ5/branches/testing/libf/dyn3d/pres2lev.F90	(revision 1707)
+++ 	(revision )
@@ -1,74 +1,0 @@
-! $Id$
-!
-!******************************************************
-SUBROUTINE pres2lev(varo,varn,lmo,lmn,po,pn,ni,nj,ok_invertp)
-!
-! interpolation lineaire pour passer
-! a une nouvelle discretisation verticale pour
-! les variables de GCM
-! Francois Forget (01/1995)
-! MOdif remy roca 12/97 pour passer de pres2sig
-! Modif F.Codron 07/08 po en 3D
-!**********************************************************
-
-  IMPLICIT NONE
-
-!   Declarations:
-! ==============
-!
-!  ARGUMENTS
-!  """""""""
-  LOGICAL, INTENT(IN) :: ok_invertp
-  INTEGER, INTENT(IN) :: lmo ! dimensions ancienne couches
-  INTEGER, INTENT(IN) :: lmn ! dimensions nouvelle couches
-  
-  REAL, INTENT(IN) :: po(ni*nj,lmo) ! niveau de pression ancienne grille
-  REAL, INTENT(IN) :: pn(ni*nj,lmn) ! niveau de pression nouvelle grille
-
-  INTEGER, INTENT(IN) :: ni,nj ! nombre de point horizontal
-
-  REAL, INTENT(IN)  :: varo(ni*nj,lmo) ! var dans l'ancienne grille
-  REAL, INTENT(OUT) :: varn(ni*nj,lmn) ! var dans la nouvelle grille
-
-  REAL :: zvaro(ni*nj,lmo),zpo(ni*nj,lmo)
-
-! Autres variables
-! """"""""""""""""
-  INTEGER ::  ln ,lo, k
-  REAL    :: coef
-
-
-! Inversion de l'ordre des niveaux verticaux
-  IF (ok_invertp) THEN
-    DO lo=1,lmo
-      DO k=1,ni*nj
-        zpo(k,lo)=po(k,lmo+1-lo)
-        zvaro(k,lo)=varo(k,lmo+1-lo)
-      ENDDO
-    ENDDO
-  ELSE
-    DO lo=1,lmo
-      DO k=1,ni*nj
-        zpo(k,lo)=po(k,lo)
-        zvaro(k,lo)=varo(k,lo)
-      ENDDO
-    ENDDO
-  ENDIF 
-
-  DO ln=1,lmn
-    DO lo=1,lmo-1
-      DO k=1,ni*nj
-        IF (pn(k,ln) >= zpo(k,1) ) THEN
-          varn(k,ln) = zvaro(k,1)
-        ELSE IF (pn(k,ln) <= zpo(k,lmo)) THEN
-          varn(k,ln) = zvaro(k,lmo)
-        ELSE IF ( pn(k,ln) <= zpo(k,lo) .AND. pn(k,ln) > zpo(k,lo+1) ) THEN
-          coef = (pn(k,ln)-zpo(k,lo)) / (zpo(k,lo+1)-zpo(k,lo))
-          varn(k,ln) = zvaro(k,lo) + coef*(zvaro(k,lo+1)-zvaro(k,lo))
-        ENDIF
-         
-      ENDDO  
-    ENDDO
-  ENDDO                
-
-END SUBROUTINE pres2lev    
Index: LMDZ5/branches/testing/libf/dyn3d/pres2lev_mod.F90
===================================================================
--- LMDZ5/branches/testing/libf/dyn3d/pres2lev_mod.F90	(revision 1750)
+++ LMDZ5/branches/testing/libf/dyn3d/pres2lev_mod.F90	(revision 1750)
@@ -0,0 +1,80 @@
+! $Id: pres2lev.F 1179 2009-06-11 14:18:47Z jghattas $
+!
+MODULE pres2lev_mod
+
+CONTAINS 
+
+!******************************************************
+SUBROUTINE pres2lev(varo,varn,lmo,lmn,po,pn,ni,nj,ok_invertp)
+!
+! interpolation lineaire pour passer
+! a une nouvelle discretisation verticale pour
+! les variables de GCM
+! Francois Forget (01/1995)
+! MOdif remy roca 12/97 pour passer de pres2sig
+! Modif F.Codron 07/08 po en 3D
+!**********************************************************
+
+  IMPLICIT NONE
+
+!   Declarations:
+! ==============
+!
+!  ARGUMENTS
+!  """""""""
+  LOGICAL, INTENT(IN) :: ok_invertp
+  INTEGER, INTENT(IN) :: lmo ! dimensions ancienne couches
+  INTEGER, INTENT(IN) :: lmn ! dimensions nouvelle couches
+  
+  REAL, INTENT(IN) :: po(ni*nj,lmo) ! niveau de pression ancienne grille
+  REAL, INTENT(IN) :: pn(ni*nj,lmn) ! niveau de pression nouvelle grille
+
+  INTEGER, INTENT(IN) :: ni,nj ! nombre de point horizontal
+
+  REAL, INTENT(IN)  :: varo(ni*nj,lmo) ! var dans l'ancienne grille
+  REAL, INTENT(OUT) :: varn(ni*nj,lmn) ! var dans la nouvelle grille
+
+  REAL :: zvaro(ni*nj,lmo),zpo(ni*nj,lmo)
+
+! Autres variables
+! """"""""""""""""
+  INTEGER ::  ln ,lo, k
+  REAL    :: coef
+
+
+! Inversion de l'ordre des niveaux verticaux
+  IF (ok_invertp) THEN
+    DO lo=1,lmo
+      DO k=1,ni*nj
+        zpo(k,lo)=po(k,lmo+1-lo)
+        zvaro(k,lo)=varo(k,lmo+1-lo)
+      ENDDO
+    ENDDO
+  ELSE
+    DO lo=1,lmo
+      DO k=1,ni*nj
+        zpo(k,lo)=po(k,lo)
+        zvaro(k,lo)=varo(k,lo)
+      ENDDO
+    ENDDO
+  ENDIF 
+
+  DO ln=1,lmn
+    DO lo=1,lmo-1
+      DO k=1,ni*nj
+        IF (pn(k,ln) >= zpo(k,1) ) THEN
+          varn(k,ln) = zvaro(k,1)
+        ELSE IF (pn(k,ln) <= zpo(k,lmo)) THEN
+          varn(k,ln) = zvaro(k,lmo)
+        ELSE IF ( pn(k,ln) <= zpo(k,lo) .AND. pn(k,ln) > zpo(k,lo+1) ) THEN
+          coef = (pn(k,ln)-zpo(k,lo)) / (zpo(k,lo+1)-zpo(k,lo))
+          varn(k,ln) = zvaro(k,lo) + coef*(zvaro(k,lo+1)-zvaro(k,lo))
+        ENDIF
+         
+      ENDDO  
+    ENDDO
+  ENDDO                
+
+END SUBROUTINE pres2lev    
+
+END MODULE pres2lev_mod
Index: LMDZ5/branches/testing/libf/dyn3dmem/conf_gcm.F
===================================================================
--- LMDZ5/branches/testing/libf/dyn3dmem/conf_gcm.F	(revision 1707)
+++ LMDZ5/branches/testing/libf/dyn3dmem/conf_gcm.F	(revision 1750)
@@ -62,5 +62,9 @@
       LOGICAL  fxyhypbb, ysinuss
       INTEGER i
-      
+      character(len=*),parameter :: modname="conf_gcm"
+      character (len=80) :: abort_message
+#ifdef CPP_OMP
+      integer,external :: OMP_GET_NUM_THREADS
+#endif
 c
 c  -------------------------------------------------------------------
@@ -91,10 +95,4 @@
 c   initialisations:
 c   ----------------
-      adjust=.false.
-      call getin('adjust',adjust)
-      
-      itaumax=0
-      call getin('itaumax',itaumax);
-      if (itaumax<=0) itaumax=HUGE(itaumax)
       
 !Config  Key  = lunout
@@ -109,4 +107,23 @@
      &          STATUS='unknown',FORM='formatted')
       ENDIF
+
+      adjust=.false.
+      call getin('adjust',adjust)
+
+#ifdef CPP_OMP
+      ! adjust=y not implemented in case of OpenMP threads...
+!$OMP PARALLEL
+      if ((OMP_GET_NUM_THREADS()>1).and.adjust) then
+        write(lunout,*)'conf_gcm: Error, adjust should be set to n'
+     &,' when running with OpenMP threads'
+        abort_message = 'Wrong value for adjust'
+        call abort_gcm(modname,abort_message,1)
+      endif
+!$OMP END PARALLEL         
+#endif
+
+      itaumax=0
+      call getin('itaumax',itaumax);
+      if (itaumax<=0) itaumax=HUGE(itaumax)
 
 !Config  Key  = prt_level
Index: LMDZ5/branches/testing/libf/dyn3dmem/guide_loc_mod.F90
===================================================================
--- LMDZ5/branches/testing/libf/dyn3dmem/guide_loc_mod.F90	(revision 1707)
+++ LMDZ5/branches/testing/libf/dyn3dmem/guide_loc_mod.F90	(revision 1750)
@@ -13,4 +13,5 @@
   use netcdf, only: nf90_nowrite, nf90_open, nf90_inq_varid, nf90_close
   USE parallel
+  USE pres2lev_mod
 
   IMPLICIT NONE
Index: LMDZ5/branches/testing/libf/dyn3dmem/pres2lev.F90
===================================================================
--- LMDZ5/branches/testing/libf/dyn3dmem/pres2lev.F90	(revision 1707)
+++ 	(revision )
@@ -1,74 +1,0 @@
-! $Id: pres2lev.F 1179 2009-06-11 14:18:47Z jghattas $
-!
-!******************************************************
-SUBROUTINE pres2lev(varo,varn,lmo,lmn,po,pn,ni,nj,ok_invertp)
-!
-! interpolation lineaire pour passer
-! a une nouvelle discretisation verticale pour
-! les variables de GCM
-! Francois Forget (01/1995)
-! MOdif remy roca 12/97 pour passer de pres2sig
-! Modif F.Codron 07/08 po en 3D
-!**********************************************************
-
-  IMPLICIT NONE
-
-!   Declarations:
-! ==============
-!
-!  ARGUMENTS
-!  """""""""
-  LOGICAL, INTENT(IN) :: ok_invertp
-  INTEGER, INTENT(IN) :: lmo ! dimensions ancienne couches
-  INTEGER, INTENT(IN) :: lmn ! dimensions nouvelle couches
-  
-  REAL, INTENT(IN) :: po(ni*nj,lmo) ! niveau de pression ancienne grille
-  REAL, INTENT(IN) :: pn(ni*nj,lmn) ! niveau de pression nouvelle grille
-
-  INTEGER, INTENT(IN) :: ni,nj ! nombre de point horizontal
-
-  REAL, INTENT(IN)  :: varo(ni*nj,lmo) ! var dans l'ancienne grille
-  REAL, INTENT(OUT) :: varn(ni*nj,lmn) ! var dans la nouvelle grille
-
-  REAL :: zvaro(ni*nj,lmo),zpo(ni*nj,lmo)
-
-! Autres variables
-! """"""""""""""""
-  INTEGER ::  ln ,lo, k
-  REAL    :: coef
-
-
-! Inversion de l'ordre des niveaux verticaux
-  IF (ok_invertp) THEN
-    DO lo=1,lmo
-      DO k=1,ni*nj
-        zpo(k,lo)=po(k,lmo+1-lo)
-        zvaro(k,lo)=varo(k,lmo+1-lo)
-      ENDDO
-    ENDDO
-  ELSE
-    DO lo=1,lmo
-      DO k=1,ni*nj
-        zpo(k,lo)=po(k,lo)
-        zvaro(k,lo)=varo(k,lo)
-      ENDDO
-    ENDDO
-  ENDIF 
-
-  DO ln=1,lmn
-    DO lo=1,lmo-1
-      DO k=1,ni*nj
-        IF (pn(k,ln) >= zpo(k,1) ) THEN
-          varn(k,ln) = zvaro(k,1)
-        ELSE IF (pn(k,ln) <= zpo(k,lmo)) THEN
-          varn(k,ln) = zvaro(k,lmo)
-        ELSE IF ( pn(k,ln) <= zpo(k,lo) .AND. pn(k,ln) > zpo(k,lo+1) ) THEN
-          coef = (pn(k,ln)-zpo(k,lo)) / (zpo(k,lo+1)-zpo(k,lo))
-          varn(k,ln) = zvaro(k,lo) + coef*(zvaro(k,lo+1)-zvaro(k,lo))
-        ENDIF
-         
-      ENDDO  
-    ENDDO
-  ENDDO                
-
-END SUBROUTINE pres2lev    
Index: LMDZ5/branches/testing/libf/dyn3dmem/pres2lev_mod.F90
===================================================================
--- LMDZ5/branches/testing/libf/dyn3dmem/pres2lev_mod.F90	(revision 1750)
+++ LMDZ5/branches/testing/libf/dyn3dmem/pres2lev_mod.F90	(revision 1750)
@@ -0,0 +1,80 @@
+! $Id: pres2lev.F 1179 2009-06-11 14:18:47Z jghattas $
+!
+MODULE pres2lev_mod
+
+CONTAINS 
+
+!******************************************************
+SUBROUTINE pres2lev(varo,varn,lmo,lmn,po,pn,ni,nj,ok_invertp)
+!
+! interpolation lineaire pour passer
+! a une nouvelle discretisation verticale pour
+! les variables de GCM
+! Francois Forget (01/1995)
+! MOdif remy roca 12/97 pour passer de pres2sig
+! Modif F.Codron 07/08 po en 3D
+!**********************************************************
+
+  IMPLICIT NONE
+
+!   Declarations:
+! ==============
+!
+!  ARGUMENTS
+!  """""""""
+  LOGICAL, INTENT(IN) :: ok_invertp
+  INTEGER, INTENT(IN) :: lmo ! dimensions ancienne couches
+  INTEGER, INTENT(IN) :: lmn ! dimensions nouvelle couches
+  
+  REAL, INTENT(IN) :: po(ni*nj,lmo) ! niveau de pression ancienne grille
+  REAL, INTENT(IN) :: pn(ni*nj,lmn) ! niveau de pression nouvelle grille
+
+  INTEGER, INTENT(IN) :: ni,nj ! nombre de point horizontal
+
+  REAL, INTENT(IN)  :: varo(ni*nj,lmo) ! var dans l'ancienne grille
+  REAL, INTENT(OUT) :: varn(ni*nj,lmn) ! var dans la nouvelle grille
+
+  REAL :: zvaro(ni*nj,lmo),zpo(ni*nj,lmo)
+
+! Autres variables
+! """"""""""""""""
+  INTEGER ::  ln ,lo, k
+  REAL    :: coef
+
+
+! Inversion de l'ordre des niveaux verticaux
+  IF (ok_invertp) THEN
+    DO lo=1,lmo
+      DO k=1,ni*nj
+        zpo(k,lo)=po(k,lmo+1-lo)
+        zvaro(k,lo)=varo(k,lmo+1-lo)
+      ENDDO
+    ENDDO
+  ELSE
+    DO lo=1,lmo
+      DO k=1,ni*nj
+        zpo(k,lo)=po(k,lo)
+        zvaro(k,lo)=varo(k,lo)
+      ENDDO
+    ENDDO
+  ENDIF 
+
+  DO ln=1,lmn
+    DO lo=1,lmo-1
+      DO k=1,ni*nj
+        IF (pn(k,ln) >= zpo(k,1) ) THEN
+          varn(k,ln) = zvaro(k,1)
+        ELSE IF (pn(k,ln) <= zpo(k,lmo)) THEN
+          varn(k,ln) = zvaro(k,lmo)
+        ELSE IF ( pn(k,ln) <= zpo(k,lo) .AND. pn(k,ln) > zpo(k,lo+1) ) THEN
+          coef = (pn(k,ln)-zpo(k,lo)) / (zpo(k,lo+1)-zpo(k,lo))
+          varn(k,ln) = zvaro(k,lo) + coef*(zvaro(k,lo+1)-zvaro(k,lo))
+        ENDIF
+         
+      ENDDO  
+    ENDDO
+  ENDDO                
+
+END SUBROUTINE pres2lev    
+
+END MODULE pres2lev_mod
Index: LMDZ5/branches/testing/libf/dyn3dpar/conf_gcm.F
===================================================================
--- LMDZ5/branches/testing/libf/dyn3dpar/conf_gcm.F	(revision 1707)
+++ LMDZ5/branches/testing/libf/dyn3dpar/conf_gcm.F	(revision 1750)
@@ -61,5 +61,9 @@
       LOGICAL  fxyhypbb, ysinuss
       INTEGER i
-      
+      character(len=*),parameter :: modname="conf_gcm"
+      character (len=80) :: abort_message
+#ifdef CPP_OMP
+      integer,external :: OMP_GET_NUM_THREADS
+#endif
 c
 c  -------------------------------------------------------------------
@@ -90,10 +94,4 @@
 c   initialisations:
 c   ----------------
-      adjust=.false.
-      call getin('adjust',adjust)
-      
-      itaumax=0
-      call getin('itaumax',itaumax);
-      if (itaumax<=0) itaumax=HUGE(itaumax)
       
 !Config  Key  = lunout
@@ -108,4 +106,23 @@
      &          STATUS='unknown',FORM='formatted')
       ENDIF
+
+      adjust=.false.
+      call getin('adjust',adjust)
+
+#ifdef CPP_OMP
+      ! adjust=y not implemented in case of OpenMP threads...
+!$OMP PARALLEL
+      if ((OMP_GET_NUM_THREADS()>1).and.adjust) then
+        write(lunout,*)'conf_gcm: Error, adjust should be set to n'
+     &,' when running with OpenMP threads'
+        abort_message = 'Wrong value for adjust'
+        call abort_gcm(modname,abort_message,1)
+      endif
+!$OMP END PARALLEL         
+#endif
+
+      itaumax=0
+      call getin('itaumax',itaumax);
+      if (itaumax<=0) itaumax=HUGE(itaumax)
 
 !Config  Key  = prt_level
Index: LMDZ5/branches/testing/libf/dyn3dpar/guide_p_mod.F90
===================================================================
--- LMDZ5/branches/testing/libf/dyn3dpar/guide_p_mod.F90	(revision 1707)
+++ LMDZ5/branches/testing/libf/dyn3dpar/guide_p_mod.F90	(revision 1750)
@@ -11,5 +11,6 @@
   USE getparam
   USE Write_Field_p
-  use netcdf, only: nf90_nowrite, nf90_open, nf90_inq_varid, nf90_close
+  USE netcdf, ONLY: nf90_nowrite, nf90_open, nf90_inq_varid, nf90_close
+  USE pres2lev_mod
 
   IMPLICIT NONE
Index: LMDZ5/branches/testing/libf/dyn3dpar/pres2lev.F90
===================================================================
--- LMDZ5/branches/testing/libf/dyn3dpar/pres2lev.F90	(revision 1707)
+++ 	(revision )
@@ -1,74 +1,0 @@
-! $Id: pres2lev.F 1179 2009-06-11 14:18:47Z jghattas $
-!
-!******************************************************
-SUBROUTINE pres2lev(varo,varn,lmo,lmn,po,pn,ni,nj,ok_invertp)
-!
-! interpolation lineaire pour passer
-! a une nouvelle discretisation verticale pour
-! les variables de GCM
-! Francois Forget (01/1995)
-! MOdif remy roca 12/97 pour passer de pres2sig
-! Modif F.Codron 07/08 po en 3D
-!**********************************************************
-
-  IMPLICIT NONE
-
-!   Declarations:
-! ==============
-!
-!  ARGUMENTS
-!  """""""""
-  LOGICAL, INTENT(IN) :: ok_invertp
-  INTEGER, INTENT(IN) :: lmo ! dimensions ancienne couches
-  INTEGER, INTENT(IN) :: lmn ! dimensions nouvelle couches
-  
-  REAL, INTENT(IN) :: po(ni*nj,lmo) ! niveau de pression ancienne grille
-  REAL, INTENT(IN) :: pn(ni*nj,lmn) ! niveau de pression nouvelle grille
-
-  INTEGER, INTENT(IN) :: ni,nj ! nombre de point horizontal
-
-  REAL, INTENT(IN)  :: varo(ni*nj,lmo) ! var dans l'ancienne grille
-  REAL, INTENT(OUT) :: varn(ni*nj,lmn) ! var dans la nouvelle grille
-
-  REAL :: zvaro(ni*nj,lmo),zpo(ni*nj,lmo)
-
-! Autres variables
-! """"""""""""""""
-  INTEGER ::  ln ,lo, k
-  REAL    :: coef
-
-
-! Inversion de l'ordre des niveaux verticaux
-  IF (ok_invertp) THEN
-    DO lo=1,lmo
-      DO k=1,ni*nj
-        zpo(k,lo)=po(k,lmo+1-lo)
-        zvaro(k,lo)=varo(k,lmo+1-lo)
-      ENDDO
-    ENDDO
-  ELSE
-    DO lo=1,lmo
-      DO k=1,ni*nj
-        zpo(k,lo)=po(k,lo)
-        zvaro(k,lo)=varo(k,lo)
-      ENDDO
-    ENDDO
-  ENDIF 
-
-  DO ln=1,lmn
-    DO lo=1,lmo-1
-      DO k=1,ni*nj
-        IF (pn(k,ln) >= zpo(k,1) ) THEN
-          varn(k,ln) = zvaro(k,1)
-        ELSE IF (pn(k,ln) <= zpo(k,lmo)) THEN
-          varn(k,ln) = zvaro(k,lmo)
-        ELSE IF ( pn(k,ln) <= zpo(k,lo) .AND. pn(k,ln) > zpo(k,lo+1) ) THEN
-          coef = (pn(k,ln)-zpo(k,lo)) / (zpo(k,lo+1)-zpo(k,lo))
-          varn(k,ln) = zvaro(k,lo) + coef*(zvaro(k,lo+1)-zvaro(k,lo))
-        ENDIF
-         
-      ENDDO  
-    ENDDO
-  ENDDO                
-
-END SUBROUTINE pres2lev    
Index: LMDZ5/branches/testing/libf/dyn3dpar/pres2lev_mod.F90
===================================================================
--- LMDZ5/branches/testing/libf/dyn3dpar/pres2lev_mod.F90	(revision 1750)
+++ LMDZ5/branches/testing/libf/dyn3dpar/pres2lev_mod.F90	(revision 1750)
@@ -0,0 +1,80 @@
+! $Id: pres2lev.F 1179 2009-06-11 14:18:47Z jghattas $
+!
+MODULE pres2lev_mod
+
+CONTAINS 
+
+!******************************************************
+SUBROUTINE pres2lev(varo,varn,lmo,lmn,po,pn,ni,nj,ok_invertp)
+!
+! interpolation lineaire pour passer
+! a une nouvelle discretisation verticale pour
+! les variables de GCM
+! Francois Forget (01/1995)
+! MOdif remy roca 12/97 pour passer de pres2sig
+! Modif F.Codron 07/08 po en 3D
+!**********************************************************
+
+  IMPLICIT NONE
+
+!   Declarations:
+! ==============
+!
+!  ARGUMENTS
+!  """""""""
+  LOGICAL, INTENT(IN) :: ok_invertp
+  INTEGER, INTENT(IN) :: lmo ! dimensions ancienne couches
+  INTEGER, INTENT(IN) :: lmn ! dimensions nouvelle couches
+  
+  REAL, INTENT(IN) :: po(ni*nj,lmo) ! niveau de pression ancienne grille
+  REAL, INTENT(IN) :: pn(ni*nj,lmn) ! niveau de pression nouvelle grille
+
+  INTEGER, INTENT(IN) :: ni,nj ! nombre de point horizontal
+
+  REAL, INTENT(IN)  :: varo(ni*nj,lmo) ! var dans l'ancienne grille
+  REAL, INTENT(OUT) :: varn(ni*nj,lmn) ! var dans la nouvelle grille
+
+  REAL :: zvaro(ni*nj,lmo),zpo(ni*nj,lmo)
+
+! Autres variables
+! """"""""""""""""
+  INTEGER ::  ln ,lo, k
+  REAL    :: coef
+
+
+! Inversion de l'ordre des niveaux verticaux
+  IF (ok_invertp) THEN
+    DO lo=1,lmo
+      DO k=1,ni*nj
+        zpo(k,lo)=po(k,lmo+1-lo)
+        zvaro(k,lo)=varo(k,lmo+1-lo)
+      ENDDO
+    ENDDO
+  ELSE
+    DO lo=1,lmo
+      DO k=1,ni*nj
+        zpo(k,lo)=po(k,lo)
+        zvaro(k,lo)=varo(k,lo)
+      ENDDO
+    ENDDO
+  ENDIF 
+
+  DO ln=1,lmn
+    DO lo=1,lmo-1
+      DO k=1,ni*nj
+        IF (pn(k,ln) >= zpo(k,1) ) THEN
+          varn(k,ln) = zvaro(k,1)
+        ELSE IF (pn(k,ln) <= zpo(k,lmo)) THEN
+          varn(k,ln) = zvaro(k,lmo)
+        ELSE IF ( pn(k,ln) <= zpo(k,lo) .AND. pn(k,ln) > zpo(k,lo+1) ) THEN
+          coef = (pn(k,ln)-zpo(k,lo)) / (zpo(k,lo+1)-zpo(k,lo))
+          varn(k,ln) = zvaro(k,lo) + coef*(zvaro(k,lo+1)-zvaro(k,lo))
+        ENDIF
+         
+      ENDDO  
+    ENDDO
+  ENDDO                
+
+END SUBROUTINE pres2lev    
+
+END MODULE pres2lev_mod
Index: LMDZ5/branches/testing/libf/phy1d/lmdz1d.F
===================================================================
--- LMDZ5/branches/testing/libf/phy1d/lmdz1d.F	(revision 1707)
+++ LMDZ5/branches/testing/libf/phy1d/lmdz1d.F	(revision 1750)
@@ -362,5 +362,5 @@
       call infotrac_init 
 
-      allocate(q(llm,nqtot)) 
+      allocate(q(llm,nqtot)) ; q(:,:)=0.
       allocate(dq(llm,nqtot)) 
       allocate(dq_dyn(llm,nqtot)) 
@@ -472,5 +472,5 @@
 
       call iniphysiq(ngrid,llm,rday,day_ini,timestep,
-     .     rlat,rlon,airefi,zcufi,zcvfi,ra,rg,rd,rcpd)
+     .     rlat,rlon,airefi,zcufi,zcvfi,ra,rg,rd,rcpd,1)
       print*,'apres iniphysiq'
 
@@ -674,15 +674,23 @@
 
 !---------------------------------------------------------------------
+! Listing output for debug prt_level>=1
+!---------------------------------------------------------------------
+       if (prt_level>=1) then
+         print *,' avant physiq : -------- day time ',day,time
+         write(*,*) 'firstcall,lastcall,phis',
+     :               firstcall,lastcall,phis
+         write(*,'(a10,2a4,4a13)') 'BEFOR1 IT=','it','l',
+     :        'presniv','plev','play','phi'
+         write(*,'(a10,2i4,4f13.2)') ('BEFOR1 IT= ',it,l,
+     :         presnivs(l),plev(l),play(l),phi(l),l=1,llm)
+         write(*,'(a11,2a4,a11,6a8)') 'BEFOR2','it','l',
+     :         'presniv','u','v','temp','q1','q2','omega2'
+         write(*,'(a11,2i4,f11.2,5f8.2,e10.2)') ('BEFOR2 IT= ',it,l,
+     :   presnivs(l),u(l),v(l),temp(l),q(l,1),q(l,2),omega2(l),l=1,llm)
+       endif
+
+!---------------------------------------------------------------------
 !   Call physiq :
 !---------------------------------------------------------------------
-
-       if (prt_level.ge.1) then
-         print *,' avant physiq : -------- day time ',day,time
-         print *,' temp ',temp
-         print *,' u ',u
-         print *,' q ',q
-         print *,' omega2 ',omega2
-       endif
-!       call writefield_phy('u', u,llm)
 
         call physiq(ngrid,llm,
@@ -693,17 +701,24 @@
      :              du_phys,dv_phys,dt_phys,dq,dpsrf,
      :              dudyn,PVteta)
-!       call writefield_phy('u', u,llm)
-
         firstcall=.false.
-        if (prt_level.ge.1) then
-          print*,'APRES PHYS'
-          print *,' temp ',temp
-          print *,' q ',q
-          print *,' dq ',dq
-          print*,'dq_dyn',dq_dyn
-          print *,' dt_phys ',dt_phys
-          print *,' dpsrf ',dpsrf
-          print *,' dudyn ',dudyn
-          print *,' PVteta',PVteta
+
+!---------------------------------------------------------------------
+! Listing output for debug prt_level>=1
+!---------------------------------------------------------------------
+        if (prt_level>=1) then
+          write(*,'(a11,2a4,4a13)') 'AFTER1 IT=','it','l',
+     :        'presniv','plev','play','phi'
+          write(*,'(a11,2i4,4f13.2)') ('AFTER1 it= ',it,l,
+     :    presnivs(l),plev(l),play(l),phi(l),l=1,llm)
+          write(*,'(a11,2a4,a11,6a8)') 'AFTER2','it','l',
+     :         'presniv','u','v','temp','q1','q2','omega2'
+          write(*,'(a11,2i4,f11.2,5f8.2,e10.2)') ('AFTER2 it= ',it,l,
+     :    presnivs(l),u(l),v(l),temp(l),q(l,1),q(l,2),omega2(l),l=1,llm)
+          write(*,'(a11,2a4,a11,5a8)') 'AFTER3','it','l',
+     :         'presniv','du_phys','dv_phys','dt_phys','dq1','dq2'
+           write(*,'(a11,2i4,f11.2,5f8.2)') ('AFTER3 it= ',it,l,
+     :      presnivs(l),86400*du_phys(l),86400*dv_phys(l),
+     :       86400*dt_phys(l),86400*dq(l,1),dq(l,2),l=1,llm)
+          write(*,*) 'dpsrf',dpsrf
         endif
 !---------------------------------------------------------------------
@@ -711,6 +726,5 @@
 !---------------------------------------------------------------------
 
-      fcoriolis=2.*sin(rpi*xlat/180.)*romega
-
+       fcoriolis=2.*sin(rpi*xlat/180.)*romega
        if (forcing_radconv) then
          fcoriolis=0.0
@@ -721,5 +735,5 @@
 
        if (forcing_toga .or. forcing_GCSSold .or. forcing_twpice) then
-         fcoriolis=0.0
+         fcoriolis=0.0 ; ug=0. ; vg=0.
        endif
          if(forcing_rico) then
@@ -727,5 +741,5 @@
         endif
 
-      print*, 'fcoriolis ', fcoriolis, rlat(1)
+      print*, 'fcoriolis ', fcoriolis, xlat
 
         du_age(1:mxcalc)=
@@ -733,9 +747,5 @@
        dv_age(1:mxcalc)=
      : -fcoriolis*(u(1:mxcalc)-ug(1:mxcalc))
-!         call  writefield_phy('dv_age' ,dv_age,llm)
-!         call  writefield_phy('du_age' ,du_age,llm)
-!         call  writefield_phy('du_phys' ,du_phys,llm)
-!         call  writefield_phy('u_tend' ,u,llm)
-!         call  writefield_phy('u_g' ,ug,llm)
+
         u(1:mxcalc)=u(1:mxcalc) + timestep*(
      :              du_phys(1:mxcalc)
Index: LMDZ5/branches/testing/libf/phylmd/aeropt_2bands.F90
===================================================================
--- LMDZ5/branches/testing/libf/phylmd/aeropt_2bands.F90	(revision 1707)
+++ LMDZ5/branches/testing/libf/phylmd/aeropt_2bands.F90	(revision 1750)
@@ -11,4 +11,6 @@
   USE aero_mod
   USE phys_local_var_mod, only: absvisaer
+  USE pres2lev_mod
+
 
   !    Yves Balkanski le 12 avril 2006
Index: LMDZ5/branches/testing/libf/phylmd/aeropt_5wv.F90
===================================================================
--- LMDZ5/branches/testing/libf/phylmd/aeropt_5wv.F90	(revision 1707)
+++ LMDZ5/branches/testing/libf/phylmd/aeropt_5wv.F90	(revision 1750)
@@ -12,4 +12,6 @@
   USE aero_mod
   USE phys_local_var_mod, only: od550aer,od865aer,ec550aer,od550lt1aer
+  USE pres2lev_mod
+
 
   !
Index: LMDZ5/branches/testing/libf/phylmd/calbeta_clim.F90
===================================================================
--- LMDZ5/branches/testing/libf/phylmd/calbeta_clim.F90	(revision 1750)
+++ LMDZ5/branches/testing/libf/phylmd/calbeta_clim.F90	(revision 1750)
@@ -0,0 +1,67 @@
+!
+! $Header: /home/cvsroot/LMDZ4/libf/phylmd/calbeta.F90,v 1.2 2007/06/22 12:49:51
+! fairhead Exp $
+!
+
+SUBROUTINE calbeta_clim(klon,time,lat_radian,beta)
+ 
+!======================================================================
+! Auteur(s): A.K. TRAORE
+!======================================================================
+!USE phys_local_var_mod, ONLY : ideal_beta !pour faire la variable dans le
+! physiq.f pour des sorties directes de beta
+!==============================================
+
+implicit none
+integer klon,nt,j,it
+real logbeta(klon),pi
+real lat(klon),lat_radian(klon)
+integer time
+real time_radian
+real lat_sahel,beta(klon)
+real lat_nord,lat_sud
+!==============================================
+
+pi=2.*asin(1.)
+beta=0.
+    
+            !calcul des cordonnees
+
+!  print*,'LATITUDES BETA ',lat_radian
+   time_radian=(time+15.)*2.*pi/360.
+
+   print*,'BETA time_radian',time_radian,time
+
+   lat(:)=180.*lat_radian(:)/pi !lat(:)=lat_radian(:)
+        
+   lat_sahel=-5*sin(time_radian)+13
+   lat_nord=lat_sahel+25.
+   lat_sud=lat_sahel-25.
+do j=1,klon
+    !===========
+        if (lat(j) < 5. ) then
+                
+                logbeta(j)=0.2*(lat(j)-lat_sud)-1.6
+                beta(j)=10**(logbeta(j))
+                beta(j)=max(beta(j),0.03)
+                beta(j)=min(beta(j),0.22)
+!              print*,'j,lat,lat_radian,beta',j,lat(j),lat_radian(j),beta(j)
+    !===========
+        elseif (lat(j) < 22.) then !lat(j)<22.
+                
+                logbeta(j)=-0.25*(lat(j)-lat_sahel)-1.6
+                beta(j)=10**(logbeta(j))
+                beta(j)=max(beta(j),1.e-2)
+                beta(j)=min(beta(j),0.22)
+!              print*,'j,lat,lat_radian,beta',j,lat(j),lat_radian(j),beta(j)
+    !===========
+        else
+              logbeta(j)=0.25*(lat(j)-lat_nord)-1.
+              beta(j)=10**(logbeta(j))
+              beta(j)=max(beta(j),1.e-2)
+              beta(j)=min(beta(j),0.25)
+!              print*,'j,lat,lat_radian,beta',j,lat(j),lat_radian(j),beta(j)
+        endif
+    !===========
+enddo
+end
Index: LMDZ5/branches/testing/libf/phylmd/calltherm.F90
===================================================================
--- LMDZ5/branches/testing/libf/phylmd/calltherm.F90	(revision 1707)
+++ LMDZ5/branches/testing/libf/phylmd/calltherm.F90	(revision 1750)
@@ -234,5 +234,5 @@
      &      ,tau_thermals,Ale,Alp,lalim_conv,wght_th &
      &      ,zmax0,f0,zw2,fraca)
-          else if (iflag_thermals==15.or.iflag_thermals==16) then
+          else if (iflag_thermals>=15.and.iflag_thermals<=18) then
 
 !            print*,'THERM iflag_thermas_ed=',iflag_thermals_ed
@@ -271,5 +271,5 @@
 ! fait bien ce qu'on croit.
 
-       flag_bidouille_stratocu=iflag_thermals<=12.or.iflag_thermals==14.or.iflag_thermals==16
+       flag_bidouille_stratocu=iflag_thermals<=12.or.iflag_thermals==14.or.iflag_thermals==16.or.iflag_thermals==18
 
       if (iflag_thermals<=12) then
Index: LMDZ5/branches/testing/libf/phylmd/clesphys.h
===================================================================
--- LMDZ5/branches/testing/libf/phylmd/clesphys.h	(revision 1707)
+++ LMDZ5/branches/testing/libf/phylmd/clesphys.h	(revision 1750)
@@ -19,4 +19,5 @@
 !IM ajout CFMIP2/CMIP5
        REAL co2_ppm_per
+       LOGICAL ok_4xCO2atm
        REAL(kind=8) RCO2_per,RCH4_per,RN2O_per,RCFC11_per,RCFC12_per
        REAL(kind=8) CH4_ppb_per,N2O_ppb_per,CFC11_ppt_per,CFC12_ppt_per
@@ -81,4 +82,5 @@
      &     , RCO2, RCH4, RN2O, RCFC11, RCFC12                           &
      &     , RCO2_act, RCH4_act, RN2O_act, RCFC11_act, RCFC12_act       &
+     &     , ok_4xCO2atm                                                & 
      &     , RCO2_per, RCH4_per, RN2O_per, RCFC11_per, RCFC12_per       &
      &     , CH4_ppb, N2O_ppb, CFC11_ppt, CFC12_ppt                     &
Index: LMDZ5/branches/testing/libf/phylmd/cltrac.F90
===================================================================
--- LMDZ5/branches/testing/libf/phylmd/cltrac.F90	(revision 1707)
+++ LMDZ5/branches/testing/libf/phylmd/cltrac.F90	(revision 1750)
@@ -2,5 +2,7 @@
 ! $Id $
 !
-SUBROUTINE cltrac(dtime,coef,t,tr,flux,paprs,pplay,delp,d_tr)
+SUBROUTINE cltrac(dtime,coef,t,tr,flux,paprs,pplay,delp, &
+                  d_tr,d_tr_dry,flux_tr_dry)                    !jyg
+
   USE dimphy
   IMPLICIT NONE
@@ -13,16 +15,18 @@
 ! Arguments:
 !-----------
-! dtime....input-R- intervalle du temps (en secondes)
-! coef.....input-R- le coefficient d'echange (m**2/s) l>1
-! t........input-R- temperature (K)
-! tr.......input-R- la q. de traceurs
-! flux.....input-R- le flux de traceurs a la surface
-! paprs....input-R- pression a inter-couche (Pa)
-! pplay....input-R- pression au milieu de couche (Pa)
-! delp.....input-R- epaisseur de couche (Pa)
-! cdrag....input-R- cdrag pour le flux de surface (non active)
-! tr0......input-R- traceurs a la surface ou dans l'ocean (non active)
-! d_tr.....output-R- le changement de tr
-! flux_tr..output-R- flux de tr
+! dtime.......input-R- intervalle du temps (en secondes)
+! coef........input-R- le coefficient d'echange (m**2/s) l>1
+! t...........input-R- temperature (K)
+! tr..........input-R- la q. de traceurs
+! flux........input-R- le flux de traceurs a la surface
+! paprs.......input-R- pression a inter-couche (Pa)
+! pplay.......input-R- pression au milieu de couche (Pa)
+! delp........input-R- epaisseur de couche (Pa)
+! cdrag.......input-R- cdrag pour le flux de surface (non active)
+! tr0.........input-R- traceurs a la surface ou dans l'ocean (non active)
+! d_tr........output-R- le changement de tr
+! d_tr_dry....output-R- le changement de tr du au depot sec (1st layer)
+! flux_tr_dry.output-R- depot sec
+!!! flux_tr..output-R- flux de tr
 !======================================================================
   include "YOMCST.h"
@@ -40,4 +44,6 @@
 !
   REAL ,DIMENSION(klon,klev),INTENT(OUT) :: d_tr
+  REAL ,DIMENSION(klon),INTENT(OUT)       :: d_tr_dry          !jyg
+  REAL ,DIMENSION(klon),INTENT(OUT)       :: flux_tr_dry       !jyg
 !  REAL ,DIMENSION(klon,klev),INTENT(OUT) :: flux_tr
 !
@@ -66,5 +72,7 @@
      zx_alf1(i) = (paprs(i,1)-pplay(i,2))/(pplay(i,1)-pplay(i,2))
      zx_alf2(i) = 1.0 - zx_alf1(i)
-     zx_flux(i) =  -flux(i)*dtime*RG
+     flux_tr_dry(i) = -flux(i)*dtime                              !jyg
+     zx_flux(i) =  flux_tr_dry(i)*RG                              !jyg
+!!     zx_flux(i) =  -flux(i)*dtime*RG                            !jyg
 ! Pour le moment le flux est prescrit cdrag et zx_coef(1) vaut 0
      cdrag(i) = 0.0 
@@ -95,4 +103,5 @@
      zx_dtr(i,2) = (zx_coef(i,2)-zx_alf2(i)*zx_coef(i,1)) /   & 
           zx_buf(i)
+     d_tr_dry(i) = -zx_flux(i)/zx_buf(i)                          !jyg
   ENDDO
 
Index: LMDZ5/branches/testing/libf/phylmd/coef_diff_turb_mod.F90
===================================================================
--- LMDZ5/branches/testing/libf/phylmd/coef_diff_turb_mod.F90	(revision 1707)
+++ LMDZ5/branches/testing/libf/phylmd/coef_diff_turb_mod.F90	(revision 1750)
@@ -158,5 +158,5 @@
          
 !   iflag_pbl peut etre utilise comme longuer de melange
-       IF (iflag_pbl.GE.11) THEN
+       IF (iflag_pbl.GE.18) THEN
           CALL vdif_kcay(knon,dtime,RG,RD,ypaprs,yt, &
                yzlev,yzlay,yu,yv,yteta, &
Index: LMDZ5/branches/testing/libf/phylmd/concvl.F
===================================================================
--- LMDZ5/branches/testing/libf/phylmd/concvl.F	(revision 1707)
+++ LMDZ5/branches/testing/libf/phylmd/concvl.F	(revision 1750)
@@ -10,5 +10,11 @@
      .             pbase,bbase,dtvpdt1,dtvpdq1,dplcldt,dplcldr,
      .             qcondc,wd,pmflxr,pmflxs,
-     .             da,phi,mp,dd_t,dd_q,lalim_conv,wght_th)
+! RomP >>>
+!!     .             da,phi,mp,dd_t,dd_q,lalim_conv,wght_th)
+     .             da,phi,mp,phi2,d1a,dam,sij,clw,elij,        ! RomP
+     .             dd_t,dd_q,lalim_conv,wght_th,               ! RomP
+     .             evap, ep, epmlmMm,eplaMm,                   ! RomP
+     .             wdtrainA,wdtrainM)                          ! RomP
+! RomP <<<
 ***************************************************************
 *                                                             *
@@ -91,4 +97,12 @@
 
        real da(klon,klev),phi(klon,klev,klev),mp(klon,klev)
+! RomP >>>
+       real phi2(klon,klev,klev)                                    
+       real d1a(klon,klev),dam(klon,klev)
+       real sij(klon,klev,klev),clw(klon,klev),elij(klon,klev,klev)
+       REAL wdtrainA(klon,klev),wdtrainM(klon,klev)
+       REAL evap(klon,klev),ep(klon,klev)
+       REAL epmlmMm(klon,klev,klev),eplaMm(klon,klev)
+! RomP <<<
        REAL cape(klon),cin(klon),tvp(klon,klev)
        REAL Tconv(klon,klev)
@@ -248,5 +262,5 @@
          DO i = 1, klon
           cbmf(i) = 0.
-          plcl(i) = 0.
+!!          plcl(i) = 0.
           sigd(i) = 0.
          ENDDO
@@ -256,4 +270,5 @@
       plfc(:)  = 0.
       wbeff(:) = 100.
+      plcl(:) = 0.
 
       DO k = 1, klev+1
@@ -339,13 +354,16 @@
       if (iflag_con.eq.30) then
 
-      CALL cv_driver(klon,klev,klev+1,ntra,iflag_con,
+      print *, '-> cv_driver'      !jyg
+      CALL cv_driver(klon,klev,klevp1,ntra,iflag_con,
      :              t,q,qs,u,v,tra,
      $              em_p,em_ph,iflag,
      $              d_t,d_q,d_u,d_v,d_tra,rain,
-!!     $              pmflxr,cbmf,work1,work2,           !jyg
-     $              Vprecip,cbmf,work1,work2,            !jyg
+     $              Vprecip,cbmf,work1,work2,                  !jyg
      $              kbas,ktop,
      $              dtime,Ma,upwd,dnwd,dnwdbis,qcondc,wd,cape,
-     $              da,phi,mp)
+     $              da,phi,mp,phi2,d1a,dam,sij,clw,elij,       !RomP
+     $              evap,ep,epmlmMm,eplaMm,                    !RomP
+     $              wdtrainA,wdtrainM)                         !RomP
+      print *, 'cv_driver ->'      !jyg
 c
       DO i = 1,klon
@@ -369,7 +387,8 @@
      $              dd_t,dd_q,Plim1,Plim2,asupmax,supmax0,
      $              asupmaxmin,lalim_conv,
-!AC!
-     $              da,phi)
-!AC!
+!AC!+!RomP
+     $              da,phi,mp,phi2,d1a,dam,sij,clw,  ! RomP
+     $              elij,evap,ep,wdtrainA,wdtrainM)  ! RomP
+!AC!+!RomP
       endif  
 C------------------------------------------------------------------
Index: LMDZ5/branches/testing/libf/phylmd/conf_phys_m.F90
===================================================================
--- LMDZ5/branches/testing/libf/phylmd/conf_phys_m.F90	(revision 1707)
+++ LMDZ5/branches/testing/libf/phylmd/conf_phys_m.F90	(revision 1750)
@@ -1,3 +1,2 @@
-
 !
 ! $Id: conf_phys.F90 1668 2012-10-12 10:47:37Z idelkadi $
@@ -18,5 +17,5 @@
                        iflag_cldcon, &
                        iflag_ratqs,ratqsbas,ratqshaut,tau_ratqs, &
-  		       ok_ade, ok_aie, aerosol_couple, &
+  		       ok_ade, ok_aie, ok_cdnc, aerosol_couple, &
                        flag_aerosol, new_aod, &
                        bl95_b0, bl95_b1,&
@@ -60,4 +59,5 @@
 ! ok_instan:  sorties instantanees
 ! ok_ade, ok_aie: apply or not aerosol direct and indirect effects
+! ok_cdnc, ok cloud droplet number concentration
 ! bl95_b*: parameters in the formula to link CDNC to aerosol mass conc 
 !
@@ -70,5 +70,5 @@
   logical              :: ok_LES
   LOGICAL              :: callstats
-  LOGICAL              :: ok_ade, ok_aie, aerosol_couple
+  LOGICAL              :: ok_ade, ok_aie, ok_cdnc, aerosol_couple
   INTEGER              :: flag_aerosol
   LOGICAL              :: new_aod
@@ -79,10 +79,11 @@
 
   character (len = 6),SAVE  :: type_ocean_omp, version_ocean_omp, ocean_omp
+  character (len = 10),SAVE  :: type_veget_omp
   CHARACTER(len = 8),SAVE   :: aer_type_omp
-  logical,SAVE              :: ok_veget_omp, ok_newmicro_omp
+  logical,SAVE              :: ok_newmicro_omp
   logical,SAVE        :: ok_journe_omp, ok_mensuel_omp, ok_instan_omp, ok_hf_omp        
   logical,SAVE        :: ok_LES_omp   
   LOGICAL,SAVE        :: callstats_omp
-  LOGICAL,SAVE        :: ok_ade_omp, ok_aie_omp, aerosol_couple_omp
+  LOGICAL,SAVE        :: ok_ade_omp, ok_aie_omp, ok_cdnc_omp, aerosol_couple_omp
   INTEGER, SAVE       :: flag_aerosol_omp
   LOGICAL, SAVE       :: new_aod_omp
@@ -129,4 +130,5 @@
   REAL,SAVE :: CFC11_ppt_omp,RCFC11_omp,CFC11_ppt_per_omp,RCFC11_per_omp
   REAL,SAVE :: CFC12_ppt_omp,RCFC12_omp,CFC12_ppt_per_omp,RCFC12_per_omp
+  LOGICAL,SAVE :: ok_4xCO2atm_omp
   REAL,SAVE :: epmax_omp
   LOGICAL,SAVE :: ok_adj_ema_omp
@@ -216,6 +218,6 @@
 !Config Help = Type de modele de vegetation utilise
 !
-  ok_veget_omp = .false.
-  call getin('VEGET', ok_veget_omp)
+  type_veget_omp ='orchidee'
+  call getin('VEGET', type_veget_omp)
 !
 !Config Key  = OK_journe
@@ -273,4 +275,12 @@
 
 !
+!Config Key  = ok_cdnc
+!Config Desc = ok cloud droplet number concentration
+!Config Def  = .false.
+!Config Help = Used in newmicro.F
+!
+  ok_cdnc_omp = .false.
+  call getin('ok_cdnc', ok_cdnc_omp)
+!
 !Config Key  = aerosol_couple
 !Config Desc = read aerosol in file or calcul by inca
@@ -280,5 +290,4 @@
   aerosol_couple_omp = .false.
   CALL getin('aerosol_couple',aerosol_couple_omp)
-
 !
 !Config Key  = flag_aerosol
@@ -523,4 +532,12 @@
 !               
   RCO2_per_omp = co2_ppm_per_omp * 1.0e-06  * 44.011/28.97
+
+!Config Key  = ok_4xCO2atm
+!Config Desc = Calcul ou non effet radiatif 4xco2
+!Config Def  = .false.
+!Config Help = 
+
+  ok_4xCO2atm_omp = .false.
+  call getin('ok_4xCO2atm',ok_4xCO2atm_omp)
 
 !Config Key  = RCH4_per
@@ -1605,4 +1622,5 @@
     RCFC11_act = RCFC11
     RCFC12_act = RCFC12
+    ok_4xCO2atm = ok_4xCO2atm_omp
     RCO2_per = RCO2_per_omp
     RCH4_per = RCH4_per_omp
@@ -1666,5 +1684,12 @@
     type_ocean = type_ocean_omp
     version_ocean = version_ocean_omp
-    ok_veget = ok_veget_omp
+
+    ok_veget=.true.
+    type_veget=type_veget_omp
+    if (type_veget=='n' .or. type_veget=='bucket' .or. type_veget=='betaclim' ) &
+         & then
+         ok_veget=.false.
+    endif
+
     ok_newmicro = ok_newmicro_omp
     ok_journe = ok_journe_omp
@@ -1677,4 +1702,5 @@
     ok_ade = ok_ade_omp
     ok_aie = ok_aie_omp
+    ok_cdnc = ok_cdnc_omp
     aerosol_couple = aerosol_couple_omp
     flag_aerosol=flag_aerosol_omp
@@ -1775,4 +1801,9 @@
     END IF
 
+! ok_cdnc must be set to y if ok_aie is activated
+    IF (ok_aie .AND. .NOT. ok_cdnc) THEN
+       CALL abort_gcm('conf_phys', 'ok_cdnc must be set to y if ok_aie is activated',1)
+    ENDIF 
+
 !$OMP MASTER
 
@@ -1781,5 +1812,5 @@
   write(lunout,*)' Type ocean = ', type_ocean
   write(lunout,*)' Version ocean = ', version_ocean
-  write(lunout,*)' Config veget = ', ok_veget
+  write(lunout,*)' Config veget = ', ok_veget,type_veget
   write(lunout,*)' Sortie journaliere = ', ok_journe
   write(lunout,*)' Sortie haute frequence = ', ok_hf
@@ -1800,4 +1831,5 @@
   write(lunout,*)' CFC11_ppt=',CFC11_ppt,' RCFC11_act=  ',RCFC11_act
   write(lunout,*)' CFC12_ppt=',CFC12_ppt,' RCFC12_act=  ',RCFC12_act
+  write(lunout,*)' ok_4xCO2atm=',ok_4xCO2atm
   write(lunout,*)' RCO2_per = ',RCO2_per,' RCH4_per = ', RCH4_per
   write(lunout,*)' RN2O_per = ',RN2O_per,' RCFC11_per = ', RCFC11_per
Index: LMDZ5/branches/testing/libf/phylmd/cv30_routines.F
===================================================================
--- LMDZ5/branches/testing/libf/phylmd/cv30_routines.F	(revision 1707)
+++ LMDZ5/branches/testing/libf/phylmd/cv30_routines.F	(revision 1750)
@@ -1831,5 +1831,6 @@
      :              ,th,tv,lv,cpn,ep,sigp,clw
      :              ,m,ment,elij,delt,plcl
-     :              ,mp,rp,up,vp,trap,wt,water,evap,b)
+     :              ,mp,rp,up,vp,trap,wt,water,evap,b ! RomP-jyg
+     :              ,wdtrainA,wdtrainM)               ! 26/08/10  RomP-jyg
       implicit none
 
@@ -1857,4 +1858,9 @@
       real trap(nloc,na,ntra)
       real b(nloc,na)
+! 25/08/10 - RomP---- ajout des masses precipitantes ejectees
+! lascendance adiabatique et des flux melanges Pa et Pm.
+! Distinction des wdtrain
+! Pa = wdtrainA     Pm = wdtrainM
+      real  wdtrainA(nloc,na), wdtrainM(nloc,na)
 
 c local variables
@@ -1898,5 +1904,12 @@
 c         enddo
 c        enddo
-
+!! RomP >>>
+         do i=1,nd
+          do il=1,ncum
+          wdtrainA(il,i)=0.0     
+          wdtrainM(il,i)=0.0     
+         enddo
+        enddo
+!! RomP <<<
 c
 c   ***  check whether ep(inb)=0, if so, skip precipitating    ***
@@ -1935,6 +1948,8 @@
          if (cvflag_grav) then
           wdtrain(il)=grav*ep(il,i)*m(il,i)*clw(il,i)
+          wdtrainA(il,i) = wdtrain(il)/grav     !   Pa  26/08/10   RomP
          else
           wdtrain(il)=10.0*ep(il,i)*m(il,i)*clw(il,i)
+          wdtrainA(il,i) = wdtrain(il)/10.      !   Pa  26/08/10   RomP
          endif
         endif
@@ -1942,4 +1957,5 @@
 
        if(i.gt.1)then
+
         do 320 j=1,i-1
          do il=1,ncum
@@ -1955,4 +1971,12 @@
          enddo
 320     continue
+         do il=1,ncum
+           if (cvflag_grav) then
+           wdtrainM(il,i) = wdtrain(il)/grav-wdtrainA(il,i)    !   Pm  26/08/10   RomP
+           else
+           wdtrainM(il,i) = wdtrain(il)/10.-wdtrainA(il,i)    !   Pm  26/08/10   RomP
+           endif
+         enddo
+
        endif
 
@@ -3022,44 +3046,139 @@
         end
 
+!!RomP >>>
       SUBROUTINE cv30_tracer(nloc,len,ncum,nd,na,
-     &                        ment,sij,da,phi)
+     &                       ment,sij,da,phi,phi2,d1a,dam,
+     &                       ep,VPrecip,elij,clw,epmlmMm,eplaMm,
+     &                       icb,inb)
         implicit none
+
+#include "cv30param.h"
+
 c inputs:
         integer ncum, nd, na, nloc,len
         real ment(nloc,na,na),sij(nloc,na,na)
+	real clw(nloc,nd),elij(nloc,na,na)
+	real ep(nloc,na)
+        integer icb(nloc),inb(nloc)
+        real VPrecip(nloc,nd+1)
 c ouputs:
         real da(nloc,na),phi(nloc,na,na)
+	real phi2(nloc,na,na)
+	real d1a(nloc,na),dam(nloc,na)
+	real epmlmMm(nloc,na,na),eplaMm(nloc,na)
+! variables pour tracer dans precip de l'AA et des mel
 c local variables:
         integer i,j,k
-c        
-        da(:,:)=0.
-c
+	real epm(nloc,na,na)
+c
+! variables d'Emanuel : du second indice au troisieme
+! --->    tab(i,k,j) -> de l origine k a l arrivee j 
+!  ment, sij, elij
+! variables personnelles : du troisieme au second indice
+! --->    tab(i,j,k) -> de k a j 
+! phi, phi2
+!
+! initialisations
+       do j=1,na
+        do i=1,ncum
+         da(i,j)=0.
+         d1a(i,j)=0.
+         dam(i,j)=0.
+         eplaMm(i,j)=0.
+        enddo
+       enddo
+      do k=1,na
+       do j=1,na
+        do i=1,ncum
+         epm(i,j,k)=0.
+         epmlmMm(i,j,k)=0.
+         phi(i,j,k)=0.
+         phi2(i,j,k)=0.
+        enddo
+       enddo
+      enddo
+c
+!  fraction deau condensee dans les melanges convertie en precip : epm
+! et eau condensée précipitée dans masse d'air saturé : l_m*dM_m/dzdz.dzdz
+        do j=1,na
+         do k=1,j-1
+           do i=1,ncum
+            if(k.ge.icb(i).and.k.le.inb(i).and.
+     &         j.le.inb(i)) then
+!!jyg             epm(i,j,k)=1.-(1.-ep(i,j))*clw(i,j)/elij(i,k,j)
+             epm(i,j,k)=1.-(1.-ep(i,j))*clw(i,j)/
+     &                     max(elij(i,k,j),1.e-16)
+!!
+             epm(i,j,k)=max(epm(i,j,k),0.0)
+            endif
+           end do 
+         end do 
+        end do
+!
+        do j=1,na
+         do k=1,na
+           do i=1,ncum
+            if(k.ge.icb(i).and.k.le.inb(i)) then
+             eplaMm(i,j)=eplaMm(i,j) + ep(i,j)*clw(i,j)
+     &                  *ment(i,j,k)*(1.-sij(i,j,k))
+            endif
+           end do 
+         end do 
+        end do
+!
+        do j=1,na
+         do k=1,j-1
+           do i=1,ncum
+            if(k.ge.icb(i).and.k.le.inb(i).and.
+     &         j.le.inb(i)) then
+             epmlmMm(i,j,k)=epm(i,j,k)*elij(i,k,j)*ment(i,k,j)
+            endif
+           end do 
+         end do 
+        end do
+
+!  matrices pour calculer la tendance des concentrations dans cvltr.F90
         do j=1,na
           do k=1,na
             do i=1,ncum
-            da(i,j)=da(i,j)+(1.-sij(i,k,j))*ment(i,k,j)
-            phi(i,j,k)=sij(i,k,j)*ment(i,k,j)
-c            print *,'da',j,k,da(i,j),sij(i,k,j),ment(i,k,j)
+             da(i,j)=da(i,j)+(1.-sij(i,k,j))*ment(i,k,j)
+             phi(i,j,k)=sij(i,k,j)*ment(i,k,j)
+             d1a(i,j)=d1a(i,j)+ment(i,k,j)*ep(i,k)
+     &              *(1.-sij(i,k,j))
             end do 
           end do 
         end do 
-    
+
+        do j=1,na
+          do k=1,j-1
+            do i=1,ncum
+             dam(i,j)=dam(i,j)+ment(i,k,j)
+     &             *epm(i,j,k)*(1.-ep(i,k))*(1.-sij(i,k,j)) 
+             phi2(i,j,k)=phi(i,j,k)*epm(i,j,k)
+            end do 
+          end do 
+        end do 
+
         return
         end
-
+!RomP <<<
 
       SUBROUTINE cv30_uncompress(nloc,len,ncum,nd,ntra,idcum
      :         ,iflag
-     :         ,precip,VPrecip,sig,w0
+     :         ,precip,VPrecip,evap,ep,sig,w0
      :         ,ft,fq,fu,fv,ftra
      :         ,inb
      :         ,Ma,upwd,dnwd,dnwd0,qcondc,wd,cape
-     :         ,da,phi,mp
+     :         ,da,phi,mp,phi2,d1a,dam,sij
+     :         ,elij,clw,epmlmMm,eplaMm
+     :         ,wdtrainA,wdtrainM
      :         ,iflag1
-     :         ,precip1,VPrecip1,sig1,w01
+     :         ,precip1,VPrecip1,evap1,ep1,sig1,w01
      :         ,ft1,fq1,fu1,fv1,ftra1
      :         ,inb1
      :         ,Ma1,upwd1,dnwd1,dnwd01,qcondc1,wd1,cape1
-     :         ,da1,phi1,mp1)
+     :         ,da1,phi1,mp1,phi21,d1a1,dam1,sij1
+     :         ,elij1,clw1,epmlmMm1,eplaMm1
+     :         ,wdtrainA1,wdtrainM1)
       implicit none
 
@@ -3072,5 +3191,6 @@
       integer inb(nloc)
       real precip(nloc)
-      real VPrecip(nloc,nd+1)
+      real VPrecip(nloc,nd+1),evap(nloc,nd)
+      real ep(nloc,nd)
       real sig(nloc,nd), w0(nloc,nd)
       real ft(nloc,nd), fq(nloc,nd), fu(nloc,nd), fv(nloc,nd)
@@ -3081,4 +3201,12 @@
       real wd(nloc),cape(nloc)
       real da(nloc,nd),phi(nloc,nd,nd),mp(nloc,nd)
+!RomP >>>
+      real phi2(nloc,nd,nd)
+      real d1a(nloc,nd),dam(nloc,nd)
+      real wdtrainA(nloc,nd), wdtrainM(nloc,nd)
+      real sij(nloc,nd,nd)
+      real elij(nloc,nd,nd),clw(nloc,nd)
+      real epmlmMm(nloc,nd,nd),eplaMm(nloc,nd)
+!RomP <<<
 
 c outputs:
@@ -3086,5 +3214,6 @@
       integer inb1(len)
       real precip1(len)
-      real VPrecip1(len,nd+1)
+      real VPrecip1(len,nd+1),evap1(len,nd) !<<< RomP
+      real ep1(len,nd)                      !<<< RomP
       real sig1(len,nd), w01(len,nd)
       real ft1(len,nd), fq1(len,nd), fu1(len,nd), fv1(len,nd)
@@ -3095,4 +3224,12 @@
       real wd1(nloc),cape1(nloc)
       real da1(nloc,nd),phi1(nloc,nd,nd),mp1(nloc,nd)
+!RomP >>>
+      real phi21(len,nd,nd)
+      real d1a1(len,nd),dam1(len,nd)
+      real wdtrainA1(len,nd), wdtrainM1(len,nd)
+      real sij1(len,nd,nd)
+      real elij1(len,nd,nd),clw1(len,nd)
+      real epmlmMm1(len,nd,nd),eplaMm1(len,nd)
+!RomP <<<
 
 c local variables:
@@ -3110,4 +3247,5 @@
           do 2010 i=1,ncum
             VPrecip1(idcum(i),k)=VPrecip(i,k)
+            evap1(idcum(i),k)=evap(i,k)   !<<< RomP
             sig1(idcum(i),k)=sig(i,k)
             w01(idcum(i),k)=w0(i,k)
@@ -3123,4 +3261,13 @@
             da1(idcum(i),k)=da(i,k)
             mp1(idcum(i),k)=mp(i,k)
+!RomP >>>
+            ep1(idcum(i),k)=ep(i,k)
+            d1a1(idcum(i),k)=d1a(i,k)
+            dam1(idcum(i),k)=dam(i,k)
+            clw1(idcum(i),k)=clw(i,k)
+            eplaMm1(idcum(i),k)=eplaMm(i,k)
+            wdtrainA1(idcum(i),k)=wdtrainA(i,k)
+            wdtrainM1(idcum(i),k)=wdtrainM(i,k)
+!RomP <<<
  2010     continue
  2020   continue
@@ -3141,5 +3288,9 @@
          do k=1,nd 
           do i=1,ncum
+            sij1(idcum(i),k,j)=sij(i,k,j)
             phi1(idcum(i),k,j)=phi(i,k,j)
+            phi21(idcum(i),k,j)=phi2(i,k,j)
+            elij1(idcum(i),k,j)=elij(i,k,j)
+            epmlmMm1(idcum(i),k,j)=epmlmMm(i,k,j)
           end do
          end do
Index: LMDZ5/branches/testing/libf/phylmd/cv3_routines.F
===================================================================
--- LMDZ5/branches/testing/libf/phylmd/cv3_routines.F	(revision 1707)
+++ LMDZ5/branches/testing/libf/phylmd/cv3_routines.F	(revision 1750)
@@ -1950,5 +1950,6 @@
      :              ,th,tv,lv,cpn,ep,sigp,clw
      :              ,m,ment,elij,delt,plcl,coef_clos
-     o              ,mp,rp,up,vp,trap,wt,water,evap,b,sigd)
+     o              ,mp,rp,up,vp,trap,wt,water,evap,b,sigd
+     o              ,wdtrainA,wdtrainM)                                ! RomP
       implicit none
 
@@ -1979,4 +1980,9 @@
       real trap(nloc,na,ntra)
       real b(nloc,na), sigd(nloc)
+! 25/08/10 - RomP---- ajout des masses precipitantes ejectees
+! lascendance adiabatique et des flux melanges Pa et Pm.
+! Distinction des wdtrain
+! Pa = wdtrainA     Pm = wdtrainM
+      real  wdtrainA(nloc,na), wdtrainM(nloc,na)
 
 c local variables
@@ -2021,4 +2027,12 @@
 !AC!         enddo
 !AC!        enddo
+!! RomP >>>
+         do i=1,nd
+          do il=1,ncum
+          wdtrainA(il,i)=0.0     
+          wdtrainM(il,i)=0.0     
+         enddo
+        enddo
+!! RomP <<<
 c
 c   ***  check whether ep(inb)=0, if so, skip precipitating    ***
@@ -2065,6 +2079,8 @@
          if (cvflag_grav) then
           wdtrain(il)=grav*ep(il,i)*m(il,i)*clw(il,i)
+          wdtrainA(il,i) = wdtrain(il)/grav     !   Pa   RomP
          else
           wdtrain(il)=10.0*ep(il,i)*m(il,i)*clw(il,i)
+          wdtrainA(il,i) = wdtrain(il)/10.      !   Pa   RomP
          endif
         endif
@@ -2079,6 +2095,8 @@
            if (cvflag_grav) then
             wdtrain(il)=wdtrain(il)+grav*awat*ment(il,j,i)
+            wdtrainM(il,i) = wdtrain(il)/grav-wdtrainA(il,i)    !   Pm  RomP
            else
             wdtrain(il)=wdtrain(il)+10.0*awat*ment(il,j,i)
+            wdtrainM(il,i) = wdtrain(il)/10.-wdtrainA(il,i)    !   Pm  RomP
            endif
           endif
@@ -3540,29 +3558,79 @@
         end
 
-!AC!
+!AC! et !RomP >>>
       SUBROUTINE cv3_tracer(nloc,len,ncum,nd,na,
-     &                        ment,sij,da,phi)
+     &                       ment,sigij,da,phi,phi2,d1a,dam,
+     &                       ep,Vprecip,elij,clw,icb,inb)
         implicit none
+
+#include "cv3param.h"
+
 c inputs:
         integer ncum, nd, na, nloc,len
-        real ment(nloc,na,na),sij(nloc,na,na)
+        real ment(nloc,na,na),sigij(nloc,na,na)
+	real clw(nloc,nd),elij(nloc,na,na)
+	real ep(nloc,na)
+        integer icb(nloc),inb(nloc)
+        real VPrecip(nloc,nd+1)
 c ouputs:
         real da(nloc,na),phi(nloc,na,na)
+	real phi2(nloc,na,na)
+	real d1a(nloc,na),dam(nloc,na)
+! variables pour tracer dans precip de l'AA et des mel
 c local variables:
         integer i,j,k
-c        
-        da(:,:)=0.
-c
+	real epm(nloc,na,na)
+c
+! variables d'Emanuel : du second indice au troisieme
+! --->    tab(i,k,j) -> de l origine k a l arrivee j 
+!  ment, sigij, elij
+! variables personnelles : du troisieme au second indice
+! --->    tab(i,j,k) -> de k a j 
+! phi, phi2
+!
+! initialisations
+c
+       da(:,:)=0.
+       d1a(:,:)=0.
+       dam(:,:)=0.
+       epm(:,:,:)=0.
+c
+!  fraction deau condensee dans les melanges convertie en precip
+        do j=1,na
+         do k=1,na
+           do i=1,ncum
+            if(k.ge.icb(i).and.k.le.inb(i).and.
+     &         j.ge.k.and.j.le.inb(i)) then
+             epm(i,j,k)=1.-(1.-ep(i,j))*clw(i,j)/elij(i,k,j)
+             epm(i,j,k)=max(epm(i,j,k),0.0)
+            endif
+           end do 
+         end do 
+        end do 
+
+!  matrices pour calculer la tendance des concentrations dans cvltr.F90
         do j=1,na
           do k=1,na
             do i=1,ncum
-            da(i,j)=da(i,j)+(1.-sij(i,k,j))*ment(i,k,j)
-            phi(i,j,k)=sij(i,k,j)*ment(i,k,j)
+             da(i,j)=da(i,j)+(1.-sigij(i,k,j))*ment(i,k,j)
+             phi(i,j,k)=sigij(i,k,j)*ment(i,k,j)
+             d1a(i,j)=d1a(i,j)+ment(i,k,j)*ep(i,k)
+     &              *(1.-sigij(i,k,j))
+            if(k.le.j) then
+             dam(i,j)=dam(i,j)+ment(i,k,j)
+     &             *epm(i,k,j)*(1.-ep(i,k))*(1.-sigij(i,k,j)) 
+
+             phi2(i,j,k)=phi(i,j,k)*epm(i,j,k)   
+            else
+             dam(i,j)=0.
+             phi2(i,j,k)=0.
+            endif
             end do 
           end do 
         end do 
+   
         return
         end
-!AC!
+!AC! et !RomP <<<
 
       SUBROUTINE cv3_uncompress(nloc,len,ncum,nd,ntra,idcum
Index: LMDZ5/branches/testing/libf/phylmd/cv3a_uncompress.F
===================================================================
--- LMDZ5/branches/testing/libf/phylmd/cv3a_uncompress.F	(revision 1707)
+++ LMDZ5/branches/testing/libf/phylmd/cv3a_uncompress.F	(revision 1750)
@@ -9,7 +9,10 @@
      :         ,Plim1,Plim2,asupmax,supmax0
      :         ,asupmaxmin
-!AC!
-     :         ,da,phi
-!AC!
+!
+     :         ,da,phi                               !AC!
+     :         ,mp,phi2,d1a,dam,sigij                  !RomP
+     :         ,wdtrainA,wdtrainM,elij,clw           !RomP
+     :         ,evap,ep                              !RomP
+!
      o         ,iflag1,kbas1,ktop1
      :         ,precip1,cbmf1,plcl1,plfc1,wbeff1,sig1,w01,ptop21
@@ -21,7 +24,10 @@
      :         ,Plim11,Plim21,asupmax1,supmax01
      :         ,asupmaxmin1     
-!AC!
-     :         ,da1,phi1  )
-!AC!
+!
+     o         ,da1,phi1                             !AC!
+     o         ,mp1,phi21,d1a1,dam1,sigij1             !RomP
+     o         ,wdtrainA1,wdtrainM1,elij1,clw1       !RomP
+     o         ,evap1,ep1)                           !RomP
+!
 ***************************************************************
 *                                                             *
@@ -56,7 +62,14 @@
       real asupmax(nloc,nd),supmax0(nloc)
       real asupmaxmin(nloc)
-!AC!
-      real da(nloc,nd),phi(nloc,nd,nd)
-!AC!
+!
+      real da(nloc,nd),phi(nloc,nd,nd)                    !AC!
+      real mp(nloc,nd)                                    !RomP
+      real phi2(nloc,nd,nd)                               !RomP
+      real d1a(nloc,nd),dam(nloc,nd)                      !RomP
+      real wdtrainA(nloc,nd), wdtrainM(nloc,nd)           !RomP
+      real sigij(nloc,nd,nd)                                !RomP
+      real elij(nloc,nd,nd),clw(nloc,nd)                  !RomP
+      real evap(nloc,nd),ep(nloc,nd)                      !RomP
+!
 c outputs:
       integer iflag1(len),kbas1(len),ktop1(len)
@@ -76,7 +89,14 @@
       real asupmax1(len,nd),supmax01(len)
       real asupmaxmin1(len)
-!AC!
-      real da1(nloc,nd),phi1(nloc,nd,nd)
-!AC!
+!
+      real da1(nloc,nd),phi1(nloc,nd,nd)                  !AC!
+      real mp1(nloc,nd)                                   !RomP
+      real phi21(nloc,nd,nd)                              !RomP
+      real d1a1(nloc,nd),dam1(nloc,nd)                    !RomP
+      real wdtrainA1(len,nd), wdtrainM1(len,nd)           !RomP
+      real sigij1(len,nd,nd)                                !RomP
+      real elij1(len,nd,nd),clw1(len,nd)                  !RomP
+      real evap1(len,nd),ep1(len,nd)                      !RomP
+!
 c
 c local variables:
@@ -122,7 +142,15 @@
             fqd1(idcum(i),k)=fqd(i,k)
             asupmax1(idcum(i),k)=asupmax(i,k)
-!AC!
-            da1(idcum(i),k)=da(i,k)
-!AC!
+!
+            da1(idcum(i),k)=da(i,k)                       !AC!
+            mp1(idcum(i),k)      = mp(i,k)                !RomP
+            d1a1(idcum(i),k)     = d1a(i,k)               !RomP
+            dam1(idcum(i),k)     = dam(i,k)               !RomP
+            wdtrainA1(idcum(i),k)= wdtrainA(i,k)          !RomP
+            wdtrainM1(idcum(i),k)= wdtrainM(i,k)          !RomP
+            clw1(idcum(i),k)     = clw(i,k)               !RomP
+            evap1(idcum(i),k)    = evap(i,k)              !RomP
+            ep1(idcum(i),k)      = ep(i,k)                !RomP
+!
  2010    continue
  2020   continue
@@ -143,8 +171,11 @@
 
 !AC!
-       do j=1,nd
-         do k=1,nd 
+       do k2=1,nd
+         do k1=1,nd 
           do i=1,ncum
-            phi1(idcum(i),k,j)=phi(i,k,j)
+            phi1(idcum(i),k1,k2)=phi(i,k1,k2)                 !AC!
+            phi21(idcum(i),k1,k2)= phi2(idcum(i),k1,k2)   !RomP
+            sigij1(idcum(i),k1,k2) = sigij(idcum(i),k1,k2)    !RomP
+            elij1(idcum(i),k1,k2)= elij(idcum(i),k1,k2)   !RomP
           end do
          end do
@@ -157,5 +188,5 @@
 c          do 2200 i=1,ncum
 c            ment1(idcum(i),k1,k2) = ment(i,k1,k2)
-c            sij1(idcum(i),k1,k2) = sij(i,k1,k2)
+c            sigij1(idcum(i),k1,k2) = sigij(i,k1,k2)
 c2200      enddo
 c2210     enddo
Index: LMDZ5/branches/testing/libf/phylmd/cv3p_mixing.F
===================================================================
--- LMDZ5/branches/testing/libf/phylmd/cv3p_mixing.F	(revision 1707)
+++ LMDZ5/branches/testing/libf/phylmd/cv3p_mixing.F	(revision 1750)
@@ -3,5 +3,5 @@
      :                    ,unk,vnk,hp,tv,tvp,ep,clw,sig
      :                    ,ment,qent,hent,uent,vent,nent
-     :                   ,sij,elij,supmax,ments,qents,traent)
+     :                   ,sigij,elij,supmax,ments,qents,traent)
 ***************************************************************
 *                                                             *
@@ -36,10 +36,9 @@
       real ment(nloc,na,na), qent(nloc,na,na)
       real uent(nloc,na,na), vent(nloc,na,na)
-      real sij(nloc,na,na), elij(nloc,na,na)
+      real sigij(nloc,na,na), elij(nloc,na,na)
       real supmax(nloc,na)     ! Highest mixing fraction of mixed updraughts
                                ! with the sign of (h-hp)
       real traent(nloc,nd,nd,ntra)
       real ments(nloc,nd,nd), qents(nloc,nd,nd)
-      real sigij(nloc,nd,nd)
       real hent(nloc,nd,nd)
       integer nent(nloc,nd)
@@ -57,4 +56,5 @@
       real Sbef(nloc), Sup(nloc), Smin(nloc)
       real asij(nloc), smax(nloc), scrit(nloc)
+      real sij(nloc,nd,nd)
       real csum(nloc,nd)
       real awat
Index: LMDZ5/branches/testing/libf/phylmd/cv_driver.F
===================================================================
--- LMDZ5/branches/testing/libf/phylmd/cv_driver.F	(revision 1707)
+++ LMDZ5/branches/testing/libf/phylmd/cv_driver.F	(revision 1750)
@@ -9,5 +9,7 @@
      &                   icb1,inb1,
      &                   delt,Ma1,upwd1,dnwd1,dnwd01,qcondc1,wd1,cape1,
-     &                   da1,phi1,mp1)
+     &                   da1,phi1,mp1,phi21,d1a1,dam1,sij1,clw1,elij1,
+     &                   evap1,ep1,epmlmMm1,eplaMm1,
+     &                   wdtrainA1,wdtrainM1)
 C
       USE dimphy
@@ -67,5 +69,6 @@
 cym#include "dimensions.h"
 cym#include "dimphy.h"
-
+c
+c Input
       integer len
       integer nd
@@ -74,4 +77,5 @@
       integer iflag_con
       integer ntra
+      real delt
       real t1(len,nd)
       real q1(len,nd)
@@ -79,6 +83,9 @@
       real u1(len,nd)
       real v1(len,nd)
+      real tra1(len,nd,ntra)
       real p1(len,nd)
       real ph1(len,ndp1)
+c
+c Output
       integer iflag1(len)
       real ft1(len,nd)
@@ -86,7 +93,12 @@
       real fu1(len,nd)
       real fv1(len,nd)
+      real ftra1(len,nd,ntra)
       real precip1(len)
       real cbmf1(len)
-      real VPrecip1(len,nd+1)
+      real sig1(klon,klev)
+      real w01(klon,klev)
+      real VPrecip1(len,nd+1) 
+      real evap1(len,nd)                    !RomP
+      real ep1(len,nd)                      !RomP
       real Ma1(len,nd)
       real upwd1(len,nd)
@@ -98,10 +110,14 @@
       real cape1(len)     
 
+! RomP >>> 
+      real wdtrainA1(len,nd), wdtrainM1(len,nd)
+      real sij1(len,nd,nd),elij1(len,nd,nd)
       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)
-
-      real delt
+
+      real phi21(len,nd,nd)
+      real d1a1(len,nd), dam1(len,nd)
+      real epmlmMm1(len,nd,nd),eplaMm1(len,nd)
+! RomP <<<
+
 
 !-------------------------------------------------------------------
@@ -243,6 +259,4 @@
       real tvp1(klon,klev)
       real clw1(klon,klev)
-      real sig1(klon,klev)
-      real w01(klon,klev)
       real th1(klon,klev)
 c
@@ -277,4 +291,12 @@
       real ments(nloc,klev,klev), qents(nloc,klev,klev)
       real sij(nloc,klev,klev), elij(nloc,klev,klev)
+! RomP >>>
+      real da(nloc,klev),phi(nloc,klev,klev),mp(nloc,klev)
+      real epmlmMm(nloc,klev,klev),eplaMm(nloc,klev)  
+      real phi2(nloc,klev,klev)
+      real d1a(nloc,klev), dam(nloc,klev)
+      real wdtrainA(nloc,klev),wdtrainM(nloc,klev)
+      real sigd(nloc)
+! RomP <<<
       real qp(nloc,klev), up(nloc,klev), vp(nloc,klev)
       real wt(nloc,klev), water(nloc,klev), evap(nloc,klev)
@@ -295,5 +317,5 @@
 ! --- SET CONSTANTS AND PARAMETERS
 !-------------------------------------------------------------------
-
+      print *, '-> cv_driver'      !jyg
 c -- set simulation flags:
 c   (common cvflag)
@@ -325,40 +347,30 @@
 !---------------------------------------------------------------------
 
-      do 20 k=1,nd
-        do 10 i=1,len
-         ft1(i,k)=0.0
-         fq1(i,k)=0.0
-         fu1(i,k)=0.0
-         fv1(i,k)=0.0
-         tvp1(i,k)=0.0
-         tp1(i,k)=0.0
-         clw1(i,k)=0.0
+         ft1(:,:)=0.0
+         fq1(:,:)=0.0
+         fu1(:,:)=0.0
+         fv1(:,:)=0.0
+         tvp1(:,:)=0.0
+         tp1(:,:)=0.0
+         clw1(:,:)=0.0
 cym
-         clw(i,k)=0.0	 
-         gz1(i,k) = 0.
-         VPrecip1(i,k) = 0.
-         Ma1(i,k)=0.0
-         upwd1(i,k)=0.0
-         dnwd1(i,k)=0.0
-         dnwd01(i,k)=0.0
-         qcondc1(i,k)=0.0
- 10     continue
- 20   continue
-
-      do 30 j=1,ntra
-       do 31 k=1,nd
-        do 32 i=1,len
-         ftra1(i,k,j)=0.0
- 32     continue    
- 31    continue    
- 30   continue    
-
-      do 60 i=1,len
-        precip1(i)=0.0
-        iflag1(i)=0
-        wd1(i)=0.0
-        cape1(i)=0.0
-        VPrecip1(i,nd+1)=0.0
- 60   continue
+         clw(:,:)=0.0	 
+         gz1(:,:) = 0.
+         VPrecip1(:,:) = 0.
+         Ma1(:,:)=0.0
+         upwd1(:,:)=0.0
+         dnwd1(:,:)=0.0
+         dnwd01(:,:)=0.0
+         qcondc1(:,:)=0.0
+
+         ftra1(:,:,:)=0.0
+
+        elij1(:,:,:) = 0.0
+        sij1(:,:,:) = 0.0
+
+        precip1(:)=0.0
+        iflag1(:)=0
+        wd1(:)=0.0
+        cape1(:)=0.0
 
       if (iflag_con.eq.30) then
@@ -441,5 +453,5 @@
  400  continue
 
-c       print*,'klon, ncum = ',len,ncum
+         print*,'cv_driver : klon, ncum = ',len,ncum
 
       IF (ncum.gt.0) THEN
@@ -541,9 +553,12 @@
 
       if (iflag_con.eq.30) then
-       CALL cv30_unsat(nloc,ncum,nd,nd,ntra,icb,inb    ! na->nd
+!RomP >>>
+       CALL cv30_unsat(nloc,ncum,nd,nd,ntra,icb,inb         ! na->nd
      :               ,t,q,qs,gz,u,v,tra,p,ph
      :               ,th,tv,lv,cpn,ep,sigp,clw
      :               ,m,ment,elij,delt,plcl
-     o          ,mp,qp,up,vp,trap,wt,water,evap,b)
+     :          ,mp,qp,up,vp,trap,wt,water,evap,b
+     o          ,wdtrainA,wdtrainM)
+!RomP <<<
       endif
 
@@ -588,6 +603,10 @@
 
       if (iflag_con.eq.30) then
+!RomP >>>
        CALL cv30_tracer(nloc,len,ncum,nd,nd,
-     :                  ment,sij,da,phi)
+     :                  ment,sij,da,phi,phi2,d1a,dam,
+     :                  ep,VPrecip,elij,clw,epmlmMm,eplaMm,
+     :                  icb,inb)
+!RomP <<<
       endif
 
@@ -603,15 +622,19 @@
        CALL cv30_uncompress(nloc,len,ncum,nd,ntra,idcum
      :          ,iflag
-     :          ,precip,VPrecip,sig,w0
+     :          ,precip,VPrecip,evap,ep,sig,w0        !RomP 
      :          ,ft,fq,fu,fv,ftra
-     :          ,inb 
+     :          ,inb
      :          ,Ma,upwd,dnwd,dnwd0,qcondc,wd,cape
-     :          ,da,phi,mp
+     :          ,da,phi,mp,phi2,d1a,dam,sij           !RomP
+     :          ,elij,clw,epmlmMm,eplaMm              !RomP  
+     :          ,wdtrainA,wdtrainM                    !RomP
      o          ,iflag1
-     o          ,precip1,VPrecip1,sig1,w01
+     o          ,precip1,VPrecip1,evap1,ep1,sig1,w01     !RomP
      o          ,ft1,fq1,fu1,fv1,ftra1
      o          ,inb1
      o          ,Ma1,upwd1,dnwd1,dnwd01,qcondc1,wd1,cape1 
-     o          ,da1,phi1,mp1)
+     o          ,da1,phi1,mp1,phi21,d1a1,dam1,sij1       !RomP
+     o          ,elij1,clw1,epmlmMm1,eplaMm1             !RomP 
+     o          ,wdtrainA1,wdtrainM1)                    !RomP 
       endif
 
@@ -632,4 +655,5 @@
 9999  continue
 
+      print *, 'fin cv_driver ->'      !jyg
       return
       end
Index: LMDZ5/branches/testing/libf/phylmd/cva_driver.F
===================================================================
--- LMDZ5/branches/testing/libf/phylmd/cva_driver.F	(revision 1707)
+++ LMDZ5/branches/testing/libf/phylmd/cva_driver.F	(revision 1750)
@@ -21,7 +21,7 @@
      &                   Plim11,Plim21,asupmax1,supmax01,asupmaxmin1
      &                   ,lalim_conv, 
-!AC!
-     &                   da1,phi1)
-!AC!
+     &                   da1,phi1,mp1,phi21,d1a1,dam1,sigij1,clw1,     ! RomP
+     &                   elij1,evap1,ep1,                              ! RomP 
+     &                   wdtrainA1,wdtrainM1)                          ! RomP
 ***************************************************************
 *                                                             *
@@ -175,6 +175,6 @@
 c
 !AC!
-      real da1(len,nd),phi1(len,nd,nd)
-      real da(len,nd),phi(len,nd,nd)
+!!      real da1(len,nd),phi1(len,nd,nd)
+!!      real da(len,nd),phi(len,nd,nd)
 !AC!
       real ftd1(len,nd)
@@ -186,4 +186,16 @@
       real asupmaxmin1(len)
       integer lalim_conv(len)
+! RomP >>> 
+      real wdtrainA1(len,nd), wdtrainM1(len,nd)
+      real wdtrainA(nloc,klev),wdtrainM(nloc,klev)
+      real da1(len,nd),phi1(len,nd,nd),mp1(len,nd)
+      real da(len,nd),phi(len,nd,nd)
+      real evap1(len,nd),ep1(len,nd)
+      real sigij1(len,nd,nd),elij1(len,nd,nd)
+      real phi2(len,nd,nd)
+      real d1a(len,nd), dam(len,nd)
+      real phi21(len,nd,nd)
+      real d1a1(len,nd), dam1(len,nd)
+! RomP <<<
 !-------------------------------------------------------------------
 ! --- ARGUMENTS
@@ -397,5 +409,5 @@
       real cin(nloc)
       real m(nloc,klev)
-      real ment(nloc,klev,klev), sij(nloc,klev,klev)
+      real ment(nloc,klev,klev), sigij(nloc,klev,klev)
       real qent(nloc,klev,klev)
       real hent(nloc,klev,klev)
@@ -505,5 +517,5 @@
       call  zilch(cbmf1   ,nword1)
       call  zilch(ptop21  ,nword1)
-      sigd1=0.
+      sigd1(:)=0.
       call  zilch(Ma1     ,nword2)
       call  zilch(mip1    ,nword2)
@@ -771,5 +783,5 @@
      :                       ,unk,vnk,hp,tv,tvp,ep,clw,sig
      :                    ,ment,qent,hent,uent,vent,nent
-     :                   ,sij,elij,supmax,ments,qents,traent)
+     :                   ,sigij,elij,supmax,ments,qents,traent)
 !        print*, 'cv3p_mixing-> supmax ', (supmax(1,k), k=1,nd)
       
@@ -828,5 +840,5 @@
      :                       ,ph,t,q,qs,u,v,tra,h,lv,qnk
      :                       ,unk,vnk,hp,tv,tvp,ep,clw,m,sig
-     o   ,ment,qent,uent,vent,nent,sij,elij,ments,qents,traent)
+     o   ,ment,qent,uent,vent,nent,sigij,elij,ments,qents,traent)
          CALL zilch(hent,nloc*klev*klev)
         ELSE
@@ -842,5 +854,5 @@
      :                     ,ph,t,q,qs,u,v,h,lv,qnk
      :                     ,hp,tv,tvp,ep,clw,cbmf
-     o                     ,m,ment,qent,uent,vent,nent,sij,elij)
+     o                     ,m,ment,qent,uent,vent,nent,sigij,elij)
       endif
 c
@@ -865,5 +877,6 @@
      :               ,ep,sigp,clw
      :               ,m,ment,elij,delt,plcl,coef_clos
-     o          ,mp,qp,up,vp,trap,wt,water,evap,b,sigd)
+     o          ,mp,qp,up,vp,trap,wt,water,evap,b,sigd
+     o          ,wdtrainA,wdtrainM)   ! RomP
       endif
      
@@ -925,6 +938,9 @@
 
       if (iflag_con.eq.3) then
+!RomP >>>
        CALL cv3_tracer(nloc,len,ncum,nd,nd,
-     :                  ment,sij,da,phi)
+     :                  ment,sigij,da,phi,phi2,d1a,dam,
+     :                  ep,Vprecip,elij,clw,icb,inb)
+!RomP <<<
       endif
 
@@ -947,7 +963,7 @@
      :          ,Plim1,Plim2,asupmax,supmax0
      :          ,asupmaxmin
-!AC!
-     :          ,da,phi
-!AC!
+     :          ,da,phi,mp,phi2,d1a,dam,sigij         ! RomP
+     :          ,wdtrainA,wdtrainM,elij,clw           ! RomP
+     :          ,evap,ep                              ! RomP
      o          ,iflag1,kbas1,ktop1
      o          ,precip1,cbmf1,plcl1,plfc1,wbeff1,sig1,w01,ptop21
@@ -959,7 +975,7 @@
      o          ,Plim11,Plim21,asupmax1,supmax01
      o          ,asupmaxmin1
-!AC!
-     o          ,da1,phi1)
-!AC!
+     o          ,da1,phi1,mp1,phi21,d1a1,dam1,sigij1  ! RomP
+     o          ,wdtrainA1,wdtrainM1,elij1,clw1       ! RomP
+     o          ,evap1,ep1)                           ! RomP
       endif
 
Index: LMDZ5/branches/testing/libf/phylmd/cvltr.F90
===================================================================
--- LMDZ5/branches/testing/libf/phylmd/cvltr.F90	(revision 1707)
+++ LMDZ5/branches/testing/libf/phylmd/cvltr.F90	(revision 1750)
@@ -2,14 +2,24 @@
 ! $Id $
 !
-SUBROUTINE cvltr(pdtime,da, phi, mp,paprs,pplay,x,upd,dnd,dx)
+SUBROUTINE cvltr(pdtime, da, phi,phi2,d1a,dam, mpIN,epIN, &
+           sigd,sij,clw,elij,epmlmMm,eplaMm,              &
+           pmflxrIN,pmflxsIN,ev,te,wdtrainA,wdtrainM,     &
+           paprs,it,tr,upd,dnd,inb,icb,                   &
+           dtrcv,trsptd,dtrSscav,dtrsat,dtrUscav,qDi,qPr, &
+           qPa,qMel,qTrdi,dtrcvMA,Mint,                   &
+           zmfd1a,zmfphi2,zmfdam)
+  USE IOIPSL 
   USE dimphy
+  USE infotrac, ONLY : nbtr,tname
   IMPLICIT NONE 
 !=====================================================================
 ! Objet : convection des traceurs / KE
 ! Auteurs: M-A Filiberti and J-Y Grandpeix
+! modifiee par R Pilon : lessivage des traceurs / KE
 !=====================================================================
 
   include "YOMCST.h"
-  include "YOECUMF.h" 
+  include "YOECUMF.h"
+  include "conema3.h"
 
 ! Entree
@@ -17,22 +27,232 @@
   REAL,DIMENSION(klon,klev),INTENT(IN)      :: da
   REAL,DIMENSION(klon,klev,klev),INTENT(IN) :: phi
-  REAL,DIMENSION(klon,klev),INTENT(IN)      :: mp
-  REAL,DIMENSION(klon,klev+1),INTENT(IN)    :: paprs ! pression aux 1/2 couches (bas en haut)
-  REAL,DIMENSION(klon,klev),INTENT(IN)      :: pplay ! pression pour le milieu de chaque couche
-  REAL,DIMENSION(klon,klev),INTENT(IN)      :: x     ! q de traceur (bas en haut) 
+! RomP
+  REAL,DIMENSION(klon,klev),INTENT(IN)      :: d1a,dam ! matrices pour simplifier
+  REAL,DIMENSION(klon,klev,klev),INTENT(IN) :: phi2    ! l'ecriture des tendances
+!
+  REAL,DIMENSION(klon,klev),INTENT(IN)      :: mpIN
+  REAL,DIMENSION(klon,klev+1),INTENT(IN)    :: paprs  ! pression aux 1/2 couches (bas en haut)
+!  REAL,DIMENSION(klon,klev),INTENT(IN)    :: pplay ! pression aux 1/2 couches (bas en haut)
+  REAL,DIMENSION(klon,klev,nbtr),INTENT(IN) :: tr     ! q de traceur (bas en haut)
+  INTEGER,INTENT(IN)                        :: it 
   REAL,DIMENSION(klon,klev),INTENT(IN)      :: upd   ! saturated updraft mass flux
   REAL,DIMENSION(klon,klev),INTENT(IN)      :: dnd   ! saturated downdraft mass flux
-
+!
+  REAL,DIMENSION(klon,klev),INTENT(IN)      :: wdtrainA   ! masses precipitantes de l'asc adiab
+  REAL,DIMENSION(klon,klev),INTENT(IN)      :: wdtrainM   ! masses precipitantes des melanges
+  REAL,DIMENSION(klon,klev),INTENT(IN)      :: pmflxrIN   ! vprecip: eau
+  REAL,DIMENSION(klon,klev),INTENT(IN)      :: pmflxsIN   ! vprecip: neige
+  REAL,DIMENSION(klon,klev),INTENT(IN)      :: ev         ! evaporation cv30_routine
+  REAL,DIMENSION(klon,klev),INTENT(IN)      :: epIN
+  REAL,DIMENSION(klon,klev),INTENT(IN)      :: te 
+  REAL,DIMENSION(klon,klev,klev),INTENT(IN) :: sij        ! fraction dair de lenv
+  REAL,DIMENSION(klon,klev,klev),INTENT(IN) :: elij       ! contenu en eau condensée spécifique/conc deau condensée massique
+  REAL,DIMENSION(klon,klev,klev),INTENT(IN) :: epmlmMm    ! eau condensee precipitee dans mel masse dair sat
+  REAL,DIMENSION(klon,klev),INTENT(IN)      :: eplaMm    ! eau condensee precipitee dans aa masse dair sat
+
+  REAL,DIMENSION(klon,klev),INTENT(IN)      :: clw        ! contenu en eau condensée dans lasc adiab
+  REAL,DIMENSION(klon),INTENT(IN)           :: sigd
+  INTEGER,DIMENSION(klon),INTENT(IN)        :: icb,inb
 ! Sortie
-  REAL,DIMENSION(klon,klev),INTENT(OUT) :: dx ! tendance de traceur  (bas en haut)
-
-! Variables locales     
-! REAL,DIMENSION(klon,klev)       :: zed
-  REAL,DIMENSION(klon,klev,klev)  :: zmd
-  REAL,DIMENSION(klon,klev,klev)  :: za
-  REAL,DIMENSION(klon,klev)       :: zmfd,zmfa
-  REAL,DIMENSION(klon,klev)       :: zmfp,zmfu
-  INTEGER                         :: i,k,j 
-  REAL                            :: pdtimeRG
+  REAL,DIMENSION(klon,klev,nbtr),INTENT(OUT)     :: dtrcv     ! tendance totale (bas en haut)
+  REAL,DIMENSION(klon,klev,nbtr),INTENT(OUT)     :: dtrcvMA ! M-A Filiberti
+  REAL,DIMENSION(klon,klev,nbtr),INTENT(OUT)     :: trsptd    ! tendance du transport 
+  REAL,DIMENSION(klon,klev,nbtr),INTENT(OUT)     :: dtrSscav  ! tendance du lessivage courant sat
+  REAL,DIMENSION(klon,klev,nbtr),INTENT(OUT)     :: dtrsat    ! tendance trsp+sat scav
+  REAL,DIMENSION(klon,klev,nbtr),INTENT(OUT)     :: dtrUscav  ! tendance du lessivage courant unsat
+!
+! Variables locales
+  INTEGER                           :: i,j,k
+  REAL,DIMENSION(klon,klev)         :: dxpres   ! difference de pression entre niveau (j+1) et (j)
+  REAL                              :: pdtimeRG ! pas de temps * gravite
+! variables pour les courants satures
+  REAL,DIMENSION(klon,klev,klev)    :: zmd
+  REAL,DIMENSION(klon,klev,klev)    :: za
+  REAL,DIMENSION(klon,klev,nbtr)    :: zmfd,zmfa
+  REAL,DIMENSION(klon,klev,nbtr)    :: zmfp,zmfu
+
+  REAL,DIMENSION(klon,klev,nbtr),INTENT(OUT)    :: zmfd1a
+  REAL,DIMENSION(klon,klev,nbtr),INTENT(OUT)    :: zmfdam
+  REAL,DIMENSION(klon,klev,nbtr),INTENT(OUT)    :: zmfphi2
+
+! RomP ! les variables sont nettoyees des valeurs aberrantes
+  REAL,DIMENSION(klon,klev)         :: Pa, Pm  ! pluie AA et mélanges, var temporaire
+  REAL,DIMENSION(klon,klev)         :: pmflxs,pmflxr ! pmflxrIN,pmflxsIN sans valeur aberante
+  REAL,DIMENSION(klon,klev)         :: mp            ! flux de masse
+  REAL,DIMENSION(klon,klev)         :: ep            ! fraction d'eau convertie en precipitation 
+  REAL,DIMENSION(klon,klev)         :: evap          ! evaporation : variable temporaire 
+  REAL,DIMENSION(klon,klev)         :: rho    !environmental density
+
+  REAL,DIMENSION(klon,klev)         :: kappa ! denominateur du au calcul de la matrice 
+                                             ! pour obtenir qd et qp
+  REAL,DIMENSION(klon,klev,nbtr),INTENT(OUT)    :: qTrdi ! traceurs descente air insature transport MA
+  REAL,DIMENSION(klon,klev,nbtr),INTENT(OUT)    :: qDi  ! traceurs descente insaturees
+  REAL,DIMENSION(klon,klev,nbtr),INTENT(OUT)    :: qPr  ! traceurs colonne precipitante
+  REAL,DIMENSION(klon,klev,nbtr),INTENT(OUT)    :: qPa  ! traceurs dans les precip issues lasc. adiab.
+  REAL,DIMENSION(klon,klev,nbtr),INTENT(OUT)    :: qMel ! traceurs dans les precip issues des melanges
+  REAL,DIMENSION(klon,klev,nbtr)                :: qMeltmp ! variable temporaire 
+  REAL,DIMENSION(klon,klev,nbtr)                :: qpmMint
+  REAL,DIMENSION(klon,klev),INTENT(OUT)         :: Mint
+! tendances
+  REAL                              :: tdcvMA           ! terme de transport de traceur (schema Marie Angele)
+  REAL                              :: trsptrac         ! terme de transport de traceur par l'air
+  REAL                              :: scavtrac         ! terme de lessivage courant sature
+  REAL                              :: uscavtrac        ! terme de lessivage courant insature
+! impaction
+!!!       Correction apres discussion Romain P. / Olivier B. 
+!!!  REAL,PARAMETER                    :: rdrop=2.5e-3     ! rayon des gouttes d'eau
+  REAL,PARAMETER                    :: rdrop=1.e-3     ! rayon des gouttes d'eau 
+!!!
+  REAL,DIMENSION(klon,klev)         :: imp              ! coefficient d'impaction
+! parametres lessivage
+  REAL                    :: ccntrAA_coef        ! \alpha_a : fract aerosols de l'AA convertis en CCN
+  REAL                    :: ccntrENV_coef       ! \beta_m  : fract aerosols de l'env convertis en CCN
+  REAL                    :: coefcoli            ! coefficient de collision des gouttes sur les aerosols
+!
+  LOGICAL,DIMENSION(klon,klev) :: NO_precip
+!  LOGICAL                      :: scavON
+! var tmp tests
+  REAL                           :: conserv
+  real                           :: conservMA
+
+! coefficient lessivage
+   ccntrAA_coef     = 0.
+   ccntrENV_coef    = 0.
+   coefcoli         = 0.
+
+  call getin('ccntrAA_coef',ccntrAA_coef)
+  call getin('ccntrENV_coef',ccntrENV_coef)
+  call getin('coefcoli',coefcoli)
+  print*,'cvltr coef lessivage convectif', ccntrAA_coef,ccntrENV_coef,coefcoli
+
+!  scavON=.TRUE.
+!  if(scavON) then
+!   ccntrAA_coef     = 1.
+!   ccntrENV_coef    = 1.
+!   coefcoli         = 1.
+!  else
+!   ccntrAA_coef     = 0.
+!   ccntrENV_coef    = 0.
+!   coefcoli         = 0.
+!  endif
+
+! ======================================================
+! calcul de l'impaction
+! ======================================================
+!initialisation
+  do j=1,klev
+   do i=1,klon
+     imp(i,j)=0.
+   enddo
+  enddo
+! impaction sur la surface de la colonne de la descente insaturee
+! On prend la moyenne des precip entre le niveau i+1 et i
+! I=3/4* (P(1+1)+P(i))/2 / (sigd*r*rho_l)
+!  1000kg/m3= densité de l'eau
+! 0.75e-3 = 3/4 /1000
+! Par la suite, I est tout le temps multiplié par sig_d pour avoir l'impaction sur la surface de la maille
+! on le néglige ici pour simplifier le code
+  do j=1,klev-1
+   do i=1,klon
+    imp(i,j) = coefcoli*0.75e-3/rdrop *&
+             0.5*(pmflxr(i,j+1)+pmflxs(i,j+1)+pmflxr(i,j)+pmflxs(i,j))
+!    rho(i,j)=pplay(i,j)/(rd*te(i,j))
+   enddo
+  enddo
+!
+! initialisation pour flux de traceurs, td et autre
+   trsptrac = 0.
+   scavtrac = 0.
+   uscavtrac = 0.
+
+  DO j=1,klev
+   DO i=1,klon
+    zmfd(i,j,it)=0.
+    zmfa(i,j,it)=0.
+    zmfu(i,j,it)=0.
+    zmfp(i,j,it)=0.
+    zmfphi2(i,j,it)=0.
+    zmfd1a(i,j,it)=0.
+    zmfdam(i,j,it)=0.
+    qDi(i,j,it)=0.
+    qPr(i,j,it)=0.
+    qPa(i,j,it)=0.
+    qMel(i,j,it)=0.
+    qMeltmp(i,j,it)=0.
+    qTrdi(i,j,it)=0.
+    kappa(i,j)=0.
+    trsptd(i,j,it)=0.
+    dtrsat(i,j,it)=0.
+    dtrSscav(i,j,it)=0.
+    dtrUscav(i,j,it)=0.
+    dtrcv(i,j,it)=0.
+    dtrcvMA(i,j,it)=0.
+    evap(i,j)=0.
+    dxpres(i,j)=0.
+    qpmMint(i,j,it)=0.
+    Mint(i,j)=0.
+   END DO
+  END DO
+
+! suppression des valeurs très faibles (~1e-320)
+! multiplication de levaporation pour lavoir par unite de temps
+! et par unite de surface de la maille
+! -> cv30_unsat : evap : masse evaporee/s/(m2 de la descente)
+  DO j=1,klev
+   DO i=1,klon
+    if(ev(i,j).lt.1.e-16) then
+     evap(i,j)=0.
+    else
+     evap(i,j)=ev(i,j)*sigd(i)
+    endif
+   END DO
+  END DO
+
+  DO j=1,klev
+   DO i=1,klon
+   if(j.lt.klev) then
+    if(epIN(i,j).lt.1.e-32) then
+     ep(i,j)=0.
+    else
+     ep(i,j)=epIN(i,j)
+    endif
+   else
+    ep(i,j)=epmax
+   endif
+    if(mpIN(i,j).lt.1.e-32) then
+     mp(i,j)=0.
+    else
+     mp(i,j)=mpIN(i,j)
+    endif
+    if(pmflxsIN(i,j).lt.1.e-32) then
+     pmflxs(i,j)=0.
+    else
+     pmflxs(i,j)=pmflxsIN(i,j)
+    endif
+    if(pmflxrIN(i,j).lt.1.e-32) then
+     pmflxr(i,j)=0.
+    else
+     pmflxr(i,j)=pmflxrIN(i,j)
+    endif
+    if(wdtrainA(i,j).lt.1.e-32) then
+     Pa(i,j)=0.
+    else
+     Pa(i,j)=wdtrainA(i,j)
+    endif
+    if(wdtrainM(i,j).lt.1.e-32) then
+     Pm(i,j)=0.
+    else
+     Pm(i,j)=wdtrainM(i,j)
+    endif
+   END DO
+  END DO
+
+!==========================================
+  DO j = klev-1,1,-1
+   DO i = 1,klon
+     NO_precip(i,j) = (pmflxr(i,j+1)+pmflxs(i,j+1)).lt.1.e-10&
+                    .and.Pa(i,j).lt.1.e-10.and.Pm(i,j).lt.1.e-10
+   END DO
+  END DO
 
 ! =========================================
@@ -40,35 +260,18 @@
 ! =========================================
 !cdir collapse
-  DO j=1,klev
-  DO i=1,klon
-!   zed(i,j)=0.
-    zmfd(i,j)=0.
-    zmfa(i,j)=0.
-    zmfu(i,j)=0.
-    zmfp(i,j)=0.
-  END DO
-  END DO
-!cdir collapse
   DO k=1,klev
-  DO j=1,klev
-  DO i=1,klon
-    zmd(i,j,k)=0.
-    za (i,j,k)=0.
-  END DO
-  END DO
-  END DO
-! 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
-
+   DO j=1,klev
+    DO i=1,klon
+     zmd(i,j,k)=0.
+     za (i,j,k)=0.
+    END DO
+   END DO
+  END DO
 ! calcul de la matrice d echange
 ! matrice de distribution de la masse entrainee en k
-
+! commmentaire RomP : mp > 0
   DO k=1,klev-1
      DO i=1,klon
-        zmd(i,k,k)=max(0.,mp(i,k)-mp(i,k+1))
+        zmd(i,k,k)=max(0.,mp(i,k)-mp(i,k+1))   ! ~ mk(k)
      END DO
   END DO
@@ -76,6 +279,6 @@
      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))
+           if(mp(i,j+1).gt.1.e-10) then
+              zmd(i,j,k)=zmd(i,j+1,k)*min(1.,mp(i,j)/mp(i,j+1)) !det ~ mk(j)=mk(j+1)*mp(i,j)/mp(i,j+1)
            ENDif
         END DO
@@ -89,4 +292,17 @@
      END DO
   END DO
+!!!!! quantite  de traceur dans la descente d'air insaturee  :   4 juin 2012
+  DO k=1,klev
+     DO j=1,klev-1
+        DO i=1,klon
+        if(mp(i,j+1).gt.1.e-10) then
+          qTrdi(i,j+1,it)=qTrdi(i,j+1,it)+(zmd(i,j+1,k)/mp(i,j+1))*tr(i,k,it)
+        else
+          qTrdi(i,j,it)=0.!tr(i,j,it)
+        endif
+        ENDDO
+     ENDDO
+  ENDDO
+!!!!!
 !
 ! rajout du terme lie a l ascendance induite
@@ -98,10 +314,10 @@
   END DO
 !
-! tendances
-!            
+! tendance courants insatures  ! sans lessivage ancien schema
+!
   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))
+           zmfd(i,j,it)=zmfd(i,j,it)+za(i,j,k)*(tr(i,k,it)-tr(i,j,it))
         END DO
      END DO
@@ -109,9 +325,9 @@
 !
 ! =========================================
-! calcul des tendances liees aux flux satures
+! calcul des tendances liees aux courants satures   j <-> z ; k <-> z'
 ! =========================================
   DO j=1,klev
      DO i=1,klon
-        zmfa(i,j)=da(i,j)*(x(i,1)-x(i,j))
+        zmfa(i,j,it)=da(i,j)*(tr(i,1,it)-tr(i,j,it))                     ! da
      END DO
   END DO
@@ -119,5 +335,19 @@
      DO j=1,klev
         DO i=1,klon
-           zmfp(i,j)=zmfp(i,j)+phi(i,j,k)*(x(i,k)-x(i,j))
+           zmfp(i,j,it)=zmfp(i,j,it)+phi(i,j,k)*(tr(i,k,it)-tr(i,j,it))  ! phi
+        END DO
+     END DO
+  END DO
+! RomP ajout des matrices liees au lessivage
+  DO j=1,klev
+     DO i=1,klon
+        zmfd1a(i,j,it)=d1a(i,j)*tr(i,1,it)   ! da1
+        zmfdam(i,j,it)=dam(i,j)*tr(i,1,it)   ! dam
+     END DO
+  END DO
+  DO k=1,klev
+     DO j=1,klev
+        DO i=1,klon
+          zmfphi2(i,j,it)=zmfphi2(i,j,it)+phi2(i,j,k)*tr(i,k,it)  ! psi
         END DO
      END DO
@@ -125,40 +355,322 @@
   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))
+        zmfu(i,j,it)=max(0.,upd(i,j+1)+dnd(i,j+1))*(tr(i,j+1,it)-tr(i,j,it))
      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
-
-! =========================================
-! calcul final des tendances
-! =========================================
+        zmfu(i,j,it)=zmfu(i,j,it)+min(0.,upd(i,j)+dnd(i,j))*(tr(i,j,it)-tr(i,j-1,it))
+     END DO
+  END DO
+! ===================================================
+! calcul des tendances liees aux courants insatures
+! ===================================================
+!  pression  
   DO k=1, klev
      DO i=1, klon
-        dx(i,k)=paprs(i,k)-paprs(i,k+1)
+        dxpres(i,k)=paprs(i,k)-paprs(i,k+1)
      ENDDO
   ENDDO
   pdtimeRG=pdtime*RG
-!cdir collapse
-  DO k=1, klev
-     DO i=1, klon
-        dx(i,k)=(zmfd(i,k)+zmfu(i,k)       &
-                +zmfa(i,k)+zmfp(i,k))*pdtimeRG/dx(i,k)
-        !          print*,'dx',k,dx(i,k)
+
+! q_pa et q_pm    traceurs issues des courants satures se retrouvant dans les precipitations
+  DO j=1,klev
+     DO i=1,klon
+        if(j.ge.icb(i).and.j.le.inb(i)) then
+          if(clw(i,j).gt.1.e-16) then
+           qPa(i,j,it)=ccntrAA_coef*tr(i,1,it)/clw(i,j)
+          else
+           qPa(i,j,it)=0.
+          endif
+        endif
+     END DO
+  END DO
+
+! calcul de q_pm en 2 parties :
+! 1) calcul de sa valeur pour un niveau z' donne
+! 2) integration sur la verticale sur z'
+     DO j=1,klev
+      DO k=1,j-1
+        DO i=1,klon
+        if(k.ge.icb(i).and.k.le.inb(i).and.& 
+           j.le.inb(i)) then
+            if(elij(i,k,j).gt.1.e-16) then
+             qMeltmp(i,j,it)=((1-ep(i,k))*ccntrAA_coef*tr(i,1,it)&
+                         *(1.-sij(i,k,j))  +ccntrENV_coef&
+                         *tr(i,k,it)*sij(i,k,j)) / elij(i,k,j)
+            else
+             qMeltmp(i,j,it)=0.
+            endif
+          qpmMint(i,j,it)=qpmMint(i,j,it) + qMeltmp(i,j,it)*epmlmMm(i,j,k)
+          Mint(i,j)=Mint(i,j) + epmlmMm(i,j,k)
+        endif ! end if dans nuage
+        END DO
+     END DO
+  END DO
+
+     DO j=1,klev
+        DO i=1,klon
+          if(Mint(i,j).gt.1.e-16) then
+           qMel(i,j,it)=qpmMint(i,j,it)/Mint(i,j)
+          else
+           qMel(i,j,it)=0.
+          endif
+     END DO
+  END DO
+
+! calcul de q_d et q_p    traceurs de la descente precipitante 
+   DO j=klev-1,1,-1
+    DO i=1,klon
+     if(mp(i,j+1).gt.mp(i,j).and.mp(i,j+1).gt.1.e-10) then  ! detrainement
+       kappa(i,j)=((pmflxr(i,j+1)+pmflxs(i,j+1)+Pa(i,j)+Pm(i,j))*&
+                (-mp(i,j+1)-imp(i,j)/RG*dxpres(i,j))&
+                + (imp(i,j)/RG*dxpres(i,j))*(evap(i,j)/RG*dxpres(i,j)))
+             
+     elseif(mp(i,j).gt.mp(i,j+1).and.mp(i,j).gt.1.e-10) then! entrainement
+       if(j.eq.1) then
+        kappa(i,j)=((pmflxr(i,j+1)+pmflxs(i,j+1)+Pa(i,j)+Pm(i,j))*&
+                 (-mp(i,2)-imp(i,j)/RG*dxpres(i,j))&
+                 + (imp(i,j)/RG*dxpres(i,j))*(evap(i,j)/RG*dxpres(i,j)))
+       else
+        kappa(i,j)=((pmflxr(i,j+1)+pmflxs(i,j+1)+Pa(i,j)+Pm(i,j))*&
+                 (-mp(i,j)-imp(i,j)/RG*dxpres(i,j))&
+                 + (imp(i,j)/RG*dxpres(i,j))*(evap(i,j)/RG*dxpres(i,j)))
+       endif
+      else
+        kappa(i,j)=1.
+      endif
+    ENDDO
+   ENDDO
+
+  DO j=klev-1,1,-1
+   DO i=1,klon
+    if (abs(kappa(i,j)).lt.1.e-25) then    !si denominateur nul (il peut y avoir des mp!=0)
+     kappa(i,j)=1.
+     if(j.eq.1) then
+       qDi(i,j,it)=qDi(i,j+1,it) !orig tr(i,j,it)   ! mp(1)=0 donc tout vient de la couche supérieure
+     elseif(mp(i,j+1).gt.mp(i,j).and.mp(i,j+1).gt.1.e-10) then
+       qDi(i,j,it)=qDi(i,j+1,it)
+     elseif(mp(i,j).gt.mp(i,j+1).and.mp(i,j).gt.1.e-10) then! entrainement
+       qDi(i,j,it)=(-mp(i,j+1)*(qDi(i,j+1,it)-tr(i,j,it))-mp(i,j)*tr(i,j,it))/(-mp(i,j))
+     else  ! si  mp (i)=0 et mp(j+1)=0
+       qDi(i,j,it)=tr(i,j,it) ! orig 0.
+     endif 
+
+      if(NO_precip(i,j)) then
+       qPr(i,j,it)=0.
+      else
+       qPr(i,j,it)=((pmflxr(i,j+1)+pmflxs(i,j+1))*qPr(i,j+1,it)+&
+                   Pa(i,j)*qPa(i,j,it)+Pm(i,j)*qMel(i,j,it)&
+                   +imp(i,j)/RG*dxpres(i,j)*qDi(i,j,it))/&
+                  (pmflxr(i,j+1)+pmflxs(i,j+1)+Pa(i,j)+Pm(i,j))
+      endif
+    else   !     denominateur non nul
+     kappa(i,j)=1./kappa(i,j)     
+! calcul de qd et qp
+!!jyg  (20130119) correction pour le sommet du nuage
+!!     if(j.ge.inb(i)) then       !au-dessus du nuage, sommet inclu
+     if(j.gt.inb(i)) then       !au-dessus du nuage
+       qDi(i,j,it)=tr(i,j,it)   ! pas de descente => environnement = descente insaturee
+       qPr(i,j,it)=0.
+
+!  vvv premiere couche du modele ou mp(1)=0  ! det tout le temps  vvv
+     elseif(j.eq.1) then 
+      if(mp(i,2).gt.1.e-10) then !mp(2) non nul -> detrainement (car mp(1) = 0) !ent pas possible
+       if(NO_precip(i,j)) then !pas de precip en (i)
+        qDi(i,j,it)=qDi(i,j+1,it)
+        qPr(i,j,it)=0.
+       else
+        qDi(i,j,it)=kappa(i,j)*(&
+            (-evap(i,j)/RG*dxpres(i,j))*((pmflxr(i,j+1)+pmflxs(i,j+1))*qPr(i,j+1,it)+&
+            Pa(i,j)*qPa(i,j,it)+Pm(i,j)*qMel(i,j,it)) +&
+            (pmflxr(i,j+1)+pmflxs(i,j+1)+Pa(i,j)+Pm(i,j))*&
+            (-mp(i,j+1)*qDi(i,j+1,it)))
+
+        qPr(i,j,it)=kappa(i,j)*(&
+            (-mp(i,j+1)-imp(i,j)/RG*dxpres(i,j))*&
+            ((pmflxr(i,j+1)+pmflxs(i,j+1))*qPr(i,j+1,it)+&
+            Pa(i,j)*qPa(i,j,it)+Pm(i,j)*qMel(i,j,it))&
+            +(-mp(i,j+1)*qDi(i,j+1,it)) * (imp(i,j)/RG*dxpres(i,j)))
+       endif
+
+      else !mp(2) nul -> plus de descente insaturee -> pluie agit sur environnement
+        qDi(i,j,it)=tr(i,j,it) ! orig 0.
+        if(NO_precip(i,j)) then
+         qPr(i,j,it)=0.
+        else
+         qPr(i,j,it)=((pmflxr(i,j+1)+pmflxs(i,j+1))*qPr(i,j+1,it)+&
+                   Pa(i,j)*qPa(i,j,it)+Pm(i,j)*qMel(i,j,it)&
+                   +imp(i,j)/RG*dxpres(i,j)*tr(i,j,it))/&
+                  (pmflxr(i,j+1)+pmflxs(i,j+1)+Pa(i,j)+Pm(i,j))
+        endif
+
+      endif  !mp(2) nul ou non
+
+! vvv  (j!=1.and.j.lt.inb(i))  en-dessous du sommet nuage   vvv
+     else 
+!------------------------------------------------------------- detrainement 
+      if(mp(i,j+1).gt.mp(i,j).and.mp(i,j+1).gt.1.e-10) then !mp(i,j).gt.1.e-10) then
+         if(NO_precip(i,j)) then 
+          qDi(i,j,it)=qDi(i,j+1,it)
+          qPr(i,j,it)=0.
+         else
+          qDi(i,j,it)=kappa(i,j)*(&
+            (-evap(i,j)/RG*dxpres(i,j))*((pmflxr(i,j+1)+pmflxs(i,j+1))*qPr(i,j+1,it)+&
+            Pa(i,j)*qPa(i,j,it)+Pm(i,j)*qMel(i,j,it)) +&
+            (pmflxr(i,j+1)+pmflxs(i,j+1)+Pa(i,j)+Pm(i,j))*&
+            (-mp(i,j+1)*qDi(i,j+1,it)))
+!
+          qPr(i,j,it)=kappa(i,j)*(&
+            (-mp(i,j+1)-imp(i,j)/RG*dxpres(i,j))*&
+            ((pmflxr(i,j+1)+pmflxs(i,j+1))*qPr(i,j+1,it)+&
+            Pa(i,j)*qPa(i,j,it)+Pm(i,j)*qMel(i,j,it))&
+            +(-mp(i,j+1)*qDi(i,j+1,it)) * (imp(i,j)/RG*dxpres(i,j)))
+         endif !precip
+!------------------------------------------------------------- entrainement 
+      elseif(mp(i,j).gt.mp(i,j+1).and.mp(i,j).gt.1.e-10) then 
+         if(NO_precip(i,j)) then
+          qDi(i,j,it)=(-mp(i,j+1)*(qDi(i,j+1,it)-tr(i,j,it))-mp(i,j)*tr(i,j,it))/(-mp(i,j))
+          qPr(i,j,it)=0.
+         else
+          qDi(i,j,it)=kappa(i,j)*(&
+            (-evap(i,j)/RG*dxpres(i,j))*((pmflxr(i,j+1)+pmflxs(i,j+1))*qPr(i,j+1,it)+&
+            Pa(i,j)*qPa(i,j,it)+Pm(i,j)*qMel(i,j,it)) +&
+            (pmflxr(i,j+1)+pmflxs(i,j+1)+Pa(i,j)+Pm(i,j))*&
+            (-mp(i,j+1)*(qDi(i,j+1,it)-tr(i,j,it))-mp(i,j)*tr(i,j,it)))
+!
+          qPr(i,j,it)=kappa(i,j)*(&
+            (-mp(i,j)-imp(i,j)/RG*dxpres(i,j))*&
+            ((pmflxr(i,j+1)+pmflxs(i,j+1))*qPr(i,j+1,it)+&
+            Pa(i,j)*qPa(i,j,it)+Pm(i,j)*qMel(i,j,it))&
+            +(-mp(i,j+1)*(qDi(i,j+1,it)-tr(i,j,it))-mp(i,j)*tr(i,j,it))*&
+            (imp(i,j)/RG*dxpres(i,j)))
+         endif !precip
+!------------------------------------------------------------- endif ! ent/det
+      else  !mp nul
+        qDi(i,j,it)=tr(i,j,it) ! orig 0.
+        if(NO_precip(i,j)) then
+         qPr(i,j,it)=0.
+        else
+         qPr(i,j,it)=((pmflxr(i,j+1)+pmflxs(i,j+1))*qPr(i,j+1,it)+&
+                   Pa(i,j)*qPa(i,j,it)+Pm(i,j)*qMel(i,j,it)&
+                   +imp(i,j)/RG*dxpres(i,j)*tr(i,j,it))/&
+                  (pmflxr(i,j+1)+pmflxs(i,j+1)+Pa(i,j)+Pm(i,j))
+        endif
+      endif ! mp nul ou non
+     endif ! condition sur j
+    endif ! kappa
+   ENDDO
+  ENDDO
+
+!! print test descente insaturee
+!  DO j=klev,1,-1
+!   DO i=1,klon
+!     if(it.eq.3) then
+!   write(*,'(I2,2X,a,e20.12,2X,a,e20.12,2X,a,e20.12,2X,a,e20.12,2X,a,e20.12,2X,a,e20.12,2X,a,e20.12)') j,&
+!!         'zmfdam',zmfdam(i,j,it),'zmfpsi',zmfphi2(i,j,it),&
+!          'zmfdam+zmfpsi',zmfdam(i,j,it)+zmfphi2(i,j,it),'qpmMint',qpmMint(i,j,it),&
+!          'Pm',Pm(i,j),'Mint',Mint(i,j),&
+!!          'zmfa',zmfa(i,j,it),'zmfp',zmfp(i,j,it),&
+!        'zmfdam',zmfdam(i,j,it),'zmfpsi',zmfphi2(i,j,it),'zmfd1a',zmfd1a(i,j,it)
+!!          'Pa',Pa(i,j),'eplaMm',eplaMm(i,j)
+!!         'zmfd1a=da1*qa',zmfd1a(i,j,it),'Pa*qPa',wdtrainA(i,j)*qPa(i,j,it),'da1',d1a(i,j)
+!     endif
+!   ENDDO
+!  ENDDO
+
+
+! ===================================================
+! calcul final des tendances
+! ===================================================
+
+  DO k=klev-1,1,-1
+    DO i=1, klon
+! transport
+     tdcvMA=zmfd(i,k,it)+zmfu(i,k,it)+zmfa(i,k,it)+zmfp(i,k,it)   ! double comptage des downdraft insatures
+     trsptrac=zmfu(i,k,it)+zmfa(i,k,it)+zmfp(i,k,it)
+! lessivage courants satures
+     scavtrac=-ccntrAA_coef*zmfd1a(i,k,it)&
+               -zmfphi2(i,k,it)*ccntrENV_coef&
+               -zmfdam(i,k,it)*ccntrAA_coef
+! lessivage courants insatures
+   if(k.le.inb(i).and.k.gt.1) then   ! tendances dans le nuage
+!------------------------------------------------------------- detrainement
+      if(mp(i,k+1).gt.mp(i,k).and.mp(i,k+1).gt.1.e-10) then
+        uscavtrac= (-mp(i,k)+mp(i,k+1))*(qDi(i,k,it)-tr(i,k,it))&
+                   + mp(i,k)*(tr(i,k-1,it)-tr(i,k,it))
+!
+!        if(it.eq.3) write(*,'(I2,1X,a,5X,e20.12,82X,a,e20.12)')k,' det incloud',&
+!                    (-mp(i,k)+mp(i,k+1))*(qDi(i,k,it)-tr(i,k,it))*pdtimeRG/dxpres(i,k)+&
+!                    mp(i,k)*(tr(i,k-1,it)-tr(i,k,it))*pdtimeRG/dxpres(i,k),&
+!                    'mp',mp(i,k)
+!------------------------------------------------------------- entrainement 
+      elseif(mp(i,k).gt.mp(i,k+1).and.mp(i,k).gt.1.e-10) then
+         uscavtrac= mp(i,k)*(tr(i,k-1,it)-tr(i,k,it))
+!
+!         if(it.eq.3) write(*,'(I2,1X,a,5X,e20.12,82X,a,e20.12)')k,' ent incloud',uscavtrac*pdtimeRG/dxpres(i,k), 'mp',mp(i,k)
+!=!------------------------------------------------------------- end ent/det 
+      else !        mp(i,k+1)=0. et mp(i,k)=0.    pluie directement sur l environnement
+
+        if(NO_precip(i,k)) then
+          uscavtrac=0.
+!         if(it.eq.3) write(*,'(I2,1X,a,e20.12,82X,a,e20.12)')k,' no P ent incloud',uscavtrac*pdtimeRG/dxpres(i,k), 'mp',mp(i,k)
+        else
+          uscavtrac=-imp(i,k)*tr(i,k,it)*dxpres(i,k)/RG+evap(i,k)*qPr(i,k,it)*dxpres(i,k)/RG
+!         if(it.eq.3) write(*,'(I2,1X,a,3X,e20.12,82X,a,e20.12)')k,' P env incloud',uscavtrac*pdtimeRG/dxpres(i,k), 'mp',mp(i,k)
+        endif
+      endif  ! mp/det/ent
+!------------------------------------------------------------- premiere couche 
+   elseif(k.eq.1) then  !                                      mp(1)=0.
+      if(mp(i,2).gt.1.e-10) then  !detrainement
+         uscavtrac= (-0.+mp(i,2))*(qDi(i,k,it)-tr(i,k,it)) !&
+!                   + mp(i,2)*(0.-tr(i,k,it))
+!
+!       if(it.eq.3) write(*,'(I2,1X,a,e20.12,84X,a,e20.12)')k,' 1 det',&
+!                  (-0.+mp(i,2))*(qDi(i,k,it)-tr(i,k,it))*pdtimeRG/dxpres(i,k)+&
+!                  mp(i,2)*(0.-tr(i,k,it))*pdtimeRG/dxpres(i,k),&
+!                   'mp',mp(i,k)
+      else   ! mp(2) = 0 = mp(1) pas de descente insaturee, rien ne se passe s'il ne pleut pas, sinon pluie->env
+        if(NO_precip(i,1)) then
+          uscavtrac=0.
+        else
+          uscavtrac=-imp(i,k)*tr(i,k,it)*dxpres(i,k)/RG+evap(i,k)*qPr(i,k,it)*dxpres(i,k)/RG
+        endif
+!         if(it.eq.3) write(*,'(I2,1X,a,2X,e20.12,82X,a,e20.12)')k,'1 P env incloud',uscavtrac*pdtimeRG/dxpres(i,k), 'mp',mp(i,k)
+      endif
+
+   else   ! k > INB  au-dessus du nuage
+    uscavtrac=0.
+   endif
+
+! =====    tendances finales  ======
+     trsptd(i,k,it)=trsptrac*pdtimeRG/dxpres(i,k)              ! td transport sans eau dans courants satures
+     dtrSscav(i,k,it)=scavtrac*pdtimeRG/dxpres(i,k)            ! td du lessivage dans courants satures
+     dtrUscav(i,k,it)=uscavtrac*pdtimeRG/dxpres(i,k)           ! td courant insat
+     dtrsat(i,k,it)=(trsptrac+scavtrac)*pdtimeRG/dxpres(i,k)   ! td courant sat
+     dtrcv(i,k,it)=(trsptrac+scavtrac+uscavtrac)*pdtimeRG/dxpres(i,k)!dtrsat(i,k,it)+dtrUscav(i,k,it)         td conv
+!!!!!!
+     dtrcvMA(i,k,it)=tdcvMA*pdtimeRG/dxpres(i,k) ! MA tendance convection
      ENDDO
   ENDDO
 
 ! test de conservation du traceur
+!print*,"_____________________________________________________________"
+!print*,"                                                             "
 !      conserv=0.
-!      DO k=1, klev
+!      conservMA=0.
+!      DO k= klev-1,1,-1
 !        DO i=1, klon
-!         conserv=conserv+dx(i,k)*   &
+!         conserv=conserv+dtrcv(i,k,it)*   &
 !        (paprs(i,k)-paprs(i,k+1))/RG
+!         conservMA=conservMA+dtrcvMA(i,k,it)*   &
+!        (paprs(i,k)-paprs(i,k+1))/RG
+!
+!      if(it.eq.3)  write(*,'(I2,2X,a,e20.12,2X,a,e20.12,2X,a,e20.12,2X,a,e20.12)') k,&
+!         'MA td ',dtrcvMA(i,k,it)*dxpres(i,k)/RG,&
+!         ' td',dtrcv(i,k,it)*dxpres(i,k)/RG,'         conservMA ',conservMA,'conserv ',conserv
+!!
 !        ENDDO
 !      ENDDO
-!      print *,'conserv',conserv
-     
+!       if(it.eq.3) print *,'it',it,'conserv ',conserv,'conservMA ',conservMA
+
 END SUBROUTINE cvltr
Index: LMDZ5/branches/testing/libf/phylmd/cvltrorig.F90
===================================================================
--- LMDZ5/branches/testing/libf/phylmd/cvltrorig.F90	(revision 1750)
+++ LMDZ5/branches/testing/libf/phylmd/cvltrorig.F90	(revision 1750)
@@ -0,0 +1,166 @@
+!
+! $Id $
+!
+SUBROUTINE cvltrorig(it,pdtime,da, phi, mp,paprs,pplay,x,upd,dnd,dx)
+  USE dimphy
+  USE infotrac, ONLY : nbtr
+  IMPLICIT NONE 
+!=====================================================================
+! Objet : convection des traceurs / KE
+! Auteurs: M-A Filiberti and J-Y Grandpeix
+!=====================================================================
+  include "YOMCST.h"
+  include "YOECUMF.h" 
+
+! Entree
+  REAL,INTENT(IN)                           :: pdtime
+  INTEGER, INTENT(IN)                       :: it
+  REAL,DIMENSION(klon,klev),INTENT(IN)      :: da
+  REAL,DIMENSION(klon,klev,klev),INTENT(IN) :: phi
+  REAL,DIMENSION(klon,klev),INTENT(IN)      :: mp
+  REAL,DIMENSION(klon,klev+1),INTENT(IN)    :: paprs ! pression aux 1/2 couches (bas en haut)
+  REAL,DIMENSION(klon,klev),INTENT(IN)      :: pplay ! pression pour le milieu de chaque couche
+  REAL,DIMENSION(klon,klev,nbtr),INTENT(IN)      :: x     ! q de traceur (bas en haut) 
+  REAL,DIMENSION(klon,klev),INTENT(IN)      :: upd   ! saturated updraft mass flux
+  REAL,DIMENSION(klon,klev),INTENT(IN)      :: dnd   ! saturated downdraft mass flux
+
+! Sortie
+  REAL,DIMENSION(klon,klev,nbtr),INTENT(OUT) :: dx ! tendance de traceur  (bas en haut)
+
+! Variables locales     
+! REAL,DIMENSION(klon,klev)       :: zed
+  REAL,DIMENSION(klon,klev,klev)  :: zmd
+  REAL,DIMENSION(klon,klev,klev)  :: za
+  REAL,DIMENSION(klon,klev)       :: zmfd,zmfa
+  REAL,DIMENSION(klon,klev)       :: zmfp,zmfu
+  REAL,DIMENSION(klon,klev)       :: deltap
+  INTEGER                         :: i,k,j 
+  REAL                            :: pdtimeRG
+!!  real conserv
+
+! =========================================
+! calcul des tendances liees au downdraft
+! =========================================
+!cdir collapse
+  DO j=1,klev
+  DO i=1,klon
+!   zed(i,j)=0.
+    zmfd(i,j)=0.
+    zmfa(i,j)=0.
+    zmfu(i,j)=0.
+    zmfp(i,j)=0.
+  END DO
+  END DO
+!cdir collapse
+  DO k=1,klev
+  DO j=1,klev
+  DO i=1,klon
+    zmd(i,j,k)=0.
+    za (i,j,k)=0.
+  END DO
+  END DO
+  END DO
+! 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
+
+! calcul de la matrice d echange
+! matrice de distribution de la masse entrainee en k
+
+  DO k=1,klev-1
+     DO i=1,klon
+        zmd(i,k,k)=max(0.,mp(i,k)-mp(i,k+1))
+     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
+!
+! rajout du terme lie a l ascendance induite
+!
+  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
+!
+! tendances
+!            
+  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,it)-x(i,j,it))
+        END DO
+     END DO
+  END DO
+!
+! =========================================
+! calcul des tendances liees aux flux satures
+! =========================================
+  DO j=1,klev
+     DO i=1,klon
+        zmfa(i,j)=da(i,j)*(x(i,1,it)-x(i,j,it))
+     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,it)-x(i,j,it))
+        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,it)-x(i,j,it))
+     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,it)-x(i,j-1,it))
+     END DO
+  END DO
+
+! =========================================
+! calcul final des tendances
+! =========================================
+  DO k=1, klev
+     DO i=1, klon
+        deltap(i,k)=paprs(i,k)-paprs(i,k+1)
+     ENDDO
+  ENDDO
+  pdtimeRG=pdtime*RG
+!cdir collapse
+  DO k=1, klev
+     DO i=1, klon
+        dx(i,k,it)=(zmfd(i,k)+zmfu(i,k)       &
+                +zmfa(i,k)+zmfp(i,k))*pdtimeRG/deltap(i,k)
+     ENDDO
+  ENDDO
+
+! test de conservation du traceur
+!      conserv=0.
+!      DO k=1, klev
+!        DO i=1, klon
+!         conserv=conserv+dx(i,k,it)*   &
+!          deltap(i,k)/RG
+!        ENDDO
+!      ENDDO
+!      print *,'it',it,'cvltrorig conserv',conserv
+     
+END SUBROUTINE cvltrorig
Index: LMDZ5/branches/testing/libf/phylmd/etat0_netcdf.F90
===================================================================
--- LMDZ5/branches/testing/libf/phylmd/etat0_netcdf.F90	(revision 1707)
+++ LMDZ5/branches/testing/libf/phylmd/etat0_netcdf.F90	(revision 1750)
@@ -99,5 +99,5 @@
   REAL    :: dummy
   LOGICAL :: ok_newmicro, ok_journe, ok_mensuel, ok_instan, ok_hf
-  LOGICAL :: ok_LES, ok_ade, ok_aie, aerosol_couple, new_aod, callstats
+  LOGICAL :: ok_LES, ok_ade, ok_aie, ok_cdnc, aerosol_couple, new_aod, callstats
   INTEGER :: iflag_radia, flag_aerosol
   REAL    :: bl95_b0, bl95_b1, fact_cldcon, facttemps, ratqsbas, ratqshaut
@@ -136,5 +136,5 @@
                    iflag_cldcon,                                        &
                    iflag_ratqs,ratqsbas,ratqshaut,tau_ratqs,            &
-                   ok_ade, ok_aie, aerosol_couple,                      &
+                   ok_ade, ok_aie, ok_cdnc, aerosol_couple,             &
                    flag_aerosol, new_aod,                               &
                    bl95_b0, bl95_b1,                                    &
@@ -437,5 +437,6 @@
 ! Writing
 !*******************************************************************************
-  CALL inidissip(lstardis,nitergdiv,nitergrot,niterh,tetagdiv,tetagrot,tetatemp)
+  CALL inidissip(lstardis, nitergdiv, nitergrot, niterh, tetagdiv, tetagrot, &
+       tetatemp, vert_prof_dissip)
   WRITE(lunout,*)'sortie inidissip'
   itau=0
Index: LMDZ5/branches/testing/libf/phylmd/evappot.F90
===================================================================
--- LMDZ5/branches/testing/libf/phylmd/evappot.F90	(revision 1750)
+++ LMDZ5/branches/testing/libf/phylmd/evappot.F90	(revision 1750)
@@ -0,0 +1,42 @@
+SUBROUTINE evappot(klon,nbsrf,ftsol,pplay,cdragh,  &
+       &    t_seri,q_seri,u_seri,v_seri,evap_pot)
+
+IMPLICIT NONE
+
+#include "YOMCST.h"
+#include "YOETHF.h"
+#include "FCTTRE.h"
+
+
+INTEGER :: klon, nbsrf
+REAL, DIMENSION(klon,nbsrf) :: ftsol,evap_pot
+REAL, DIMENSION(klon) :: pplay,t_seri,wind,q_seri,u_seri,v_seri,cdragh
+
+INTEGER :: nsrf,i
+REAL, DIMENSION(klon,nbsrf) :: qsat_ftsol
+REAL, DIMENSION(klon) :: rhos, norme_u
+REAL :: t_coup
+
+      t_coup=234.   ! Quelle horreur !!!!!
+
+DO nsrf = 1, nbsrf
+   DO i = 1, klon
+      IF (ftsol(i,nsrf).LT.t_coup) THEN
+         qsat_ftsol(i,nsrf) = qsats(ftsol(i,nsrf))/pplay(i)
+      ELSE
+         qsat_ftsol(i,nsrf) = qsatl(ftsol(i,nsrf))/pplay(i)
+      ENDIF
+   ENDDO
+ENDDO
+! ========================================================== c
+! Calcul de l'evaporation Potentielle
+
+
+rhos(:) = pplay(:)/(RD*t_seri(:))
+norme_u(:)=1.+sqrt(u_seri(:)*u_seri(:)+v_seri(:)*v_seri(:))
+DO nsrf = 1, nbsrf
+  evap_pot(:,nsrf)=rhos(:)*cdragh(:)*norme_u(:)*(qsat_ftsol(:,nsrf)-q_seri(:))
+ENDDO
+RETURN
+
+END
Index: LMDZ5/branches/testing/libf/phylmd/fisrtilp.F90
===================================================================
--- LMDZ5/branches/testing/libf/phylmd/fisrtilp.F90	(revision 1707)
+++ LMDZ5/branches/testing/libf/phylmd/fisrtilp.F90	(revision 1750)
@@ -4,8 +4,8 @@
 !
 SUBROUTINE fisrtilp(dtime,paprs,pplay,t,q,ptconv,ratqs, &
-     d_t, d_q, d_ql, rneb, radliq, rain, snow, &
-     pfrac_impa, pfrac_nucl, pfrac_1nucl, &
-     frac_impa, frac_nucl, &
-     prfl, psfl, rhcl, zqta, fraca, &
+     d_t, d_q, d_ql, rneb, radliq, rain, snow,          &
+     pfrac_impa, pfrac_nucl, pfrac_1nucl,               &
+     frac_impa, frac_nucl, beta,                        &
+     prfl, psfl, rhcl, zqta, fraca,                     &
      ztv, zpspsk, ztla, zthl, iflag_cldcon)
 
@@ -124,4 +124,7 @@
   REAL zprec_cond(klon)
   !AA
+! RomP >>> 15 nov 2012
+  REAL   beta(klon,klev) ! taux de conversion de l'eau cond
+! RomP <<<
   REAL zmair, zcpair, zcpeau
   !     Pour la conversion eau-neige
@@ -171,4 +174,5 @@
            pfrac_1nucl(i,k)=1.
            pfrac_impa(i,k)=1.
+           beta(i,k)=0.  !RomP initialisation
         ENDDO
      ENDDO
@@ -549,4 +553,9 @@
      DO i = 1,klon
         !
+        if(zcond(i).gt.zoliq(i)+1.e-10) then
+         beta(i,k) = (zcond(i)-zoliq(i))/zcond(i)/dtime
+        else
+         beta(i,k) = 0.
+        endif
         zprec_cond(i) = MAX(zcond(i)-zoliq(i),0.0) &
              * (paprs(i,k)-paprs(i,k+1))/RG
Index: LMDZ5/branches/testing/libf/phylmd/ini_histrac.h
===================================================================
--- LMDZ5/branches/testing/libf/phylmd/ini_histrac.h	(revision 1707)
+++ LMDZ5/branches/testing/libf/phylmd/ini_histrac.h	(revision 1750)
@@ -4,7 +4,11 @@
   IF (ecrit_tra>0.) THEN
 !$OMP MASTER 
-     CALL ymds2ju(annee_ref, 1, day_ref, 0.0, zjulian)
+!!!     CALL ymds2ju(annee_ref, 1, day_ref, 0.0, zjulian)
+! correction pour l heure initiale                               !jyg 
+!                                                               !jyg 
+      CALL ymds2ju(annee_ref, 1, day_ref, hour, zjulian)         !jyg
+
      CALL histbeg_phy("histrac", itau_phy, zjulian, pdtphys,nhori, nid_tra)
-     CALL histvert(nid_tra, "presnivs", "Vertical levels", "mb",klev, presnivs, nvert)
+     CALL histvert(nid_tra, "presnivs", "Vertical levels", "Pa",klev, presnivs, nvert,"down")
 
      zsto = pdtphys
@@ -17,4 +21,9 @@
           "kg m-2", iim, jj_nb, nhori, klev, 1, klev, nvert, 32, "ave(X)", &
           zsto,zout)
+! RomP >>>
+     CALL histdef(nid_tra, "sourceBE", "source 7Be", &
+          "at/kgA/s", iim, jj_nb, nhori, klev, 1, klev, nvert, 32, "ave(X)", &
+          zsto,zout)
+! RomP <<<
 
 !TRACEURS
@@ -30,7 +39,28 @@
         IF (lessivage .AND. aerosol(it)) THEN
            CALL histdef(nid_tra, "fl"//tname(iiq),"Flux "//ttext(iiq), &
-                "U/m2/s",iim,jj_nb,nhori, klev,1,klev,nvert, 32,       &
-                "ave(X)", zsto,zout)
-        END IF
+                "at/m2/s",iim,jj_nb,nhori, klev,1,klev,nvert, 32,       &
+                "ave(X)", zsto,zout)
+           CALL histdef(nid_tra, "d_tr_ls_"//tname(iiq),      &
+                "tendance lessivage large scale"// ttext(iiq), "?",&
+                iim,jj_nb,nhori, klev,1,klev,nvert, 32,       &
+                "ave(X)", zsto,zout)
+           CALL histdef(nid_tra, "d_tr_insc_"//tname(iiq),      &
+                "tendance lessivage large scale"// ttext(iiq), "?",&
+                iim,jj_nb,nhori, klev,1,klev,nvert, 32,       &
+                "ave(X)", zsto,zout)
+           CALL histdef(nid_tra, "d_tr_bcscav_"//tname(iiq),      &
+                "tendance lessivage large scale"// ttext(iiq), "?",&
+                iim,jj_nb,nhori, klev,1,klev,nvert, 32,       &
+                "ave(X)", zsto,zout)
+           CALL histdef(nid_tra, "d_tr_evls_"//tname(iiq),      &
+                "tendance lessivage large scale"// ttext(iiq), "?",&
+                iim,jj_nb,nhori, klev,1,klev,nvert, 32,       &
+                "ave(X)", zsto,zout)
+!  Tracer concentration in LS precipitation at surface
+           CALL histdef(nid_tra, "qpr_ls_"//tname(iiq),       &
+                "concentration in LS precip"// ttext(iiq), "at/kgw", &
+                iim,jj_nb,nhori, 1,1,1, -99, 32,                 &
+                "ave(X)", zsto,zout)     
+                 END IF
 
 ! TD THERMIQUES
@@ -50,10 +80,97 @@
         ENDIF
 
+! RomP >>>
+        IF (iflag_con.EQ.30) THEN
+           CALL histdef(nid_tra, "d_tr_cvMA_"//tname(iiq),   &
+                "tendance convection"// ttext(iiq), "?",&
+                iim,jj_nb,nhori, klev,1,klev,nvert, 32,    &
+                "ave(X)", zsto,zout)
+           CALL histdef(nid_tra, "d_tr_trsp_"//tname(iiq),   &
+                "tendance transport "// ttext(iiq), "at/kga",   &
+                iim,jj_nb,nhori, klev,1,klev,nvert, 32,    &
+                "ave(X)", zsto,zout)
+           CALL histdef(nid_tra, "d_tr_sscav_"//tname(iiq),   &
+                "tendance lessivage flux satures "// ttext(iiq), "at/kga",   &
+                iim,jj_nb,nhori, klev,1,klev,nvert, 32,    &
+                "ave(X)", zsto,zout)
+           CALL histdef(nid_tra, "d_tr_sat_"//tname(iiq),   &
+                "tendance flux satures "// ttext(iiq), "at/kga",  &
+                iim,jj_nb,nhori, klev,1,klev,nvert, 32,    &
+                "ave(X)", zsto,zout)
+           CALL histdef(nid_tra, "d_tr_uscav_"//tname(iiq),  &
+                "tendance flux insatures "// ttext(iiq), "at/kga", &
+                iim,jj_nb,nhori, klev,1,klev,nvert, 32,    &
+                "ave(X)", zsto,zout)
+           CALL histdef(nid_tra, "tr_pr_"//tname(iiq),  &
+                "concentration dans precip"// ttext(iiq), "at/kga", &
+                iim,jj_nb,nhori, klev,1,klev,nvert, 32,    &
+                "ave(X)", zsto,zout)
+           CALL histdef(nid_tra, "tr_aa_"//tname(iiq),  &
+                "concentration precip issu AA"// ttext(iiq), "at/kga", &
+                iim,jj_nb,nhori, klev,1,klev,nvert, 32,    &
+                "ave(X)", zsto,zout)
+           CALL histdef(nid_tra, "tr_mel_"//tname(iiq),  &
+                "concentration precip issu melange"// ttext(iiq), "at/kga", &
+                iim,jj_nb,nhori, klev,1,klev,nvert, 32,    &
+                "ave(X)", zsto,zout)
+           CALL histdef(nid_tra, "tr_di_"//tname(iiq),  &
+                "concentration dans descente insaturee"// ttext(iiq), "at/kga", &
+                iim,jj_nb,nhori, klev,1,klev,nvert, 32,    &
+                "ave(X)", zsto,zout)
+           CALL histdef(nid_tra, "tr_trspdi_"//tname(iiq),  &
+                "conc descente insaturee MA"// ttext(iiq), "at/kga", &
+                iim,jj_nb,nhori, klev,1,klev,nvert, 32,    &
+                "ave(X)", zsto,zout)
+           CALL histdef(nid_tra, "zmfd1a_"//tname(iiq),  &
+                "zmfd1a"// ttext(iiq), "_", &
+                iim,jj_nb,nhori, klev,1,klev,nvert, 32,    &
+                "ave(X)", zsto,zout)
+           CALL histdef(nid_tra, "zmfphi2_"//tname(iiq),  &
+                "zmfphi2"// ttext(iiq), "_", &
+                iim,jj_nb,nhori, klev,1,klev,nvert, 32,    &
+                "ave(X)", zsto,zout)
+           CALL histdef(nid_tra, "zmfdam_"//tname(iiq),  &
+                "zmfdam"// ttext(iiq), "_", &
+                iim,jj_nb,nhori, klev,1,klev,nvert, 32,    &
+                "ave(X)", zsto,zout)
+          ENDIF
+! RomP <<<
+           CALL histdef(nid_tra, "dtrdyn_"//tname(iiq),  &
+                "td dyn tra"// ttext(iiq), "at/kga", &
+                iim,jj_nb,nhori, klev,1,klev,nvert, 32,  &
+                "ave(X)", zsto,zout)
+! TD decroissance radioactive
+           CALL histdef(nid_tra, "d_tr_dec_"//tname(iiq),   &
+                "tendance decroi radio "// ttext(iiq), "",  &
+                iim,jj_nb,nhori, klev,1,klev,nvert, 32,  &
+                "ave(X)", zsto,zout)
+
 ! TD COUCHE-LIMITE
+      IF (couchelimite) THEN
         CALL histdef(nid_tra, "d_tr_cl_"//tname(iiq),      &
              "tendance couche limite"// ttext(iiq), "?",   &
              iim,jj_nb,nhori, klev,1,klev,nvert, 32,       &
              "ave(X)", zsto,zout)
+!  Dry deposit (1st layer and surface)
+        CALL histdef(nid_tra, "d_tr_dry_"//tname(iiq),       &
+             "tendancy dry deposit"// ttext(iiq), "at/kga/step", &
+             iim,jj_nb,nhori, 1,1,1, -99, 32,                 &
+             "ave(X)", zsto,zout)     
+        CALL histdef(nid_tra, "flux_tr_dry_"//tname(iiq),       &
+             "dry deposit at surf (downward)"// ttext(iiq), "at/m2/step", &
+             iim,jj_nb,nhori, 1,1,1, -99, 32,                 &
+             "ave(X)", zsto,zout)     
+      ENDIF
      ENDDO
+
+     CALL histdef(nid_tra, "Mint", "Mint","",         &
+          iim,jj_nb,nhori, klev,1,klev,nvert, 32,          &
+          "inst(X)", zout,zout)
+     CALL histdef(nid_tra, "frac_impa", "frac_impa","",         &
+          iim,jj_nb,nhori, klev,1,klev,nvert, 32,          &
+          "inst(X)", zout,zout)
+     CALL histdef(nid_tra, "frac_nucl", "frac_nucl","",         &
+          iim,jj_nb,nhori, klev,1,klev,nvert, 32,          &
+          "inst(X)", zout,zout)
 !---------------   
 !
Index: LMDZ5/branches/testing/libf/phylmd/init_be.F90
===================================================================
--- LMDZ5/branches/testing/libf/phylmd/init_be.F90	(revision 1707)
+++ LMDZ5/branches/testing/libf/phylmd/init_be.F90	(revision 1750)
@@ -1,5 +1,6 @@
 !$Id $
 
-SUBROUTINE init_be(pctsrf,masktr,tautr,vdeptr,scavtr,srcbe)
+SUBROUTINE init_be(pctsrf,pplay,masktr,tautr,vdeptr,scavtr,srcbe)
+!!!SUBROUTINE init_be(pctsrf,masktr,tautr,vdeptr,scavtr,srcbe)
 
   USE dimphy
@@ -26,4 +27,5 @@
 !
   REAL,DIMENSION(klon,nbsrf),INTENT(IN) :: pctsrf !Pourcentage de sol (f(nature du sol))
+  REAL,DIMENSION(klon,klev), INTENT(IN) :: pplay  ! Pressions en milieu de couches
 !
 ! Output Arguments
@@ -37,15 +39,32 @@
 ! Local Variables
 !
+!!!  INTEGER              :: iref      ! numero d'un point oceanique donnant la grille de pression de reference
   REAL,DIMENSION(klon) :: rlatgeo   ! latitudes geomagnetiques de la grille
   REAL                 :: glt       ! latitude du pole geomagnetique
   REAL                 :: glg       ! longitude du pole geomagnetique
   REAL                 :: latgeo,qcos
-  INTEGER              :: k,i
+  INTEGER              :: k,i, kref, k2
+  INTEGER              :: nref
+  PARAMETER (nref=39)
+  REAL,DIMENSION(nref) :: pref      ! grille de pression de reference (bas des couches)
+  DATA pref  /   &
+      101249.99999999994, 100387.17261011522, 99447.35334189111,  98357.43412194174,   &
+      97046.47707771382,  95447.1116450629,   93496.85259615642,  91139.46548240296,   &
+      88326.55568744117,  85019.60710580258,  81192.7404556645,   76836.48366938648,   &
+      71962.81275769137,  66611.56331321516,  60857.914829743604, 54819.84484441629,   &
+      48663.06257114699,  42598.95465845692,  36869.104365898806, 31709.927925633147,  &
+      27296.757208636915, 23682.282929080895, 20766.025578936627, 18336.105961406534,  &
+      16178.04816768436,  14168.286905562818, 12275.719926478887, 10507.798835225762,  &
+      8876.585404909414,  7391.283929569539,  6057.514475749798,  4877.165909157005,   &
+      3848.34936408203,   2965.444753540027,  2219.2391544640013, 1597.15366044666,    &
+      1083.5531161631498, 660.1311067852655,  306.36072267002805 / 
+!$OMP THREADPRIVATE(pref)
 
   WRITE(*,*)'PASSAGE init_be ...'
 
-! Source actuellement definie pour klev = 19 et klev >= 39
-  IF (klev /= 19 .AND. klev<39) CALL abort_gcm("init_be","Source du be7 necessite klev=19 ou klev>=39",1)
-!
+! la source est maintenant définie independemment de la valeur de klev.
+!!! Source actuellement definie pour klev = 19 et klev >= 39
+!!  IF (klev /= 19 .AND. klev<39) CALL abort_gcm("init_be","Source du be7 necessite klev=19 ou klev>=39",1)
+!!!
 ! Definition des constantes
 ! -------------------------
@@ -53,4 +72,18 @@
   vdeptr = 1.E-3 
   scavtr = 0.5 
+!!!!!jyg le 13/03/2013; puis 20/03/2013 : pref est maintenant une table.
+!!!
+!!!   Recherche d'un point rlat=0., rlon=180.
+!!      iref=(klon+1)/2
+!!      DO i = 1,klon
+!!        IF (abs(rlatd(i)) .LT. 0.15 .AND. cos(rlond(i)) .LT. -0.85) iref=i
+!!      ENDDO
+!!!
+!!!   Grille de pression de reference (= approx de sommets de couches)
+!!      pref(1) = pplay(iref,1)+0.5*(pplay(iref,1)-pplay(iref,2))
+!!      DO k = 2,klev
+!!        pref(k) = 0.5*(pplay(iref,k-1)+pplay(iref,k))
+!!      ENDDO
+!!!
 
   WRITE(*,*) '-------------- SOURCE DE BERYLLIUM ------------------- '
@@ -77,10 +110,13 @@
 ! 3-mettre la source de Be ds la bonne unite (en at/kgA/s)
 !
-  glt=78.5*rpi/180.
-  glg=69.0*rpi/180.
+  glt =  78.5*rpi/180.
+  glg = -69.0*rpi/180.
 
   DO i = 1,klon
      qcos=sin(glt)*sin(rlatd(i))
-     qcos=qcos+cos(glt)*cos(rlatd(i))*cos(rlond(i)+glg)
+!!jyg
+!!     qcos=qcos+cos(glt)*cos(rlatd(i))*cos(rlond(i)+glg)
+     qcos=qcos+cos(glt)*cos(rlatd(i))*cos(rlond(i)-glg)
+!!jyg end
      IF ( qcos .LT. -1.) qcos = -1.
      IF ( qcos .GT. 1.)  qcos = 1.
@@ -88,23 +124,184 @@
   ENDDO
 
-!===========================
-!  Cas 19 niveaux verticaux
-!===========================
-  IF (klev.eq.19) then
+!!!===========================
+!!!  Cas 19 niveaux verticaux
+!!!===========================
+!!  IF (klev.eq.19) then
+!!     DO k = 1,klev
+!!        DO i = 1,klon
+!!!!!jyg le 13/03/2013
+!!!
+!!! k est le niveau dans la grille locale
+!!! Determination du niveau kref dans la grille de refernce
+!!      kref = 1
+!!      DO k2 = 1,klev
+!!        IF (pref(k2) .GT. pplay(i,k)) kref=k2
+!!      ENDDO
+!!!!!
+!!           latgeo=(180./rpi)*abs(rlatgeo(i))
+!!           IF ( kref .EQ. 1 ) THEN
+!!              IF (latgeo.GE.50.0) srcbe(i,k)=0.1
+!!              IF (latgeo.GE.40.0 .and. latgeo.LT.50.0) srcbe(i,k)=0.09
+!!              IF (latgeo.GE.30.0 .and. latgeo.LT.40.0) srcbe(i,k)=0.07
+!!           END IF
+!!           IF ( kref .EQ. 2 ) THEN
+!!              IF (latgeo.GE.50.0) srcbe(i,k)=0.12
+!!              IF (latgeo.GE.40.0 .and. latgeo.LT.50.0) srcbe(i,k)=0.1
+!!              IF (latgeo.GE.30.0 .and. latgeo.LT.40.0) srcbe(i,k)=0.09
+!!              IF (latgeo.GE.20.0 .and. latgeo.LT.30.0) srcbe(i,k)=0.07
+!!           END IF
+!!           IF ( kref .EQ. 3 ) THEN
+!!              IF (latgeo.GE.50.0) srcbe(i,k)=0.14
+!!              IF (latgeo.GE.40.0 .and. latgeo.LT.50.0) srcbe(i,k)=0.12
+!!              IF (latgeo.GE.30.0 .and. latgeo.LT.40.0) srcbe(i,k)=0.1
+!!              IF (latgeo.GE.20.0 .and. latgeo.LT.30.0) srcbe(i,k)=0.09
+!!              IF (latgeo.GE.10.0 .and. latgeo.LT.20.0) srcbe(i,k)=0.07
+!!           END IF
+!!           IF ( kref .EQ. 4 ) THEN
+!!              IF (latgeo.GE.50.0) srcbe(i,k)=0.175
+!!              IF (latgeo.GE.40.0 .and. latgeo.LT.50.0) srcbe(i,k)=0.16
+!!              IF (latgeo.GE.30.0 .and. latgeo.LT.40.0) srcbe(i,k)=0.14
+!!              IF (latgeo.GE.20.0 .and. latgeo.LT.30.0) srcbe(i,k)=0.12
+!!              IF (latgeo.GE.10.0 .and. latgeo.LT.20.0) srcbe(i,k)=0.1
+!!              IF (latgeo.GE.0.0 .and. latgeo.LT.10.0) srcbe(i,k)=0.09
+!!           END IF
+!!           IF ( kref .EQ. 5 ) THEN
+!!              IF (latgeo.GE.50.0) srcbe(i,k)=0.28
+!!              IF (latgeo.GE.40.0 .and. latgeo.LT.50.0) srcbe(i,k)=0.26
+!!              IF (latgeo.GE.30.0 .and. latgeo.LT.40.0) srcbe(i,k)=0.23
+!!              IF (latgeo.GE.20.0 .and. latgeo.LT.30.0) srcbe(i,k)=0.175
+!!              IF (latgeo.GE.10.0 .and. latgeo.LT.20.0) srcbe(i,k)=0.14
+!!              IF (latgeo.GE.0.0 .and. latgeo.LT.10.0) srcbe(i,k)=0.12
+!!           END IF
+!!           IF ( kref .EQ. 6 ) THEN
+!!              IF (latgeo.GE.50.0) srcbe(i,k)=0.56
+!!              IF (latgeo.GE.40.0 .and. latgeo.LT.50.0) srcbe(i,k)=0.49
+!!              IF (latgeo.GE.30.0 .and. latgeo.LT.40.0) srcbe(i,k)=0.42
+!!              IF (latgeo.GE.20.0 .and. latgeo.LT.30.0) srcbe(i,k)=0.28
+!!              IF (latgeo.GE.10.0 .and. latgeo.LT.20.0) srcbe(i,k)=0.26
+!!              IF (latgeo.GE.0.0 .and. latgeo.LT.10.0) srcbe(i,k)=0.245
+!!           END IF
+!!           IF ( kref .EQ. 7 ) THEN
+!!              IF (latgeo.GE.50.0) srcbe(i,k)=1.05
+!!              IF (latgeo.GE.40.0 .and. latgeo.LT.50.0) srcbe(i,k)=0.875
+!!              IF (latgeo.GE.30.0 .and. latgeo.LT.40.0) srcbe(i,k)=0.7
+!!              IF (latgeo.GE.20.0 .and. latgeo.LT.30.0) srcbe(i,k)=0.52
+!!              IF (latgeo.GE.10.0 .and. latgeo.LT.20.0) srcbe(i,k)=0.44
+!!              IF (latgeo.GE.0.0 .and. latgeo.LT.10.0) srcbe(i,k)=0.385
+!!           END IF
+!!           IF ( kref .EQ. 8 ) THEN
+!!              IF (latgeo.GE.50.0) srcbe(i,k)=2.
+!!              IF (latgeo.GE.40.0 .and. latgeo.LT.50.0) srcbe(i,k)=1.8
+!!              IF (latgeo.GE.30.0 .and. latgeo.LT.40.0) srcbe(i,k)=1.5
+!!              IF (latgeo.GE.20.0 .and. latgeo.LT.30.0) srcbe(i,k)=1.
+!!              IF (latgeo.GE.10.0 .and. latgeo.LT.20.0) srcbe(i,k)=0.8
+!!              IF (latgeo.GE.0.0 .and. latgeo.LT.10.0) srcbe(i,k)=0.75
+!!           END IF
+!!           IF ( kref .EQ. 9 ) THEN
+!!              IF (latgeo.GE.50.0) srcbe(i,k)=4.
+!!              IF (latgeo.GE.40.0 .and. latgeo.LT.50.0) srcbe(i,k)=3.5
+!!              IF (latgeo.GE.30.0 .and. latgeo.LT.40.0) srcbe(i,k)=3.
+!!              IF (latgeo.GE.20.0 .and. latgeo.LT.30.0) srcbe(i,k)=2.5
+!!              IF (latgeo.GE.10.0 .and. latgeo.LT.20.0) srcbe(i,k)=1.8
+!!              IF (latgeo.GE.0.0 .and. latgeo.LT.10.0) srcbe(i,k)=1.4
+!!           END IF
+!!           IF ( kref .EQ. 10 ) THEN
+!!              IF (latgeo.GE.50.0) srcbe(i,k)=8.5
+!!              IF (latgeo.GE.40.0 .and. latgeo.LT.50.0) srcbe(i,k)=8.
+!!              IF (latgeo.GE.30.0 .and. latgeo.LT.40.0) srcbe(i,k)=7.
+!!              IF (latgeo.GE.20.0 .and. latgeo.LT.30.0) srcbe(i,k)=4.5
+!!              IF (latgeo.GE.10.0 .and. latgeo.LT.20.0) srcbe(i,k)=3.5
+!!              IF (latgeo.GE.0.0 .and. latgeo.LT.10.0) srcbe(i,k)=3.
+!!           END IF
+!!           IF ( kref .EQ. 11 ) THEN
+!!              IF (latgeo.GE.50.0) srcbe(i,k)=17.
+!!              IF (latgeo.GE.40.0 .and. latgeo.LT.50.0) srcbe(i,k)=15.
+!!              IF (latgeo.GE.30.0 .and. latgeo.LT.40.0) srcbe(i,k)=11.
+!!              IF (latgeo.GE.20.0 .and. latgeo.LT.30.0) srcbe(i,k)=8.
+!!              IF (latgeo.GE.10.0 .and. latgeo.LT.20.0) srcbe(i,k)=5.
+!!              IF (latgeo.GE.0.0 .and. latgeo.LT.10.0) srcbe(i,k)=4.
+!!           END IF
+!!           IF ( kref .EQ. 12 ) THEN
+!!              IF (latgeo.GE.50.0) srcbe(i,k)=25.
+!!              IF (latgeo.GE.40.0 .and. latgeo.LT.50.0) srcbe(i,k)=22.
+!!              IF (latgeo.GE.30.0 .and. latgeo.LT.40.0) srcbe(i,k)=17.
+!!              IF (latgeo.GE.20.0 .and. latgeo.LT.30.0) srcbe(i,k)=11.
+!!              IF (latgeo.GE.10.0 .and. latgeo.LT.20.0) srcbe(i,k)=7.5
+!!              IF (latgeo.GE.0.0 .and. latgeo.LT.10.0) srcbe(i,k)=7.
+!!           END IF
+!!           IF ( kref .EQ. 13 ) THEN
+!!              IF (latgeo.GE.60.0) srcbe(i,k)=33.
+!!              IF (latgeo.GE.50.0 .and. latgeo.LT.60.0) srcbe(i,k)=32.
+!!              IF (latgeo.GE.40.0 .and. latgeo.LT.50.0) srcbe(i,k)=30.
+!!              IF (latgeo.GE.30.0 .and. latgeo.LT.40.0) srcbe(i,k)=22.
+!!              IF (latgeo.GE.20.0 .and. latgeo.LT.30.0) srcbe(i,k)=15.
+!!              IF (latgeo.GE.10.0 .and. latgeo.LT.20.0) srcbe(i,k)=11.
+!!              IF (latgeo.GE.0.0 .and. latgeo.LT.10.0) srcbe(i,k)=8.
+!!           END IF
+!!           IF ( kref .EQ. 14 ) THEN
+!!              IF (latgeo.GE.60.0) srcbe(i,k)=48.
+!!              IF (latgeo.GE.50.0 .and. latgeo.LT.60.0) srcbe(i,k)=45.
+!!              IF (latgeo.GE.40.0 .and. latgeo.LT.50.0) srcbe(i,k)=36.
+!!              IF (latgeo.GE.30.0 .and. latgeo.LT.40.0) srcbe(i,k)=26.
+!!              IF (latgeo.GE.20.0 .and. latgeo.LT.30.0) srcbe(i,k)=17.5
+!!              IF (latgeo.GE.10.0 .and. latgeo.LT.20.0) srcbe(i,k)=12.5
+!!              IF (latgeo.GE.0.0 .and. latgeo.LT.10.0) srcbe(i,k)=10.
+!!           END IF
+!!           IF ( kref .EQ. 15 ) THEN
+!!              IF (latgeo.GE.70.0) srcbe(i,k)=58.
+!!              IF (latgeo.GE.60.0 .and. latgeo.LT.70.0) srcbe(i,k)=57.
+!!              IF (latgeo.GE.50.0 .and. latgeo.LT.60.0) srcbe(i,k)=50.
+!!              IF (latgeo.GE.40.0 .and. latgeo.LT.50.0) srcbe(i,k)=38.
+!!              IF (latgeo.GE.30.0 .and. latgeo.LT.40.0) srcbe(i,k)=25.
+!!              IF (latgeo.GE.20.0 .and. latgeo.LT.30.0) srcbe(i,k)=15.
+!!              IF (latgeo.GE.10.0 .and. latgeo.LT.20.0) srcbe(i,k)=12.5
+!!              IF (latgeo.GE.0.0 .and. latgeo.LT.10.0) srcbe(i,k)=10.
+!!           END IF
+!!           IF ( kref .EQ. 16 ) THEN
+!!              IF (latgeo.GE.70.0) srcbe(i,k)=70.
+!!              IF (latgeo.GE.60.0 .and. latgeo.LT.70.0) srcbe(i,k)=65.
+!!              IF (latgeo.GE.50.0 .and. latgeo.LT.60.0) srcbe(i,k)=50.
+!!              IF (latgeo.GE.40.0 .and. latgeo.LT.50.0) srcbe(i,k)=32.
+!!              IF (latgeo.GE.30.0 .and. latgeo.LT.40.0) srcbe(i,k)=20.
+!!              IF (latgeo.GE.20.0 .and. latgeo.LT.30.0) srcbe(i,k)=13.
+!!              IF (latgeo.GE.10.0 .and. latgeo.LT.20.0) srcbe(i,k)=9.
+!!              IF (latgeo.GE.0.0 .and. latgeo.LT.10.0) srcbe(i,k)=7.5
+!!           END IF
+!!           IF ( kref .GE. 17 ) THEN
+!!              IF (latgeo.GE.70.0) srcbe(i,k)=80.
+!!              IF (latgeo.GE.60.0 .and. latgeo.LT.70.0) srcbe(i,k)=70.
+!!              IF (latgeo.GE.50.0 .and. latgeo.LT.60.0) srcbe(i,k)=45.
+!!              IF (latgeo.GE.40.0 .and. latgeo.LT.50.0) srcbe(i,k)=27.
+!!              IF (latgeo.GE.30.0 .and. latgeo.LT.40.0) srcbe(i,k)=17.5
+!!              IF (latgeo.GE.20.0 .and. latgeo.LT.30.0) srcbe(i,k)=12.
+!!              IF (latgeo.GE.10.0 .and. latgeo.LT.20.0) srcbe(i,k)=8.
+!!              IF (latgeo.GE.0.0 .and. latgeo.LT.10.0) srcbe(i,k)=7.
+!!           END IF
+!!        END DO
+!!     END DO
+!!  END IF ! fin de 19 niveaux verticaux
+!!
+!!!!!!  IF (klev .ge. 39) then
      DO k = 1,klev
         DO i = 1,klon
+!!!jyg le 13/03/2013
+!
+! k est le niveau dans la grille locale
+! Determination du niveau kref dans la grille de refernce
+      kref = 1
+      DO k2 = 1,nref
+        IF (pref(k2) .GT. pplay(i,k)) kref=k2
+      ENDDO
+!!!
            latgeo=(180./rpi)*abs(rlatgeo(i))
-           IF ( k .EQ. 1 ) THEN
+           IF ( kref .LE. 4 ) THEN
+              IF (latgeo.GE.50.0) srcbe(i,k)=0.07
+           END IF
+           IF ( kref .EQ. 5 ) THEN
               IF (latgeo.GE.50.0) srcbe(i,k)=0.1
-              IF (latgeo.GE.40.0 .and. latgeo.LT.50.0) srcbe(i,k)=0.09
-              IF (latgeo.GE.30.0 .and. latgeo.LT.40.0) srcbe(i,k)=0.07
-           END IF
-           IF ( k .EQ. 2 ) THEN
-              IF (latgeo.GE.50.0) srcbe(i,k)=0.12
-              IF (latgeo.GE.40.0 .and. latgeo.LT.50.0) srcbe(i,k)=0.1
-              IF (latgeo.GE.30.0 .and. latgeo.LT.40.0) srcbe(i,k)=0.09
+              IF (latgeo.GE.20.0 .and. latgeo.LT.50.0) srcbe(i,k)=0.09
               IF (latgeo.GE.20.0 .and. latgeo.LT.30.0) srcbe(i,k)=0.07
            END IF
-           IF ( k .EQ. 3 ) THEN
+           IF ( kref .EQ. 6 ) THEN
               IF (latgeo.GE.50.0) srcbe(i,k)=0.14
               IF (latgeo.GE.40.0 .and. latgeo.LT.50.0) srcbe(i,k)=0.12
@@ -113,151 +310,5 @@
               IF (latgeo.GE.10.0 .and. latgeo.LT.20.0) srcbe(i,k)=0.07
            END IF
-           IF ( k .EQ. 4 ) THEN
-              IF (latgeo.GE.50.0) srcbe(i,k)=0.175
-              IF (latgeo.GE.40.0 .and. latgeo.LT.50.0) srcbe(i,k)=0.16
-              IF (latgeo.GE.30.0 .and. latgeo.LT.40.0) srcbe(i,k)=0.14
-              IF (latgeo.GE.20.0 .and. latgeo.LT.30.0) srcbe(i,k)=0.12
-              IF (latgeo.GE.10.0 .and. latgeo.LT.20.0) srcbe(i,k)=0.1
-              IF (latgeo.GE.0.0 .and. latgeo.LT.10.0) srcbe(i,k)=0.09
-           END IF
-           IF ( k .EQ. 5 ) THEN
-              IF (latgeo.GE.50.0) srcbe(i,k)=0.28
-              IF (latgeo.GE.40.0 .and. latgeo.LT.50.0) srcbe(i,k)=0.26
-              IF (latgeo.GE.30.0 .and. latgeo.LT.40.0) srcbe(i,k)=0.23
-              IF (latgeo.GE.20.0 .and. latgeo.LT.30.0) srcbe(i,k)=0.175
-              IF (latgeo.GE.10.0 .and. latgeo.LT.20.0) srcbe(i,k)=0.14
-              IF (latgeo.GE.0.0 .and. latgeo.LT.10.0) srcbe(i,k)=0.12
-           END IF
-           IF ( k .EQ. 6 ) THEN
-              IF (latgeo.GE.50.0) srcbe(i,k)=0.56
-              IF (latgeo.GE.40.0 .and. latgeo.LT.50.0) srcbe(i,k)=0.49
-              IF (latgeo.GE.30.0 .and. latgeo.LT.40.0) srcbe(i,k)=0.42
-              IF (latgeo.GE.20.0 .and. latgeo.LT.30.0) srcbe(i,k)=0.28
-              IF (latgeo.GE.10.0 .and. latgeo.LT.20.0) srcbe(i,k)=0.26
-              IF (latgeo.GE.0.0 .and. latgeo.LT.10.0) srcbe(i,k)=0.245
-           END IF
-           IF ( k .EQ. 7 ) THEN
-              IF (latgeo.GE.50.0) srcbe(i,k)=1.05
-              IF (latgeo.GE.40.0 .and. latgeo.LT.50.0) srcbe(i,k)=0.875
-              IF (latgeo.GE.30.0 .and. latgeo.LT.40.0) srcbe(i,k)=0.7
-              IF (latgeo.GE.20.0 .and. latgeo.LT.30.0) srcbe(i,k)=0.52
-              IF (latgeo.GE.10.0 .and. latgeo.LT.20.0) srcbe(i,k)=0.44
-              IF (latgeo.GE.0.0 .and. latgeo.LT.10.0) srcbe(i,k)=0.385
-           END IF
-           IF ( k .EQ. 8 ) THEN
-              IF (latgeo.GE.50.0) srcbe(i,k)=2.
-              IF (latgeo.GE.40.0 .and. latgeo.LT.50.0) srcbe(i,k)=1.8
-              IF (latgeo.GE.30.0 .and. latgeo.LT.40.0) srcbe(i,k)=1.5
-              IF (latgeo.GE.20.0 .and. latgeo.LT.30.0) srcbe(i,k)=1.
-              IF (latgeo.GE.10.0 .and. latgeo.LT.20.0) srcbe(i,k)=0.8
-              IF (latgeo.GE.0.0 .and. latgeo.LT.10.0) srcbe(i,k)=0.75
-           END IF
-           IF ( k .EQ. 9 ) THEN
-              IF (latgeo.GE.50.0) srcbe(i,k)=4.
-              IF (latgeo.GE.40.0 .and. latgeo.LT.50.0) srcbe(i,k)=3.5
-              IF (latgeo.GE.30.0 .and. latgeo.LT.40.0) srcbe(i,k)=3.
-              IF (latgeo.GE.20.0 .and. latgeo.LT.30.0) srcbe(i,k)=2.5
-              IF (latgeo.GE.10.0 .and. latgeo.LT.20.0) srcbe(i,k)=1.8
-              IF (latgeo.GE.0.0 .and. latgeo.LT.10.0) srcbe(i,k)=1.4
-           END IF
-           IF ( k .EQ. 10 ) THEN
-              IF (latgeo.GE.50.0) srcbe(i,k)=8.5
-              IF (latgeo.GE.40.0 .and. latgeo.LT.50.0) srcbe(i,k)=8.
-              IF (latgeo.GE.30.0 .and. latgeo.LT.40.0) srcbe(i,k)=7.
-              IF (latgeo.GE.20.0 .and. latgeo.LT.30.0) srcbe(i,k)=4.5
-              IF (latgeo.GE.10.0 .and. latgeo.LT.20.0) srcbe(i,k)=3.5
-              IF (latgeo.GE.0.0 .and. latgeo.LT.10.0) srcbe(i,k)=3.
-           END IF
-           IF ( k .EQ. 11 ) THEN
-              IF (latgeo.GE.50.0) srcbe(i,k)=17.
-              IF (latgeo.GE.40.0 .and. latgeo.LT.50.0) srcbe(i,k)=15.
-              IF (latgeo.GE.30.0 .and. latgeo.LT.40.0) srcbe(i,k)=11.
-              IF (latgeo.GE.20.0 .and. latgeo.LT.30.0) srcbe(i,k)=8.
-              IF (latgeo.GE.10.0 .and. latgeo.LT.20.0) srcbe(i,k)=5.
-              IF (latgeo.GE.0.0 .and. latgeo.LT.10.0) srcbe(i,k)=4.
-           END IF
-           IF ( k .EQ. 12 ) THEN
-              IF (latgeo.GE.50.0) srcbe(i,k)=25.
-              IF (latgeo.GE.40.0 .and. latgeo.LT.50.0) srcbe(i,k)=22.
-              IF (latgeo.GE.30.0 .and. latgeo.LT.40.0) srcbe(i,k)=17.
-              IF (latgeo.GE.20.0 .and. latgeo.LT.30.0) srcbe(i,k)=11.
-              IF (latgeo.GE.10.0 .and. latgeo.LT.20.0) srcbe(i,k)=7.5
-              IF (latgeo.GE.0.0 .and. latgeo.LT.10.0) srcbe(i,k)=7.
-           END IF
-           IF ( k .EQ. 13 ) THEN
-              IF (latgeo.GE.60.0) srcbe(i,k)=33.
-              IF (latgeo.GE.50.0 .and. latgeo.LT.60.0) srcbe(i,k)=32.
-              IF (latgeo.GE.40.0 .and. latgeo.LT.50.0) srcbe(i,k)=30.
-              IF (latgeo.GE.30.0 .and. latgeo.LT.40.0) srcbe(i,k)=22.
-              IF (latgeo.GE.20.0 .and. latgeo.LT.30.0) srcbe(i,k)=15.
-              IF (latgeo.GE.10.0 .and. latgeo.LT.20.0) srcbe(i,k)=11.
-              IF (latgeo.GE.0.0 .and. latgeo.LT.10.0) srcbe(i,k)=8.
-           END IF
-           IF ( k .EQ. 14 ) THEN
-              IF (latgeo.GE.60.0) srcbe(i,k)=48.
-              IF (latgeo.GE.50.0 .and. latgeo.LT.60.0) srcbe(i,k)=45.
-              IF (latgeo.GE.40.0 .and. latgeo.LT.50.0) srcbe(i,k)=36.
-              IF (latgeo.GE.30.0 .and. latgeo.LT.40.0) srcbe(i,k)=26.
-              IF (latgeo.GE.20.0 .and. latgeo.LT.30.0) srcbe(i,k)=17.5
-              IF (latgeo.GE.10.0 .and. latgeo.LT.20.0) srcbe(i,k)=12.5
-              IF (latgeo.GE.0.0 .and. latgeo.LT.10.0) srcbe(i,k)=10.
-           END IF
-           IF ( k .EQ. 15 ) THEN
-              IF (latgeo.GE.70.0) srcbe(i,k)=58.
-              IF (latgeo.GE.60.0 .and. latgeo.LT.70.0) srcbe(i,k)=57.
-              IF (latgeo.GE.50.0 .and. latgeo.LT.60.0) srcbe(i,k)=50.
-              IF (latgeo.GE.40.0 .and. latgeo.LT.50.0) srcbe(i,k)=38.
-              IF (latgeo.GE.30.0 .and. latgeo.LT.40.0) srcbe(i,k)=25.
-              IF (latgeo.GE.20.0 .and. latgeo.LT.30.0) srcbe(i,k)=15.
-              IF (latgeo.GE.10.0 .and. latgeo.LT.20.0) srcbe(i,k)=12.5
-              IF (latgeo.GE.0.0 .and. latgeo.LT.10.0) srcbe(i,k)=10.
-           END IF
-           IF ( k .EQ. 16 ) THEN
-              IF (latgeo.GE.70.0) srcbe(i,k)=70.
-              IF (latgeo.GE.60.0 .and. latgeo.LT.70.0) srcbe(i,k)=65.
-              IF (latgeo.GE.50.0 .and. latgeo.LT.60.0) srcbe(i,k)=50.
-              IF (latgeo.GE.40.0 .and. latgeo.LT.50.0) srcbe(i,k)=32.
-              IF (latgeo.GE.30.0 .and. latgeo.LT.40.0) srcbe(i,k)=20.
-              IF (latgeo.GE.20.0 .and. latgeo.LT.30.0) srcbe(i,k)=13.
-              IF (latgeo.GE.10.0 .and. latgeo.LT.20.0) srcbe(i,k)=9.
-              IF (latgeo.GE.0.0 .and. latgeo.LT.10.0) srcbe(i,k)=7.5
-           END IF
-           IF ( k .GE. 17 ) THEN
-              IF (latgeo.GE.70.0) srcbe(i,k)=80.
-              IF (latgeo.GE.60.0 .and. latgeo.LT.70.0) srcbe(i,k)=70.
-              IF (latgeo.GE.50.0 .and. latgeo.LT.60.0) srcbe(i,k)=45.
-              IF (latgeo.GE.40.0 .and. latgeo.LT.50.0) srcbe(i,k)=27.
-              IF (latgeo.GE.30.0 .and. latgeo.LT.40.0) srcbe(i,k)=17.5
-              IF (latgeo.GE.20.0 .and. latgeo.LT.30.0) srcbe(i,k)=12.
-              IF (latgeo.GE.10.0 .and. latgeo.LT.20.0) srcbe(i,k)=8.
-              IF (latgeo.GE.0.0 .and. latgeo.LT.10.0) srcbe(i,k)=7.
-           END IF
-        END DO
-     END DO
-  END IF ! fin de 19 niveaux verticaux
-
-!================================
-!  Cas 39 niveaux verticaux
-!================================
-  IF (klev .ge. 39) then
-     DO k = 1,klev
-        DO i = 1,klon
-           latgeo=(180./rpi)*abs(rlatgeo(i))
-           IF ( k .LE. 4 ) THEN
-              IF (latgeo.GE.50.0) srcbe(i,k)=0.07
-           END IF
-           IF ( k .EQ. 5 ) THEN
-              IF (latgeo.GE.50.0) srcbe(i,k)=0.1
-              IF (latgeo.GE.20.0 .and. latgeo.LT.50.0) srcbe(i,k)=0.09
-              IF (latgeo.GE.20.0 .and. latgeo.LT.30.0) srcbe(i,k)=0.07
-           END IF
-           IF ( k .EQ. 6 ) THEN
-              IF (latgeo.GE.50.0) srcbe(i,k)=0.14
-              IF (latgeo.GE.40.0 .and. latgeo.LT.50.0) srcbe(i,k)=0.12
-              IF (latgeo.GE.30.0 .and. latgeo.LT.40.0) srcbe(i,k)=0.1
-              IF (latgeo.GE.20.0 .and. latgeo.LT.30.0) srcbe(i,k)=0.09
-              IF (latgeo.GE.10.0 .and. latgeo.LT.20.0) srcbe(i,k)=0.07
-           END IF
-           IF ( k .EQ. 7 ) THEN
+           IF ( kref .EQ. 7 ) THEN
               IF (latgeo.GE.50.0) srcbe(i,k)=0.16
               IF (latgeo.GE.40.0 .and. latgeo.LT.50.0) srcbe(i,k)=0.16
@@ -267,5 +318,5 @@
               IF (latgeo.GE.0.0 .and. latgeo.LT.10.0) srcbe(i,k)=0.09
            END IF
-           IF ( k .EQ. 8 ) THEN
+           IF ( kref .EQ. 8 ) THEN
               IF (latgeo.GE.50.0) srcbe(i,k)=0.175
               IF (latgeo.GE.40.0 .and. latgeo.LT.50.0) srcbe(i,k)=0.16
@@ -275,5 +326,5 @@
               IF (latgeo.GE.0.0 .and. latgeo.LT.10.0) srcbe(i,k)=0.1
            END IF
-           IF ( k .EQ. 9 ) THEN
+           IF ( kref .EQ. 9 ) THEN
               IF (latgeo.GE.50.0) srcbe(i,k)=0.245
               IF (latgeo.GE.40.0 .and. latgeo.LT.50.0) srcbe(i,k)=0.21
@@ -283,5 +334,5 @@
               IF (latgeo.GE.0.0 .and. latgeo.LT.10.0) srcbe(i,k)=0.12
            END IF
-           IF ( k .EQ. 10 ) THEN
+           IF ( kref .EQ. 10 ) THEN
               IF (latgeo.GE.50.0) srcbe(i,k)=0.31
               IF (latgeo.GE.40.0 .and. latgeo.LT.50.0) srcbe(i,k)=0.28
@@ -291,5 +342,5 @@
               IF (latgeo.GE.0.0 .and. latgeo.LT.10.0) srcbe(i,k)=0.14
            END IF
-           IF ( k .EQ. 11 ) THEN
+           IF ( kref .EQ. 11 ) THEN
               IF (latgeo.GE.50.0) srcbe(i,k)=0.35
               IF (latgeo.GE.40.0 .and. latgeo.LT.50.0) srcbe(i,k)=0.3
@@ -299,5 +350,5 @@
               IF (latgeo.GE.0.0 .and. latgeo.LT.10.0) srcbe(i,k)=0.16
            END IF
-           IF ( k .EQ. 12 ) THEN
+           IF ( kref .EQ. 12 ) THEN
               IF (latgeo.GE.40.0) srcbe(i,k)=0.5
               IF (latgeo.GE.30.0 .and. latgeo.LT.40.0) srcbe(i,k)=0.4
@@ -306,5 +357,5 @@
               IF (latgeo.GE.0.0 .and. latgeo.LT.10.0) srcbe(i,k)=0.25
            END IF
-           IF ( k .EQ. 13 ) THEN
+           IF ( kref .EQ. 13 ) THEN
               IF (latgeo.GE.50.0) srcbe(i,k)=0.8
               IF (latgeo.GE.40.0 .and. latgeo.LT.50.0) srcbe(i,k)=0.7
@@ -314,5 +365,5 @@
               IF (latgeo.GE.0.0 .and. latgeo.LT.10.0) srcbe(i,k)=0.35
            END IF
-           IF ( k .EQ. 14 ) THEN
+           IF ( kref .EQ. 14 ) THEN
               IF (latgeo.GE.50.0) srcbe(i,k)=1.2
               IF (latgeo.GE.40.0 .and. latgeo.LT.50.0) srcbe(i,k)=1.
@@ -322,5 +373,5 @@
               IF (latgeo.GE.0.0 .and. latgeo.LT.10.0) srcbe(i,k)=0.4
            END IF
-           IF ( k .EQ. 15 ) THEN
+           IF ( kref .EQ. 15 ) THEN
               IF (latgeo.GE.60.0) srcbe(i,k)=1.75
               IF (latgeo.GE.50.0 .and. latgeo.LT.60.0) srcbe(i,k)=1.8 
@@ -331,5 +382,5 @@
               IF (latgeo.GE.0.0 .and. latgeo.LT.10.0) srcbe(i,k)=0.65
            END IF
-           IF ( k .EQ. 16 ) THEN
+           IF ( kref .EQ. 16 ) THEN
               IF (latgeo.GE.50.0) srcbe(i,k)=3.
               IF (latgeo.GE.40.0 .and. latgeo.LT.50.0) srcbe(i,k)=2.5
@@ -339,5 +390,5 @@
               IF (latgeo.GE.0.0 .and. latgeo.LT.10.0) srcbe(i,k)=0.9
            END IF
-           IF ( k .EQ. 17 ) THEN
+           IF ( kref .EQ. 17 ) THEN
               IF (latgeo.GE.50.0) srcbe(i,k)=4.
               IF (latgeo.GE.40.0 .and. latgeo.LT.50.0) srcbe(i,k)=3.
@@ -347,5 +398,5 @@
               IF (latgeo.GE.0.0 .and. latgeo.LT.10.0) srcbe(i,k)=1.4
            END IF
-           IF ( k .EQ. 18 ) THEN
+           IF ( kref .EQ. 18 ) THEN
               IF (latgeo.GE.50.0) srcbe(i,k)=7.
               IF (latgeo.GE.40.0 .and. latgeo.LT.50.0) srcbe(i,k)=6.
@@ -355,5 +406,5 @@
               IF (latgeo.GE.0.0 .and. latgeo.LT.10.0) srcbe(i,k)=2.
            END IF
-           IF ( k .EQ. 19 ) THEN
+           IF ( kref .EQ. 19 ) THEN
               IF (latgeo.GE.50.0) srcbe(i,k)=8.5
               IF (latgeo.GE.40.0 .and. latgeo.LT.50.0) srcbe(i,k)=8.
@@ -363,5 +414,5 @@
               IF (latgeo.GE.0.0 .and. latgeo.LT.10.0) srcbe(i,k)=3.
            END IF
-           IF ( k .EQ. 20 ) THEN
+           IF ( kref .EQ. 20 ) THEN
               IF (latgeo.GE.50.0) srcbe(i,k)=12.5
               IF (latgeo.GE.40.0 .and. latgeo.LT.50.0) srcbe(i,k)=12.
@@ -371,5 +422,5 @@
               IF (latgeo.GE.0.0 .and. latgeo.LT.10.0) srcbe(i,k)=3.5
            END IF
-           IF ( k .EQ. 21 ) THEN
+           IF ( kref .EQ. 21 ) THEN
               IF (latgeo.GE.50.0) srcbe(i,k)=16.
               IF (latgeo.GE.40.0 .and. latgeo.LT.50.0) srcbe(i,k)=13.
@@ -379,5 +430,5 @@
               IF (latgeo.GE.0.0 .and. latgeo.LT.10.0) srcbe(i,k)=4.
            END IF
-           IF ( k .EQ. 22 ) THEN
+           IF ( kref .EQ. 22 ) THEN
               IF (latgeo.GE.50.0) srcbe(i,k)=20.
               IF (latgeo.GE.40.0 .and. latgeo.LT.50.0) srcbe(i,k)=17.5
@@ -387,5 +438,5 @@
               IF (latgeo.GE.0.0 .and. latgeo.LT.10.0) srcbe(i,k)=4.5
            END IF
-           IF ( k .EQ. 23 ) THEN
+           IF ( kref .EQ. 23 ) THEN
               IF (latgeo.GE.50.0) srcbe(i,k)=25.
               IF (latgeo.GE.40.0 .and. latgeo.LT.50.0) srcbe(i,k)=22.
@@ -395,5 +446,5 @@
               IF (latgeo.GE.0.0 .and. latgeo.LT.10.0) srcbe(i,k)=6.
            END IF
-           IF ( k .EQ. 24 ) THEN
+           IF ( kref .EQ. 24 ) THEN
               IF (latgeo.GE.50.0) srcbe(i,k)=28.
               IF (latgeo.GE.40.0 .and. latgeo.LT.50.0) srcbe(i,k)=26.
@@ -403,5 +454,5 @@
               IF (latgeo.GE.0.0 .and. latgeo.LT.10.0) srcbe(i,k)=7.
            END IF
-           IF ( k .EQ. 25 ) THEN
+           IF ( kref .EQ. 25 ) THEN
               IF (latgeo.GE.50.0) srcbe(i,k)=33.
               IF (latgeo.GE.40.0 .and. latgeo.LT.50.0) srcbe(i,k)=28.
@@ -411,5 +462,5 @@
               IF (latgeo.GE.0.0 .and. latgeo.LT.10.0) srcbe(i,k)=8.5
            END IF
-           IF ( k .EQ. 26 ) THEN
+           IF ( kref .EQ. 26 ) THEN
               IF (latgeo.GE.60.0) srcbe(i,k)=38.
               IF (latgeo.GE.50.0 .and. latgeo.LT.60.0) srcbe(i,k)=36.
@@ -419,7 +470,9 @@
               IF (latgeo.GE.10.0 .and. latgeo.LT.20.0) srcbe(i,k)=11.5
               IF (latgeo.GE.0.0 .and. latgeo.LT.10.0) srcbe(i,k)=10.
-              IF (latgeo.GE.0.0 .and. latgeo.LT.10.0) srcbe(i,k)=6.
-           END IF
-           IF ( k .EQ. 27 ) THEN
+!!jyg
+!!              IF (latgeo.GE.0.0 .and. latgeo.LT.10.0) srcbe(i,k)=6.
+!!jyg end
+           END IF
+           IF ( kref .EQ. 27 ) THEN
               IF (latgeo.GE.60.0) srcbe(i,k)=46.
               IF (latgeo.GE.50.0 .and. latgeo.LT.60.0) srcbe(i,k)=44.
@@ -430,5 +483,5 @@
               IF (latgeo.GE.0.0 .and. latgeo.LT.10.0) srcbe(i,k)=10.
            END IF
-           IF ( k .EQ. 28 ) THEN
+           IF ( kref .EQ. 28 ) THEN
               IF (latgeo.GE.60.0) srcbe(i,k)=53.
               IF (latgeo.GE.50.0 .and. latgeo.LT.60.0) srcbe(i,k)=48.
@@ -439,5 +492,5 @@
               IF (latgeo.GE.0.0 .and. latgeo.LT.10.0) srcbe(i,k)=10.
            END IF
-           IF ( k .EQ. 29 ) THEN
+           IF ( kref .EQ. 29 ) THEN
               IF (latgeo.GE.70.0) srcbe(i,k)=58.
               IF (latgeo.GE.60.0 .and. latgeo.LT.70.0) srcbe(i,k)=56.
@@ -449,5 +502,5 @@
               IF (latgeo.GE.0.0 .and. latgeo.LT.10.0) srcbe(i,k)=10.
            END IF
-           IF ( k .EQ. 30 ) THEN
+           IF ( kref .EQ. 30 ) THEN
               IF (latgeo.GE.70.0) srcbe(i,k)=65.
               IF (latgeo.GE.60.0 .and. latgeo.LT.70.0) srcbe(i,k)=60.
@@ -459,5 +512,5 @@
               IF (latgeo.GE.0.0 .and. latgeo.LT.10.0) srcbe(i,k)=9.
            END IF
-           IF ( k .EQ. 31 ) THEN
+           IF ( kref .EQ. 31 ) THEN
               IF (latgeo.GE.70.0) srcbe(i,k)=70.
               IF (latgeo.GE.60.0 .and. latgeo.LT.70.0) srcbe(i,k)=62.
@@ -469,5 +522,5 @@
               IF (latgeo.GE.0.0 .and. latgeo.LT.10.0) srcbe(i,k)=7.6
            END IF
-           IF ( k .EQ. 32 ) THEN
+           IF ( kref .EQ. 32 ) THEN
               IF (latgeo.GE.70.0) srcbe(i,k)=80.
               IF (latgeo.GE.60.0 .and. latgeo.LT.70.0) srcbe(i,k)=60.
@@ -479,5 +532,5 @@
               IF (latgeo.GE.0.0 .and. latgeo.LT.10.0) srcbe(i,k)=7.4
            END IF
-           IF ( k .GE. 33 ) THEN
+           IF ( kref .GE. 33 ) THEN
               IF (latgeo.GE.70.0) srcbe(i,k)=80.
               IF (latgeo.GE.60.0 .and. latgeo.LT.70.0) srcbe(i,k)=70.
@@ -491,5 +544,5 @@
         END DO
      END DO
-  END IF ! fin de 39 niveaux verticaux
+!!!!!!  END IF ! fin de 39 niveaux verticaux
 
 
@@ -503,4 +556,6 @@
        ! 1/(60*1.295) = 0.01287
        srcbe(i,k)=srcbe(i,k)*0.01287
+!!       print *,'  k, srcbe(i,k) ',   &
+!!                  k, srcbe(i,k)
        ! La source est  at/min/m3 -> at/s/m3
        ! srcbe(i,k)=srcbe(i,k)*0.0166667
Index: LMDZ5/branches/testing/libf/phylmd/lsc_scav.F90
===================================================================
--- LMDZ5/branches/testing/libf/phylmd/lsc_scav.F90	(revision 1750)
+++ LMDZ5/branches/testing/libf/phylmd/lsc_scav.F90	(revision 1750)
@@ -0,0 +1,286 @@
+!$Id $
+
+SUBROUTINE lsc_scav(pdtime,it,iflag_lscav,oliq,flxr,flxs,rneb,beta_fisrt,  &
+                    beta_v1,pplay,paprs,t,tr_seri,d_tr_insc,          &
+                    d_tr_bcscav,d_tr_evap,qPrls) 
+  USE ioipsl
+  USE dimphy
+  USE mod_grid_phy_lmdz
+  USE mod_phys_lmdz_para
+  USE traclmdz_mod
+  USE infotrac,ONLY : nbtr
+  USE comgeomphy
+  USE iophy
+  IMPLICIT NONE 
+!=====================================================================
+! Objet : depot humide (lessivage et evaporation) de traceurs
+! Inspired by routines of Olivier Boucher (mars 1998)
+! author R. Pilon 10 octobre 2012
+! last modification 16/01/2013 (reformulation partie evaporation)
+!=====================================================================
+
+  include "dimensions.h"
+  include "chem.h"
+  include "YOMCST.h"
+  include "YOECUMF.h" 
+
+  REAL,INTENT(IN)                        :: pdtime ! time step (s)
+  INTEGER,INTENT(IN)                     :: it     ! tracer number
+  INTEGER,INTENT(IN)                     :: iflag_lscav ! LS scavenging param:
+!                                             3=Reddy_Boucher2004, 4=3+RPilon.
+  REAL,DIMENSION(klon,klev+1),INTENT(IN) :: flxr     ! flux precipitant de pluie
+  REAL,DIMENSION(klon,klev+1),INTENT(IN) :: flxs     ! flux precipitant de neige
+  REAL,INTENT(IN)                        :: oliq ! contenu en eau liquide dans le nuage (kg/kg)
+  REAL,DIMENSION(klon,klev),INTENT(IN)   :: rneb
+  REAL,DIMENSION(klon,klev),INTENT(IN)   :: pplay    ! pression
+  REAL,DIMENSION(klon,klev+1),INTENT(IN) :: paprs    ! pression
+  REAL,DIMENSION(klon,klev),INTENT(IN)   :: t        ! temperature
+! tracers
+  REAL,DIMENSION(klon,klev,nbtr),INTENT(IN)   :: tr_seri        ! q de traceur  
+  REAL,DIMENSION(klon,klev),INTENT(IN)        :: beta_fisrt     ! taux de conversion de l'eau cond
+  REAL,DIMENSION(klon,klev),INTENT(OUT)       :: beta_v1        ! -- (originale version)
+  REAL,DIMENSION(klon)                        :: his_dh         ! tendance de traceur integre verticalement
+  REAL,DIMENSION(klon,klev,nbtr),INTENT(OUT)  :: d_tr_insc      ! tendance du traceur 
+  REAL,DIMENSION(klon,klev,nbtr),INTENT(OUT)  :: d_tr_bcscav  ! tendance de traceur
+  REAL,DIMENSION(klon,klev,nbtr),INTENT(OUT)  :: d_tr_evap
+  REAL,DIMENSION(klon,nbtr),INTENT(OUT)       :: qPrls      !jyg: concentration tra dans pluie LS a la surf.
+  REAL :: dxin,dxev                              ! tendance temporaire de traceur incloud
+  REAL,DIMENSION(klon,klev) :: dxbc       ! tendance temporaire de traceur bc
+
+
+!  variables locales      
+ LOGICAL,SAVE :: debut=.true.
+!$OMP THREADPRIVATE(debut)
+!
+  REAL,PARAMETER :: henry=1.4  ! constante de Henry en mol/l/atm ~1.4 for gases
+  REAL           :: henry_t    !  constante de Henry a T t  (mol/l/atm)
+  REAL,PARAMETER :: kk=2900.   ! coefficient de dependence en T (K)
+  REAL :: f_a     !  rapport de la phase aqueuse a la phase gazeuse
+  REAL :: beta    !  taux de conversion de l'eau en pluie
+
+  INTEGER :: i, k
+  REAL,DIMENSION(klon,klev)    :: scav  !  water liquid content / fraction aqueuse du constituant
+  REAL,DIMENSION(klon,klev)    :: zrho
+  REAL,DIMENSION(klon,klev)    :: zdz
+  REAL,DIMENSION(klon,klev)    :: zmass ! layer mass
+
+  REAL           :: frac_ev       ! cste pour la reevaporation : dropplet shrinking
+!  frac_ev = frac_gas ou frac_aer
+  REAL,PARAMETER :: frac_gas=1.0  ! cste pour la reevaporation pour les gaz
+  REAL           :: frac_aer      ! cste pour la reevaporation pour les particules
+  REAL,DIMENSION(klon,klev) :: deltaP     ! P(i+1)-P(i)
+  REAL,DIMENSION(klon,klev) :: beta_ev    !  dP/P(i+1)
+
+!  101.325  m3/l x Pa/atm
+!  R        Pa.m3/mol/K
+!   cste de dissolution pour le depot humide
+  REAL,SAVE :: frac_fine_scav
+  REAL,SAVE :: frac_coar_scav
+!$OMP THREADPRIVATE(frac_fine_scav, frac_coar_scav)
+
+! below-cloud scav variables
+! aerosol : alpha_r=0.001, gas 0.001  (Pruppacher & Klett 1967)
+  REAL,SAVE :: alpha_r  !  coefficient d'impaction pour la pluie
+  REAL,SAVE :: alpha_s  !  coefficient d'impaction pour la neige  
+  REAL,SAVE :: R_r      !  mean raindrop radius (m) 
+  REAL,SAVE :: R_s      !  mean snow crystal radius (m)
+!$OMP THREADPRIVATE(alpha_r, alpha_s, R_r, R_s)
+  REAL           :: pr, ps, ice, water
+  real :: conserv
+!
+!!!!!!!!!!!!!!!!!!!! choix lessivage !!!!!!!!!!!!!!!!!!!!!!!!
+!!  logical,save  :: inscav_fisrt
+!!! $OMP THREADPRIVATE(inscav_first)
+!
+!!!!!!!!!!!!!!!!!!!!!!!!!!!
+  IF (debut) THEN
+!
+!  inscav_fisrt=.true.
+!  call getin('inscav_fisrt',inscav_fisrt)
+!  if(inscav_fisrt) then 
+!   print*,'beta from fisrtilp.F90, beta = (z_cond - z_oliq)/z_cond, inscav_fisrt=',inscav_fisrt
+!  else
+!   print*,'beta from Reddy and Bocuher 2004 (original version), inscav_fisrt=',inscav_fisrt
+!  endif
+!
+      alpha_r=0.001        !  coefficient d'impaction pour la pluie
+      alpha_s=0.01         !  coefficient d'impaction pour la neige  
+      R_r=0.001            !  mean raindrop radius (m) 
+      R_s=0.001            !  mean snow crystal radius (m)
+      frac_fine_scav=0.7
+      frac_coar_scav=0.7
+!     frac_aer=0.5 ~ droplet size shrinks by evap
+      frac_aer=0.5
+!
+      OPEN(99,file='lsc_scav_param.data',status='old', &
+                form='formatted',err=9999)
+      READ(99,*,end=9998)  alpha_r
+      READ(99,*,end=9998)  alpha_s
+      READ(99,*,end=9998)  R_r
+      READ(99,*,end=9998)  R_s
+      READ(99,*,end=9998)  frac_fine_scav
+      READ(99,*,end=9998)  frac_coar_scav
+      READ(99,*,end=9998)  frac_aer
+9998  Continue
+      CLOSE(99)
+9999  Continue
+
+   print*,'alpha_r',alpha_r
+   print*,'alpha_s',alpha_s
+   print*,'R_r',R_r
+   print*,'R_s',R_s
+   print*,'frac_fine_scav',frac_fine_scav
+   print*,'frac_coar_scav',frac_coar_scav
+   print*,'frac_aer ev',frac_aer
+
+!
+  ENDIF !(debut)
+!!!!!!!!!!!!!!!!!!!!!!!!!!!
+!
+! initialization
+  dxin=0.
+  dxev=0.
+  beta_ev=0.
+
+  DO i=1,klon
+   his_dh(i)=0.
+  ENDDO
+
+  DO k=1,klev
+   DO i=1, klon 
+    dxbc(i,k)=0.
+    beta_v1(i,k)=0.
+    deltaP(i,k)=0.
+   ENDDO
+  ENDDO
+
+  DO k=1,klev
+    DO i=1, klon
+     d_tr_insc(i,k,it)=0.
+     d_tr_bcscav(i,k,it)=0.
+     d_tr_evap(i,k,it)=0.
+    ENDDO
+  ENDDO
+
+!  pressure and size of the layer
+  DO k=klev-1, 1, -1
+   DO i=1, klon 
+     zrho(i,k)=pplay(i,k)/t(i,k)/RD   
+     zdz(i,k)=(paprs(i,k)-paprs(i,k+1))/zrho(i,k)/RG
+     zmass(i,k)=(paprs(i,k)-paprs(i,k+1))/RG
+   ENDDO
+  ENDDO
+
+    IF (it.gt.1) THEN                               !  aerosol   
+      frac_ev=frac_aer
+    ELSE                                                !  gas
+      frac_ev=frac_gas
+    ENDIF
+
+    IF(it.gt.1) then  ! aerosol
+     DO k=1, klev
+      DO i=1, klon 
+       scav(i,k)=frac_fine_scav
+      ENDDO 
+     ENDDO
+    ELSE                  ! gas
+     DO k=1, klev
+      DO i=1, klon 
+       henry_t=henry*exp(-kk*(1./298.-1./t(i,k)))    !  mol/l/atm
+       f_a=henry_t/101.325*R*t(i,k)*oliq*zrho(i,k)/rho_water
+       scav(i,k)=f_a/(1.+f_a)
+      ENDDO 
+     ENDDO
+    ENDIF
+
+   DO k=klev-1, 1, -1
+    DO i=1, klon 
+!  incloud scavenging
+!   if(inscav_fisrt) then 
+   if (iflag_lscav .eq. 4) then
+      beta=beta_fisrt(i,k)*rneb(i,k)
+   else
+      beta=flxr(i,k)-flxr(i,k+1)+flxs(i,k)-flxs(i,k+1)
+!      beta=beta/zdz(i,k)/oliq/zrho(i,k)
+      beta=beta/zmass(i,k)/oliq
+      beta=MAX(0.,beta)
+   endif ! (iflag_lscav .eq. 4)
+   beta_v1(i,k)=beta    !! for output
+!
+      dxin=tr_seri(i,k,it)*(exp(-scav(i,k)*beta*pdtime)-1.)
+!      his_dh(i)=his_dh(i)-dxin*zrho(i,k)*zdz(i,k)/pdtime !  kg/m2/s
+      his_dh(i)=his_dh(i)-dxin*zmass(i,k)/pdtime !  kg/m2/s
+      d_tr_insc(i,k,it)=dxin
+
+!  below-cloud impaction
+    IF(it.eq.1) then
+      d_tr_bcscav(i,k,it)=0.
+    ELSE
+     pr=0.5*(flxr(i,k)+flxr(i,k+1))
+     ps=0.5*(flxs(i,k)+flxs(i,k+1))
+     water=pr*alpha_r/R_r/rho_water
+     ice=ps*alpha_s/R_s/rho_ice
+     dxbc(i,k)=-3./4.*tr_seri(i,k,it)*pdtime*(water+ice)
+!   add tracers from below cloud scav in his_dh
+     his_dh(i)=his_dh(i)-dxbc(i,k)*zmass(i,k)/pdtime !  kg/m2/s
+     d_tr_bcscav(i,k,it)=dxbc(i,k)
+    ENDIF
+
+!  reevaporation
+      deltaP(i,k)=flxr(i,k+1)+flxs(i,k+1)-flxr(i,k)-flxs(i,k)
+      deltaP(i,k)=max(deltaP(i,k),0.)
+
+      if(flxr(i,k+1)+flxs(i,k+1).gt.1.e-16) then
+       beta_ev(i,k)=deltaP(i,k)/(flxr(i,k+1)+flxs(i,k+1))
+      else
+       beta_ev(i,k)=0.
+      endif
+
+      beta_ev(i,k)=max(min(1.,beta_ev(i,k)),0.)
+
+!jyg
+      
+      if(abs(1-(1-frac_ev)*beta_ev(i,k)).gt.1.e-16) then
+! remove tracers from precipitation owing to release by evaporation in his_dh
+!      dxev=frac_ev*beta_ev(i,k)*his_dh(i) *pdtime/(zrho(i,k)*zdz(i,k)) &
+      dxev=frac_ev*beta_ev(i,k)*his_dh(i) *pdtime/(zmass(i,k)) &
+                                      /(1 -(1-frac_ev)*beta_ev(i,k))
+       his_dh(i)=his_dh(i)*(1 - frac_ev*beta_ev(i,k) / (1 -(1-frac_ev)*beta_ev(i,k)))
+      else
+!       dxev=his_dh(i) *pdtime/(zrho(i,k)*zdz(i,k))
+       dxev=his_dh(i) *pdtime/(zmass(i,k))
+       his_dh(i)=0.
+      endif
+!      print*,  k, 'beta_ev',beta_ev
+! remove tracers from precipitation owing to release by evaporation in his_dh
+!!      dxev=frac_ev*deltaP(i,k)*pdtime * his_dh(i) /(zrho(i,k)*zdz(i,k))
+!rplmd
+!!      dxev=frac_ev*deltaP(i,k)*his_dh(i) *pdtime/(zrho(i,k)*zdz(i,k)) &
+!!                                      /max(flxr(i,k)+flxs(i,k),1.e-16)
+
+
+      d_tr_evap(i,k,it)=dxev
+!!     tendency is further added in phytrac x = x + dx
+    ENDDO !!  do i
+   ENDDO  !! do k
+
+!jyg (20130114)
+   DO i = 1,klon
+     qPrls(i,it) = his_dh(i)/max(flxr(i,1)+flxs(i,1),1.e-16)
+   ENDDO
+!jyg end
+
+
+! test de conservation
+      conserv=0.
+!      DO k= klev,1,-1
+!        DO i=1, klon
+!         conserv=conserv+d_tr_insc(i,k,it)*(paprs(i,k)-paprs(i,k+1))/RG &
+!                +d_tr_bcscav(i,k,it)*(paprs(i,k)-paprs(i,k+1))/RG  &
+!                +d_tr_evap(i,k,it)*(paprs(i,k)-paprs(i,k+1))/RG
+!      if(it.eq.3) write(*,'(I2,2X,a,e20.12,2X,a,e20.12,2X,a,e20.12,2X,a,e20.12)'),&
+!      k,'lsc conserv ',conserv,'insc',d_tr_insc(i,k,it),'bc',d_tr_bcscav(i,k,it),'ev',d_tr_evap(i,k,it)
+!       ENDDO
+!     ENDDO
+
+END SUBROUTINE lsc_scav
Index: LMDZ5/branches/testing/libf/phylmd/newmicro.F
===================================================================
--- LMDZ5/branches/testing/libf/phylmd/newmicro.F	(revision 1707)
+++ LMDZ5/branches/testing/libf/phylmd/newmicro.F	(revision 1750)
@@ -2,15 +2,13 @@
 
 
-
 !     
-      SUBROUTINE newmicro (paprs, pplay,ok_newmicro,
+      SUBROUTINE newmicro (ok_cdnc, bl95_b0, bl95_b1, 
+     .                  paprs, pplay,
      .                  t, pqlwp, pclc, pcltau, pclemi,
      .                  pch, pcl, pcm, pct, pctlwp,
-     s                  xflwp, xfiwp, xflwc, xfiwc,
-     e                  ok_aie, 
-     e                  mass_solu_aero, mass_solu_aero_pi, 
-     e                  bl95_b0, bl95_b1,
-     s                  cldtaupi, re, fl, reliq, reice)
-
+     .                  xflwp, xfiwp, xflwc, xfiwc,
+     .                  mass_solu_aero, mass_solu_aero_pi, 
+     .                  pcldtaupi, re, fl, reliq, reice)
+c
       USE dimphy
       USE phys_local_var_mod, only: scdnc,cldncl,reffclwtop,lcc,
@@ -21,61 +19,68 @@
 c======================================================================
 c Auteur(s): Z.X. Li (LMD/CNRS) date: 19930910
+c            O.   Boucher (LMD/CNRS) mise a jour en 201212
 c Objet: Calculer epaisseur optique et emmissivite des nuages
 c======================================================================
 c Arguments:
+c ok_cdnc-input-L-flag pour calculer les rayons a partir des aerosols
+c
 c t-------input-R-temperature
-c pqlwp---input-R-eau liquide nuageuse dans l'atmosphere (kg/kg)
+c pqlwp---input-R-eau liquide nuageuse dans l'atmosphere dans la partie nuageuse (kg/kg)
 c pclc----input-R-couverture nuageuse pour le rayonnement (0 a 1)
-c 
-c ok_aie--input-L-apply aerosol indirect effect or not
 c mass_solu_aero-----input-R-total mass concentration for all soluble aerosols[ug/m^3]
-c mass_solu_aero_pi--input-R-dito, pre-industrial value
-c bl95_b0-input-R-a parameter, may be varied for tests (s-sea, l-land)
-c bl95_b1-input-R-a parameter, may be varied for tests (    -"-      )
+c mass_solu_aero_pi--input-R-ditto, pre-industrial value
+c
+c bl95_b0-input-R-a PARAMETER, may be varied for tests (s-sea, l-land)
+c bl95_b1-input-R-a PARAMETER, may be varied for tests (    -"-      )
 c      
-c cldtaupi-output-R-pre-industrial value of cloud optical thickness, 
-c                   needed for the diagnostics of the aerosol indirect 
-c                   radiative forcing (see radlwsw)
 c re------output-R-Cloud droplet effective radius multiplied by fl [um]
 c fl------output-R-Denominator to re, introduced to avoid problems in
 c                  the averaging of the output. fl is the fraction of liquid
 c                  water clouds within a grid cell           
+c
 c pcltau--output-R-epaisseur optique des nuages
 c pclemi--output-R-emissivite des nuages (0 a 1)
+c pcldtaupi-output-R-pre-industrial value of cloud optical thickness, 
+c
+c pcl-output-R-2D low-level cloud cover
+c pcm-output-R-2D mid-level cloud cover
+c pch-output-R-2D high-level cloud cover
+c pct-output-R-2D total cloud cover
 c======================================================================
 C
 #include "YOMCST.h"
-c
-cym#include "dimensions.h"
-cym#include "dimphy.h"
 #include "nuage.h"
-cIM cf. CR: include pour NOVLP et ZEPSEC
 #include "radepsi.h"
 #include "radopt.h"
+
 c choix de l'hypothese de recouvrememnt nuageuse
-      LOGICAL RANDOM,MAXIMUM_RANDOM,MAXIMUM
-      parameter (RANDOM=.FALSE., MAXIMUM_RANDOM=.TRUE., MAXIMUM=.FALSE.)
+      LOGICAL RANDOM, MAXIMUM_RANDOM, MAXIMUM
+      PARAMETER (RANDOM=.FALSE., MAXIMUM_RANDOM=.TRUE., MAXIMUM=.FALSE.)
+c
       LOGICAL, SAVE :: FIRST=.TRUE.
 !$OMP THREADPRIVATE(FIRST)
-c Hypoyhese de recouvrement : MAXIMUM_RANDOM
       INTEGER flag_max
-      REAL phase3d(klon, klev),dh(klon, klev),pdel(klon, klev),
-     .     zrho(klon, klev)
-      REAL tcc(klon), ftmp(klon), lcc_integrat(klon), height(klon)
+c
+c threshold PARAMETERs
       REAL thres_tau,thres_neb
       PARAMETER (thres_tau=0.3, thres_neb=0.001)
-      REAL t_tmp
-      REAL gravit
-      PARAMETER (gravit=9.80616)  !m/s2
-      REAL pqlwpcon(klon, klev), pqlwpstra(klon, klev) 
-c
-      REAL paprs(klon,klev+1), pplay(klon,klev)
+c
+      REAL phase3d(klon, klev)
+      REAL tcc(klon), ftmp(klon), lcc_integrat(klon), height(klon)
+c
+      REAL paprs(klon,klev+1)
+      REAL pplay(klon,klev)
       REAL t(klon,klev)
-c
       REAL pclc(klon,klev)
       REAL pqlwp(klon,klev)
-      REAL pcltau(klon,klev), pclemi(klon,klev)
-c
-      REAL pct(klon), pctlwp(klon), pch(klon), pcl(klon), pcm(klon)
+      REAL pcltau(klon,klev)
+      REAL pclemi(klon,klev)
+      REAL pcldtaupi(klon, klev)
+c
+      REAL pct(klon)
+      REAL pcl(klon)
+      REAL pcm(klon)
+      REAL pch(klon)
+      REAL pctlwp(klon)
 c
       LOGICAL lo
@@ -85,45 +90,34 @@
 !      PARAMETER (cetahb = 0.45, cetamb = 0.80)
 ! Remplacer
-!cetahb*paprs(i,1) par  prmhc
-!cetamb*paprs(i,1) par  prlmc 
-      REAL prmhc    ! Pressure between medium and high level cloud
-      REAL prlmc    ! Pressure between low and medium level cloud
+! cetahb*paprs(i,1) par  prmhc
+! cetamb*paprs(i,1) par  prlmc 
+      REAL prmhc    ! Pressure between medium and high level cloud in Pa
+      REAL prlmc    ! Pressure between low and medium level cloud in Pa
       PARAMETER (prmhc = 440.*100., prlmc = 680.*100.)
-
 C
       INTEGER i, k
-cIM: 091003   REAL zflwp, zradef, zfice, zmsac
-      REAL zflwp(klon), zradef, zfice, zmsac
-cIM: 091003 rajout
       REAL xflwp(klon), xfiwp(klon)
       REAL xflwc(klon,klev), xfiwc(klon,klev)
 c
-      REAL radius, rad_chaud
-cc      PARAMETER (rad_chau1=13.0, rad_chau2=9.0, rad_froid=35.0)
-ccc      PARAMETER (rad_chaud=15.0, rad_froid=35.0)
-c sintex initial      PARAMETER (rad_chaud=10.0, rad_froid=30.0)
-      REAL coef, coef_froi, coef_chau
+      REAL radius
+c
+      REAL coef_froi, coef_chau
       PARAMETER (coef_chau=0.13, coef_froi=0.09)
+c
       REAL seuil_neb
       PARAMETER (seuil_neb=0.001)
+c
       INTEGER nexpo ! exponentiel pour glace/eau
       PARAMETER (nexpo=6)
-ccc      PARAMETER (nexpo=1)
-
-c -- sb:
-      logical ok_newmicro
-c     parameter (ok_newmicro=.FALSE.)
-cIM: 091003   real rel, tc, rei, zfiwp
-      real rel, tc, rei, zfiwp(klon)
-      real k_liq, k_ice0, k_ice, DF
-      parameter (k_liq=0.0903, k_ice0=0.005) ! units=m2/g
-      parameter (DF=1.66) ! diffusivity factor
-c sb --
+c      PARAMETER (nexpo=1)
+
+      REAL rel, tc, rei
+      REAL k_ice0, k_ice, DF
+      PARAMETER (k_ice0=0.005) ! units=m2/g
+      PARAMETER (DF=1.66) ! diffusivity factor
+c
 cjq for the aerosol indirect effect
 cjq introduced by Johannes Quaas (quaas@lmd.jussieu.fr), 27/11/2003
 cjq      
-      LOGICAL ok_aie            ! Apply AIE or not?
-      LOGICAL ok_a1lwpdep       ! a1 LWP dependent?
-      
       REAL mass_solu_aero(klon, klev)    ! total mass concentration for all soluble aerosols [ug m-3]
       REAL mass_solu_aero_pi(klon, klev) ! - " - (pre-industrial value)
@@ -135,7 +129,7 @@
       REAL fl(klon, klev)       ! xliq * rneb (denominator to re; fraction of liquid water clouds within the grid cell)
       
+      LOGICAL ok_cdnc
       REAL bl95_b0, bl95_b1     ! Parameter in B&L 95-Formula
       
-      REAL cldtaupi(klon, klev) ! pre-industrial cloud opt thickness for diag
 cjq-end    
 cIM cf. CR:parametres supplementaires
@@ -145,14 +139,10 @@
       REAL zcloudm(klon) 
       REAL zcloudl(klon) 
-
-
-c **************************
-c *                        *
-c * DEBUT PARTIE OPTIMISEE *
-c *                        *
-c **************************
-
-      REAL diff_paprs(klon, klev), zfice1, zfice2(klon, klev)
-      REAL rad_chaud_tab(klon, klev), zflwp_var, zfiwp_var
+      REAL rhodz(klon, klev)  !--rho*dz pour la couche
+      REAL zrho(klon, klev)   !--rho pour la couche
+      REAL dh(klon, klev)     !--dz pour la couche
+      REAL zfice(klon, klev)
+      REAL rad_chaud(klon, klev) !--rayon pour les nuages chauds
+      REAL zflwp_var, zfiwp_var
       REAL d_rei_dt
 
@@ -171,286 +161,215 @@
 ! Pour retrouver les résultats numériques de la version d'origine,
 ! on impose 0.71 quand on est proche de 0.71
-
+c
       d_rei_dt=(rei_max-rei_min)/81.4
       if (abs(d_rei_dt-0.71)<1.e-4) d_rei_dt=0.71
-!      print*,'d_rei_dT ',d_rei_dt,rei_min,rei_max
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 c
 c Calculer l'epaisseur optique et l'emmissivite des nuages
-c
 c     IM inversion des DO
+c
       xflwp = 0.d0
       xfiwp = 0.d0
       xflwc = 0.d0
       xfiwc = 0.d0
-
-! Initialisation 
+c
       reliq=0.
       reice=0.
-
+c
       DO k = 1, klev
-         DO i = 1, klon
-            diff_paprs(i,k) = (paprs(i,k)-paprs(i,k+1))/RG
+        DO i = 1, klon
+c-layer calculation
+          rhodz(i,k) = (paprs(i,k)-paprs(i,k+1))/RG  ! kg/m2
+          zrho(i,k)=pplay(i,k)/t(i,k)/RD             ! kg/m3
+          dh(i,k)=rhodz(i,k)/zrho(i,k)               ! m
+c-Fraction of ice in cloud using a linear transition
+          zfice(i,k) = 1.0 - (t(i,k)-t_glace_min) / 
+     &                       (t_glace_max-t_glace_min)
+          zfice(i,k) = MIN(MAX(zfice(i,k),0.0),1.0)
+c-IM Total Liquid/Ice water content                                    
+          xflwc(i,k) = (1.-zfice(i,k))*pqlwp(i,k)
+          xfiwc(i,k) = zfice(i,k)*pqlwp(i,k)
          ENDDO
       ENDDO
 
-      IF (ok_newmicro) THEN
-
-
-         DO k = 1, klev
-            DO i = 1, klon
-c               zfice2(i,k) = 1.0 - (t(i,k)-t_glace) / (273.13-t_glace)
-               zfice2(i,k) = 1.0 - (t(i,k)-t_glace_min) / 
-     &                             (t_glace_max-t_glace_min)
-               zfice2(i,k) = MIN(MAX(zfice2(i,k),0.0),1.0)
-c     IM Total Liquid/Ice water content                                    
-               xflwc(i,k) = (1.-zfice2(i,k))*pqlwp(i,k)
-               xfiwc(i,k) = zfice2(i,k)*pqlwp(i,k)
-c     IM In-Cloud Liquid/Ice water content
-c     xflwc(i,k) = xflwc(i,k)+(1.-zfice)*pqlwp(i,k)/pclc(i,k)
-c     xfiwc(i,k) = xfiwc(i,k)+zfice*pqlwp(i,k)/pclc(i,k)
-            ENDDO
-         ENDDO
-
-         IF (ok_aie) THEN
-            DO k = 1, klev
-               DO i = 1, klon
-                                ! Formula "D" of Boucher and Lohmann, Tellus, 1995
-                                !             
-                  cdnc(i,k) = 10.**(bl95_b0+bl95_b1*
+      IF (ok_cdnc) THEN
+c
+c--we compute cloud properties as a function of the aerosol load
+c
+        DO k = 1, klev
+            DO i = 1, klon
+c
+c Formula "D" of Boucher and Lohmann, Tellus, 1995
+c Cloud droplet number concentration (CDNC) is restricted
+c to be within [20, 1000 cm^3]
+c
+c--present-day case
+                cdnc(i,k) = 10.**(bl95_b0+bl95_b1*
      &               log(MAX(mass_solu_aero(i,k),1.e-4))/log(10.))*1.e6 !-m-3
-                                ! Cloud droplet number concentration (CDNC) is restricted
-                                ! to be within [20, 1000 cm^3]
-                                ! 
-                  cdnc(i,k)=MIN(1000.e6,MAX(20.e6,cdnc(i,k)))
-                                !
-                                !
-                  cdnc_pi(i,k) = 10.**(bl95_b0+bl95_b1*
+                cdnc(i,k)=MIN(1000.e6,MAX(20.e6,cdnc(i,k)))
+c
+c--pre-industrial case
+                cdnc_pi(i,k) = 10.**(bl95_b0+bl95_b1*
      &               log(MAX(mass_solu_aero_pi(i,k),1.e-4))/log(10.))
      &               *1.e6 !-m-3
-                  cdnc_pi(i,k)=MIN(1000.e6,MAX(20.e6,cdnc_pi(i,k)))
-               ENDDO
-            ENDDO
-            DO k = 1, klev
-               DO i = 1, klon
-!                  rad_chaud_tab(i,k) = 
-!     &                 MAX(1.1e6 
-!     &                 *((pqlwp(i,k)*pplay(i,k)/(RD * T(i,k)))  
-!     &                 /(4./3*RPI*1000.*cdnc(i,k)) )**(1./3.),5.)
-                  rad_chaud_tab(i,k) = 
-     &                 1.1
-     &                 *((pqlwp(i,k)*pplay(i,k)/(RD * T(i,k)))  
-     &                 /(4./3*RPI*1000.*cdnc(i,k)) )**(1./3.)
-                  rad_chaud_tab(i,k) = MAX(rad_chaud_tab(i,k) * 1e6, 5.) 
-               ENDDO            
-            ENDDO
-         ELSE
-            DO k = 1, MIN(3,klev)
-               DO i = 1, klon
-                  rad_chaud_tab(i,k) = rad_chau2
-               ENDDO            
-            ENDDO
-            DO k = MIN(3,klev)+1, klev
-               DO i = 1, klon
-                  rad_chaud_tab(i,k) = rad_chau1
-               ENDDO            
-            ENDDO
-
-         ENDIF
-         
-         DO k = 1, klev
-!            IF(.not.ok_aie) THEN
-            rad_chaud = rad_chau1
-            IF (k.LE.3) rad_chaud = rad_chau2
-!            ENDIF
-            DO i = 1, klon
-               IF (pclc(i,k) .LE. seuil_neb) THEN
-               
-c     -- effective cloud droplet radius (microns):
-               
-c     for liquid water clouds: 
-                                ! For output diagnostics
-                                !
-                                ! Cloud droplet effective radius [um]
-                                !
-                                ! we multiply here with f * xl (fraction of liquid water
-                                ! clouds in the grid cell) to avoid problems in the
-                                ! averaging of the output.
-                                ! In the output of IOIPSL, derive the real cloud droplet 
-                                ! effective radius as re/fl
-                                !
-                                    
-                  fl(i,k) = seuil_neb*(1.-zfice2(i,k))            
-                  re(i,k) = rad_chaud_tab(i,k)*fl(i,k)
-                  
-                  rel = 0.
-                  rei = 0.
-                  pclc(i,k) = 0.0
-                  pcltau(i,k) = 0.0
-                  pclemi(i,k) = 0.0
-                  cldtaupi(i,k) = 0.0                  
-               ELSE
-
+                cdnc_pi(i,k)=MIN(1000.e6,MAX(20.e6,cdnc_pi(i,k)))
+c
+c--present-day case
+                rad_chaud(i,k) = 
+     &               1.1*((pqlwp(i,k)*pplay(i,k)/(RD * T(i,k)))  
+     &               /(4./3*RPI*1000.*cdnc(i,k)) )**(1./3.)
+                rad_chaud(i,k) = MAX(rad_chaud(i,k) * 1.e6, 5.) 
+c
+c--pre-industrial case
+                radius = 
+     &               1.1*((pqlwp(i,k)*pplay(i,k)/(RD * T(i,k)))  
+     &               /(4./3.*RPI*1000.*cdnc_pi(i,k)))**(1./3.)
+                radius = MAX(radius*1.e6, 5.) 
+c 
+c--pre-industrial case
+c--liquid/ice cloud water paths:
+                IF (pclc(i,k) .LE. seuil_neb) THEN
+c
+                pcldtaupi(i,k) = 0.0                  
+c
+                ELSE
+c                  
+                zflwp_var= 1000.*(1.-zfice(i,k))*pqlwp(i,k)/pclc(i,k)
+     &               *rhodz(i,k)
+                zfiwp_var= 1000.*zfice(i,k)*pqlwp(i,k)/pclc(i,k)
+     &               *rhodz(i,k)
+                tc = t(i,k)-273.15
+                rei = d_rei_dt*tc + rei_max
+                if (tc.le.-81.4) rei = rei_min
+c
+c-- cloud optical thickness :
+c [for liquid clouds, traditional formula, 
+c for ice clouds, Ebert & Curry (1992)] 
+c                  
+                if (zflwp_var.eq.0.) radius = 1. 
+                if (zfiwp_var.eq.0. .or. rei.le.0.) rei = 1. 
+                pcldtaupi(i,k) = 3.0/2.0 * zflwp_var / radius
+     &                 + zfiwp_var * (3.448e-03  + 2.431/rei)
+c
+                ENDIF
+c
+          ENDDO            
+        ENDDO
+c
+      ELSE !--not ok_cdnc
+c
+c-prescribed cloud droplet radius
+c
+         DO k = 1, MIN(3,klev)
+           DO i = 1, klon
+               rad_chaud(i,k) = rad_chau2
+           ENDDO            
+         ENDDO
+         DO k = MIN(3,klev)+1, klev
+           DO i = 1, klon
+               rad_chaud(i,k) = rad_chau1
+           ENDDO            
+         ENDDO
+
+      ENDIF !--ok_cdnc
+c
+c--computation of cloud optical depth and emissivity  
+c--in the general case
+c
+       DO k = 1, klev
+          DO i = 1, klon
+c
+             IF (pclc(i,k) .LE. seuil_neb) THEN
+c               
+c effective cloud droplet radius (microns) for liquid water clouds: 
+c For output diagnostics cloud droplet effective radius [um]
+c we multiply here with f * xl (fraction of liquid water
+c clouds in the grid cell) to avoid problems in the averaging of the output.
+c In the output of IOIPSL, derive the REAL cloud droplet 
+c effective radius as re/fl
+c
+                fl(i,k) = seuil_neb*(1.-zfice(i,k))            
+                re(i,k) = rad_chaud(i,k)*fl(i,k)
+                rel = 0.
+                rei = 0.
+                pclc(i,k)   = 0.0
+                pcltau(i,k) = 0.0
+                pclemi(i,k) = 0.0
+c
+             ELSE
+c
 c     -- liquid/ice cloud water paths:
                   
-                  zflwp_var= 1000.*(1.-zfice2(i,k))*pqlwp(i,k)/pclc(i,k)
-     &                 *diff_paprs(i,k)
-                  zfiwp_var= 1000.*zfice2(i,k)*pqlwp(i,k)/pclc(i,k)
-     &                 *diff_paprs(i,k)
-                  
-c     -- effective cloud droplet radius (microns):
-               
-c     for liquid water clouds: 
-                                    
-                  IF (ok_aie) THEN
-                     radius = 
-     &                    1.1
-     &                    *((pqlwp(i,k)*pplay(i,k)/(RD * T(i,k)))  
-     &                    /(4./3.*RPI*1000.*cdnc_pi(i,k)))**(1./3.)
-                     radius = MAX(radius*1e6, 5.) 
-                  
-                     tc = t(i,k)-273.15
-                     rei = d_rei_dt*tc + rei_max
-                     if (tc.le.-81.4) rei = rei_min
-                     if (zflwp_var.eq.0.) radius = 1. 
-                     if (zfiwp_var.eq.0. .or. rei.le.0.) rei = 1. 
-                     cldtaupi(i,k) = 3.0/2.0 * zflwp_var / radius
-     &                    + zfiwp_var * (3.448e-03  + 2.431/rei)
-
-                  ENDIF         ! ok_aie
-                                ! For output diagnostics
-                                !
-                                ! Cloud droplet effective radius [um]
-                                !
-                                ! we multiply here with f * xl (fraction of liquid water
-                                ! clouds in the grid cell) to avoid problems in the
-                                ! averaging of the output.
-                                ! In the output of IOIPSL, derive the real cloud droplet 
-                                ! effective radius as re/fl
-                                !
- 
-                  fl(i,k) = pclc(i,k)*(1.-zfice2(i,k))            
-                  re(i,k) = rad_chaud_tab(i,k)*fl(i,k)
-                  
-                  rel = rad_chaud_tab(i,k)
-c     for ice clouds: as a function of the ambiant temperature
-c     [formula used by Iacobellis and Somerville (2000), with an 
-c     asymptotical value of 3.5 microns at T<-81.4 C added to be 
-c     consistent with observations of Heymsfield et al. 1986]:
-c  2011/05/24 : rei_min = 3.5 becomes a free parameter as well as rei_max=61.29
-                  tc = t(i,k)-273.15
-                  rei = d_rei_dt*tc + rei_max
-                  if (tc.le.-81.4) rei = rei_min
-c     -- cloud optical thickness :
-               
-c     [for liquid clouds, traditional formula, 
-c     for ice clouds, Ebert & Curry (1992)] 
-                  
+                zflwp_var= 1000.*(1.-zfice(i,k))*pqlwp(i,k)/pclc(i,k)
+     &               *rhodz(i,k)
+                zfiwp_var= 1000.*zfice(i,k)*pqlwp(i,k)/pclc(i,k)
+     &               *rhodz(i,k)
+c               
+c effective cloud droplet radius (microns) for liquid water clouds: 
+c For output diagnostics cloud droplet effective radius [um]
+c we multiply here with f * xl (fraction of liquid water
+c clouds in the grid cell) to avoid problems in the averaging of the output.
+c In the output of IOIPSL, derive the REAL cloud droplet 
+c effective radius as re/fl
+c 
+                fl(i,k) = pclc(i,k)*(1.-zfice(i,k))            
+                re(i,k) = rad_chaud(i,k)*fl(i,k)
+c 
+                rel = rad_chaud(i,k)
+c
+c for ice clouds: as a function of the ambiant temperature
+c [formula used by Iacobellis and Somerville (2000), with an 
+c asymptotical value of 3.5 microns at T<-81.4 C added to be 
+c consistent with observations of Heymsfield et al. 1986]:
+c 2011/05/24 : rei_min = 3.5 becomes a free PARAMETER as well as rei_max=61.29
+c
+                tc = t(i,k)-273.15
+                rei = d_rei_dt*tc + rei_max
+                if (tc.le.-81.4) rei = rei_min
+c
+c-- cloud optical thickness :
+c [for liquid clouds, traditional formula, 
+c for ice clouds, Ebert & Curry (1992)] 
+c                  
                  if (zflwp_var.eq.0.) rel = 1. 
                  if (zfiwp_var.eq.0. .or. rei.le.0.) rei = 1. 
                  pcltau(i,k) = 3.0/2.0 * ( zflwp_var/rel )
      &                 + zfiwp_var * (3.448e-03  + 2.431/rei)
+c
 c     -- cloud infrared emissivity:
-               
-c     [the broadband infrared absorption coefficient is parameterized
+c     [the broadband infrared absorption coefficient is PARAMETERized
 c     as a function of the effective cld droplet radius]
-               
 c     Ebert and Curry (1992) formula as used by Kiehl & Zender (1995):
+c
                   k_ice = k_ice0 + 1.0/rei
-                  
+c                 
                   pclemi(i,k) = 1.0
      &                 - EXP( -coef_chau*zflwp_var - DF*k_ice*zfiwp_var)
-
-               ENDIF
-              reliq(i,k)=rel
-              reice(i,k)=rei 
-!              if (i.eq.1) then
-!              print*,'Dans newmicro rel, rei :',rel, rei
-!              print*,'Dans newmicro reliq, reice :',
-!     $             reliq(i,k),reice(i,k)
-!              endif
-
-            ENDDO
-         ENDDO
-
+c
+             ENDIF
+c
+             reliq(i,k)=rel
+             reice(i,k)=rei 
+c
+             xflwp(i) = xflwp(i)+ xflwc(i,k) * rhodz(i,k)
+             xfiwp(i) = xfiwp(i)+ xfiwc(i,k) * rhodz(i,k)
+c
+          ENDDO
+       ENDDO
+c
+c--if cloud droplet radius is fixed, then pcldtaupi=pcltau
+c
+      IF (.NOT.ok_cdnc) THEN
          DO k = 1, klev
             DO i = 1, klon
-               xflwp(i) = xflwp(i)+ xflwc(i,k) * diff_paprs(i,k)
-               xfiwp(i) = xfiwp(i)+ xfiwc(i,k) * diff_paprs(i,k)
-            ENDDO
-         ENDDO
-
-      ELSE
-         DO k = 1, klev
-            rad_chaud = rad_chau1
-            IF (k.LE.3) rad_chaud = rad_chau2
-            DO i = 1, klon
-                              
-               IF (pclc(i,k) .LE. seuil_neb) THEN
-
-                  pclc(i,k) = 0.0
-                  pcltau(i,k) = 0.0
-                  pclemi(i,k) = 0.0
-                  cldtaupi(i,k) = 0.0
-
-               ELSE
-
-                  zflwp_var = 1000.*pqlwp(i,k)*diff_paprs(i,k)
-     &                 /pclc(i,k)
-                  
-                  zfice1 = MIN(
-     &                 MAX( 1.0 - (t(i,k)-t_glace_min) / 
-     &                    (t_glace_max-t_glace_min),0.0),1.0)**nexpo
-                  
-                  radius = rad_chaud * (1.-zfice1) + rad_froid * zfice1
-                  coef   = coef_chau * (1.-zfice1) + coef_froi * zfice1
-
-                  pcltau(i,k) = 3.0 * zflwp_var / (2.0 * radius)
-                  pclemi(i,k) = 1.0 - EXP( - coef * zflwp_var)
-
-               ENDIF
-                              
-            ENDDO
-         ENDDO
-      ENDIF
-      
-      IF (.NOT.ok_aie) THEN
-         DO k = 1, klev
-            DO i = 1, klon
-               cldtaupi(i,k)=pcltau(i,k)
+               pcldtaupi(i,k)=pcltau(i,k)
             ENDDO
          ENDDO               
       ENDIF
-
-ccc   DO k = 1, klev
-ccc   DO i = 1, klon
-ccc   t(i,k) = t(i,k)
-ccc   pclc(i,k) = MAX( 1.e-5 , pclc(i,k) )
-ccc   lo = pclc(i,k) .GT. (2.*1.e-5)
-ccc   zflwp = pqlwp(i,k)*1000.*(paprs(i,k)-paprs(i,k+1))
-ccc   .          /(rg*pclc(i,k))
-ccc   zradef = 10.0 + (1.-sigs(k))*45.0
-ccc   pcltau(i,k) = 1.5 * zflwp / zradef
-ccc   zfice=1.0-MIN(MAX((t(i,k)-263.)/(273.-263.),0.0),1.0)
-ccc   zmsac = 0.13*(1.0-zfice) + 0.08*zfice
-ccc   pclemi(i,k) = 1.-EXP(-zmsac*zflwp)
-ccc   if (.NOT.lo) pclc(i,k) = 0.0
-ccc   if (.NOT.lo) pcltau(i,k) = 0.0
-ccc   if (.NOT.lo) pclemi(i,k) = 0.0
-ccc   ENDDO
-ccc   ENDDO
-ccccc print*, 'pas de nuage dans le rayonnement'
-ccccc DO k = 1, klev
-ccccc DO i = 1, klon
-ccccc pclc(i,k) = 0.0
-ccccc pcltau(i,k) = 0.0
-ccccc pclemi(i,k) = 0.0
-ccccc ENDDO
-ccccc ENDDO
 C     
 C     COMPUTE CLOUD LIQUID PATH AND TOTAL CLOUDINESS
-C     
 c     IM cf. CR:test: calcul prenant ou non en compte le recouvrement
 c     initialisations
+c
       DO i=1,klon
          zclear(i)=1.
@@ -465,30 +384,32 @@
       ENDDO
 C
-cIM cf CR DO k=1,klev
+c--calculation of liquid water path
+c
       DO k = klev, 1, -1
          DO i = 1, klon
-            pctlwp(i) = pctlwp(i) 
-     &           + pqlwp(i,k)*diff_paprs(i,k)
+            pctlwp(i) = pctlwp(i)+ pqlwp(i,k)*rhodz(i,k)
          ENDDO
       ENDDO
-c     IM cf. CR
+c     
+c--calculation of cloud properties with cloud overlap
+c
       IF (NOVLP.EQ.1) THEN
          DO k = klev, 1, -1
             DO i = 1, klon
                zclear(i)=zclear(i)*(1.-MAX(pclc(i,k),zcloud(i)))
-     &              /(1.-MIN(real(zcloud(i), kind=8),1.-ZEPSEC))
+     &              /(1.-MIN(REAL(zcloud(i), kind=8),1.-ZEPSEC))
                pct(i)=1.-zclear(i) 
                IF (paprs(i,k).LT.prmhc) THEN
                   pch(i) = pch(i)*(1.-MAX(pclc(i,k),zcloudh(i)))
-     &                 /(1.-MIN(real(zcloudh(i), kind=8),1.-ZEPSEC))
+     &                 /(1.-MIN(REAL(zcloudh(i), kind=8),1.-ZEPSEC))
                   zcloudh(i)=pclc(i,k)
                ELSE IF (paprs(i,k).GE.prmhc .AND.
      &                 paprs(i,k).LT.prlmc) THEN
                   pcm(i) = pcm(i)*(1.-MAX(pclc(i,k),zcloudm(i)))
-     &                 /(1.-MIN(real(zcloudm(i), kind=8),1.-ZEPSEC))
+     &                 /(1.-MIN(REAL(zcloudm(i), kind=8),1.-ZEPSEC))
                   zcloudm(i)=pclc(i,k)
                ELSE IF (paprs(i,k).GE.prlmc) THEN 
                   pcl(i) = pcl(i)*(1.-MAX(pclc(i,k),zcloudl(i)))
-     &                 /(1.-MIN(real(zcloudl(i), kind=8),1.-ZEPSEC))
+     &                 /(1.-MIN(REAL(zcloudl(i), kind=8),1.-ZEPSEC))
                   zcloudl(i)=pclc(i,k)
                endif
@@ -527,27 +448,26 @@
          ENDDO
       ENDIF
-      
 C     
       DO i = 1, klon
-c     IM cf. CR          pct(i)=1.-pct(i)
          pch(i)=1.-pch(i)
          pcm(i)=1.-pcm(i)
          pcl(i)=1.-pcl(i)
       ENDDO
-
+c
 c ========================================================
-! DIAGNOSTICS CALCULATION FOR CMIP5 PROTOCOL
+c DIAGNOSTICS CALCULATION FOR CMIP5 PROTOCOL
 c ========================================================
-!! change by Nicolas Yan (LSCE) 
-!! Cloud Droplet Number Concentration (CDNC) : 3D variable
-!! Fractionnal cover by liquid water cloud (LCC3D) : 3D variable
-!! Cloud Droplet Number Concentration at top of cloud (CLDNCL) : 2D variable
-!! Droplet effective radius at top of cloud (REFFCLWTOP) : 2D variable
-!! Fractionnal cover by liquid water at top of clouds (LCC) : 2D variable
-      IF (ok_newmicro) THEN
-         IF (ok_aie) THEN
+c change by Nicolas Yan (LSCE) 
+c Cloud Droplet Number Concentration (CDNC) : 3D variable
+c Fractionnal cover by liquid water cloud (LCC3D) : 3D variable
+c Cloud Droplet Number Concentration at top of cloud (CLDNCL) : 2D variable
+c Droplet effective radius at top of cloud (REFFCLWTOP) : 2D variable
+c Fractionnal cover by liquid water at top of clouds (LCC) : 2D variable
+c
+         IF (ok_cdnc) THEN
+c
             DO k = 1, klev
                DO i = 1, klon
-                  phase3d(i,k)=1-zfice2(i,k)
+                  phase3d(i,k)=1-zfice(i,k)
                   IF (pclc(i,k) .LE. seuil_neb) THEN
                      lcc3d(i,k)=seuil_neb*phase3d(i,k)
@@ -558,5 +478,5 @@
                ENDDO
             ENDDO
-
+c
             DO i=1,klon
                lcc(i)=0.
@@ -566,23 +486,16 @@
                IF(MAXIMUM) tcc(i) = 0.
             ENDDO
-     
-
+c
             DO i=1,klon
                DO k=klev-1,1,-1 !From TOA down
-
-
+c
             ! Test, if the cloud optical depth exceeds the necessary
             ! threshold:
 
-             IF (pcltau(i,k).GT.thres_tau .AND. pclc(i,k).GT.thres_neb)
-     .                                                             THEN
-               ! To calculate the right Temperature at cloud top,
-               ! interpolate it between layers:
-                  t_tmp = t(i,k) +
-     .              (paprs(i,k+1)-pplay(i,k))/(pplay(i,k+1)-pplay(i,k))
-     .              * ( t(i,k+1) - t(i,k) )
-
-                  IF(MAXIMUM) THEN
-                    IF(FIRST) THEN
+             IF (pcltau(i,k).GT.thres_tau 
+     .            .AND. pclc(i,k).GT.thres_neb) THEN
+
+                  IF (MAXIMUM) THEN
+                    IF (FIRST) THEN
                        write(*,*)'Hypothese de recouvrement: MAXIMUM'
                        FIRST=.FALSE.
@@ -592,6 +505,6 @@
                   ENDIF
 
-                  IF(RANDOM) THEN
-                    IF(FIRST) THEN
+                  IF (RANDOM) THEN
+                    IF (FIRST) THEN
                        write(*,*)'Hypothese de recouvrement: RANDOM'
                        FIRST=.FALSE.
@@ -601,6 +514,6 @@
                   ENDIF
 
-                  IF(MAXIMUM_RANDOM) THEN
-                    IF(FIRST) THEN
+                  IF (MAXIMUM_RANDOM) THEN
+                    IF (FIRST) THEN
                        write(*,*)'Hypothese de recouvrement: MAXIMUM_
      .                         RANDOM'
@@ -613,5 +526,5 @@
                   ENDIF
 c Effective radius of cloud droplet at top of cloud (m)
-                  reffclwtop(i) = reffclwtop(i) + rad_chaud_tab(i,k) * 
+                  reffclwtop(i) = reffclwtop(i) + rad_chaud(i,k) * 
      .           1.0E-06 * phase3d(i,k) * ( tcc(i) - ftmp(i))*flag_max
 c CDNC at top of cloud (m-3)
@@ -626,6 +539,7 @@
           ENDIF ! is there a visible, not-too-small cloud?  
           ENDDO ! loop over k
-
-          IF(RANDOM .OR. MAXIMUM_RANDOM) tcc(i)=1.-tcc(i)
+c
+          IF (RANDOM .OR. MAXIMUM_RANDOM) tcc(i)=1.-tcc(i)
+c
          ENDDO ! loop over i
 
@@ -633,48 +547,23 @@
             DO i = 1, klon
                DO k = 1, klev
-                  pqlwpcon(i,k)=rnebcon(i,k)*clwcon(i,k) ! fraction eau liquide convective
-                  pqlwpstra(i,k)=pclc(i,k)*phase3d(i,k)-pqlwpcon(i,k) ! fraction eau liquide stratiforme
-                  IF (pqlwpstra(i,k) .LE. 0.0) pqlwpstra(i,k)=0.0
+! Weight to be used for outputs: eau_liquide*couverture nuageuse
+                  lcc3dcon(i,k) =rnebcon(i,k)*phase3d(i,k)*clwcon(i,k)  ! eau liquide convective
+                  lcc3dstra(i,k)=pclc(i,k)*pqlwp(i,k)*phase3d(i,k)
+                  lcc3dstra(i,k)=lcc3dstra(i,k)-lcc3dcon(i,k)           ! eau liquide stratiforme
+                  lcc3dstra(i,k)=MAX(lcc3dstra(i,k),0.0)
+! Compute cloud droplet radius as above in meter
+                  radius=1.1*((pqlwp(i,k)*pplay(i,k)/(RD * T(i,k)))  
+     &               /(4./3*RPI*1000.*cdnc(i,k)) )**(1./3.)
+                  radius=MAX(radius, 5.e-6) 
 ! Convective Cloud Droplet Effective Radius (REFFCLWC) : variable 3D
-                  reffclwc(i,k)=1.1
-     &                 *((pqlwpcon(i,k)*pplay(i,k)/(RD * T(i,k)))
-     &                 /(4./3*RPI*1000.*cdnc(i,k)) )**(1./3.)
-                  reffclwc(i,k) = MAX(reffclwc(i,k) * 1e6, 5.)
-
+                  reffclwc(i,k)=radius
+                  reffclwc(i,k)=reffclwc(i,k)*lcc3dcon(i,k)
 ! Stratiform Cloud Droplet Effective Radius (REFFCLWS) : variable 3D
-                  IF ((pclc(i,k)-rnebcon(i,k)) .LE. seuil_neb) THEN ! tout sous la forme convective
-                     reffclws(i,k)=0.0
-                     lcc3dstra(i,k)= 0.0
-                  ELSE
-                     reffclws(i,k) = (pclc(i,k)*phase3d(i,k)*
-     &                               rad_chaud_tab(i,k)-
-     &                            pqlwpcon(i,k)*reffclwc(i,k))
-                     IF(reffclws(i,k) .LE. 0.0) reffclws(i,k)=0.0
-                     lcc3dstra(i,k)=pqlwpstra(i,k)
-                 ENDIF
-!Convertion from um to m
-                  IF(rnebcon(i,k). LE. seuil_neb) THEN
-                    reffclwc(i,k) = reffclwc(i,k)*seuil_neb*clwcon(i,k)
-     &                              *1.0E-06
-                    lcc3dcon(i,k)= seuil_neb*clwcon(i,k)
-                  ELSE
-                    reffclwc(i,k) = reffclwc(i,k)*pqlwpcon(i,k)
-     &                              *1.0E-06
-                    lcc3dcon(i,k) = pqlwpcon(i,k)
-                  ENDIF
-
-                  reffclws(i,k) = reffclws(i,k)*1.0E-06
-
+                  reffclws(i,k)=radius
+                  reffclws(i,k)=reffclws(i,k)*lcc3dstra(i,k)
                ENDDO !klev
             ENDDO !klon 
-
-!! Column Integrated Cloud Droplet Number (CLDNVI) : variable 2D
-            DO k = 1, klev
-               DO i = 1, klon
-                   pdel(i,k) = paprs(i,k)-paprs(i,k+1)
-                   zrho(i,k)=pplay(i,k)/t(i,k)/RD                  ! kg/m3
-                   dh(i,k)=pdel(i,k)/(gravit*zrho(i,k)) ! hauteur de chaque boite (m)
-               ENDDO
-            ENDDO
+c
+c Column Integrated Cloud Droplet Number (CLDNVI) : variable 2D
 c
             DO i = 1, klon
@@ -697,21 +586,20 @@
             DO i = 1, klon
                DO k = 1, klev
-                IF (scdnc(i,k) .LE. 0.0) scdnc(i,k)=0.0
-                IF (reffclws(i,k) .LE. 0.0) reffclws(i,k)=0.0
-                IF (reffclwc(i,k) .LE. 0.0) reffclwc(i,k)=0.0
-                IF (lcc3d(i,k) .LE. 0.0) lcc3d(i,k)=0.0
-                IF (lcc3dcon(i,k) .LE. 0.0) lcc3dcon(i,k)=0.0
+                IF (scdnc(i,k) .LE. 0.0)     scdnc(i,k)=0.0
+                IF (reffclws(i,k) .LE. 0.0)  reffclws(i,k)=0.0
+                IF (reffclwc(i,k) .LE. 0.0)  reffclwc(i,k)=0.0
+                IF (lcc3d(i,k) .LE. 0.0)     lcc3d(i,k)=0.0
+                IF (lcc3dcon(i,k) .LE. 0.0)  lcc3dcon(i,k)=0.0
                 IF (lcc3dstra(i,k) .LE. 0.0) lcc3dstra(i,k)=0.0
                ENDDO
-               IF (reffclwtop(i) .LE. 0.0) reffclwtop(i)=0.0
-               IF (cldncl(i) .LE. 0.0) cldncl(i)=0.0
-               IF (cldnvi(i) .LE. 0.0) cldnvi(i)=0.0
-               IF (lcc(i) .LE. 0.0) lcc(i)=0.0
+               IF (reffclwtop(i) .LE. 0.0)  reffclwtop(i)=0.0
+               IF (cldncl(i) .LE. 0.0)      cldncl(i)=0.0
+               IF (cldnvi(i) .LE. 0.0)      cldnvi(i)=0.0
+               IF (lcc(i) .LE. 0.0)         lcc(i)=0.0
             ENDDO
-
-         ENDIF !ok_aie
-      ENDIF !ok newmicro
-c
-C
+c
+      ENDIF !ok_cdnc
+c
       RETURN
+c
       END
Index: LMDZ5/branches/testing/libf/phylmd/orografi_strato.F
===================================================================
--- LMDZ5/branches/testing/libf/phylmd/orografi_strato.F	(revision 1707)
+++ LMDZ5/branches/testing/libf/phylmd/orografi_strato.F	(revision 1750)
@@ -2004,9 +2004,9 @@
 
       DO 110 JK=1,NLEV
-      ZPM1R=pplay_glo(klon_glo/2,jk)/paprs_glo(klon_glo/2+1,1) 
+      ZPM1R=pplay_glo(klon_glo/2+1,jk)/paprs_glo(klon_glo/2+1,1) 
       IF(ZPM1R.GE.ZSIGT)THEN
          nktopg=JK
       ENDIF
-      ZPM1R=pplay_glo(klon_glo/2,jk)/paprs_glo(klon_glo/2+1,1) 
+      ZPM1R=pplay_glo(klon_glo/2+1,jk)/paprs_glo(klon_glo/2+1,1) 
       IF(ZPM1R.GE.ZTOP)THEN
          nstra=JK
Index: LMDZ5/branches/testing/libf/phylmd/phys_local_var_mod.F90
===================================================================
--- LMDZ5/branches/testing/libf/phylmd/phys_local_var_mod.F90	(revision 1707)
+++ LMDZ5/branches/testing/libf/phylmd/phys_local_var_mod.F90	(revision 1750)
@@ -24,4 +24,8 @@
       REAL, SAVE, ALLOCATABLE :: d_u_dyn(:,:), d_v_dyn(:,:)
       !$OMP THREADPRIVATE(d_u_dyn, d_v_dyn)
+!!!!
+      REAL, SAVE, ALLOCATABLE :: d_tr_dyn(:,:,:)
+      !$OMP THREADPRIVATE(d_tr_dyn)
+!!!!
       REAL, SAVE, ALLOCATABLE :: d_t_con(:,:),d_q_con(:,:)
       !$OMP THREADPRIVATE(d_t_con,d_q_con)
@@ -199,4 +203,5 @@
       allocate(d_t_dyn(klon,klev),d_q_dyn(klon,klev))
       allocate(d_u_dyn(klon,klev),d_v_dyn(klon,klev))
+      allocate(d_tr_dyn(klon,klev,nbtr))                   !RomP
       allocate(d_t_con(klon,klev),d_q_con(klon,klev))
       allocate(d_u_con(klon,klev),d_v_con(klon,klev))
@@ -287,4 +292,5 @@
       deallocate(d_t_dyn,d_q_dyn)
       deallocate(d_u_dyn,d_v_dyn)
+      deallocate(d_tr_dyn)                      !RomP
       deallocate(d_t_con,d_q_con)
       deallocate(d_u_con,d_v_con)
Index: LMDZ5/branches/testing/libf/phylmd/phys_output_mod.F90
===================================================================
--- LMDZ5/branches/testing/libf/phylmd/phys_output_mod.F90	(revision 1707)
+++ LMDZ5/branches/testing/libf/phylmd/phys_output_mod.F90	(revision 1750)
@@ -190,4 +190,9 @@
        ctrl_out((/ 1, 6, 10, 10, 10, 10 /),'tsol_sic') /)
 
+  type(ctrl_out),save,dimension(4) :: o_evappot_srf  = (/ ctrl_out((/ 1, 6, 10, 10, 10, 10 /),'evappot_ter'), &
+       ctrl_out((/ 4, 6, 10, 10, 10, 10 /),'evappot_lic'), &
+       ctrl_out((/ 4, 6, 10, 10, 10, 10 /),'evappot_oce'), &
+       ctrl_out((/ 4, 6, 10, 10, 10, 10 /),'evappot_sic') /)
+
   type(ctrl_out),save,dimension(4) :: o_sens_srf     = (/ ctrl_out((/ 1, 6, 10, 7, 10, 10 /),'sens_ter'), &
        ctrl_out((/ 1, 6, 10, 7, 10, 10 /),'sens_lic'), &
@@ -475,4 +480,5 @@
   type(ctrl_out),save :: o_rneb         = ctrl_out((/ 2, 5, 10, 10, 10, 10 /),'rneb')
   type(ctrl_out),save :: o_rnebcon      = ctrl_out((/ 2, 5, 10, 10, 10, 10 /),'rnebcon')
+  type(ctrl_out),save :: o_rnebls       = ctrl_out((/ 2, 5, 10, 10, 10, 10 /),'rnebls')
   type(ctrl_out),save :: o_rhum         = ctrl_out((/ 2, 5, 10, 10, 10, 10 /),'rhum')
   type(ctrl_out),save :: o_ozone        = ctrl_out((/ 2, 10, 10, 10, 10, 10 /),'ozone')
@@ -534,4 +540,6 @@
   type(ctrl_out),save :: o_wake_deltaq  = ctrl_out((/ 4, 5, 10, 10, 10, 10 /),'wake_deltaq')
   type(ctrl_out),save :: o_wake_omg     = ctrl_out((/ 4, 5, 10, 10, 10, 10 /),'wake_omg')
+  type(ctrl_out),save :: o_wdtrainA     = ctrl_out((/ 4, 1, 10,  4,  1, 10 /),'wdtrainA') !<<RomP
+  type(ctrl_out),save :: o_wdtrainM     = ctrl_out((/ 4, 1, 10,  4,  1, 10 /),'wdtrainM') !<<RomP
   type(ctrl_out),save :: o_Vprecip      = ctrl_out((/ 10, 10, 10, 10, 10, 10 /),'Vprecip')
   type(ctrl_out),save :: o_ftd          = ctrl_out((/ 4, 5, 10, 10, 10, 10 /),'ftd')
@@ -540,4 +548,5 @@
   type(ctrl_out),save :: o_dtlschr      = ctrl_out((/ 4, 10, 10, 10, 10, 10 /),'dtlschr')
   type(ctrl_out),save :: o_dqlsc        = ctrl_out((/ 4, 10, 10, 10, 10, 10 /),'dqlsc')
+  type(ctrl_out),save :: o_beta_prec    = ctrl_out((/ 4, 10, 10, 10, 10, 10 /),'beta_prec')
   type(ctrl_out),save :: o_dtvdf        = ctrl_out((/ 4, 10, 10, 10, 10, 10 /),'dtvdf')
   type(ctrl_out),save :: o_dqvdf        = ctrl_out((/ 4, 10, 10, 10, 10, 10 /),'dqvdf')
@@ -653,5 +662,5 @@
     USE infotrac
     USE ioipsl
-!    USE phys_cal_mod, only : hour
+    USE phys_cal_mod, only : hour
     USE mod_phys_lmdz_para
     USE aero_mod, only : naero_spc,name_aero
@@ -840,5 +849,11 @@
 
           idayref = day_ref
-          CALL ymds2ju(annee_ref, 1, idayref, 0.0, zjulian)       
+!          CALL ymds2ju(annee_ref, 1, idayref, 0.0, zjulian)       
+! correction pour l heure initiale                               !jyg 
+!                                                                !jyg 
+          CALL ymds2ju(annee_ref, 1, idayref, hour, zjulian)         !jyg
+! correction pour l heure initiale                               !jyg 
+!                                                                !jyg 
+!!!      CALL ymds2ju(annee_ref, 1, idayref, 0.0, zjulian)       !jyg 
 ! correction pour l heure initiale                               !jyg 
 !                                                                !jyg 
@@ -1042,4 +1057,6 @@
                   o_tsol_srf(nsrf)%flag,o_tsol_srf(nsrf)%name,"Temperature "//clnsurf(nsrf),"K")
              CALL histdef2d(iff,clef_stations(iff), &
+                  o_evappot_srf(nsrf)%flag,o_evappot_srf(nsrf)%name,"Temperature"//clnsurf(nsrf),"K")
+             CALL histdef2d(iff,clef_stations(iff), &
                   o_ustar_srf(nsrf)%flag,o_ustar_srf(nsrf)%name,"Friction velocity "//clnsurf(nsrf),"m/s")
              CALL histdef2d(iff,clef_stations(iff), &
@@ -1455,4 +1472,6 @@
                o_rnebcon%flag,o_rnebcon%name, "Convective Cloud Fraction", "-")
           CALL histdef3d(iff,clef_stations(iff), &
+               o_rnebls%flag,o_rnebls%name, "LS Cloud fraction", "-")
+          CALL histdef3d(iff,clef_stations(iff), &
                o_rhum%flag,o_rhum%name, "Relative humidity", "-")
           CALL histdef3d(iff,clef_stations(iff), &
@@ -1560,8 +1579,14 @@
                 CALL histdef3d(iff,clef_stations(iff),o_wake_omg%flag,o_wake_omg%name, "wake_omg", " ")
              ENDIF
-             CALL histdef3d(iff,clef_stations(iff),o_Vprecip%flag,o_Vprecip%name, "precipitation vertical profile", "-")
+!!! RomP             CALL histdef3d(iff,clef_stations(iff),o_Vprecip%flag,o_Vprecip%name, "precipitation vertical profile", "-")
              CALL histdef3d(iff,clef_stations(iff),o_ftd%flag,o_ftd%name, "tend temp due aux descentes precip", "-")
              CALL histdef3d(iff,clef_stations(iff),o_fqd%flag,o_fqd%name,"tend vap eau due aux descentes precip", "-")
           ENDIF !(iflag_con.EQ.3)
+
+          IF(iflag_con.GE.3) THEN   !  RomP >>>
+            CALL histdef3d(iff,clef_stations(iff),o_wdtrainA%flag,o_wdtrainA%name, "precipitation from AA", "-")
+            CALL histdef3d(iff,clef_stations(iff),o_wdtrainM%flag,o_wdtrainM%name, "precipitation from mixture", "-")
+            CALL histdef3d(iff,clef_stations(iff),o_Vprecip%flag,o_Vprecip%name, "precipitation vertical profile", "-")
+          ENDIF !(iflag_con.GE.3)   ! <<< RomP
 
 !!! nrlmd le 10/04/2012
@@ -1590,4 +1615,5 @@
           CALL histdef3d(iff,clef_stations(iff),o_dtlschr%flag,o_dtlschr%name,"Large-scale condensational heating rate","K/s")
           CALL histdef3d(iff,clef_stations(iff),o_dqlsc%flag,o_dqlsc%name, "Condensation dQ", "(kg/kg)/s")
+          CALL histdef3d(iff,clef_stations(iff),o_beta_prec%flag,o_beta_prec%name, "LS Conversion rate to prec", "(kg/kg)/s")
           CALL histdef3d(iff,clef_stations(iff),o_dtvdf%flag,o_dtvdf%name, "Boundary-layer dT", "K/s")
           CALL histdef3d(iff,clef_stations(iff),o_dqvdf%flag,o_dqvdf%name, "Boundary-layer dQ", "(kg/kg)/s") 
Index: LMDZ5/branches/testing/libf/phylmd/phys_output_write.h
===================================================================
--- LMDZ5/branches/testing/libf/phylmd/phys_output_write.h	(revision 1707)
+++ LMDZ5/branches/testing/libf/phylmd/phys_output_write.h	(revision 1750)
@@ -443,4 +443,11 @@
         ENDIF
 
+        IF (o_evappot_srf(nsrf)%flag(iff)<=lev_files(iff)) THEN
+        zx_tmp_fi2d(1 : klon) = evap_pot( 1 : klon, nsrf)
+        CALL histwrite_phy(nid_files(iff),clef_stations(iff),
+     $                   o_evappot_srf(nsrf)%name,itau_w,
+     $      zx_tmp_fi2d)
+        ENDIF
+
       IF (o_ustar_srf(nsrf)%flag(iff)<=lev_files(iff)) THEN
       zx_tmp_fi2d(1 : klon) = ustar(1 : klon, nsrf)
@@ -909,5 +916,21 @@
      $o_fqd%name,itau_w,fqd)
         ENDIF
-      ENDIF !(iflag_con.EQ.3) 
+
+      ELSEIF (iflag_con.EQ.30) THEN
+! sortie RomP convection descente insaturee iflag_con=30
+       IF (o_Vprecip%flag(iff)<=lev_files(iff)) THEN
+      CALL histwrite_phy(nid_files(iff),clef_stations(iff),
+     $o_Vprecip%name,itau_w,Vprecip)
+       ENDIF
+      IF (o_wdtrainA%flag(iff)<=lev_files(iff)) THEN
+      CALL histwrite_phy(nid_files(iff),clef_stations(iff),
+     $o_wdtrainA%name,itau_w,wdtrainA)
+      ENDIF
+      IF (o_wdtrainM%flag(iff)<=lev_files(iff)) THEN
+      CALL histwrite_phy(nid_files(iff),clef_stations(iff),
+     $o_wdtrainM%name,itau_w,wdtrainM)
+      ENDIF
+
+      ENDIF !(iflag_con.EQ.3.or.iflag_con.EQ.30)
  
 !!! nrlmd le 10/04/2012
@@ -1582,4 +1605,9 @@
        ENDIF
 
+       IF (o_rnebls%flag(iff)<=lev_files(iff)) THEN
+      CALL histwrite_phy(nid_files(iff),clef_stations(iff),
+     $o_rnebls%name,itau_w,rneb)
+       ENDIF
+
        IF (o_rhum%flag(iff)<=lev_files(iff)) THEN
       CALL histwrite_phy(nid_files(iff),clef_stations(iff),
@@ -1776,4 +1804,10 @@
       CALL histwrite_phy(nid_files(iff),clef_stations(iff),
      $o_dqlsc%name,itau_w,zx_tmp_fi3d)
+       ENDIF
+
+       IF (o_beta_prec%flag(iff)<=lev_files(iff)) THEN
+      zx_tmp_fi3d(1:klon,1:klev)=beta_prec(1:klon,1:klev)
+      CALL histwrite_phy(nid_files(iff),clef_stations(iff),
+     $o_beta_prec%name,itau_w,zx_tmp_fi3d)
        ENDIF
 
Index: LMDZ5/branches/testing/libf/phylmd/phys_state_var_mod.F90
===================================================================
--- LMDZ5/branches/testing/libf/phylmd/phys_state_var_mod.F90	(revision 1707)
+++ LMDZ5/branches/testing/libf/phylmd/phys_state_var_mod.F90	(revision 1750)
@@ -52,4 +52,8 @@
       REAL, ALLOCATABLE, SAVE :: u_ancien(:,:), v_ancien(:,:)
 !$OMP THREADPRIVATE(u_ancien, v_ancien)
+!!! RomP >>>
+      REAL, ALLOCATABLE, SAVE :: tr_ancien(:,:,:)
+!$OMP THREADPRIVATE(tr_ancien)
+!!! RomP <<<
       LOGICAL, SAVE :: ancien_ok
 !$OMP THREADPRIVATE(ancien_ok)
@@ -358,4 +362,5 @@
 USE control_mod
 use aero_mod
+use infotrac, ONLY : nbtr
 IMPLICIT NONE
 
@@ -384,4 +389,7 @@
       ALLOCATE(t_ancien(klon,klev), q_ancien(klon,klev))
       ALLOCATE(u_ancien(klon,klev), v_ancien(klon,klev))
+!!! Rom P >>>
+      ALLOCATE(tr_ancien(klon,klev,nbtr))
+!!! Rom P <<<
       ALLOCATE(clwcon(klon,klev),rnebcon(klon,klev))
       ALLOCATE(ratqs(klon,klev))
@@ -521,4 +529,5 @@
       deallocate(rugoro, t_ancien, q_ancien, clwcon, rnebcon)
       deallocate(        u_ancien, v_ancien                 )
+      deallocate(        tr_ancien)                           !RomP
       deallocate(ratqs, pbl_tke)
       deallocate(zmax0, f0)
Index: LMDZ5/branches/testing/libf/phylmd/physiq.F
===================================================================
--- LMDZ5/branches/testing/libf/phylmd/physiq.F	(revision 1707)
+++ LMDZ5/branches/testing/libf/phylmd/physiq.F	(revision 1750)
@@ -227,5 +227,15 @@
       REAL d_qx(klon,klev,nqtot)
       REAL d_ps(klon)
+! Variables pour le transport convectif
       real da(klon,klev),phi(klon,klev,klev),mp(klon,klev)
+! Variables pour le lessivage convectif
+! RomP >>> 
+      real phi2(klon,klev,klev)
+      real d1a(klon,klev),dam(klon,klev)
+      real ev(klon,klev),ep(klon,klev)
+      real clw(klon,klev),elij(klon,klev,klev)
+      real epmlmMm(klon,klev,klev),eplaMm(klon,klev)
+      real wdtrainA(klon,klev),wdtrainM(klon,klev)
+! RomP <<<
 !IM definition dynamique o_trac dans phys_output_open
 !      type(ctrl_out) :: o_trac(nqtot)
@@ -285,4 +295,6 @@
       REAL flwp_s(klon), fiwp_s(klon)
       REAL flwc_s(klon,klev), fiwc_s(klon,klev)
+
+      REAL evap_pot(klon,nbsrf)
 
 cIM ISCCP simulator v3.4
@@ -544,5 +556,5 @@
 c=================================================================================================
 cCR04.12.07: on ajoute les nouvelles variables du nouveau schema de convection avec poches froides
-c Variables liées à la poche froide (jyg)
+c Variables li\'ees \`a la poche froide (jyg)
 
       REAL mip(klon,klev)  ! mass flux shed by the adiab ascent at each level
@@ -577,6 +589,6 @@
 
 cRC
-c Variables liées à la poche froide (jyg et rr)
-c Version diagnostique pour l'instant : pas de rétroaction sur la convection
+c Variables li\'ees \`a la poche froide (jyg et rr)
+c Version diagnostique pour l'instant : pas de r\'etroaction sur la convection
 
       REAL t_wake(klon,klev),q_wake(klon,klev) ! wake pour la convection
@@ -638,9 +650,9 @@
 
 c--------Stochastic Boundary Layer Triggering: ALE_BL--------
-c---Propriétés du thermiques au LCL 
-      real zlcl_th(klon)                                     ! Altitude du LCL calculé continument (pcon dans thermcell_main.F90)
+c---Propri\'et\'es du thermiques au LCL 
+      real zlcl_th(klon)                                     ! Altitude du LCL calcul\'e continument (pcon dans thermcell_main.F90)
       real fraca0(klon)                                      ! Fraction des thermiques au LCL
       real w0(klon)                                          ! Vitesse des thermiques au LCL
-      real w_conv(klon)                                      ! Vitesse verticale de grande échelle au LCL
+      real w_conv(klon)                                      ! Vitesse verticale de grande \'echelle au LCL
       real therm_tke_max0(klon)                              ! TKE dans les thermiques au LCL 
       real env_tke_max0(klon)                                ! TKE dans l'environnement au LCL 
@@ -650,5 +662,5 @@
       real ale_bl_stat(klon)
 
-c---Déclenchement stochastique
+c---D\'eclenchement stochastique
       integer :: tau_trig(klon)
       real proba_notrig(klon)
@@ -662,8 +674,8 @@
 
 c---Fermeture statistique
-      real alp_bl_det(klon)                                     ! ALP déterministe du thermique unique
-      real alp_bl_fluct_m(klon)                                 ! ALP liée aux fluctuations de flux de masse sous-nuageux
-      real alp_bl_fluct_tke(klon)                               ! ALP liée aux fluctuations d'énergie cinétique sous-nuageuse 
-      real alp_bl_conv(klon)                                    ! ALP liée à grande échelle
+      real alp_bl_det(klon)                                     ! ALP d\'terministe du thermique unique
+      real alp_bl_fluct_m(klon)                                 ! ALP li\'ee aux fluctuations de flux de masse sous-nuageux
+      real alp_bl_fluct_tke(klon)                               ! ALP li\'ee aux fluctuations d'\'energie cin\'etique sous-nuageuse 
+      real alp_bl_conv(klon)                                    ! ALP li\'ee \`a grande \'echelle
       real alp_bl_stat(klon)                                    ! ALP totale
 
@@ -695,4 +707,8 @@
       REAL frac_impa(klon,klev) ! fractions d'aerosols lessivees (impaction)
       REAL frac_nucl(klon,klev) ! idem (nucleation)
+! RomP >>> 
+      REAL beta_prec_fisrt(klon,klev) ! taux de conv de l'eau cond (fisrt)
+      REAL beta_prec(klon,klev)       ! taux de conv de l'eau cond (utilise)
+! RomP <<<
       INTEGER       :: iii
       REAL          :: calday
@@ -1094,7 +1110,8 @@
       ! Parameters
       LOGICAL ok_ade, ok_aie    ! Apply aerosol (in)direct effects or not
+      LOGICAL ok_cdnc          ! ok cloud droplet number concentration (O. Boucher 01-2013)
       REAL bl95_b0, bl95_b1   ! Parameter in Boucher and Lohmann (1995)
-      SAVE ok_ade, ok_aie, bl95_b0, bl95_b1
-c$OMP THREADPRIVATE(ok_ade, ok_aie, bl95_b0, bl95_b1)
+      SAVE ok_ade, ok_aie, ok_cdnc, bl95_b0, bl95_b1
+c$OMP THREADPRIVATE(ok_ade, ok_aie, ok_cdnc, bl95_b0, bl95_b1)
       LOGICAL, SAVE :: aerosol_couple ! true  : calcul des aerosols dans INCA
                                       ! false : lecture des aerosol dans un fichier
@@ -1184,7 +1201,9 @@
 c$OMP THREADPRIVATE(mskocean_beta)
       REAL, dimension(klon, klev) :: beta         ! facteur sur cldtaurad et cldemirad pour evaluer les retros liees aux CRF
-      REAL, dimension(klon, klev) :: cldtaurad    ! epaisseur optique pour radlwsw,COSP
-      REAL, dimension(klon, klev) :: cldtaupirad  ! epaisseur optique pour radlwsw,COSP cas pre-industrial
-      REAL, dimension(klon, klev) :: cldemirad    ! emissivite pour radlwsw,COSP 
+      REAL, dimension(klon, klev) :: cldtaurad    ! epaisseur optique pour radlwsw pour tester "CRF off"
+      REAL, dimension(klon, klev) :: cldtaupirad  ! epaisseur optique pour radlwsw pour tester "CRF off"
+      REAL, dimension(klon, klev) :: cldemirad    ! emissivite pour radlwsw pour tester "CRF off"
+      REAL, dimension(klon, klev) :: cldfrarad    ! fraction nuageuse
+
       INTEGER :: nbtr_tmp ! Number of tracer inside concvl
       REAL, dimension(klon,klev) :: sh_in ! Specific humidity entering in phytrac
@@ -1251,5 +1270,5 @@
      .     fact_cldcon, facttemps,ok_newmicro,iflag_radia,
      .     iflag_cldcon,iflag_ratqs,ratqsbas,ratqshaut,tau_ratqs,
-     .     ok_ade, ok_aie, aerosol_couple, 
+     .     ok_ade, ok_aie, ok_cdnc, aerosol_couple, 
      .     flag_aerosol, new_aod,
      .     bl95_b0, bl95_b1,
@@ -1358,5 +1377,5 @@
 
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-!! Un petit travail à faire ici.
+!! Un petit travail \`a faire ici.
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
@@ -1508,5 +1527,9 @@
                ALLOCATE(iGCM(0), jGCM(0))
             end if
-         ENDIF !debut
+         else
+            ALLOCATE(tabijGCM(0))
+            ALLOCATE(lonGCM(0), latGCM(0))
+            ALLOCATE(iGCM(0), jGCM(0))
+         ENDIF
  
            DO i=1,klon
@@ -1521,5 +1544,5 @@
 ! justement quand ok_orodr = false.
 ! ce rugoro est utilise par la couche limite et fait double emploi
-! avec les paramétrisations spécifiques de Francois Lott.
+! avec les param\'etrisations sp\'ecifiques de Francois Lott.
 !           DO i=1,klon
 !             rugoro(i) = MAX(1.0e-05, zstd(i)*zsig(i)/2.0)
@@ -1738,4 +1761,14 @@
       mp(:,:)=0.
       phi(:,:,:)=0.
+! RomP >>>
+      phi2(:,:,:)=0.
+      beta_prec_fisrt(:,:)=0.
+      beta_prec(:,:)=0.
+      epmlmMm(:,:,:)=0.
+      eplaMm(:,:)=0.
+      d1a(:,:)=0.
+      dam(:,:)=0.
+! RomP <<<
+
 c
 c Ne pas affecter les valeurs entrees de u, v, h, et q
@@ -1803,4 +1836,18 @@
          ENDDO
          ENDDO
+!!! RomP >>>   td dyn traceur
+       IF (nqtot.GE.3) THEN
+          DO iq = 3, nqtot
+          DO k = 1, klev
+          DO i = 1, klon
+            d_tr_dyn(i,k,iq-2)=
+     $       (tr_seri(i,k,iq-2)-tr_ancien(i,k,iq-2))/dtime
+!         iiq=niadv(iq)
+!         print*,i,k," d_tr_dyn",d_tr_dyn(i,k,iq-2),"tra:",iq,tname(iiq)
+          ENDDO
+          ENDDO
+          ENDDO
+       ENDIF
+!!! RomP <<<
       ELSE
          DO k = 1, klev
@@ -1812,4 +1859,15 @@
          ENDDO
          ENDDO
+!!! RomP >>>   td dyn traceur
+        IF (nqtot.GE.3) THEN
+          DO iq = 3, nqtot
+          DO k = 1, klev
+          DO i = 1, klon
+            d_tr_dyn(i,k,iq-2)= 0.0
+          ENDDO
+          ENDDO
+          ENDDO
+       ENDIF
+!!! RomP <<<
          ancien_ok = .TRUE.
       ENDIF
@@ -1927,5 +1985,5 @@
 ! Calculs de l'orbite.
 ! Necessaires pour le rayonnement et la surface (calcul de l'albedo).
-! doit donc etre placé avant radlwsw et pbl_surface
+! doit donc etre plac\'e avant radlwsw et pbl_surface
 
 !!!   jyg 17 Sep 2010 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@@ -1956,5 +2014,5 @@
 ! Pour une solarlong0=1000., on calcule un ensoleillement moyen sur
 ! l'annee a partir d'une formule analytique.
-! Cet ensoleillement est symmétrique autour de l'équateur et
+! Cet ensoleillement est sym\'etrique autour de l'\'equateur et
 ! non nul aux poles.
       IF (abs(solarlong0-1000.)<1.e-4) then
@@ -1996,4 +2054,8 @@
 c   dsens, devap, zxsnow, zxfluxt, zxfluxq, q2m, fluxq
 c
+
+c Calcul de l'humidite de saturation au niveau du sol
+
+
 
       if (iflag_pbl/=0) then
@@ -2035,4 +2097,7 @@
         call writefield_phy('q_seri',q_seri,llm)
       endif
+
+         CALL evappot(klon,nbsrf,ftsol,pplay(:,1),cdragh,
+     e      t_seri(:,1),q_seri(:,1),u_seri(:,1),v_seri(:,1),evap_pot)
 
 
@@ -2220,5 +2285,5 @@
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 ! Modif FH 2010/04/27. Sans doute temporaire.
-! Deux options pour le alp_offset : constant si >Ã 0 ou proportionnel Ãa
+! Deux options pour le alp_offset : constant si >?? 0 ou proportionnel ??a
 ! w si <0
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@@ -2284,6 +2349,12 @@
      .        Ma,mip,Vprecip,cape,cin,tvp,Tconv,iflagctrl,
      .        pbase,bbase,dtvpdt1,dtvpdq1,dplcldt,dplcldr,qcondc,wd,
-     .        pmflxr,pmflxs,da,phi,mp,
-     .        ftd,fqd,lalim_conv,wght_th)
+! RomP >>>
+!!     .        pmflxr,pmflxs,da,phi,mp,
+!!     .        ftd,fqd,lalim_conv,wght_th)
+     .        pmflxr,pmflxs,da,phi,mp,phi2,d1a,dam,sij,clw,elij,
+     .        ftd,fqd,lalim_conv,wght_th,
+     .        ev, ep,epmlmMm,eplaMm,
+     .        wdtrainA,wdtrainM)
+! RomP <<<
 
 cIM begin
@@ -2616,5 +2687,5 @@
         ENDIF
 
-c----Tirage aléatoire et calcul de ale_bl_trig
+c----Tirage al\'eatoire et calcul de ale_bl_trig
       do i=1,klon
         if ( (ale_bl_stat(i) .gt. abs(cin(i))+1.e-10) )  then
@@ -2663,8 +2734,8 @@
 ! Transport de la TKE par les panaches thermiques.
 ! FH : 2010/02/01
-      if (iflag_pbl.eq.10) then
-      call thermcell_dtke(klon,klev,nbsrf,pdtphys,fm_therm,entr_therm,
-     s           rg,paprs,pbl_tke)
-      endif
+!     if (iflag_pbl.eq.10) then
+!     call thermcell_dtke(klon,klev,nbsrf,pdtphys,fm_therm,entr_therm,
+!    s           rg,paprs,pbl_tke)
+!     endif
 ! ----------------------------------------------------------------------
 !IM/FH: 2011/02/23 
@@ -2689,5 +2760,5 @@
 c  ==============
 
-! Dans le cas oÃ¹ on active les thermiques, on fait partir l'ajustement
+! Dans le cas o\`u on active les thermiques, on fait partir l'ajustement
 ! a partir du sommet des thermiques.
 ! Dans le cas contraire, on demarre au niveau 1.
@@ -2767,5 +2838,5 @@
      .           rain_lsc, snow_lsc,
      .           pfrac_impa, pfrac_nucl, pfrac_1nucl,
-     .           frac_impa, frac_nucl,
+     .           frac_impa, frac_nucl, beta_prec_fisrt,
      .           prfl, psfl, rhcl, 
      .           zqasc, fraca,ztv,zpspsk,ztla,zthl,iflag_cldcon )
@@ -3145,12 +3216,10 @@
 
       if (ok_newmicro) then
-      CALL newmicro (paprs, pplay,ok_newmicro,
-     .            t_seri, cldliq, cldfra, cldtau, cldemi,
-     .            cldh, cldl, cldm, cldt, cldq,
-     .            flwp, fiwp, flwc, fiwc,
-     e            ok_aie,
-     e            mass_solu_aero, mass_solu_aero_pi,
-     e            bl95_b0, bl95_b1,
-     s            cldtaupi, re, fl, ref_liq, ref_ice)
+      CALL newmicro (ok_cdnc, bl95_b0, bl95_b1,
+     .              paprs, pplay, t_seri, cldliq, cldfra,
+     .              cldtau, cldemi, cldh, cldl, cldm, cldt, cldq,
+     e              flwp, fiwp, flwc, fiwc,
+     e              mass_solu_aero, mass_solu_aero_pi,
+     s              cldtaupi, re, fl, ref_liq, ref_ice) 
       else
       CALL nuage (paprs, pplay,
@@ -3161,5 +3230,4 @@
      e            bl95_b0, bl95_b1,
      s            cldtaupi, re, fl)
-      
       endif
 c
@@ -3169,4 +3237,5 @@
       cldtaupirad = cldtaupi
       cldemirad   = cldemi
+     
 c
       if(lon1_beta.EQ.-180..AND.lon2_beta.EQ.180..AND.
@@ -3188,4 +3257,5 @@
         cldtaupirad(i,k) = cldtaupi(i,k) * beta(i,k)
         cldemirad(i,k)   = cldemi(i,k) * beta(i,k)
+        cldfrarad(i,k)   = cldfra(i,k) * beta(i,k)
        ENDDO
        ENDDO 
@@ -3211,4 +3281,5 @@
         cldtaupirad(i,k) = cldtaupi(i,k) * beta(i,k)
         cldemirad(i,k)   = cldemi(i,k) * beta(i,k)
+        cldfrarad(i,k)   = cldfra(i,k) * beta(i,k)
         endif
 c
@@ -3246,5 +3317,5 @@
      e        paprs, pplay,zxtsol,albsol1, albsol2, t_seri,q_seri,
      e        wo(:, :, 1),
-     e        cldfra, cldemirad, cldtaurad,
+     e        cldfrarad, cldemirad, cldtaurad,
      s        heat,heat0,cool,cool0,radsol,albpla,
      s        topsw,toplw,solsw,sollw,
@@ -3281,5 +3352,5 @@
      e        paprs, pplay,zxtsol,albsol1, albsol2, 
      e        t_seri,q_seri,wo,
-     e        cldfra, cldemirad, cldtaurad,
+     e        cldfrarad, cldemirad, cldtaurad,
      e        ok_ade, ok_aie, flag_aerosol,
      e        tau_aero, piz_aero, cg_aero,
@@ -3304,4 +3375,5 @@
 cIM Par defaut on a les taux perturbes egaux aux taux actuels
 c
+      if (ok_4xCO2atm) then
        if (RCO2_per.NE.RCO2_act.OR.RCH4_per.NE.RCH4_act.OR.
      $RN2O_per.NE.RN2O_act.OR.RCFC11_per.NE.RCFC11_act.OR.
@@ -3340,4 +3412,5 @@
      o        topswcf_aerop, solswcf_aerop)
        endif
+      endif
 c
       ENDIF ! aerosol_couple
@@ -3590,5 +3663,5 @@
      $                   prfl(:,1:klev),psfl(:,1:klev),
      $                   pmflxr(:,1:klev),pmflxs(:,1:klev),
-     $                   mr_ozone,cldtaurad, cldemirad)
+     $                   mr_ozone,cldtau, cldemi)
 
 !     L          calipso2D,calipso3D,cfadlidar,parasolrefl,atb,betamol,
@@ -3620,18 +3693,23 @@
      I     itap,     days_elapsed+1,    jH_cur,   debut,
      I     lafin,    dtime,     u, v,     t,
-     I     paprs,    pplay,     pmfu,     pmfd, 
+     I     paprs,    pplay,     pmfu,     pmfd,
      I     pen_u,    pde_u,     pen_d,    pde_d,
      I     cdragh,   coefh,     fm_therm, entr_therm,
      I     u1,       v1,        ftsol,    pctsrf,
      I     ustar,     u10m,      v10m,
-     I     rlat,     frac_impa, frac_nucl,rlon,
+     I     rlat,     rlon,
+     I     frac_impa,frac_nucl, beta_prec_fisrt,beta_prec,
      I     presnivs, pphis,     pphi,     albsol1,
-     I     sh_in,    rhcl,      cldfra,   rneb, 
+     I     sh_in,    rhcl,      cldfra,   rneb,
      I     diafra,   cldliq,    itop_con, ibas_con,
      I     pmflxr,   pmflxs,    prfl,     psfl,
-     I     da,       phi,       mp,       upwd,     
+     I     da,       phi,       mp,       upwd,
+     I     phi2,     d1a,       dam,      sij,         !<<RomP
+     I     wdtrainA, wdtrainM,  sigd,     clw,elij,    !<<RomP
+     I     ev,       ep,        epmlmMm,  eplaMm,      !<<RomP
      I     dnwd,     aerosol_couple,      flxmass_w,
      I     tau_aero, piz_aero,  cg_aero,  ccm,
      I     rfname,
+     I     d_tr_dyn,                                   !<<RomP
      O     tr_seri)
 
@@ -3805,5 +3883,16 @@
       ENDDO
       ENDDO
-c
+
+!!! RomP >>>
+      IF (nqtot.GE.3) THEN
+        DO iq = 3, nqtot
+        DO k = 1, klev
+        DO i = 1, klon
+           tr_ancien(i,k,iq-2) = tr_seri(i,k,iq-2)
+        ENDDO
+        ENDDO
+        ENDDO
+      ENDIF
+!!! RomP <<<
 !==========================================================================
 ! Sorties des tendances pour un point particulier
Index: LMDZ5/branches/testing/libf/phylmd/phytrac.F90
===================================================================
--- LMDZ5/branches/testing/libf/phylmd/phytrac.F90	(revision 1707)
+++ LMDZ5/branches/testing/libf/phylmd/phytrac.F90	(revision 1750)
@@ -3,5 +3,5 @@
 SUBROUTINE phytrac(                            &
      nstep,     julien,   gmtime,   debutphy,  &
-     lafin,     pdtphys,  u, v,     t_seri,     &
+     lafin,     pdtphys,  u, v,     t_seri,    &
      paprs,     pplay,    pmfu,     pmfd,      &
      pen_u,     pde_u,    pen_d,    pde_d,     &
@@ -9,5 +9,6 @@
      yu1,       yv1,      ftsol,    pctsrf,    &
      ustar,     u10m,      v10m,               &
-     xlat,      frac_impa,frac_nucl,xlon,      &
+     xlat,      xlon,                          &
+     frac_impa,frac_nucl,beta_fisrt,beta_v1,   &
      presnivs,  pphis,    pphi,     albsol,    &
      sh,        rh,       cldfra,   rneb,      &
@@ -15,7 +16,11 @@
      pmflxr,    pmflxs,   prfl,     psfl,      &
      da,        phi,      mp,       upwd,      &
+     phi2,      d1a,      dam,      sij,       &   ! RomP
+     wdtrainA,  wdtrainM, sigd,     clw,elij,  &   ! RomP 
+     evap,      ep,       epmlmMm,  eplaMm,    &   ! RomP
      dnwd,      aerosol_couple,     flxmass_w, &
      tau_aero,  piz_aero,  cg_aero, ccm,       &
      rfname,                                   &
+     d_tr_dyn,                                 &   ! RomP
      tr_seri)         
 !
@@ -23,7 +28,11 @@
 ! Auteur(s) FH
 ! Objet: Moniteur general des tendances traceurs
+! Modification R. Pilon 01 janvier 2012 transport+scavenging KE scheme : cvltr
+! Modification R. Pilon 10 octobre 2012 large scale scavenging incloud_scav + bc_scav
 !======================================================================
 
   USE ioipsl
+  USE phys_cal_mod, only : hour
+  USE phys_output_mod, only : convers_timesteps
   USE dimphy
   USE infotrac
@@ -36,5 +45,4 @@
   USE tracreprobus_mod
   USE control_mod
-
 
   IMPLICIT NONE
@@ -68,6 +76,6 @@
 !--------
   REAL,DIMENSION(klon,klev),INTENT(IN)   :: t_seri  ! Temperature
-  REAL,DIMENSION(klon,klev),INTENT(IN)   :: u       ! variable not used
-  REAL,DIMENSION(klon,klev),INTENT(IN)   :: v       ! variable not used
+  REAL,DIMENSION(klon,klev),INTENT(IN)   :: u       ! variable not used 
+  REAL,DIMENSION(klon,klev),INTENT(IN)   :: v       ! variable not used 
   REAL,DIMENSION(klon,klev),INTENT(IN)   :: sh      ! humidite specifique
   REAL,DIMENSION(klon,klev),INTENT(IN)   :: rh      ! humidite relative
@@ -81,7 +89,17 @@
   REAL,DIMENSION(klon,klev),INTENT(IN)   :: diafra  ! fraction nuageuse (convection ou stratus artificiels)
   REAL,DIMENSION(klon,klev),INTENT(IN)   :: rneb    ! fraction nuageuse (grande echelle)
+!
+  REAL                                   :: ql_incl ! contenu en eau liquide nuageuse dans le nuage ! ql_incl=oliq/rneb
+  REAL,DIMENSION(klon,klev),INTENT(IN)   :: beta_fisrt ! taux de conversion de l'eau cond (de fisrtilp)
+  REAL,DIMENSION(klon,klev),INTENT(out)  :: beta_v1    ! -- (originale version)
+
+!
   INTEGER,DIMENSION(klon),INTENT(IN)     :: itop_con
   INTEGER,DIMENSION(klon),INTENT(IN)     :: ibas_con
   REAL,DIMENSION(klon),INTENT(IN)        :: albsol  ! albedo surface
+!
+!Dynamique
+!--------
+  REAL,DIMENSION(klon,klev,nbtr),INTENT(IN)    :: d_tr_dyn
 !
 !Convection:
@@ -108,4 +126,22 @@
   REAL,DIMENSION(klon,klev),INTENT(IN)     :: da
   REAL,DIMENSION(klon,klev,klev),INTENT(IN):: phi
+! RomP >>>
+  REAL,DIMENSION(klon,klev),INTENT(IN)      :: d1a,dam
+  REAL,DIMENSION(klon,klev,klev),INTENT(IN) :: phi2
+!
+  REAL,DIMENSION(klon,klev),INTENT(IN)      :: wdtrainA
+  REAL,DIMENSION(klon,klev),INTENT(IN)      :: wdtrainM
+  REAL,DIMENSION(klon),INTENT(IN)           :: sigd
+! ---- RomP flux entraine, detraine et precipitant kerry Emanuel
+  REAL,DIMENSION(klon,klev),INTENT(IN)      :: evap
+  REAL,DIMENSION(klon,klev),INTENT(IN)      :: ep
+  REAL,DIMENSION(klon,klev,klev),INTENT(IN) :: sij
+  REAL,DIMENSION(klon,klev,klev),INTENT(IN) :: elij
+  REAL,DIMENSION(klon,klev,klev),INTENT(IN) :: epmlmMm
+  REAL,DIMENSION(klon,klev),INTENT(IN)      :: eplaMm
+  REAL,DIMENSION(klon,klev),INTENT(IN)      :: clw
+! RomP <<<
+
+!
   REAL,DIMENSION(klon,klev),INTENT(IN)     :: mp
   REAL,DIMENSION(klon,klev),INTENT(IN)     :: upwd      ! saturated updraft mass flux
@@ -120,9 +156,9 @@
 !--------------
 !
-  REAL,DIMENSION(klon),INTENT(IN)     :: cdragh ! coeff drag pour T et Q
-  REAL,DIMENSION(klon,klev),INTENT(IN):: coefh  ! coeff melange CL (m**2/s)
-  REAL,DIMENSION(klon),INTENT(IN)     :: ustar,u10m,v10m ! u* & vent a 10m (m/s)
-  REAL,DIMENSION(klon),INTENT(IN)     :: yu1    ! vents au premier niveau
-  REAL,DIMENSION(klon),INTENT(IN)     :: yv1    ! vents au premier niveau
+  REAL,DIMENSION(klon),INTENT(IN)      :: cdragh ! coeff drag pour T et Q
+  REAL,DIMENSION(klon,klev),INTENT(IN) :: coefh  ! coeff melange CL (m**2/s)
+  REAL,DIMENSION(klon),INTENT(IN)      :: ustar,u10m,v10m ! u* & vent a 10m (m/s)
+  REAL,DIMENSION(klon),INTENT(IN)      :: yu1    ! vents au premier niveau
+  REAL,DIMENSION(klon),INTENT(IN)      :: yv1    ! vents au premier niveau
 !
 !Lessivage:
@@ -141,6 +177,6 @@
 ! Output argument
 !----------------
-  REAL,DIMENSION(klon,klev,nbtr),INTENT(INOUT) :: tr_seri ! Concentration Traceur [U/KgA]  
-
+  REAL,DIMENSION(klon,klev,nbtr),INTENT(INOUT) :: tr_seri ! Concentration Traceur [U/KgA]
+  REAL,DIMENSION(klon,klev)                    :: sourceBE 
 !=======================================================================================
 !                        -- LOCAL VARIABLES --
@@ -153,5 +189,5 @@
 !--------------------------------------------
 !
-  REAL,DIMENSION(:,:),ALLOCATABLE,SAVE :: source  ! a voir lorsque le flux de surface est prescrit 
+  REAL,DIMENSION(:,:),ALLOCATABLE,SAVE :: source  ! a voir lorsque le flux de surface est prescrit
 !$OMP THREADPRIVATE(source)
 
@@ -166,5 +202,6 @@
   REAL,DIMENSION(klon)      :: zx_tmp_fi2d ! variable temporaire grille physique
   INTEGER                   :: itau_w      ! pas de temps ecriture = nstep + itau_phy
-  LOGICAL,PARAMETER :: ok_sync=.TRUE.
+  LOGICAL,PARAMETER         :: ok_sync=.TRUE.
+  CHARACTER(len=20)         :: chtratimestep 
 
 !
@@ -175,19 +212,46 @@
   REAL,DIMENSION(klon,klev)             :: delp     ! epaisseur de couche (Pa)
 !
-! Tendances de traceurs (Td):
+! Tendances de traceurs (Td) et flux de traceurs:
 !------------------------
-!
   REAL,DIMENSION(klon,klev)      :: d_tr     ! Td dans l'atmosphere
   REAL,DIMENSION(klon,klev,nbtr) :: d_tr_cl  ! Td couche limite/traceur
+  REAL,DIMENSION(klon,nbtr)      :: d_tr_dry ! Td depot sec/traceur (1st layer)  jyg
+  REAL,DIMENSION(klon,nbtr)      :: flux_tr_dry ! depot sec/traceur (surface)    jyg
+  REAL,DIMENSION(klon,klev,nbtr) :: d_tr_dec                            !RomP
   REAL,DIMENSION(klon,klev,nbtr) :: d_tr_cv  ! Td convection/traceur
+! RomP >>>
+  REAL,DIMENSION(klon,klev,nbtr) :: d_tr_insc
+  REAL,DIMENSION(klon,klev,nbtr) :: d_tr_bcscav
+  REAL,DIMENSION(klon,klev,nbtr) :: d_tr_evapls
+  REAL,DIMENSION(klon,klev,nbtr) :: d_tr_ls
+  REAL,DIMENSION(klon,nbtr)      :: qPrls      !jyg: concentration tra dans pluie LS a la surf.
+  REAL,DIMENSION(klon,klev,nbtr) :: d_tr_trsp
+  REAL,DIMENSION(klon,klev,nbtr) :: d_tr_sscav
+  REAL,DIMENSION(klon,klev,nbtr) :: d_tr_sat
+  REAL,DIMENSION(klon,klev,nbtr) :: d_tr_uscav
+  REAL,DIMENSION(klon,klev,nbtr) :: qPr,qDi ! concentration tra dans pluie,air descente insaturee
+  REAL,DIMENSION(klon,klev,nbtr) :: qPa,qMel
+  REAL,DIMENSION(klon,klev,nbtr) :: qTrdi,dtrcvMA ! conc traceur descente air insaturee et td convective MA
+  REAL,DIMENSION(klon,klev)      :: Mint
+  REAL,DIMENSION(klon,klev,nbtr) :: zmfd1a
+  REAL,DIMENSION(klon,klev,nbtr) :: zmfdam
+  REAL,DIMENSION(klon,klev,nbtr) :: zmfphi2
+! RomP <<<
   REAL,DIMENSION(klon,klev,nbtr) :: d_tr_th  ! Td thermique
   REAL,DIMENSION(klon,klev,nbtr) :: d_tr_lessi_impa ! Td du lessivage par impaction
-  REAL,DIMENSION(klon,klev,nbtr) :: d_tr_lessi_nucl ! Td du lessivage par nucleation 
+  REAL,DIMENSION(klon,klev,nbtr) :: d_tr_lessi_nucl ! Td du lessivage par nucleation
 !
 ! Physique
-!----------   
+!---------- 
   REAL,DIMENSION(klon,klev,nbtr) :: flestottr ! flux de lessivage dans chaque couche 
   REAL,DIMENSION(klon,klev)      :: zmasse    ! densité atmosphérique Kg/m2
   REAL,DIMENSION(klon,klev)      :: ztra_th
+!PhH
+  REAL,DIMENSION(klon,klev)      :: zrho
+  REAL,DIMENSION(klon,klev)      :: zdz
+  REAL                           :: evaplsc,dx,beta ! variable pour lessivage Genthon
+  REAL,DIMENSION(klon)           :: his_dh          ! ---
+! in-cloud scav variables
+  REAL           :: ql_incloud_ref     ! ref value of in-cloud condensed water content
   
 !Controles:
@@ -199,11 +263,89 @@
 
   CHARACTER(len=8),DIMENSION(nbtr) :: solsym
-
-
+!RomP >>>
+  INTEGER,SAVE  :: iflag_lscav
+  LOGICAL,SAVE  :: convscav
+!$OMP THREADPRIVATE(iflag_lscav,convscav)
+!RomP <<<
 !######################################################################
 !                    -- INITIALIZATION --
 !######################################################################
+  DO k=1,klev
+     DO i=1,klon
+      sourceBE(i,k)=0.
+      Mint(i,k)=0.
+      zrho(i,k)=0.
+      zdz(i,k)=0.
+     END DO
+  END DO
+
+  DO it=1, nbtr
+   DO k=1,klev
+    DO i=1,klon
+    d_tr_insc(i,k,it)=0.
+    d_tr_bcscav(i,k,it)=0.
+    d_tr_evapls(i,k,it)=0.
+    d_tr_ls(i,k,it)=0.
+    d_tr_cv(i,k,it)=0.
+    d_tr_cl(i,k,it)=0.
+    d_tr_trsp(i,k,it)=0.
+    d_tr_sscav(i,k,it)=0.
+    d_tr_sat(i,k,it)=0.
+    d_tr_uscav(i,k,it)=0.
+    d_tr_lessi_impa(i,k,it)=0.
+    d_tr_lessi_nucl(i,k,it)=0.
+    qDi(i,k,it)=0.
+    qPr(i,k,it)=0.
+    qPa(i,k,it)=0.
+    qMel(i,k,it)=0.
+    qTrdi(i,k,it)=0.
+    dtrcvMA(i,k,it)=0.
+    zmfd1a(i,k,it)=0.
+    zmfdam(i,k,it)=0.
+    zmfphi2(i,k,it)=0.
+    END DO
+   END DO
+  END DO
   IF (debutphy) THEN
-     IF (prt_level >9) WRITE(lunout,*) 'FIRST TIME IN PHYTRAC : pdtphys(sec) = ',pdtphys,'ecrit_tra (sec) = ',ecrit_tra
+!!jyg
+   chtratimestep='DefFreq'
+   CALL getin('tra_time_step',chtratimestep)
+   IF (chtratimestep .NE. 'DefFreq') THEN
+     call convers_timesteps(chtratimestep,pdtphys,ecrit_tra)
+   ENDIF
+!RomP >>>
+!
+!Config Key  = convscav
+!Config Desc = Convective scavenging switch: 0=off, 1=on.
+!Config Def  = .false.
+!Config Help = 
+!
+  convscav=.false.
+  call getin('convscav', convscav)
+  print*,'phytrac passage dans routine conv avec lessivage', convscav
+!
+!Config Key  = iflag_lscav
+!Config Desc = Large scale scavenging parametrization: 0=none, 1=old(Genthon92),
+!              2=1+PHeinrich, 3=Reddy_Boucher2004, 4=3+RPilon.
+!Config Def  = 1
+!Config Help = 
+!
+  iflag_lscav=1
+  call getin('iflag_lscav', iflag_lscav)
+!
+  SELECT CASE(iflag_lscav)
+  CASE(0)
+   PRINT*, 'Large scale scavenging: none'
+  CASE(1)
+   PRINT*, 'Large scale scavenging: C. Genthon, Tellus(1992), 44B, 371-389'
+  CASE(2)
+   PRINT*, 'Large scale scavenging: C. Genthon, modified P. Heinrich'
+  CASE(3)
+   PRINT*, 'Large scale scavenging: M. Shekkar Reddy and O. Boucher, JGR(2004), 109, D14202'
+  CASE(4)
+   PRINT*, 'Large scale scavenging: Reddy and Boucher, modified R. Pilon'
+  END SELECT
+!RomP <<<
+     WRITE(*,*) 'FIRST TIME IN PHYTRAC : pdtphys(sec) = ',pdtphys,'ecrit_tra (sec) = ',ecrit_tra
      ALLOCATE( source(klon,nbtr), stat=ierr)
      IF (ierr /= 0) CALL abort_gcm('phytrac', 'pb in allocation 1',1)
@@ -237,4 +379,12 @@
      END DO
   END DO
+!
+  IF (id_be .GT. 0) THEN
+  DO k=1,klev
+     DO i=1,klon
+        sourceBE(i,k)=srcbe(i,k)       !RomP  -> pour sortie histrac
+     END DO
+  END DO
+  ENDIF
 
 !===============================================================================
@@ -246,7 +396,8 @@
      !    -- Traitement des traceurs avec traclmdz
      CALL traclmdz(nstep, julien, gmtime, pdtphys, t_seri, paprs, pplay, &
-          cdragh,  coefh, yu1, yv1, ftsol, pctsrf, xlat, xlon,couchelimite,sh,&
+          cdragh,  coefh, yu1, yv1, ftsol, pctsrf, xlat, xlon,couchelimite,sh, &
           rh, pphi, ustar, u10m, v10m, &
-          tr_seri, source, solsym, d_tr_cl, zmasse)
+!!          tr_seri, source, solsym, d_tr_cl, zmasse)                      !RomP
+          tr_seri, source, solsym, d_tr_cl,d_tr_dec, zmasse)               !RomP
   CASE('inca')
      !    -- CHIMIE INCA  config_inca = aero or chem --
@@ -273,23 +424,35 @@
      
   END SELECT
-
 !======================================================================
 !       -- Calcul de l'effet de la convection --
 !======================================================================
+
   IF (convection) THEN
      DO it=1, nbtr
         IF ( conv_flg(it) == 0 ) CYCLE
-        
         IF (iflag_con.LT.2) THEN
-           d_tr_cv(:,:,:)=0.
+           d_tr_cv(:,:,it)=0.
         ELSE IF (iflag_con.EQ.2) THEN
 !..Tiedke
            CALL nflxtr(pdtphys, pmfu, pmfd, pen_u, pde_u, pen_d, pde_d, &
                 pplay, paprs, tr_seri(:,:,it), d_tr_cv(:,:,it))
-        ELSE
-!..K.Emanuel
-           CALL cvltr(pdtphys, da, phi, mp, paprs,pplay, tr_seri(:,:,it),&
-                upwd,dnwd,d_tr_cv(:,:,it))
+! RomP >>>                
+        ELSE   
+!..K.Emanuel                  !RomP modif arg
+        if (convscav.and.aerosol(it)) then    ! lessivage convectif pour aerosol
+!
+          CALL cvltr(pdtphys, da, phi,phi2,d1a,dam, mp,ep,              &
+               sigd,sij,clw,elij,epmlmMm,eplaMm,                        &
+               pmflxr,pmflxs,evap,t_seri,wdtrainA,wdtrainM,             &   
+               paprs,it,tr_seri,upwd,dnwd,itop_con,ibas_con,            &
+               d_tr_cv,d_tr_trsp,d_tr_sscav,d_tr_sat,d_tr_uscav,qDi,qPr,&
+               qPa,qMel,qTrdi,dtrcvMA,Mint,                             &
+               zmfd1a,zmfphi2,zmfdam)
+        else  !pas de lessivage convectif ou n'est pas un aerosol
+           CALL cvltrorig(it,pdtphys, da, phi,mp,paprs,pplay,tr_seri,&
+                    upwd,dnwd,d_tr_cv)
+        endif
         END IF
+! RomP <<<
 
         DO k = 1, klev
@@ -357,5 +520,5 @@
                 tr_seri(:,:,it), source(:,it),      &
                 paprs, pplay, delp,                 &
-                d_tr_cl(:,:,it))
+                d_tr_cl(:,:,it),d_tr_dry(:,it),flux_tr_dry(:,it))
            
            DO k = 1, klev
@@ -372,9 +535,109 @@
 
 !======================================================================
-!   Calcul de l'effet de la precipitation
-!======================================================================
-
+!   Calcul de l'effet de la precipitation grande echelle
+!======================================================================
   IF (lessivage) THEN
-     
+
+   ql_incloud_ref = 10.e-4
+   ql_incloud_ref =  5.e-4
+
+
+! calcul du contenu en eau liquide au sein du nuage
+     ql_incl = ql_incloud_ref
+! choix du lessivage
+!
+  IF (iflag_lscav .EQ. 3 .OR. iflag_lscav .EQ. 4) THEN
+! ********  Olivier Boucher version (3) possibly with modified ql_incl (4)
+!
+   DO it = 1, nbtr
+!  incloud scavenging and removal by large scale rain ! orig : ql_incl was replaced by 0.5e-3 kg/kg
+! the value 0.5e-3 kg/kg is from Giorgi and Chameides (1986), JGR
+! Liu (2001) proposed to use 1.5e-3 kg/kg
+
+    CALL lsc_scav(pdtphys,it,iflag_lscav,ql_incl,prfl,psfl,rneb,beta_fisrt,  &
+                  beta_v1,pplay,paprs,t_seri,tr_seri,d_tr_insc,   &
+                  d_tr_bcscav,d_tr_evapls,qPrls)
+
+!large scale scavenging tendency
+   DO k = 1, klev
+    DO i = 1, klon
+    d_tr_ls(i,k,it)=d_tr_insc(i,k,it)+d_tr_bcscav(i,k,it)+d_tr_evapls(i,k,it)
+    tr_seri(i,k,it)=tr_seri(i,k,it)+d_tr_ls(i,k,it)
+    ENDDO
+   ENDDO
+     CALL minmaxqfi(tr_seri(:,:,it),0.,1.e33,'lsc scav it = '//solsym(it))
+   END DO  !tr
+
+ ELSE IF (iflag_lscav .EQ. 2) THEN ! frac_impa, frac_nucl
+! *********   modified  old version
+
+     d_tr_lessi_nucl(:,:,:) = 0. 
+     d_tr_lessi_impa(:,:,:) = 0.
+     flestottr(:,:,:) = 0. 
+! Tendance des aerosols nuclees et impactes 
+     DO it = 1, nbtr
+        IF (aerosol(it)) THEN
+        his_dh(:)=0.
+           DO k = 1, klev
+              DO i = 1, klon
+!PhH
+              zrho(i,k)=pplay(i,k)/t_seri(i,k)/RD
+              zdz(i,k)=(paprs(i,k)-paprs(i,k+1))/zrho(i,k)/RG
+!
+              END DO
+           END DO
+
+          DO k=klev-1, 1, -1
+            DO i=1, klon
+!             d_tr_ls(i,k,it)=tr_seri(i,k,it)*(frac_impa(i,k)*frac_nucl(i,k)-1.)
+             dx=d_tr_ls(i,k,it)
+             his_dh(i)=his_dh(i)-dx*zrho(i,k)*zdz(i,k)/pdtphys !  kg/m2/s
+             evaplsc = prfl(i,k) - prfl(i,k+1) + psfl(i,k) - psfl(i,k+1)
+! Evaporation Partielle -> Liberation Partielle 0.5*evap
+            IF ( evaplsc .LT.0..and.abs(prfl(i,k+1)+psfl(i,k+1)).gt.1.e-10) THEN
+                evaplsc = (-evaplsc)/(prfl(i,k+1)+psfl(i,k+1))
+! evaplsc est donc positif, his_dh(i) est positif
+!--------------  
+             d_tr_evapls(i,k,it)=0.5*evaplsc*(d_tr_lessi_nucl(i,k+1,it) &
+                                  +d_tr_lessi_impa(i,k+1,it))
+!-------------   d_tr_evapls(i,k,it)=-0.5*evaplsc*(d_tr_lsc(i,k+1,it))
+             beta=0.5*evaplsc
+              if ((prfl(i,k)+psfl(i,k)).lt.1.e-10) THEN
+               beta=1.0*evaplsc
+              endif
+            dx=beta*his_dh(i)/zrho(i,k)/zdz(i,k)*pdtphys
+            his_dh(i)=(1.-beta)*his_dh(i)   ! tracer from
+            d_tr_evapls(i,k,it)=dx
+            ENDIF
+            d_tr_ls(i,k,it)=tr_seri(i,k,it)*(frac_impa(i,k)*frac_nucl(i,k)-1.) &
+                            +d_tr_evapls(i,k,it)
+
+!--------------
+                 d_tr_lessi_nucl(i,k,it) = d_tr_lessi_nucl(i,k,it) +    &
+                      ( 1 - frac_nucl(i,k) )*tr_seri(i,k,it)
+                 d_tr_lessi_impa(i,k,it) = d_tr_lessi_impa(i,k,it) +    &
+                      ( 1 - frac_impa(i,k) )*tr_seri(i,k,it)
+!
+! Flux lessivage total 
+                 flestottr(i,k,it) = flestottr(i,k,it) -   &
+                      ( d_tr_lessi_nucl(i,k,it)   +        &
+                      d_tr_lessi_impa(i,k,it) ) *          &
+                      ( paprs(i,k)-paprs(i,k+1) ) /        &
+                      (RG * pdtphys)
+!! Mise a jour des traceurs due a l'impaction,nucleation 
+!                 tr_seri(i,k,it)=tr_seri(i,k,it)*frac_impa(i,k)*frac_nucl(i,k)
+!!  calcul de la tendance liee au lessivage stratiforme
+!                 d_tr_ls(i,k,it)=tr_seri(i,k,it)*&
+!                                (1.-1./(frac_impa(i,k)*frac_nucl(i,k)))
+!--------------
+              END DO
+           END DO
+        END IF
+     END DO
+! *********   end modified old version
+
+ ELSE IF (iflag_lscav .EQ. 1) THEN ! frac_impa, frac_nucl
+! *********    old version
+
      d_tr_lessi_nucl(:,:,:) = 0. 
      d_tr_lessi_impa(:,:,:) = 0.
@@ -412,5 +675,8 @@
      END DO
      
-  END IF ! lessivage
+! *********   end old version
+  ENDIF  !  iflag_lscav . EQ. 1, 2, 3 or 4
+!
+  END IF !  lessivage
 
 !=============================================================
Index: LMDZ5/branches/testing/libf/phylmd/readaerosol_interp.F90
===================================================================
--- LMDZ5/branches/testing/libf/phylmd/readaerosol_interp.F90	(revision 1707)
+++ LMDZ5/branches/testing/libf/phylmd/readaerosol_interp.F90	(revision 1750)
@@ -20,4 +20,5 @@
   USE write_field_phy
   USE phys_cal_mod
+  USE pres2lev_mod
 
   IMPLICIT NONE
Index: LMDZ5/branches/testing/libf/phylmd/surf_land_bucket_mod.F90
===================================================================
--- LMDZ5/branches/testing/libf/phylmd/surf_land_bucket_mod.F90	(revision 1707)
+++ LMDZ5/branches/testing/libf/phylmd/surf_land_bucket_mod.F90	(revision 1750)
@@ -24,4 +24,5 @@
     USE cpl_mod
     USE dimphy
+    USE comgeomphy
     USE mod_grid_phy_lmdz
     USE mod_phys_lmdz_para
@@ -97,4 +98,7 @@
 ! calculate constants
     CALL calbeta(dtime, is_ter, knon, snow, qsol, beta, capsol, dif_grnd)
+    if (type_veget=='betaclim') then
+       CALL calbeta_clim(knon,jour,rlatd(knindex(:)),beta)
+    endif
        
 ! calculate temperature, heat capacity and conduction flux in soil
@@ -107,4 +111,7 @@
     ELSE 
        cal(:) = RCPD * capsol(:)
+       IF (klon_glo .EQ. 1) THEN
+         cal(:) = 0.
+       ENDIF
     ENDIF
     
Index: LMDZ5/branches/testing/libf/phylmd/surface_data.F90
===================================================================
--- LMDZ5/branches/testing/libf/phylmd/surface_data.F90	(revision 1707)
+++ LMDZ5/branches/testing/libf/phylmd/surface_data.F90	(revision 1750)
@@ -9,4 +9,5 @@
   
   LOGICAL, SAVE          :: ok_veget      ! true for use of vegetation model ORCHIDEE
+  CHARACTER(len=10), SAVE :: type_veget    ! orchidee/y/bucket/n/betaclim
   !$OMP THREADPRIVATE(ok_veget)
 
Index: LMDZ5/branches/testing/libf/phylmd/thermcellV0_main.F90
===================================================================
--- LMDZ5/branches/testing/libf/phylmd/thermcellV0_main.F90	(revision 1707)
+++ LMDZ5/branches/testing/libf/phylmd/thermcellV0_main.F90	(revision 1750)
@@ -519,7 +519,7 @@
 !------------------------------------------------------------------
 
-      call thermcell_dq(ngrid,nlay,ptimestep,fm0,entr0,masse,  &
+      call thermcell_dq(ngrid,nlay,1,ptimestep,fm0,entr0,masse,  &
      &                    zthl,zdthladj,zta,lev_out)
-      call thermcell_dq(ngrid,nlay,ptimestep,fm0,entr0,masse,  &
+      call thermcell_dq(ngrid,nlay,1,ptimestep,fm0,entr0,masse,  &
      &                   po,pdoadj,zoa,lev_out)
 
@@ -561,7 +561,7 @@
 
 ! calcul purement conservatif pour le transport de V
-         call thermcell_dq(ngrid,nlay,ptimestep,fm0,entr0,masse  &
+         call thermcell_dq(ngrid,nlay,1,ptimestep,fm0,entr0,masse  &
      &    ,zu,pduadj,zua,lev_out)
-         call thermcell_dq(ngrid,nlay,ptimestep,fm0,entr0,masse  &
+         call thermcell_dq(ngrid,nlay,1,ptimestep,fm0,entr0,masse  &
      &    ,zv,pdvadj,zva,lev_out)
       endif
Index: LMDZ5/branches/testing/libf/phylmd/thermcell_dq.F90
===================================================================
--- LMDZ5/branches/testing/libf/phylmd/thermcell_dq.F90	(revision 1707)
+++ LMDZ5/branches/testing/libf/phylmd/thermcell_dq.F90	(revision 1750)
@@ -1,3 +1,3 @@
-      subroutine thermcell_dq(ngrid,nlay,ptimestep,fm,entr,  &
+      subroutine thermcell_dq(ngrid,nlay,impl,ptimestep,fm,entr,  &
      &           masse,q,dq,qa,lev_out)
       implicit none
@@ -10,7 +10,12 @@
 !   calcul du dq/dt une fois qu'on connait les ascendances
 !
+! Modif 2013/01/04 (FH hourdin@lmd.jussieu.fr)
+!  Introduction of an implicit computation of vertical advection in
+!  the environment of thermal plumes in thermcell_dq
+!  impl =     0 : explicit, 1 : implicit, -1 : old version
+!
 !=======================================================================
 
-      integer ngrid,nlay
+      integer ngrid,nlay,impl
 
       real ptimestep
@@ -28,6 +33,5 @@
       real cfl
 
-      real qold(ngrid,nlay)
-      real ztimestep
+      real qold(ngrid,nlay),fqa(ngrid,nlay+1)
       integer niter,iter
       CHARACTER (LEN=20) :: modname='thermcell_dq'
@@ -35,4 +39,10 @@
 
 
+! Old explicite scheme
+      if (impl==-1) then
+         call thermcell_dq_o(ngrid,nlay,ptimestep,fm,entr,  &
+     &           masse,q,dq,qa,lev_out)
+         return
+      endif
 
 ! Calcul du critere CFL pour l'advection dans la subsidence
@@ -50,19 +60,7 @@
       enddo
 
-!IM 090508     print*,'CFL CFL CFL CFL ',cfl
-
-#undef CFL
-#ifdef CFL
-! On subdivise le calcul en niter pas de temps.
-      niter=int(cfl)+1
-#else
-      niter=1
-#endif
-
-      ztimestep=ptimestep/niter
       qold=q
 
 
-do iter=1,niter
       if (prt_level.ge.1) print*,'Q2 THERMCEL_DQ 0'
 
@@ -88,4 +86,151 @@
       enddo
 
+! Computation of tracer concentrations in the ascending plume
+      do ig=1,ngrid
+         qa(ig,1)=q(ig,1)
+      enddo
+
+      do k=2,nlay
+         do ig=1,ngrid
+            if ((fm(ig,k+1)+detr(ig,k))*ptimestep.gt.  &
+     &         1.e-5*masse(ig,k)) then
+         qa(ig,k)=(fm(ig,k)*qa(ig,k-1)+entr(ig,k)*q(ig,k))  &
+     &         /(fm(ig,k+1)+detr(ig,k))
+            else
+               qa(ig,k)=q(ig,k)
+            endif
+            if (qa(ig,k).lt.0.) then
+!               print*,'qa<0!!!'
+            endif
+            if (q(ig,k).lt.0.) then
+!               print*,'q<0!!!'
+            endif
+         enddo
+      enddo
+
+! Plume vertical flux
+      do k=2,nlay-1
+         fqa(:,k)=fm(:,k)*qa(:,k-1)
+      enddo
+      fqa(:,1)=0. ; fqa(:,nlay)=0.
+
+
+! Trace species evolution
+   if (impl==0) then
+      do k=1,nlay-1
+         q(:,k)=q(:,k)+(fqa(:,k)-fqa(:,k+1)-fm(:,k)*q(:,k)+fm(:,k+1)*q(:,k+1)) &
+     &               *ptimestep/masse(:,k)
+      enddo
+   else
+      do k=nlay-1,1,-1
+         q(:,k)=(masse(:,k)*q(:,k)/ptimestep+fqa(:,k)-fqa(:,k+1)+fm(:,k+1)*q(:,k+1)) &
+     &               /(fm(:,k)+masse(:,k)/ptimestep)
+      enddo
+   endif
+
+! Tendencies
+      do k=1,nlay
+         do ig=1,ngrid
+            dq(ig,k)=(q(ig,k)-qold(ig,k))/ptimestep
+            q(ig,k)=qold(ig,k)
+         enddo
+      enddo
+
+return
+end
+
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+! Obsolete version kept for convergence with Cmip5 NPv3.1 simulations
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+      subroutine thermcell_dq_o(ngrid,nlay,ptimestep,fm,entr,  &
+     &           masse,q,dq,qa,lev_out)
+      implicit none
+
+#include "iniprint.h"
+!=======================================================================
+!
+!   Calcul du transport verticale dans la couche limite en presence
+!   de "thermiques" explicitement representes
+!   calcul du dq/dt une fois qu'on connait les ascendances
+!
+!=======================================================================
+
+      integer ngrid,nlay
+
+      real ptimestep
+      real masse(ngrid,nlay),fm(ngrid,nlay+1)
+      real entr(ngrid,nlay)
+      real q(ngrid,nlay)
+      real dq(ngrid,nlay)
+      integer lev_out                           ! niveau pour les print
+
+      real qa(ngrid,nlay),detr(ngrid,nlay),wqd(ngrid,nlay+1)
+
+      real zzm
+
+      integer ig,k
+      real cfl
+
+      real qold(ngrid,nlay)
+      real ztimestep
+      integer niter,iter
+      CHARACTER (LEN=20) :: modname='thermcell_dq'
+      CHARACTER (LEN=80) :: abort_message
+
+
+
+! Calcul du critere CFL pour l'advection dans la subsidence
+      cfl = 0.
+      do k=1,nlay
+         do ig=1,ngrid
+            zzm=masse(ig,k)/ptimestep
+            cfl=max(cfl,fm(ig,k)/zzm)
+            if (entr(ig,k).gt.zzm) then
+               print*,'entr dt > m ',entr(ig,k)*ptimestep,masse(ig,k)
+               abort_message = ''
+               CALL abort_gcm (modname,abort_message,1)
+            endif
+         enddo
+      enddo
+
+!IM 090508     print*,'CFL CFL CFL CFL ',cfl
+
+#undef CFL
+#ifdef CFL
+! On subdivise le calcul en niter pas de temps.
+      niter=int(cfl)+1
+#else
+      niter=1
+#endif
+
+      ztimestep=ptimestep/niter
+      qold=q
+
+
+do iter=1,niter
+      if (prt_level.ge.1) print*,'Q2 THERMCEL_DQ 0'
+
+!   calcul du detrainement
+      do k=1,nlay
+         do ig=1,ngrid
+            detr(ig,k)=fm(ig,k)-fm(ig,k+1)+entr(ig,k)
+!           print*,'Q2 DQ ',detr(ig,k),fm(ig,k),entr(ig,k)
+!test
+            if (detr(ig,k).lt.0.) then
+               entr(ig,k)=entr(ig,k)-detr(ig,k)
+               detr(ig,k)=0.
+!               print*,'detr2<0!!!','ig=',ig,'k=',k,'f=',fm(ig,k),
+!     s         'f+1=',fm(ig,k+1),'e=',entr(ig,k),'d=',detr(ig,k)
+            endif
+            if (fm(ig,k+1).lt.0.) then
+!               print*,'fm2<0!!!'
+            endif
+            if (entr(ig,k).lt.0.) then
+!               print*,'entr2<0!!!'
+            endif
+         enddo
+      enddo
+
 !   calcul de la valeur dans les ascendances
       do ig=1,ngrid
Index: LMDZ5/branches/testing/libf/phylmd/thermcell_main.F90
===================================================================
--- LMDZ5/branches/testing/libf/phylmd/thermcell_main.F90	(revision 1707)
+++ LMDZ5/branches/testing/libf/phylmd/thermcell_main.F90	(revision 1750)
@@ -22,4 +22,5 @@
 
       USE dimphy
+      USE ioipsl
       USE comgeomphy , ONLY:rlond,rlatd
       IMPLICIT NONE
@@ -44,5 +45,15 @@
 !     4. un detrainement
 !
+! Modif 2013/01/04 (FH hourdin@lmd.jussieu.fr)
+!    Introduction of an implicit computation of vertical advection in
+!    the environment of thermal plumes in thermcell_dq
+!    impl =     0 : explicit, 1 : implicit, -1 : old version
+!    controled by iflag_thermals =
+!       15, 16 run with impl=-1 : numerical convergence with NPv3
+!       17, 18 run with impl=1  : more stable
+!    15 and 17 correspond to the activation of the stratocumulus "bidouille"
+!
 !=======================================================================
+
 
 !-----------------------------------------------------------------------
@@ -79,4 +90,7 @@
 
       integer icount
+
+      integer, save :: dvdq=1,dqimpl=-1
+!$OMP THREADPRIVATE(dvdq,dqimpl)
       data icount/0/
       save icount
@@ -247,4 +261,15 @@
 
       if (debut)  then
+!        call getin('dvdq',dvdq)
+!        call getin('dqimpl',dqimpl)
+
+         if (iflag_thermals==15.or.iflag_thermals==16) then
+            dvdq=0
+            dqimpl=-1
+         else
+            dvdq=1
+            dqimpl=1
+         endif
+
          fm0=0.
          entr0=0.
@@ -593,7 +618,7 @@
 !------------------------------------------------------------------
 
-      call thermcell_dq(ngrid,nlay,ptimestep,fm0,entr0,masse,  &
+      call thermcell_dq(ngrid,nlay,dqimpl,ptimestep,fm0,entr0,masse,  &
      &                    zthl,zdthladj,zta,lev_out)
-      call thermcell_dq(ngrid,nlay,ptimestep,fm0,entr0,masse,  &
+      call thermcell_dq(ngrid,nlay,dqimpl,ptimestep,fm0,entr0,masse,  &
      &                   po,pdoadj,zoa,lev_out)
 
@@ -620,8 +645,5 @@
 
 !IM 090508  
-      if (1.eq.1) then
-!IM 070508 vers. _dq       
-!     if (1.eq.0) then
-
+      if (dvdq == 0 ) then
 
 ! Calcul du transport de V tenant compte d'echange par gradient
@@ -629,5 +651,6 @@
 
          call thermcell_dv2(ngrid,nlay,ptimestep,fm0,entr0,masse  &
-     &    ,fraca,zmax  &
+!    &    ,fraca*dvdq,zmax &
+     &    ,fraca,zmax &
      &    ,zu,zv,pduadj,pdvadj,zua,zva,lev_out)
 
@@ -635,8 +658,9 @@
 
 ! calcul purement conservatif pour le transport de V
-         call thermcell_dq(ngrid,nlay,ptimestep,fm0,entr0,masse  &
+         call thermcell_dq(ngrid,nlay,dqimpl,ptimestep,fm0,entr0,masse  &
      &    ,zu,pduadj,zua,lev_out)
-         call thermcell_dq(ngrid,nlay,ptimestep,fm0,entr0,masse  &
+         call thermcell_dq(ngrid,nlay,dqimpl,ptimestep,fm0,entr0,masse  &
      &    ,zv,pdvadj,zva,lev_out)
+
       endif
 
Index: LMDZ5/branches/testing/libf/phylmd/traclmdz_mod.F90
===================================================================
--- LMDZ5/branches/testing/libf/phylmd/traclmdz_mod.F90	(revision 1707)
+++ LMDZ5/branches/testing/libf/phylmd/traclmdz_mod.F90	(revision 1750)
@@ -2,4 +2,5 @@
 !
 MODULE traclmdz_mod
+
 ! 
 ! In this module all tracers specific to LMDZ are treated. This module is used 
@@ -117,5 +118,15 @@
     REAL, DIMENSION(klev)          :: mintmp, maxtmp
     LOGICAL                        :: zero
-
+! RomP >>> profil initial Be7
+      integer ilesfil
+      parameter (ilesfil=1)
+      integer  irr,kradio
+      real     beryllium(klon,klev)
+! profil initial Pb210
+      integer ilesfil2
+      parameter (ilesfil2=1)
+      integer  irr2,kradio2
+      real     plomb(klon,klev)
+!! RomP <<<
 ! --------------------------------------------
 ! Allocation
@@ -148,4 +159,11 @@
 
     lessivage  = .TRUE.
+!!jyg(20130206) : le choix d activation du lessivage est fait dans phytrac avec iflag_lscav
+!!    call getin('lessivage',lessivage)
+!!    if(lessivage) then
+!!     print*,'lessivage lsc ON'
+!!    else
+!!     print*,'lessivage lsc OFF'
+!!    endif
     aerosol(:) = .FALSE.  ! Tous les traceurs sont des gaz par defaut
     
@@ -161,4 +179,23 @@
        ELSE IF ( tname(iiq) == "PB") THEN
           id_pb=it ! plomb
+! RomP >>> profil initial de PB210 
+     open (ilesfil2,file='prof.pb210',status='old',iostat=irr2)
+     IF (irr2 == 0) THEN 
+      read(ilesfil2,*) kradio2
+      print*,'number of levels for pb210 profile ',kradio2
+      do k=kradio2,1,-1
+       read (ilesfil2,*) plomb(:,k)
+      enddo
+      close(ilesfil2)
+      do k=1,klev
+       do i=1,klon
+         tr_seri(i,k,id_pb)=plomb(i,k)
+!!        print*, 'tr_seri',i,k,tr_seri(i,k,id_pb)
+        enddo
+      enddo
+     ELSE
+       print *, 'Prof.pb210 does not exist: use restart values'
+     ENDIF
+! RomP <<<
        ELSE IF ( tname(iiq) == "Aga" .OR. tname(iiq) == "AGA" ) THEN
           ! Age of stratospheric air
@@ -183,6 +220,27 @@
           radio(id_be) = .TRUE.
           aerosol(id_be) = .TRUE. ! le Be est un aerosol
-          CALL init_be(pctsrf,masktr(:,id_be),tautr(id_be),vdeptr(id_be),scavtr(id_be),srcbe)
+!jyg le 13/03/2013 ; ajout de pplay en argument de init_be
+!!!          CALL init_be(pctsrf,masktr(:,id_be),tautr(id_be),vdeptr(id_be),scavtr(id_be),srcbe)
+          CALL init_be(pctsrf,pplay,masktr(:,id_be),tautr(id_be),vdeptr(id_be),scavtr(id_be),srcbe)
           WRITE(lunout,*) 'Initialisation srcBe: OK'
+! RomP >>> profil initial de Be7
+      open (ilesfil,file='prof.be7',status='old',iostat=irr)
+      IF (irr == 0) THEN 
+       read(ilesfil,*) kradio
+       print*,'number of levels for Be7 profile ',kradio
+       do k=kradio,1,-1
+        read (ilesfil,*) beryllium(:,k)
+       enddo
+       close(ilesfil)
+       do k=1,klev
+         do i=1,klon
+          tr_seri(i,k,id_be)=beryllium(i,k)
+!!        print*, 'tr_seri',i,k,tr_seri(i,k,id_be)
+         enddo
+       enddo
+     ELSE
+       print *, 'Prof.Be7 does not exist: use restart values'
+     ENDIF
+! RomP <<<
        ELSE IF (tname(iiq)=="O3" .OR. tname(iiq)=="o3") THEN
           ! Recherche de l'ozone : parametrization de la chimie par Cariolle
@@ -280,5 +338,6 @@
        cdragh,  coefh, yu1, yv1, ftsol, pctsrf, xlat, xlon, couchelimite, sh, &
        rh, pphi, ustar, zu10m, zv10m, &
-       tr_seri, source, solsym, d_tr_cl, zmasse)
+!!          tr_seri, source, solsym, d_tr_cl, zmasse)                      !RomP
+          tr_seri, source, solsym, d_tr_cl,d_tr_dec, zmasse)               !RomP
     
     USE dimphy
@@ -316,10 +375,10 @@
 !--------------
 !
-    REAL,DIMENSION(klon),INTENT(IN)      :: cdragh  ! coeff drag pour T et Q
-    REAL,DIMENSION(klon,klev),INTENT(IN) :: coefh   ! diffusivite turb (m**2/s)
-    REAL,DIMENSION(klon),INTENT(IN)      :: yu1     ! vents au premier niveau
-    REAL,DIMENSION(klon),INTENT(IN)      :: yv1     ! vents au premier niveau
+    REAL,DIMENSION(klon),INTENT(IN)      :: cdragh     ! coeff drag pour T et Q
+    REAL,DIMENSION(klon,klev),INTENT(IN) :: coefh      ! coeff melange CL (m**2/s)
+    REAL,DIMENSION(klon),INTENT(IN)      :: yu1        ! vents au premier niveau
+    REAL,DIMENSION(klon),INTENT(IN)      :: yv1        ! vents au premier niveau
     LOGICAL,INTENT(IN)                   :: couchelimite
-    REAL,DIMENSION(klon,klev),INTENT(IN) :: sh      ! humidite specifique
+    REAL,DIMENSION(klon,klev),INTENT(IN) :: sh         ! humidite specifique
     REAL,DIMENSION(klon,klev),INTENT(IN) :: rh      ! Humidite relative
     REAL,DIMENSION(klon,klev),INTENT(IN) :: pphi    ! geopotentie
Index: LMDZ5/branches/testing/libf/phylmd/write_histrac.h
===================================================================
--- LMDZ5/branches/testing/libf/phylmd/write_histrac.h	(revision 1707)
+++ LMDZ5/branches/testing/libf/phylmd/write_histrac.h	(revision 1750)
@@ -10,4 +10,7 @@
      CALL histwrite_phy(nid_tra,.FALSE.,"aire",itau_w,airephy)
      CALL histwrite_phy(nid_tra,.FALSE.,"zmasse",itau_w,zmasse)
+! RomP >>>
+     CALL histwrite_phy(nid_tra,.FALSE.,"sourceBE",itau_w,sourceBE)
+! RomP <<<
 
 !TRACEURS
@@ -20,7 +23,14 @@
 
 ! TD LESSIVAGE       
-        IF (lessivage .AND. aerosol(it)) THEN
-           CALL histwrite_phy(nid_tra,.FALSE.,"fl"//tname(iiq),itau_w,flestottr(:,:,it))
+      IF (lessivage .AND. aerosol(it)) THEN
+        CALL histwrite_phy(nid_tra,.FALSE.,"fl"//tname(iiq),itau_w,flestottr(:,:,it))
+        CALL histwrite_phy(nid_tra,.FALSE.,"d_tr_ls_"//tname(iiq),itau_w,d_tr_ls(:,:,it))
+        IF(iflag_lscav .EQ. 3 .OR. iflag_lscav .EQ. 4) then
+          CALL histwrite_phy(nid_tra,.FALSE.,"d_tr_insc_"//tname(iiq),itau_w,d_tr_insc(:,:,it))
+          CALL histwrite_phy(nid_tra,.FALSE.,"d_tr_bcscav_"//tname(iiq),itau_w,d_tr_bcscav(:,:,it))
+          CALL histwrite_phy(nid_tra,.FALSE.,"d_tr_evls_"//tname(iiq),itau_w,d_tr_evapls(:,:,it))
+          CALL histwrite_phy(nid_tra,.FALSE.,"qpr_ls_"//tname(iiq),itau_w,qPrls(:,it))
         ENDIF
+      ENDIF
 
 ! TD THERMIQUES
@@ -35,5 +45,31 @@
 
 ! TD COUCHE-LIMITE
+      IF (couchelimite) THEN
         CALL histwrite_phy(nid_tra,.FALSE.,"d_tr_cl_"//tname(iiq),itau_w,d_tr_cl(:,:,it))
+        CALL histwrite_phy(nid_tra,.FALSE.,"d_tr_dry_"//tname(iiq),itau_w,d_tr_dry(:,it))
+        CALL histwrite_phy(nid_tra,.FALSE.,"flux_tr_dry_"//tname(iiq),itau_w,flux_tr_dry(:,it))
+      ENDIF
+
+! TD radio-decroissance
+        CALL histwrite_phy(nid_tra,.FALSE.,"d_tr_dec_"//tname(iiq),itau_w,d_tr_dec(:,:,it))
+
+! RomP >>>
+        IF (iflag_con.EQ.30) THEN
+        CALL histwrite_phy(nid_tra,.FALSE.,"d_tr_cvMA_"//tname(iiq),itau_w,dtrcvMA(:,:,it))
+        CALL histwrite_phy(nid_tra,.FALSE.,"d_tr_trsp_"//tname(iiq),itau_w,d_tr_trsp(:,:,it))
+        CALL histwrite_phy(nid_tra,.FALSE.,"d_tr_sscav_"//tname(iiq),itau_w,d_tr_sscav(:,:,it))
+        CALL histwrite_phy(nid_tra,.FALSE.,"d_tr_sat_"//tname(iiq),itau_w,d_tr_sat(:,:,it))
+        CALL histwrite_phy(nid_tra,.FALSE.,"d_tr_uscav_"//tname(iiq),itau_w,d_tr_uscav(:,:,it))
+        CALL histwrite_phy(nid_tra,.FALSE.,"tr_pr_"//tname(iiq),itau_w,qPr(:,:,it))
+        CALL histwrite_phy(nid_tra,.FALSE.,"tr_aa_"//tname(iiq),itau_w,qPa(:,:,it))
+        CALL histwrite_phy(nid_tra,.FALSE.,"tr_mel_"//tname(iiq),itau_w,qMel(:,:,it))
+        CALL histwrite_phy(nid_tra,.FALSE.,"tr_di_"//tname(iiq),itau_w,qDi(:,:,it))
+        CALL histwrite_phy(nid_tra,.FALSE.,"tr_trspdi_"//tname(iiq),itau_w,qTrdi(:,:,it))
+        CALL histwrite_phy(nid_tra,.FALSE.,"zmfd1a_"//tname(iiq),itau_w,zmfd1a(:,:,it))
+        CALL histwrite_phy(nid_tra,.FALSE.,"zmfphi2_"//tname(iiq),itau_w,zmfphi2(:,:,it))
+        CALL histwrite_phy(nid_tra,.FALSE.,"zmfdam_"//tname(iiq),itau_w,zmfdam(:,:,it))
+        ENDIF
+        CALL histwrite_phy(nid_tra,.FALSE.,"dtrdyn_"//tname(iiq),itau_w,d_tr_dyn(:,:,it))
+! RomP <<<
      ENDDO
 !---------------
@@ -65,4 +101,9 @@
  
 ! DIVERS    
+     CALL histwrite_phy(nid_tra,.FALSE.,"Mint",itau_w,Mint(:,:))
+     CALL histwrite_phy(nid_tra,.FALSE.,"frac_impa",itau_w,frac_impa(:,:))    
+     CALL histwrite_phy(nid_tra,.FALSE.,"frac_nucl",itau_w,frac_nucl(:,:))
+
+
      CALL histwrite_phy(nid_tra,.FALSE.,"pplay",itau_w,pplay)     
      CALL histwrite_phy(nid_tra,.FALSE.,"T",itau_w,t_seri)     
Index: LMDZ5/branches/testing/libf/phylmd/yamada4.F
===================================================================
--- LMDZ5/branches/testing/libf/phylmd/yamada4.F	(revision 1707)
+++ LMDZ5/branches/testing/libf/phylmd/yamada4.F	(revision 1750)
@@ -37,8 +37,17 @@
 c    iflag_pbl=6 : MY 2.0
 c    iflag_pbl=7 : MY 2.0.Fournier
-c    iflag_pbl=8 : MY 2.5
-c    iflag_pbl>=9 : MY 2.5 avec diffusion verticale
-
-c.......................................................................
+c    iflag_pbl=8/9 : MY 2.5
+c       iflag_pbl=8 with special obsolete treatments for convergence
+c       with Cmpi5 NPv3.1 simulations
+c    iflag_pbl=10/11 :  New scheme M2 and N2 explicit and dissiptation exact
+c    iflag_pbl=12 = 11 with vertical diffusion off q2
+c
+c  2013/04/01 (FH hourdin@lmd.jussieu.fr)
+c     Correction for very stable PBLs (iflag_pbl=10 and 11)
+c     iflag_pbl=8 converges numerically with NPv3.1
+c     iflag_pbl=11 -> the model starts with NP from start files created by ce0l
+c                  -> the model can run with longer time-steps.
+c.......................................................................
+
       REAL dt,g,rconst
       real plev(klon,klev+1),temp(klon,klev)
@@ -63,6 +72,4 @@
       real aa(klon,klev+1),aa0,aa1
       integer iflag_pbl,ngrid
-
-
       integer nlay,nlev
 
@@ -118,27 +125,10 @@
 
 
-      if (.not.(iflag_pbl.ge.6.and.iflag_pbl.le.10)) then
+      if (.not.(iflag_pbl.ge.6.and.iflag_pbl.le.12)) then
            stop'probleme de coherence dans appel a MY'
       endif
 
       ipas=ipas+1
-      if (0.eq.1.and.first) then
-      do ig=1,1000
-         ri=(ig-800.)/500.
-         if (ri.lt.ric) then
-            zrif=frif(ri)
-         else
-            zrif=rifc
-         endif
-         if(zrif.lt.0.16) then
-            zalpha=falpha(zrif)
-            zsm=fsm(zrif)
-         else
-            zalpha=1.12
-            zsm=0.085
-         endif
-c     print*,ri,rif,zalpha,zsm
-      enddo
-      endif
+
 
 c.......................................................................
@@ -173,5 +163,7 @@
                                                      ENDDO
 c
-c.......................................................................
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+! Computing M^2, N^2, Richardson numbers, stability functions
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
       do k=2,klev
@@ -197,57 +189,21 @@
          endif
          zz(ig,k)=b1*m2(ig,k)*(1.-rif(ig,k))*sm(ig,k)
-c     print*,'RIF L=',k,rif(ig,k),ri*alpha(ig,k)
-
-
-                                                          enddo
-      enddo
-
-
-c====================================================================
-c   Au premier appel, on determine l et q2 de facon iterative.
-c iterration pour determiner la longueur de melange
-
-
-      if (first.or.iflag_pbl.eq.6) then
-                                                          do ig=1,ngrid
-      l0(ig)=10.
-                                                          enddo
-      do k=2,klev-1
-                                                          do ig=1,ngrid
-        l(ig,k)=l0(ig)*kap*zlev(ig,k)/(kap*zlev(ig,k)+l0(ig))
-                                                          enddo
-      enddo
-
-      do iter=1,10
-                                                          do ig=1,ngrid
-         sq(ig)=1.e-10
-         sqz(ig)=1.e-10
-                                                          enddo
-         do k=2,klev-1
-                                                          do ig=1,ngrid
-           q2(ig,k)=l(ig,k)**2*zz(ig,k)
-           l(ig,k)=fl(zlev(ig,k),l0(ig),q2(ig,k),n2(ig,k))
-           zq=sqrt(q2(ig,k))
-           sqz(ig)=sqz(ig)+zq*zlev(ig,k)*(zlay(ig,k)-zlay(ig,k-1))
-           sq(ig)=sq(ig)+zq*(zlay(ig,k)-zlay(ig,k-1))
-                                                          enddo
-         enddo
-                                                          do ig=1,ngrid
-         l0(ig)=0.2*sqz(ig)/sq(ig)
-c        l0(ig)=30.
-                                                          enddo
-c      print*,'ITER=',iter,'  L0=',l0
-
-      enddo
-
-c     print*,'Fin de l initialisation de q2 et l0'
-
-      endif ! first
-
-c====================================================================
-c  Calcul de la longueur de melange.
+                                                          enddo
+      enddo
+
+
+c====================================================================
+c  Computing the mixing length
 c====================================================================
 
 c   Mise a jour de l0
+      if (iflag_pbl==8.or.iflag_pbl==10) then
+
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+! Iterative computation of l0
+! This version is kept for iflag_pbl only for convergence
+! with NPv3.1 Cmip5 simulations
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
                                                           do ig=1,ngrid
       sq(ig)=1.e-10
@@ -263,16 +219,28 @@
                                                           do ig=1,ngrid
       l0(ig)=0.2*sqz(ig)/sq(ig)
-c        l0(ig)=30.
-                                                          enddo
-c      print*,'ITER=',iter,'  L0=',l0
-c   calcul de l(z)
+                                                          enddo
       do k=2,klev
                                                           do ig=1,ngrid
          l(ig,k)=fl(zlev(ig,k),l0(ig),q2(ig,k),n2(ig,k))
-         if(first) then
-           q2(ig,k)=l(ig,k)**2*zz(ig,k)
-         endif
-                                                          enddo
-      enddo
+                                                          enddo
+      enddo
+!     print*,'L0 cas 8 ou 10 ',l0
+
+      else
+
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+! In all other case, the assymptotic mixing length l0 is imposed (100m)
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+          l0(:)=150.
+          do k=2,klev
+                                                          do ig=1,ngrid
+             l(ig,k)=fl(zlev(ig,k),l0(ig),q2(ig,k),n2(ig,k))
+                                                          enddo
+          enddo
+!     print*,'L0 cas autres ',l0
+
+      endif
+
 
 c====================================================================
@@ -282,7 +250,5 @@
 
       do k=2,klev
-                                                          do ig=1,ngrid
-         q2(ig,k)=l(ig,k)**2*zz(ig,k)
-                                                          enddo
+         q2(:,k)=l(:,k)**2*zz(:,k)
       enddo
 
@@ -342,5 +308,5 @@
       enddo
 
-      else if (iflag_pbl.ge.8) then
+      else if (iflag_pbl==8.or.iflag_pbl==9) then
 c====================================================================
 c   Yamada 2.5 a la Didi
@@ -366,5 +332,5 @@
 c     print*,'0L=',k,l(ig,k),delta(ig,k),km(ig,k)
          qpre=sqrt(q2(ig,k))
-         if (iflag_pbl.eq.8 ) then
+!        if (iflag_pbl.eq.8 ) then
             if (aa(ig,k).gt.0.) then
                q2(ig,k)=(qpre+aa(ig,k)*qpre*qpre)**2
@@ -372,15 +338,32 @@
                q2(ig,k)=(qpre/(1.-aa(ig,k)*qpre))**2
             endif
-         else ! iflag_pbl=9
-            if (aa(ig,k)*qpre.gt.0.9) then
-               q2(ig,k)=(qpre*10.)**2
-            else
-               q2(ig,k)=(qpre/(1.-aa(ig,k)*qpre))**2
-            endif
-         endif
+!        else ! iflag_pbl=9
+!           if (aa(ig,k)*qpre.gt.0.9) then
+!              q2(ig,k)=(qpre*10.)**2
+!           else
+!              q2(ig,k)=(qpre/(1.-aa(ig,k)*qpre))**2
+!           endif
+!        endif
          q2(ig,k)=min(max(q2(ig,k),1.e-10),1.e4)
 c     print*,'Q2 L=',k,q2(ig,k),qpre*qpre
                                                           enddo
       enddo
+
+      else if (iflag_pbl>=10) then
+
+!        print*,'Schema mixte D'
+!        print*,'Longueur ',l(:,:)
+         do k=2,klev-1
+            l(:,k)=max(l(:,k),1.)
+            km(:,k)=l(:,k)*sqrt(q2(:,k))*sm(:,k)
+            q2(:,k)=q2(:,k)+dt*km(:,k)*m2(:,k)*(1.-rif(:,k))
+            q2(:,k)=min(max(q2(:,k),1.e-10),1.e4)
+            q2(:,k)=1./(1./sqrt(q2(:,k))+dt/(2*l(:,k)*b1))
+            q2(:,k)=q2(:,k)*q2(:,k)
+         enddo
+
+
+      else
+         stop'Cas nom prevu dans yamada4'
 
       endif ! Fin du cas 8
@@ -404,5 +387,5 @@
 
 ! Transport diffusif vertical de la TKE.
-      if (iflag_pbl.ge.9) then
+      if (iflag_pbl.ge.12) then
 !       print*,'YAMADA VDIF'
         q2(:,1)=q2(:,2)
@@ -425,8 +408,10 @@
                                                           enddo
 
-!      print*,'pblhmin ',pblhmin
+!     print*,'pblhmin ',pblhmin
 CTest a remettre 21 11 02
 c test abd 13 05 02      if(0.eq.1) then
-      if(1.eq.1) then
+      if(1==1) then
+      if(iflag_pbl==8.or.iflag_pbl==10) then
+
       do k=2,klev
          do ig=1,ngrid
@@ -449,4 +434,35 @@
          enddo
       enddo
+
+      else
+
+      do k=2,klev
+         do ig=1,ngrid
+            if (teta(ig,2).gt.teta(ig,1)) then
+               qmin=ustar(ig)*(max(1.-zlev(ig,k)/pblhmin(ig),0.))**2
+               kmin=kap*zlev(ig,k)*qmin
+            else
+               kmin=-1. ! kmin n'est utilise que pour les SL stables.
+            endif 
+            if (kn(ig,k).lt.kmin.or.km(ig,k).lt.kmin) then
+c               print*,'Seuil min Km K=',k,kmin,km(ig,k),kn(ig,k)
+c     s           ,sqrt(q2(ig,k)),pblhmin(ig),qmin/sm(ig,k)
+               kn(ig,k)=kmin
+               km(ig,k)=kmin
+               kq(ig,k)=kmin
+c   la longueur de melange est suposee etre l= kap z
+c   K=l q Sm d'ou q2=(K/l Sm)**2
+               sm(ig,k)=1.
+               alpha(ig,k)=1.
+               q2(ig,k)=min((qmin/sm(ig,k))**2,10.)
+               zq=sqrt(q2(ig,k))
+               km(ig,k)=l(ig,k)*zq*sm(ig,k)
+               kn(ig,k)=km(ig,k)*alpha(ig,k)
+               kq(ig,k)=l(ig,k)*zq*0.2
+            endif
+         enddo
+      enddo
+      endif
+
       endif
 
Index: LMDZ5/branches/testing/tools/install_1d_src.sh
===================================================================
--- LMDZ5/branches/testing/tools/install_1d_src.sh	(revision 1707)
+++ LMDZ5/branches/testing/tools/install_1d_src.sh	(revision 1750)
@@ -59,5 +59,5 @@
  ln -s ../dyn3d/infotrac.F90 .
  ln -s ../dyn3d/conf_gcm.F .
- ln -s ../dyn3d/pres2lev.F90 .
+ ln -s ../dyn3d/pres2lev* .
  ln -s ../dyn3d/control_mod.F90 .
  ln -s ../dyn3d/q_sat.F .
