Index: /LMDZ6/branches/Portage_acc/libf/phylmd/thermcell_env.F90
===================================================================
--- /LMDZ6/branches/Portage_acc/libf/phylmd/thermcell_env.F90	(revision 4434)
+++ /LMDZ6/branches/Portage_acc/libf/phylmd/thermcell_env.F90	(revision 4435)
@@ -40,6 +40,5 @@
   !$acc kernels default(none) async
    mask(:,:)=.true.
-   !$acc end kernels
-   
+  !$acc end kernels
 !
 ! calcul des caracteristiques de l environnement
@@ -57,5 +56,4 @@
 !---------------
 ! Calcul de l'humidite a saturation et de la condensation
-
    call thermcell_qsat(ngrid*nlay,mask,pplev,pt,po,pqsat)
   !$acc kernels default(none) async
@@ -92,5 +90,6 @@
 !!! temporary for GPU port !!!$acc update self(zo, zl, zh, ztv, zthl,zpspsk, zu, zv, pqsat)
 !!! temporary for GPU port include "dump_param.h" ! replay automatic include 
-  !$acc end data
+!!! !$acc update self(zo, zl, zh, ztv, zthl,zpspsk, zu, zv, pqsat)
+   !$acc end data 
    RETURN
    END
Index: /LMDZ6/branches/Portage_acc/libf/phylmd/thermcell_qsat.F90
===================================================================
--- /LMDZ6/branches/Portage_acc/libf/phylmd/thermcell_qsat.F90	(revision 4434)
+++ /LMDZ6/branches/Portage_acc/libf/phylmd/thermcell_qsat.F90	(revision 4435)
@@ -1,6 +1,7 @@
 subroutine thermcell_qsat(klon,active,pplev,ztemp,zqta,zqsat)
-implicit none
+  USE thermcell_ini_mod, ONLY : RLvCp,RETV, RCPD, RLVTT, RTT
+  implicit none
 
-#include "YOMCST.h"
+!!#include "YOMCST.h"
 #include "YOETHF.h"
 #include "FCTTRE.h"
@@ -12,8 +13,11 @@
 
 ! Arguments
-INTEGER klon
-REAL zpspsk(klon),pplev(klon)
-REAL ztemp(klon),zqta(klon),zqsat(klon)
-LOGICAL active(klon)
+INTEGER, INTENT(IN) :: klon
+!REAL zpspsk(klon),pplev(klon)
+!REAL ztemp(klon),zqta(klon),zqsat(klon)
+REAL, INTENT(IN) :: pplev(klon)
+REAL, INTENT(IN) :: ztemp(klon),zqta(klon)
+REAL, INTENT(OUT) :: zqsat(klon)
+LOGICAL, INTENT(IN) :: active(klon)
 
 ! Variables locales
@@ -22,10 +26,13 @@
 REAL tdelta,qsatbef,zcor,qlbef,zdelta,zcvm5,dqsat,num,denom,dqsat_dT
 logical Zsat
-REAL RLvCp
+!REAL RLvCp
 
 REAL, SAVE :: DDT0=.01
 !$OMP THREADPRIVATE(DDT0)
 
-LOGICAL afaire(klon),tout_converge
+     !$acc data create (dt, tbef) &
+     !$acc present(pplev, ztemp, zqta, active) &
+     !$acc present(zqsat) &
+     !$acc &
 
 !====================================================================
@@ -33,9 +40,8 @@
 !====================================================================
 
-RLvCp = RLVTT/RCPD
-tout_converge=.false.
-afaire(:)=.false.
+!RLvCp = RLVTT/RCPD
+!$acc kernels default(none)
 DT(:)=0.
-
+!!LF !$acc end kernels
 
 !====================================================================
@@ -45,4 +51,5 @@
 !====================================================================
 
+!!LF   !$acc kernels default(none)
 do ig=1,klon
    if (active(ig)) then
@@ -58,7 +65,9 @@
      endif
 enddo
+!!LF   !$acc end kernels
 
 ! Traitement du cas ou il y a condensation mais faible
 ! On ne condense pas mais on dit que le qsat est le qta
+!!LF    !$acc kernels default(none)
 do ig=1,klon
    if (active(ig)) then
@@ -68,27 +77,33 @@
    endif
 enddo
+!!LF   !$acc end kernels
 
+!!LF   !$acc kernels default(none)
+!!   !$acc parallel loop private(tbef,dt,zqsat)
 do iter=1,10
-    afaire(:)=abs(DT(:)).gt.DDT0
     do ig=1,klon
-               if (afaire(ig)) then
-                 Tbef(ig)=Tbef(ig)+DT(ig)
-                 zdelta=MAX(0.,SIGN(1.,RTT-Tbef(ig)))
-                 qsatbef= R2ES * FOEEW(Tbef(ig),zdelta)/pplev(ig)
-                 qsatbef=MIN(0.5,qsatbef)
-                 zcor=1./(1.-retv*qsatbef)
-                 qsatbef=qsatbef*zcor
-                 qlbef=zqta(ig)-qsatbef
-                 zdelta=MAX(0.,SIGN(1.,RTT-Tbef(ig)))
-                 zcvm5=R5LES*(1.-zdelta) + R5IES*zdelta
-                 zcor=1./(1.-retv*qsatbef)
-                 dqsat_dT=FOEDE(Tbef(ig),zdelta,zcvm5,qsatbef,zcor)
-                 num=-Tbef(ig)+ztemp(ig)+RLvCp*qlbef
-                 denom=1.+RLvCp*dqsat_dT
-                 zqsat(ig) = qsatbef
-                 DT(ig)=num/denom
-               endif
+       if (abs(DT(ig)).gt.DDT0) then
+          Tbef(ig)=Tbef(ig)+DT(ig)
+          zdelta=MAX(0.,SIGN(1.,RTT-Tbef(ig)))
+          qsatbef= R2ES * FOEEW(Tbef(ig),zdelta)/pplev(ig)
+          qsatbef=MIN(0.5,qsatbef)
+          zcor=1./(1.-retv*qsatbef)
+          qsatbef=qsatbef*zcor
+          qlbef=zqta(ig)-qsatbef
+          zdelta=MAX(0.,SIGN(1.,RTT-Tbef(ig)))
+          zcvm5=R5LES*(1.-zdelta) + R5IES*zdelta
+          zcor=1./(1.-retv*qsatbef)
+          dqsat_dT=FOEDE(Tbef(ig),zdelta,zcvm5,qsatbef,zcor)
+          num=-Tbef(ig)+ztemp(ig)+RLvCp*qlbef
+          denom=1.+RLvCp*dqsat_dT
+          zqsat(ig) = qsatbef
+          DT(ig)=num/denom
+       endif
     enddo
 enddo
+   !$acc end kernels
+
+
+   !$acc end data 
 
 return
