Index: LMDZ5/trunk/libf/phylmd/change_srf_frac_mod.F90
===================================================================
--- LMDZ5/trunk/libf/phylmd/change_srf_frac_mod.F90	(revision 1669)
+++ LMDZ5/trunk/libf/phylmd/change_srf_frac_mod.F90	(revision 1670)
@@ -12,5 +12,5 @@
 
   SUBROUTINE change_srf_frac(itime, dtime, jour, &
-       pctsrf, alb1, alb2, tsurf, u10m, v10m, pbl_tke)
+       pctsrf, alb1, alb2, tsurf, ustar, u10m, v10m, pbl_tke)
 !
 ! This subroutine is called from physiq.F at each timestep. 
@@ -46,4 +46,5 @@
     REAL, DIMENSION(klon,nbsrf), INTENT(INOUT) :: alb2   ! albedo second interval in SW spektrum
     REAL, DIMENSION(klon,nbsrf), INTENT(INOUT) :: tsurf
+    REAL, DIMENSION(klon,nbsrf), INTENT(INOUT) :: ustar
     REAL, DIMENSION(klon,nbsrf), INTENT(INOUT) :: u10m
     REAL, DIMENSION(klon,nbsrf), INTENT(INOUT) :: v10m
@@ -150,5 +151,5 @@
 ! 
 !****************************************************************************************
-       CALL pbl_surface_newfrac(itime, pctsrf, pctsrf_old, tsurf, alb1, alb2, u10m, v10m, pbl_tke)
+       CALL pbl_surface_newfrac(itime, pctsrf, pctsrf_old, tsurf, alb1, alb2, ustar, u10m, v10m, pbl_tke)
 
     ELSE
Index: LMDZ5/trunk/libf/phylmd/pbl_surface_mod.F90
===================================================================
--- LMDZ5/trunk/libf/phylmd/pbl_surface_mod.F90	(revision 1669)
+++ LMDZ5/trunk/libf/phylmd/pbl_surface_mod.F90	(revision 1670)
@@ -172,5 +172,5 @@
        t,         q,         u,        v,             &
        pplay,     paprs,     pctsrf,                  &
-       ts,        alb1,      alb2,     u10m,   v10m,  &
+       ts,        alb1,      alb2,ustar, u10m, v10m,  &
        lwdown_m,  cdragh,    cdragm,   zu1,    zv1,   &
        alb1_m,    alb2_m,    zxsens,   zxevap,        &
@@ -181,5 +181,5 @@
        s_capCL,   s_oliqCL,  s_cteiCL, s_pblT,        &
        s_therm,   s_trmb1,   s_trmb2,  s_trmb3,       &
-       zxrugs,    zu10m,     zv10m,    fder_print,    &
+       zxrugs,zustar,zu10m,  zv10m,    fder_print,    &
        zxqsurf,   rh2m,      zxfluxu,  zxfluxv,       &
        rugos_d,   agesno_d,  sollw,    solsw,         &
@@ -288,4 +288,5 @@
     REAL, DIMENSION(klon, nbsrf), INTENT(INOUT)     :: alb1    ! albedo in visible SW interval
     REAL, DIMENSION(klon, nbsrf), INTENT(INOUT)     :: alb2    ! albedo in near infra-red SW interval
+    REAL, DIMENSION(klon, nbsrf), INTENT(INOUT)     :: ustar   ! u* (m/s)
     REAL, DIMENSION(klon, nbsrf), INTENT(INOUT)     :: u10m    ! u speed at 10m
     REAL, DIMENSION(klon, nbsrf), INTENT(INOUT)     :: v10m    ! v speed at 10m
@@ -330,4 +331,5 @@
     REAL, DIMENSION(klon),        INTENT(OUT)       :: s_trmb3    ! point Omega, mean for each grid point
     REAL, DIMENSION(klon),        INTENT(OUT)       :: zxrugs     ! rugosity at surface (m), mean for each grid point
+    REAL, DIMENSION(klon),        INTENT(OUT)       :: zustar     ! u*
     REAL, DIMENSION(klon),        INTENT(OUT)       :: zu10m      ! u speed at 10m, mean for each grid point
     REAL, DIMENSION(klon),        INTENT(OUT)       :: zv10m      ! v speed at 10m, mean for each grid point
@@ -1019,7 +1021,7 @@
        t2m(:,nsrf)    = 0.
        q2m(:,nsrf)    = 0.
+       ustar(:,nsrf)   = 0.
        u10m(:,nsrf)   = 0.
        v10m(:,nsrf)   = 0.
