Index: LMDZ6/trunk/libf/phylmd/lmdz_thermcell_main.F90
===================================================================
--- LMDZ6/trunk/libf/phylmd/lmdz_thermcell_main.F90	(revision 4684)
+++ LMDZ6/trunk/libf/phylmd/lmdz_thermcell_main.F90	(revision 4690)
@@ -4,9 +4,10 @@
 ! A REGARDER !!!!!!!!!!!!!!!!!
 ! ATTENTION : zpspsk est inout et out mais c'est pas forcement pour de bonnes raisons (FH, 2023)
+! ATTENTION : dans thermcell_env, on condense potentiellement de l'eau. Mais comme on ne mélange pas l'eau liquide supposant qu'il n'y en n'a pas, c'est potentiellement un souci
 CONTAINS
 
       subroutine thermcell_main(itap,ngrid,nlay,ptimestep  &
      &                  ,pplay,pplev,pphi,debut  &
-     &                  ,puwind,pvwind,ptemp,p_o  &
+     &                  ,puwind,pvwind,ptemp,p_o,ptemp_env, po_env  &
      &                  ,pduadj,pdvadj,pdtadj,pdoadj  &
      &                  ,fm0,entr0,detr0,zqta,zqla,lmax  &
@@ -21,7 +22,10 @@
 
 
+
+! USE necessaires pour les lignes importees de thermcell_env
       USE lmdz_thermcell_ini, ONLY: thermcell_ini,dqimpl,dvdq,prt_level,lunout,prt_level
       USE lmdz_thermcell_ini, ONLY: iflag_thermals_closure,iflag_thermals_ed,tau_thermals,r_aspect_thermals
       USE lmdz_thermcell_ini, ONLY: iflag_thermals_down,fact_thermals_down
+      USE lmdz_thermcell_ini, ONLY: iflag_thermals_tenv
       USE lmdz_thermcell_ini, ONLY: RD,RG
 
@@ -36,4 +40,9 @@
       USE lmdz_thermcell_plume, ONLY: thermcell_plume
       USE lmdz_thermcell_plume_6A, ONLY: thermcell_plume_6A,thermcell_plume_5B
+
+! USE necessaires pour les lignes importees de thermcell_env
+   USE lmdz_thermcell_ini, ONLY : RLvCp,RKAPPA,RETV
+   USE lmdz_thermcell_qsat, ONLY : thermcell_qsat
+
 
 #ifdef ISO
@@ -105,5 +114,5 @@
       integer, intent(in) :: itap,ngrid,nlay
       real, intent(in) ::  ptimestep
-      real, intent(in), dimension(ngrid,nlay)    :: ptemp,puwind,pvwind,pplay,pphi
+      real, intent(in), dimension(ngrid,nlay)    :: ptemp,puwind,pvwind,pplay,pphi,ptemp_env,po_env
 ! ATTENTION : zpspsk est inout et out mais c'est pas forcement pour de bonnes raisons (FH, 2023)
       real, intent(in), dimension(ngrid,nlay)    :: p_o
@@ -144,5 +153,6 @@
       integer,dimension(ngrid) :: lmin,lmix,lmix_bis,nivcon
       real, dimension(ngrid,nlay) :: ztva_est
-      real, dimension(ngrid,nlay) :: deltaz,zlay,zh,zdthladj,zu,zv,z_o,zl,zva,zua,z_oa
+      real, dimension(ngrid,nlay) :: deltaz,zlay,zdthladj,zu,zv,z_o,zl,zva,zua,z_oa
+      real, dimension(ngrid,nlay) :: ztemp_env ! temperarure liquide de l'environnement
       real, dimension(ngrid,nlay) :: zta,zha,q2,wq,wthl,wthv,thetath2,wth2
       real, dimension(ngrid,nlay) :: rho,masse
@@ -154,4 +164,5 @@
       real, dimension(ngrid) :: zcon,zcon2,alim_star_tot,f
       real, dimension(ngrid,nlay) :: entrdn,detrdn
+      logical, dimension(ngrid,nlay) :: mask
 
       character (len=20) :: modname='thermcell_main'
@@ -199,10 +210,69 @@
        enddo
       endif
+
 !-----------------------------------------------------------------------
 ! Calcul de T,q,ql a partir de Tl et qT dans l environnement
 !   --------------------------------------------------------------------
 !
-      CALL thermcell_env(ngrid,nlay,p_o,ptemp,puwind,pvwind,pplay,  &
-     &           pplev,z_o,zh,zl,ztv,zthl,zu,zv,zpspsk,zqsat,lev_out)
+          ! On condense l'eau liquide si besoin.
+          ! En fait on arrive ici d'habitude (jusque 6A) après réévaporation
+          ! Dans une nouvelle mouture, on passe les profiles 
+          ! avant la couche limite : iflag_thermals_tenv=1
+          !     dés le début de la physique : iflag_thermals_tenv=2
+          ! Mais même pour 2) on ne veut sans doute pas réévaporer.
+          ! On veut comparer thetav dans le thermique, après condensation,
+          ! avec le theta_v effectif de l'environnement.
+
+      if (iflag_thermals_tenv - 10 * ( iflag_thermals_tenv / 10 ) == 0) then
+
+          CALL thermcell_env(ngrid,nlay,p_o,ptemp_env,puwind,pvwind,pplay,  &
+         &           pplev,z_o,ztemp_env,zl,ztv,zthl,zu,zv,zpspsk,zqsat,lev_out)
+
+      else
+
+        ! Chantier en cours : ne pas effacer (Fredho). 15 septembre 2023
+        ! Dans la version originale de thermcell_env, on condense l'eau de l'environnement
+        ! pour calculer une temperature potentielle liquide.
+        ! On en déduit un Theta v.
+
+ ! ... 
+        ! contenu de thermcell_env
+        !    SUBROUTINE thermcell_env(ngrid,nlay,po,pt,pu,pv,pplay,  &
+        ! &           pplev,zo,zh,zl,ztv,zthl,zu,zv,zpspsk,pqsat,lev_out)
+        ! contenu thermcell_env : call thermcell_qsat(ngrid*nlay,mask,pplev,pt,po,pqsat)
+        ! contenu thermcell_env : do ll=1,nlay
+        ! contenu thermcell_env :    do ig=1,ngrid
+        ! contenu thermcell_env :       zl(ig,ll) = max(0.,po(ig,ll)-pqsat(ig,ll))
+        ! contenu thermcell_env :       zh(ig,ll) = pt(ig,ll)+RLvCp*zl(ig,ll)         !   T = Tl + Lv/Cp ql
+        ! contenu thermcell_env :       zo(ig,ll) = po(ig,ll)-zl(ig,ll)
+        ! contenu thermcell_env :    enddo
+        ! contenu thermcell_env : enddo
+        ! contenu thermcell_env : do ll=1,nlay
+        ! contenu thermcell_env :    do ig=1,ngrid
+        ! contenu thermcell_env :        zpspsk(ig,ll)=(pplay(ig,ll)/100000.)**RKAPPA
+        ! contenu thermcell_env :        zu(ig,ll)=pu(ig,ll)
+        ! contenu thermcell_env :        zv(ig,ll)=pv(ig,ll)
+        ! contenu thermcell_env :          ztv(ig,ll)=zh(ig,ll)/zpspsk(ig,ll)
+        ! contenu thermcell_env :          ztv(ig,ll)=ztv(ig,ll)*(1.+RETV*(zo(ig,ll))-zl(ig,ll))
+        ! contenu thermcell_env :          zthl(ig,ll)=pt(ig,ll)/zpspsk(ig,ll)
+        ! contenu thermcell_env :    enddo
+        ! contenu thermcell_env : enddo
+
+        do l=1,nlay
+            do ig=1,ngrid
+                 zl(ig,l)=0.
+                 zu(ig,l)=puwind(ig,l)
+                 zv(ig,l)=pvwind(ig,l)
+                 ztemp_env(ig,l)=ptemp_env(ig,l)
+                 zpspsk(ig,l)=(pplay(ig,l)/100000.)**RKAPPA
+                 ztv(ig,l)=ztemp_env(ig,l)/zpspsk(ig,l)
+                 ztv(ig,l)=ztv(ig,l)*(1.+RETV*po_env(ig,l))
+                 zthl(ig,l)=ptemp(ig,l)/zpspsk(ig,l)
+                 mask(ig,l)=.true.
+            enddo
+        enddo
+        call thermcell_qsat(ngrid*nlay,mask,pplev,ptemp_env,p_o,zqsat)
+          
+      endif
        
       if (prt_level.ge.1) print*,'thermcell_main apres thermcell_env'
@@ -532,4 +602,10 @@
       !--------------------------------------------------------------
 
+        ! Temperature potentielle liquide effectivement mélangée par les thermiques
+        do ll=1,nlay
+           do ig=1,ngrid
+              zthl(ig,ll)=ptemp(ig,ll)/zpspsk(ig,ll)
+           enddo
+        enddo
         call thermcell_dq(ngrid,nlay,dqimpl,ptimestep,fm0,entr0,masse,  &
         &                    zthl,zdthladj,zta,lev_out)
@@ -632,5 +708,6 @@
 !nouveau calcul
       do ig=1,ngrid
-      CHI=zh(ig,1)/(1669.0-122.0*z_o(ig,1)/zqsat(ig,1)-zh(ig,1))
+      ! WARNING !!! verifier que c'est bien ztemp_env qu'on veut là
+      CHI=ztemp_env(ig,1)/(1669.0-122.0*z_o(ig,1)/zqsat(ig,1)-ztemp_env(ig,1))
       pcon(ig)=pplay(ig,1)*(z_o(ig,1)/zqsat(ig,1))**CHI
       enddo
