Index: LMDZ6/trunk/libf/phylmd/dyn1d/old_lmdz1d.F90
===================================================================
--- LMDZ6/trunk/libf/phylmd/dyn1d/old_lmdz1d.F90	(revision 3954)
+++ LMDZ6/trunk/libf/phylmd/dyn1d/old_lmdz1d.F90	(revision 3956)
@@ -13,7 +13,8 @@
        ftsol, beta_aridity, pbl_tke, pctsrf, radsol, rain_fall, snow_fall, ratqs, &
        rnebcon, rugoro, sig1, w01, solaire_etat0, sollw, sollwdown, &
-       solsw, t_ancien, q_ancien, u_ancien, v_ancien, wake_cstar, &
+       solsw, solswfdiff, t_ancien, q_ancien, u_ancien, v_ancien, &
        wake_delta_pbl_TKE, delta_tsurf, wake_fip, wake_pe, &
        wake_deltaq, wake_deltat, wake_s, wake_dens, &
+       awake_dens, cv_gen, wake_cstar, &
        zgam, zmax0, zmea, zpic, zsig, &
        zstd, zthe, zval, ale_bl, ale_bl_trig, alp_bl, ql_ancien, qs_ancien, &
@@ -880,4 +881,5 @@
         snow_fall=0.
         solsw=0.
+        solswfdiff=0.
         sollw=0.
         sollwdown=rsigma*tsurf**4
@@ -895,5 +897,5 @@
         sig1=0.
         w01=0.
-        wake_cstar = 0.
+!
         wake_deltaq = 0.
         wake_deltat = 0.
@@ -904,4 +906,7 @@
         wake_s = 0.
         wake_dens = 0.
+        awake_dens = 0.
+        cv_gen = 0.
+        wake_cstar = 0.
         ale_bl = 0.
         ale_bl_trig = 0.
@@ -928,9 +933,9 @@
 ! pctsrf(:,is_sic),ftsol(:,nsrf),tsoil(:,isoil,nsrf),qsurf(:,nsrf)
 ! qsol,falb_dir(:,nsrf),falb_dif(:,nsrf),evap(:,nsrf),snow(:,nsrf)
-! radsol,solsw,sollw, sollwdown,fder,rain_fall,snow_fall,frugs(:,nsrf)
+! radsol,solsw,solswfdiff,sollw, sollwdown,fder,rain_fall,snow_fall,frugs(:,nsrf)
 ! agesno(:,nsrf),zmea,zstd,zsig,zgam,zthe,zpic,zval,rugoro
 ! t_ancien,q_ancien,,frugs(:,is_oce),clwcon(:,1),rnebcon(:,1),ratqs(:,1)
 ! run_off_lic_0,pbl_tke(:,1:klev,nsrf), zmax0,f0,sig1,w01
-! wake_deltat,wake_deltaq,wake_s,wake_dens,wake_cstar,
+! wake_deltat,wake_deltaq,wake_s,wake_dens,awake_dens,cv_gen,wake_cstar,
 ! wake_fip,wake_delta_pbl_tke(:,1:klev,nsrf)
 !
Index: LMDZ6/trunk/libf/phylmd/dyn1d/scm.F90
===================================================================
--- LMDZ6/trunk/libf/phylmd/dyn1d/scm.F90	(revision 3954)
+++ LMDZ6/trunk/libf/phylmd/dyn1d/scm.F90	(revision 3956)
@@ -9,7 +9,8 @@
        ftsol, beta_aridity, pbl_tke, pctsrf, radsol, rain_fall, snow_fall, ratqs, &
        rnebcon, rugoro, sig1, w01, solaire_etat0, sollw, sollwdown, &
-       solsw, t_ancien, q_ancien, u_ancien, v_ancien, wake_cstar, &
+       solsw, solswfdiff, t_ancien, q_ancien, u_ancien, v_ancien, &
        wake_delta_pbl_TKE, delta_tsurf, wake_fip, wake_pe, &
        wake_deltaq, wake_deltat, wake_s, wake_dens, &