-
        pblh(:,nsrf)   = 0.        ! Hauteur de couche limite
        plcl(:,nsrf)   = 0.        ! Niveau de condensation de la CLA
@@ -1069,6 +1071,8 @@
           
           ! u10m, v10m : composantes du vent a 10m sans spirale de Ekman
+          ustar(i,nsrf)=yustar(j)
           u10m(i,nsrf)=(yu10m(j) * uzon(j))/SQRT(uzon(j)**2+vmer(j)**2)
           v10m(i,nsrf)=(yu10m(j) * vmer(j))/SQRT(uzon(j)**2+vmer(j)**2)
+
        END DO
 
@@ -1150,5 +1154,5 @@
     zxtsol(:) = 0.0  ; zxfluxlat(:) = 0.0
     zt2m(:) = 0.0    ; zq2m(:) = 0.0 
-    zu10m(:) = 0.0   ; zv10m(:) = 0.0
+    zustar(:)=0.0 ; zu10m(:) = 0.0   ; zv10m(:) = 0.0
     s_pblh(:) = 0.0  ; s_plcl(:) = 0.0 
     s_capCL(:) = 0.0 ; s_oliqCL(:) = 0.0
@@ -1172,4 +1176,5 @@
           zt2m(i)  = zt2m(i)  + t2m(i,nsrf)  * pctsrf(i,nsrf)
           zq2m(i)  = zq2m(i)  + q2m(i,nsrf)  * pctsrf(i,nsrf)
+          zustar(i) = zustar(i) + ustar(i,nsrf) * pctsrf(i,nsrf)
           zu10m(i) = zu10m(i) + u10m(i,nsrf) * pctsrf(i,nsrf)
           zv10m(i) = zv10m(i) + v10m(i,nsrf) * pctsrf(i,nsrf)
@@ -1305,5 +1310,5 @@
 !****************************************************************************************
 ! 
-  SUBROUTINE pbl_surface_newfrac(itime, pctsrf_new, pctsrf_old, tsurf, alb1, alb2, u10m, v10m, tke)
+  SUBROUTINE pbl_surface_newfrac(itime, pctsrf_new, pctsrf_old, tsurf, alb1, alb2, ustar, u10m, v10m, tke)
 
     ! Give default values where new fraction has appread
@@ -1323,5 +1328,5 @@
     REAL, DIMENSION(klon,nbsrf), INTENT(INOUT)        :: tsurf
     REAL, DIMENSION(klon,nbsrf), INTENT(INOUT)        :: alb1, alb2
-    REAL, DIMENSION(klon,nbsrf), INTENT(INOUT)        :: u10m, v10m
+    REAL, DIMENSION(klon,nbsrf), INTENT(INOUT)        :: ustar,u10m, v10m
     REAL, DIMENSION(klon,klev+1,nbsrf), INTENT(INOUT) :: tke
 
@@ -1369,4 +1374,5 @@
                 alb1(i,nsrf)  = alb1(i,nsrf_comp1)
                 alb2(i,nsrf)  = alb2(i,nsrf_comp1)
+                ustar(i,nsrf)  = ustar(i,nsrf_comp1)
                 u10m(i,nsrf)  = u10m(i,nsrf_comp1)
                 v10m(i,nsrf)  = v10m(i,nsrf_comp1)
@@ -1383,4 +1389,5 @@
                 alb1(i,nsrf)  = alb1(i,nsrf_comp2) *pctsrf_old(i,nsrf_comp2) + alb1(i,nsrf_comp3) *pctsrf_old(i,nsrf_comp3)
                 alb2(i,nsrf)  = alb2(i,nsrf_comp2) *pctsrf_old(i,nsrf_comp2) + alb2(i,nsrf_comp3) *pctsrf_old(i,nsrf_comp3)
+                ustar(i,nsrf)  = ustar(i,nsrf_comp2) *pctsrf_old(i,nsrf_comp2) + ustar(i,nsrf_comp3) *pctsrf_old(i,nsrf_comp3)
                 u10m(i,nsrf)  = u10m(i,nsrf_comp2) *pctsrf_old(i,nsrf_comp2) + u10m(i,nsrf_comp3) *pctsrf_old(i,nsrf_comp3)
                 v10m(i,nsrf)  = v10m(i,nsrf_comp2) *pctsrf_old(i,nsrf_comp2) + v10m(i,nsrf_comp3) *pctsrf_old(i,nsrf_comp3)
