Index: LMDZ6/branches/PBLSURF_GPUPORT/libf/phylmd/pbl_surface_mod.F90
===================================================================
--- LMDZ6/branches/PBLSURF_GPUPORT/libf/phylmd/pbl_surface_mod.F90	(revision 5884)
+++ LMDZ6/branches/PBLSURF_GPUPORT/libf/phylmd/pbl_surface_mod.F90	(revision 5885)
@@ -112,4 +112,5 @@
     USE climb_wind_mod, ONLY : climb_wind_init
     USE climb_qbs_mod, ONLY : climb_qbs_init
+    USE yamada_c_mod, ONLY : yamada_c_init
 
     IMPLICIT NONE
@@ -270,4 +271,5 @@
     CALL climb_wind_init
     CALL climb_qbs_init
+    CALL yamada_c_init
 
   END SUBROUTINE pbl_surface_init
@@ -2451,4 +2453,5 @@
     USE cdrag_mod, ONLY : cdrag
     USE freinage_mod, ONLY : freinage
+    USE yamada_c_mod, ONLY : yamada_c
 
 IMPLICIT NONE
@@ -4415,5 +4418,5 @@
      IF (iflag_pbl>=20 .and. iflag_pbl<30) THEN
 
-        CALL yamada_c(knon, knon,dtime,ypaprs,ypplay &
+        CALL yamada_c( knon, knon, dtime,ypaprs,ypplay &
     &   ,yu,yv,yt,y_d_u,y_d_v,y_d_t,ycdragm,ytke,ycoefm,ycoefh,ycoefq,y_d_t_diss,yustar &
     &   ,iflag_pbl)
@@ -4422,5 +4425,5 @@
        ELSE  !(iflag_split .eq.0)
 
-        CALL climb_wind_up(knon, ni, dtime, yu_x, yv_x, y_flux_u1_x, y_flux_v1_x, &
+        CALL climb_wind_up( knon, ni, dtime, yu_x, yv_x, y_flux_u1_x, y_flux_v1_x, &
             AcoefU_x, AcoefV_x, BcoefU_x, BcoefV_x, &
             CcoefU_x, CcoefV_x, DcoefU_x, DcoefV_x, &
@@ -4446,5 +4449,5 @@
      IF (iflag_pbl>=20 .and. iflag_pbl<30) THEN
 
-        CALL yamada_c(knon, knon,dtime,ypaprs,ypplay &
+        CALL yamada_c( knon, knon,dtime,ypaprs,ypplay &
     &   ,yu_w,yv_w,yt_w,y_d_u_w,y_d_v_w,y_d_t_w,ycdragm_w,ytke_w,ycoefm_w,ycoefh_w &
         ,ycoefq_w,y_d_t_diss_w,yustar_w &
Index: LMDZ6/branches/PBLSURF_GPUPORT/libf/phylmd/yamada_c.F90
===================================================================
--- LMDZ6/branches/PBLSURF_GPUPORT/libf/phylmd/yamada_c.F90	(revision 5884)
+++ LMDZ6/branches/PBLSURF_GPUPORT/libf/phylmd/yamada_c.F90	(revision 5885)
@@ -2,10 +2,29 @@
 ! $Header$
 !
+MODULE yamada_c_mod
+  PRIVATE
+
+  INTEGER, SAVE :: iflag_tke_diff=0
+  !$OMP THTREADPRIVATE(iflag_tke_diff) 
+
+  PUBLIC :: yamada_c_init, yamada_c
+
+CONTAINS
+      
+      SUBROUTINE yamada_c_init
+      USE ioipsl_getin_p_mod, ONLY : getin_p
+      IMPLICIT NONE
+
+        CALL getin_p('iflag_tke_diff',iflag_tke_diff)
+
+      END SUBROUTINE yamada_c_init
+      
+
       SUBROUTINE yamada_c(klon, ngrid,timestep,plev,play &
      &   ,pu,pv,pt,d_u,d_v,d_t,cd,q2,km,kn,kq,d_t_diss,ustar &
      &   ,iflag_pbl)
+!$gpum horizontal klon ngrid
       USE dimphy, ONLY: klev
       USE print_control_mod, ONLY: prt_level
-      USE ioipsl_getin_p_mod, ONLY : getin_p
       USE yamada4_mod, ONLY : vdif_q2
       USE yomcst_mod_h
@@ -80,12 +99,12 @@
       integer nlay,nlev
 
-      logical first
-      integer ipas
-      save first,ipas
+!ym      logical first
+!ym      integer ipas
+!ym      save first,ipas
 !FH/IM     data first,ipas/.true.,0/
-      data first,ipas/.false.,0/
-!$OMP THREADPRIVATE( first,ipas)
-       INTEGER, SAVE :: iflag_tke_diff=0
-!$OMP THREADPRIVATE(iflag_tke_diff)
+!ym      data first,ipas/.false.,0/
+!ym!$OMP THREADPRIVATE( first,ipas)
+!ym       INTEGER, SAVE :: iflag_tke_diff=0
+!ym!$OMP THREADPRIVATE(iflag_tke_diff)
 
 
@@ -102,13 +121,15 @@
       real l(klon,klev+1)
       real leff(klon,klev+1)
-      real,allocatable,save :: l0(:)
-!$OMP THREADPRIVATE(l0)      
+      real l0(klon)
+!ym      real,allocatable,save :: l0(:)
+!ym!$OMP THREADPRIVATE(l0)      
       real sq(klon),sqz(klon),zz(klon,klev+1)
       integer iter
 
-      real ric,rifc,b1,kap
-      save ric,rifc,b1,kap
-      data ric,rifc,b1,kap/0.195,0.191,16.6,0.4/
-!$OMP THREADPRIVATE(ric,rifc,b1,kap)
+!ym      real ric,rifc,b1,kap
+!ym      save ric,rifc,b1,kap
+!ym      data ric,rifc,b1,kap/0.195,0.191,16.6,0.4/
+!ym!$OMP THREADPRIVATE(ric,rifc,b1,kap)
+      real, parameter :: ric=0.195,rifc=0.191,b1=16.6,kap=0.4
       real frif,falpha,fsm
       real fl,zzz,zl0,zq2,zn2
@@ -117,6 +138,6 @@
       real lyam(klon,klev),knyam(klon,klev)
       real w2yam(klon,klev),t2yam(klon,klev)
-      logical,save :: firstcall=.true.
-!$OMP THREADPRIVATE(firstcall)       
+!ym      logical,save :: firstcall=.true.
+!ym!$OMP THREADPRIVATE(firstcall)       
       CHARACTER(len=20),PARAMETER :: modname="yamada_c"
 REAL, DIMENSION(klon,klev+1) :: fluxu,fluxv,fluxt
@@ -129,15 +150,19 @@
       falpha(ri)=1.318*(0.2231-ri)/(0.2341-ri)
       fsm(ri)=1.96*(0.1912-ri)*(0.2341-ri)/((1.-ri)*(0.2231-ri))
+!ym   pas glop! pas glop!
+!ym      fl(zzz,zl0,zq2,zn2)= &
+!ym     &     max(min(zl0(ig)*kap*zlev(ig,k)/(kap*zlev(ig,k)+l0(ig)) &
+!ym     &     ,0.5*sqrt(q2(ig,k))/sqrt(max(n2(ig,k),1.e-10))) ,1.)
       fl(zzz,zl0,zq2,zn2)= &
-     &     max(min(l0(ig)*kap*zlev(ig,k)/(kap*zlev(ig,k)+l0(ig)) &
-     &     ,0.5*sqrt(q2(ig,k))/sqrt(max(n2(ig,k),1.e-10))) ,1.)
+     &     max(min(zl0*kap*zzz/(kap*zzz+zl0) &
+     &     ,0.5*sqrt(zq2)/sqrt(max(zn2,1.e-10))) ,1.)
 
 
       okiophys=klon==1
-      if (firstcall) then
-        CALL getin_p('iflag_tke_diff',iflag_tke_diff)
-        allocate(l0(klon))
-        firstcall=.false.
-      endif
+!ym      if (firstcall) then
+!ym        CALL getin_p('iflag_tke_diff',iflag_tke_diff)
+!ym        allocate(l0(klon))
+!ym        firstcall=.false.
+!ym      endif
 
    IF (ngrid<=0) RETURN ! Bizarre : on n a pas ce probeleme pour coef_diff_turb
@@ -175,5 +200,6 @@
    do k=1,klev-1
       zlay(:,k+1)=zlay(:,k)+0.5*RCPD*(teta(:,k)+teta(:,k+1))*(exner(:,k)-exner(:,k+1))/RG
-      zlev(:,k)=0.5*(zlay(:,k)+zlay(:,k+1)) ! PASBO
+      zlev(:,k+1)=0.5*(zlay(:,k)+zlay(:,k+1)) ! PASBO
+                                              ! ym bugfix : zlev(:,k) => zlev(:,k+1)
    enddo
 
@@ -220,5 +246,5 @@
 
 
-      ipas=ipas+1
+!ym      ipas=ipas+1
 
 
@@ -312,4 +338,6 @@
       l0(ig)=0.2*sqz(ig)/sq(ig)
                                                           enddo
+      l(:,1) = 0.
+      l(:,klev+1) = 0.
       do k=2,klev
                                                           do ig=1,ngrid
@@ -326,4 +354,6 @@
 
           l0(:)=150.
+          l(:,1) = 0.
+          l(:,klev+1) = 0.
           do k=2,klev
                                                           do ig=1,ngrid
@@ -480,2 +510,4 @@
       RETURN
       END SUBROUTINE yamada_c
+
+END MODULE yamada_c_mod