+       awake_dens, cv_gen, wake_cstar, &
        zgam, zmax0, zmea, zpic, zsig, &
        zstd, zthe, zval, ale_bl, ale_bl_trig, alp_bl, ql_ancien, qs_ancien, &
@@ -645,4 +646,5 @@
         snow_fall=0.
         solsw=0.
+        solswfdiff=0.
         sollw=0.
         sollwdown=rsigma*tsurf**4
@@ -660,5 +662,5 @@
         sig1=0.
         w01=0.
-        wake_cstar = 0.
+!
         wake_deltaq = 0.
         wake_deltat = 0.
@@ -669,4 +671,7 @@
         wake_s = 0.
         wake_dens = 0.
+        awake_dens = 0.
+        cv_gen = 0.
+        wake_cstar = 0.
         ale_bl = 0.
         ale_bl_trig = 0.
@@ -693,9 +698,9 @@
 ! pctsrf(:,is_sic),ftsol(:,nsrf),tsoil(:,isoil,nsrf),qsurf(:,nsrf)
 ! qsol,falb_dir(:,nsrf),falb_dif(:,nsrf),evap(:,nsrf),snow(:,nsrf)
-! radsol,solsw,sollw, sollwdown,fder,rain_fall,snow_fall,frugs(:,nsrf)
+! radsol,solsw,solswfdiff,sollw, sollwdown,fder,rain_fall,snow_fall,frugs(:,nsrf)
 ! agesno(:,nsrf),zmea,zstd,zsig,zgam,zthe,zpic,zval,rugoro
 ! t_ancien,q_ancien,,frugs(:,is_oce),clwcon(:,1),rnebcon(:,1),ratqs(:,1)
 ! run_off_lic_0,pbl_tke(:,1:klev,nsrf), zmax0,f0,sig1,w01
-! wake_deltat,wake_deltaq,wake_s,wake_dens,wake_cstar,
+! wake_deltat,wake_deltaq,wake_s,wake_dens,awake_dens,cv_gen,wake_cstar,
 ! wake_fip,wake_delta_pbl_tke(:,1:klev,nsrf)
 !
Index: LMDZ6/trunk/libf/phylmd/pbl_surface_mod.F90
===================================================================
--- LMDZ6/trunk/libf/phylmd/pbl_surface_mod.F90	(revision 3954)
+++ LMDZ6/trunk/libf/phylmd/pbl_surface_mod.F90	(revision 3956)
@@ -665,5 +665,4 @@
     REAL, DIMENSION(klon, klev)        :: zxfluxu_x, zxfluxv_x, zxfluxu_w, zxfluxv_w
     REAL                               :: zx_qs_surf, zcor_surf, zdelta_surf
-    REAL, DIMENSION(klon)              :: ytsurf_th, yqsatsurf
 !jyg<
     REAL, DIMENSION(klon)              :: ybeta
@@ -816,5 +815,4 @@
     REAL, PARAMETER                    :: facteur=2./sqrt(3.14)
     REAL, PARAMETER                    :: inertia=2000.
-    REAL, DIMENSION(klon)              :: ytsurf_th_x,ytsurf_th_w,yqsatsurf_x,yqsatsurf_w
     REAL, DIMENSION(klon)              :: ydtsurf_th
     REAL                               :: zdelta_surf_x,zdelta_surf_w,zx_qs_surf_x,zx_qs_surf_w
@@ -890,5 +888,18 @@
 !!jyg      iflag_split = mod(iflag_pbl_split,2)
 !!jyg      iflag_split = mod(iflag_pbl_split,10)
+!
+! Flags controlling the splitting of the turbulent boundary layer:
+!   iflag_split_ref = 0  ==> no splitting
+!                   = 1  ==> splitting without coupling with surface temperature
+!                   = 2  ==> splitting with coupling with surface temperature over land
+!                   = 3  ==> splitting over ocean; no splitting over land
+!   iflag_split: actual flag controlling the splitting.
+!   iflag_split = iflag_split_ref outside the sub-surface loop
+!               = iflag_split_ref if iflag_split_ref = 0, 1, or 2
+!               = 0 over land  if iflga_split_ref = 3
+!               = 1 over ocean if iflga_split_ref = 3
+
       iflag_split_ref = mod(iflag_pbl_split,10)