Index: LMDZ5/trunk/libf/phylmd/phys_output_mod.F90
===================================================================
--- LMDZ5/trunk/libf/phylmd/phys_output_mod.F90	(revision 1669)
+++ LMDZ5/trunk/libf/phylmd/phys_output_mod.F90	(revision 1670)
@@ -81,4 +81,5 @@
   type(ctrl_out),save :: o_sicf         = ctrl_out((/ 1, 1, 10, 10, 10, 10 /),'sicf')
   type(ctrl_out),save :: o_q2m          = ctrl_out((/ 1, 1, 1, 5, 10, 10 /),'q2m')
+  type(ctrl_out),save :: o_ustar        = ctrl_out((/ 1, 1, 1, 5, 10, 10 /),'ustar')
   type(ctrl_out),save :: o_u10m         = ctrl_out((/ 1, 1, 1, 5, 10, 10 /),'u10m')
   type(ctrl_out),save :: o_v10m         = ctrl_out((/ 1, 1, 1, 5, 10, 10 /),'v10m')
@@ -86,4 +87,8 @@
   type(ctrl_out),save :: o_qsurf        = ctrl_out((/ 1, 10, 10, 10, 10, 10 /),'qsurf')
 
+  type(ctrl_out),save,dimension(4) :: o_ustar_srf     = (/ ctrl_out((/ 10, 6, 10, 10, 10, 10 /),'ustar_ter'), &
+       ctrl_out((/ 10, 6, 10, 10, 10, 10 /),'ustar_lic'), &
+       ctrl_out((/ 10, 6, 10, 10, 10, 10 /),'ustar_oce'), &
+       ctrl_out((/ 10, 6, 10, 10, 10, 10 /),'ustar_sic') /)
   type(ctrl_out),save,dimension(4) :: o_u10m_srf     = (/ ctrl_out((/ 10, 6, 10, 10, 10, 10 /),'u10m_ter'), &
        ctrl_out((/ 10, 6, 10, 10, 10, 10 /),'u10m_lic'), &
@@ -585,4 +590,5 @@
 
   type(ctrl_out),save,allocatable :: o_trac(:)
+  type(ctrl_out),save,allocatable :: o_trac_cum(:)
 
   type(ctrl_out),save :: o_rsu        = ctrl_out((/ 4, 10, 10, 10, 10, 10 /),'rsu')
@@ -719,4 +725,5 @@
 
     if (.not. allocated(o_trac)) ALLOCATE(o_trac(nqtot))
+    if (.not. allocated(o_trac_cum)) ALLOCATE(o_trac_cum(nqtot))
 
     levmax = (/ klev, klev, klev, klev, klev, klev /)
@@ -960,4 +967,5 @@
           CALL histdef2d(iff,clef_stations(iff),o_sicf%flag,o_sicf%name, "Sea-ice fraction", "-" )
           CALL histdef2d(iff,clef_stations(iff),o_q2m%flag,o_q2m%name, "Specific humidity 2m", "kg/kg")
+          CALL histdef2d(iff,clef_stations(iff),o_ustar%flag,o_ustar%name, "Friction velocity", "m/s" )
           CALL histdef2d(iff,clef_stations(iff),o_u10m%flag,o_u10m%name, "Vent zonal 10m", "m/s" )
           CALL histdef2d(iff,clef_stations(iff),o_v10m%flag,o_v10m%name, "Vent meridien 10m", "m/s")
@@ -1027,4 +1035,6 @@
                   o_tsol_srf(nsrf)%flag,o_tsol_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), &
                   o_u10m_srf(nsrf)%flag,o_u10m_srf(nsrf)%name,"Vent Zonal 10m "//clnsurf(nsrf),"m/s")
              CALL histdef2d(iff,clef_stations(iff), &
@@ -1756,5 +1766,8 @@
                 o_trac(iq-2) = ctrl_out((/ 4, 5, 1, 1, 1, 10 /),tname(iiq))
                 CALL histdef3d (iff,clef_stations(iff), &
-                     o_trac(iq-2)%flag,o_trac(iq-2)%name,'Tracer '//ttext(iiq), "-" )
+                o_trac(iq-2)%flag,o_trac(iq-2)%name,'Tracer '//ttext(iiq), "-" )
+                o_trac_cum(iq-2) = ctrl_out((/ 3, 4, 10, 10, 10, 10 /),'cum'//tname(iiq))
+                CALL histdef2d (iff,clef_stations(iff), &
+                o_trac_cum(iq-2)%flag,o_trac_cum(iq-2)%name,'Cumulated tracer '//ttext(iiq), "-" )
              ENDDO
           ENDIF
Index: LMDZ5/trunk/libf/phylmd/phys_output_write.h
===================================================================
--- LMDZ5/trunk/libf/phylmd/phys_output_write.h	(revision 1669)
+++ LMDZ5/trunk/libf/phylmd/phys_output_write.h	(revision 1670)
@@ -101,4 +101,9 @@
       CALL histwrite_phy(nid_files(iff),clef_stations(iff),
      $o_q2m%name,itau_w,zq2m)
+       ENDIF
+
+       IF (o_ustar%flag(iff)<=lev_files(iff)) THEN
+      CALL histwrite_phy(nid_files(iff),clef_stations(iff),
+     $o_ustar%name,itau_w,zustar)
        ENDIF
 
@@ -437,4 +442,11 @@
      $      zx_tmp_fi2d)
         ENDIF
+
+      IF (o_ustar_srf(nsrf)%flag(iff)<=lev_files(iff)) THEN
+      zx_tmp_fi2d(1 : klon) = ustar(1 : klon, nsrf)
+      CALL histwrite_phy(nid_files(iff),clef_stations(iff),
+     $o_ustar_srf(nsrf)%name,
+     $                 itau_w,zx_tmp_fi2d)
+      ENDIF
 
       IF (o_u10m_srf(nsrf)%flag(iff)<=lev_files(iff)) THEN
@@ -2248,4 +2260,15 @@
        ENDIF
          ENDDO
+         DO iq=3,nqtot
+       IF (o_trac_cum(iq-2)%flag(iff)<=lev_files(iff)) THEN
+         zx_tmp_fi2d=0.
+         do k=1,klev
+            zx_tmp_fi2d(:)=zx_tmp_fi2d(:)+zmasse(:,k)*qx(:,k,iq)
+         enddo
+         CALL histwrite_phy(nid_files(iff),clef_stations(iff),
+     s                  o_trac_cum(iq-2)%name,itau_w,zx_tmp_fi2d)
+
+       ENDIF
+         ENDDO
         endif
 
Index: LMDZ5/trunk/libf/phylmd/phys_state_var_mod.F90
===================================================================
--- LMDZ5/trunk/libf/phylmd/phys_state_var_mod.F90	(revision 1669)
+++ LMDZ5/trunk/libf/phylmd/phys_state_var_mod.F90	(revision 1670)
@@ -326,6 +326,6 @@
       REAL,SAVE,ALLOCATABLE :: newsst(:)
 !$OMP THREADPRIVATE(newsst)
-      REAL,SAVE,ALLOCATABLE :: u10m(:,:), v10m(:,:)
-!$OMP THREADPRIVATE(u10m,v10m)
+      REAL,SAVE,ALLOCATABLE :: ustar(:,:),u10m(:,:), v10m(:,:)
+!$OMP THREADPRIVATE(ustar,u10m,v10m)
 !
 ! ok_ade=T -ADE=topswad-topsw
@@ -496,5 +496,5 @@
       ALLOCATE(rlonPOS(klon))
       ALLOCATE(newsst(klon))
-      ALLOCATE(u10m(klon,nbsrf), v10m(klon,nbsrf))
+      ALLOCATE(ustar(klon,nbsrf),u10m(klon,nbsrf), v10m(klon,nbsrf))
       ALLOCATE(topswad(klon), solswad(klon))
       ALLOCATE(topswai(klon), solswai(klon))
@@ -606,5 +606,5 @@
       deallocate(rlonPOS)
       deallocate(newsst)
-      deallocate(u10m, v10m)
+      deallocate(ustar,u10m, v10m)
       deallocate(topswad, solswad)
       deallocate(topswai, solswai)
Index: LMDZ5/trunk/libf/phylmd/physiq.F
===================================================================
--- LMDZ5/trunk/libf/phylmd/physiq.F	(revision 1669)
+++ LMDZ5/trunk/libf/phylmd/physiq.F	(revision 1670)
@@ -1137,7 +1137,7 @@
       REAL q2m(klon,nbsrf)  ! humidite a 2m
 
-cIM: t2m, q2m, u10m, v10m et t2mincels, t2maxcels
+cIM: t2m, q2m, ustar, u10m, v10m et t2mincels, t2maxcels
       REAL zt2m(klon), zq2m(klon)             !temp., hum. 2m moyenne s/ 1 maille
-      REAL zu10m(klon), zv10m(klon)           !vents a 10m moyennes s/1 maille
+      REAL zustar(klon),zu10m(klon), zv10m(klon)  ! u* et vents a 10m moyennes s/1 maille
       CHARACTER*40 t2mincels, t2maxcels       !t2m min., t2m max
       CHARACTER*40 tinst, tave, typeval
@@ -1381,4 +1381,5 @@
          lalim_conv(:)=1 
 cRC
+         ustar(:,:)=0.
          u10m(:,:)=0.
          v10m(:,:)=0.
@@ -1768,5 +1769,5 @@
 !
       CALL change_srf_frac(itap, dtime, days_elapsed+1, 
-     *     pctsrf, falb1, falb2, ftsol, u10m, v10m, pbl_tke)
+     *     pctsrf, falb1, falb2, ftsol, ustar, u10m, v10m, pbl_tke)
 
 
@@ -2078,5 +2079,5 @@
      e     t_seri,    q_seri,    u_seri,  v_seri,   
      e     pplay,     paprs,     pctsrf,            
-     +     ftsol,     falb1,     falb2,   u10m,   v10m,
+     +     ftsol,     falb1,     falb2,   ustar, u10m,   v10m,
      s     sollwdown, cdragh,    cdragm,  u1,    v1,
      s     albsol1,   albsol2,   sens,    evap,  
@@ -2087,5 +2088,5 @@
      d     s_capCL,   s_oliqCL,  s_cteiCL,s_pblT,
      d     s_therm,   s_trmb1,   s_trmb2, s_trmb3,
-     d     zxrugs,    zu10m,     zv10m,   fder,
+     d     zxrugs,    zustar, zu10m,     zv10m,   fder,
      d     zxqsurf,   rh2m,      zxfluxu, zxfluxv,
      d     frugs,     agesno,    fsollw,  fsolsw,
@@ -3843,4 +3844,5 @@
      I     cdragh,   coefh,     fm_therm, entr_therm,
      I     u1,       v1,        ftsol,    pctsrf,
+     I     ustar,     u10m,      v10m,
      I     rlat,     frac_impa, frac_nucl,rlon,
      I     presnivs, pphis,     pphi,     albsol1,
Index: LMDZ5/trunk/libf/phylmd/phytrac.F90
===================================================================
--- LMDZ5/trunk/libf/phylmd/phytrac.F90	(revision 1669)
+++ LMDZ5/trunk/libf/phylmd/phytrac.F90	(revision 1670)
@@ -8,4 +8,5 @@
      cdragh,    coefh,    fm_therm, entr_therm,&
      yu1,       yv1,      ftsol,    pctsrf,    &
+     ustar,     u10m,      v10m,               &
      xlat,      frac_impa,frac_nucl,xlon,      &
      presnivs,  pphis,    pphi,     albsol,    &
@@ -119,8 +120,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)      :: 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:
@@ -244,6 +246,7 @@
      !    -- 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, tr_seri, source, solsym, d_tr_cl, zmasse)