+      iflag_split = iflag_split_ref
 
 !****************************************************************************************
@@ -2413,8 +2424,6 @@
          print*,'Chx,Chw,Ch', ycdragh_x(j), ycdragh_w(j), ycdragh(j)
          print*,'Khx,Khw,Kh', Kech_h_x(j), Kech_h_w(j), Kech_h(j)
-!         print*,'tsurf_x,tsurf_w,tsurf,t1', ytsurf_th_x(j), ytsurf_th_w(j), ytsurf_th(j), yt(j,1)
-         print*,'tsurf_x,t1x,tsurf_w,t1w,tsurf,t1,t1_ancien', &
- &               ytsurf_th_x(j), yt_x(j,1), ytsurf_th_w(j), yt_w(j,1), ytsurf_th(j), yt(j,1),t(j,1)
-         print*,'qsatsurf,qsatsurf_x,qsatsurf_w', yqsatsurf(j), yqsatsurf_x(j), yqsatsurf_w(j)
+         print*,'t1x, t1w, t1, t1_ancien', &
+ &               yt_x(j,1), yt_w(j,1),  yt(j,1), t(j,1)
          print*,'delta_coef,delta_flux,delta_tsurf,tau', delta_coef(j), y_delta_flux_t1(j), y_delta_tsurf(j), tau_eq(j) 
         ENDDO
@@ -2423,6 +2432,6 @@
          print*,'fluxT_x, fluxT_w, y_flux_t1, fluxQ_x, fluxQ_w, yfluxlat, wakes' &
  &             , y_flux_t1_x(j), y_flux_t1_w(j), y_flux_t1(j), y_flux_q1_x(j)*RLVTT, y_flux_q1_w(j)*RLVTT, yfluxlat(j), ywake_s(j)
-         print*,'beta,ytsurf_new,yqsatsurf', ybeta(j), ytsurf_new(j), yqsatsurf(j)
-         print*,'inertia,facteur,cstar', inertia, facteur,wake_cstar(j)
+         print*,'beta, ytsurf_new ', ybeta(j), ytsurf_new(j)
+         print*,'inertia, facteur, cstar', inertia, facteur,wake_cstar(j)
         ENDDO
        ENDIF  ! (prt_level >=10)
Index: LMDZ6/trunk/libf/phylmd/phyetat0.F90
===================================================================
--- LMDZ6/trunk/libf/phylmd/phyetat0.F90	(revision 3954)
+++ LMDZ6/trunk/libf/phylmd/phyetat0.F90	(revision 3956)
@@ -17,5 +17,5 @@
        solsw, solswfdiff, t_ancien, u_ancien, v_ancien, w01, wake_cstar, wake_deltaq, &
        wake_deltat, wake_delta_pbl_TKE, delta_tsurf, beta_aridity, wake_fip, wake_pe, &
-       wake_s, wake_dens, zgam, zmax0, zmea, zpic, zsig, &
+       wake_s, wake_dens, awake_dens, cv_gen, zgam, zmax0, zmea, zpic, zsig, &
        zstd, zthe, zval, ale_bl, ale_bl_trig, alp_bl, u10m, v10m, treedrg, &
        ale_wake, ale_bl_stat, ds_ns, dt_ns, delta_sst, delta_sal, ratqs_inter
@@ -419,4 +419,6 @@
 !!  found=phyetat0_get(1,wake_dens,"WAKE_DENS","Wake num. /unit area",0.)
   found=phyetat0_get(1,wake_dens,"WAKE_DENS","Wake num. /unit area",-1000.)
+  found=phyetat0_get(1,awake_dens,"AWAKE_DENS","Active Wake num. /unit area",0.)
+  found=phyetat0_get(1,cv_gen,"CV_GEN","CB birth rate",0.)
 !>jyg
   found=phyetat0_get(1,wake_cstar,"WAKE_CSTAR","WAKE_CSTAR",0.)
Index: LMDZ6/trunk/libf/phylmd/phyredem.F90
===================================================================
--- LMDZ6/trunk/libf/phylmd/phyredem.F90	(revision 3954)
+++ LMDZ6/trunk/libf/phylmd/phyredem.F90	(revision 3956)
@@ -23,4 +23,5 @@
                                 wake_delta_pbl_tke, zmax0, f0, sig1, w01,    &
                                 wake_deltat, wake_deltaq, wake_s, wake_dens, &
+                                awake_dens, cv_gen,                          &
                                 wake_cstar,                                  &
                                 wake_pe, wake_fip, fm_therm, entr_therm,     &
@@ -288,4 +289,8 @@
 
     CALL put_field(pass,"WAKE_DENS", "Wake num. /unit area", wake_dens)
+
+    CALL put_field(pass,"AWAKE_DENS", "Active Wake num. /unit area", awake_dens)
+
+    CALL put_field(pass,"CV_GEN", "CB birth rate", cv_gen)
 
     CALL put_field(pass,"WAKE_CSTAR", "WAKE_CSTAR", wake_cstar)
Index: LMDZ6/trunk/libf/phylmd/phys_local_var_mod.F90
===================================================================
--- LMDZ6/trunk/libf/phylmd/phys_local_var_mod.F90	(revision 3954)
+++ LMDZ6/trunk/libf/phylmd/phys_local_var_mod.F90	(revision 3956)
@@ -390,6 +390,4 @@
       REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: proba_notrig, random_notrig
 !$OMP THREADPRIVATE(proba_notrig, random_notrig)
-      REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: cv_gen
-!$OMP THREADPRIVATE(cv_gen)
       REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: fsolsw, wfbils, wfbilo
 !$OMP THREADPRIVATE(fsolsw, wfbils, wfbilo)
@@ -765,5 +763,4 @@
       alp_bl_stat(:)=0
       ALLOCATE(proba_notrig(klon), random_notrig(klon))
-      ALLOCATE(cv_gen(klon))
 
       ALLOCATE(dnwd0(klon, klev))
@@ -1060,5 +1057,4 @@
       DEALLOCATE(alp_bl_stat, n2, s2)
       DEALLOCATE(proba_notrig, random_notrig)
-      DEALLOCATE(cv_gen)
 
       DEALLOCATE(dnwd0)
Index: LMDZ6/trunk/libf/phylmd/phys_output_write_mod.F90
===================================================================
--- LMDZ6/trunk/libf/phylmd/phys_output_write_mod.F90	(revision 3954)
+++ LMDZ6/trunk/libf/phylmd/phys_output_write_mod.F90	(revision 3956)
@@ -239,5 +239,5 @@
          wstar, cape, ema_pcb, ema_pct, &
          ema_cbmf, Mipsh, Ma, fm_therm, ale_bl, alp_bl, ale, &
-         alp, cin, wake_pe, wake_dens, wake_s, wake_deltat, &
+         alp, cin, wake_pe, wake_dens, cv_gen, wake_s, wake_deltat, &
          wake_deltaq, ftd, fqd, ale_bl_trig, albsol1, &
          ale_wake, ale_bl_stat, &
@@ -278,5 +278,5 @@
          cdragh_x   ,cdragh_w   ,cdragm_x   ,cdragm_w   , &
          kh         ,kh_x       ,kh_w       , &
-         cv_gen, wake_h, &
+         wake_h, &
          wake_omg, d_t_wake, d_q_wake, Vprecip, qtaa, Clw, &
          wdtrainA, wdtrainS, wdtrainM, n2, s2, proba_notrig, &
Index: LMDZ6/trunk/libf/phylmd/phys_state_var_mod.F90
===================================================================
--- LMDZ6/trunk/libf/phylmd/phys_state_var_mod.F90	(revision 3954)
+++ LMDZ6/trunk/libf/phylmd/phys_state_var_mod.F90	(revision 3956)
@@ -249,4 +249,5 @@
 ! awake_dens  : number of active wakes per unit area
 ! wake_dens   : number of wakes per unit area
+! cv_gen      : birth rate of cumulonimbus per unit area.
 ! wake_occ    : occurence of wakes (= 1 if wakes occur, =0 otherwise)
 ! wake_Cstar  : vitesse d'etalement de la poche
@@ -261,4 +262,6 @@
       REAL,ALLOCATABLE,SAVE :: awake_dens(:), wake_dens(:)
 !$OMP THREADPRIVATE(awake_dens, wake_dens)
+      REAL,ALLOCATABLE,SAVE :: cv_gen(:)
+!$OMP THREADPRIVATE(cv_gen)
       REAL,ALLOCATABLE,SAVE :: wake_Cstar(:)
 !$OMP THREADPRIVATE(wake_Cstar)
@@ -490,5 +493,5 @@
       print*, 'allocate falb'
       ALLOCATE(falb_dir(klon,nsw,nbsrf),falb_dif(klon,nsw,nbsrf))
-      print*, 'allocate falb good', falb_dir(1,1,1)
+!!      print*, 'allocate falb good', falb_dir(1,1,1)
       ALLOCATE(chl_con(klon))
 !albedo SB <<<
@@ -588,5 +591,6 @@
       ALLOCATE(wake_deltat(klon,klev), wake_deltaq(klon,klev))
       ALLOCATE(wake_s(klon), awake_dens(klon), wake_dens(klon))
-      awake_dens = 0.
+!!      awake_dens = 0.  ! initialized in phyetat0
+      ALLOCATE(cv_gen(klon))
       ALLOCATE(wake_Cstar(klon))
       ALLOCATE(wake_pe(klon), wake_fip(klon))
@@ -742,4 +746,5 @@
       DEALLOCATE(wake_deltat, wake_deltaq)
       DEALLOCATE(wake_s, awake_dens, wake_dens)
+      DEALLOCATE(cv_gen)
       DEALLOCATE(wake_Cstar, wake_pe, wake_fip)
 !jyg<
Index: LMDZ6/trunk/libf/phylmd/physiq_mod.F90
===================================================================
--- LMDZ6/trunk/libf/phylmd/physiq_mod.F90	(revision 3954)
+++ LMDZ6/trunk/libf/phylmd/physiq_mod.F90	(revision 3956)
@@ -245,5 +245,5 @@
        alp_bl_stat, n2, s2,  &
        proba_notrig, random_notrig,  &
-       cv_gen,  &
+!!       cv_gen,  &  !moved to phys_state_var_mod
        !
        dnwd0,  &
@@ -1690,6 +1690,10 @@
 
        CALL iniradia(klon,klev,paprs(1,1:klev+1))
-
-       ! Initialisation des champs dans phytrac* qui sont utilisés par phys_output_write*
+       !
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+       ! Initialisation des champs dans phytrac* qui sont utilises par phys_output_write*
+       !
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
 #ifdef CPP_Dust
        ! Quand on utilise SPLA, on force iflag_phytrac=1
@@ -1780,4 +1784,10 @@
           CALL abort_physic(modname,abort_message,1)
        ENDIF
+
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+       ! Initialisation pour la convection de K.E. et pour les poches froides
+       !
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
        WRITE(lunout,*)"Clef pour la convection, iflag_con=", iflag_con
        WRITE(lunout,*)"Clef pour le driver de la convection, ok_cvl=", &
@@ -1829,5 +1839,5 @@
              d_s_wk(:) = 0.
              d_dens_wk(:) = 0.
-          ENDIF
+          ENDIF  !  (iflag_wake>=1)
 
           !        do i = 1,klon
@@ -1840,6 +1850,6 @@
        !   ALLOCATE(lonGCM(0), latGCM(0))
        !   ALLOCATE(iGCM(0), jGCM(0))
-       ENDIF
-
+       ENDIF  !  (iflag_con.GE.3)
+       !
        DO i=1,klon
           rugoro(i) = f_rugoro * MAX(1.0e-05, zstd(i)*zsig(i)/2.0)