+          cdragh,  coefh, yu1, yv1, ftsol, pctsrf, xlat, xlon,couchelimite,sh,&
+          rh, pphi, ustar, u10m, v10m, &
+          tr_seri, source, solsym, d_tr_cl, zmasse)
   CASE('inca')
      !    -- CHIMIE INCA  config_inca = aero or chem --
Index: LMDZ5/trunk/libf/phylmd/traclmdz_mod.F90
===================================================================
--- LMDZ5/trunk/libf/phylmd/traclmdz_mod.F90	(revision 1669)
+++ LMDZ5/trunk/libf/phylmd/traclmdz_mod.F90	(revision 1670)
@@ -279,4 +279,5 @@
   SUBROUTINE traclmdz(nstep, julien, gmtime, pdtphys, t_seri, paprs, pplay, &
        cdragh,  coefh, yu1, yv1, ftsol, pctsrf, xlat, xlon, couchelimite, sh, &
+       rh, pphi, ustar, zu10m, zv10m, &
        tr_seri, source, solsym, d_tr_cl, zmasse)
     
@@ -315,10 +316,15 @@
 !--------------
 !
-    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
+    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
     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
+    REAL,DIMENSION(klon),INTENT(IN)      :: ustar   ! ustar (m/s)
+    REAL,DIMENSION(klon),INTENT(IN)      :: zu10m   ! vent zonal 10m (m/s)
+    REAL,DIMENSION(klon),INTENT(IN)      :: zv10m   ! vent zonal 10m (m/s)
 
 ! Arguments necessaires pour les sources et puits de traceur:
