Index: LMDZ6/trunk/libf/phylmd/add_wake_tend.F90
===================================================================
--- LMDZ6/trunk/libf/phylmd/add_wake_tend.F90	(revision 3207)
+++ LMDZ6/trunk/libf/phylmd/add_wake_tend.F90	(revision 3208)
@@ -1,3 +1,3 @@
-SUBROUTINE add_wake_tend(zddeltat, zddeltaq, zds, zddens, zoccur, text, abortphy)
+SUBROUTINE add_wake_tend(zddeltat, zddeltaq, zds, zddensaw, zddensw, zoccur, text, abortphy)
 !===================================================================
 ! Ajoute les tendances liées aux diverses parametrisations physiques aux
@@ -9,5 +9,6 @@
 
 USE dimphy, ONLY: klon, klev
-USE phys_state_var_mod, ONLY: wake_deltat, wake_deltaq, wake_s, wake_dens
+USE phys_state_var_mod, ONLY: wake_deltat, wake_deltaq, wake_s,  &
+                              awake_dens, wake_dens
 
 USE print_control_mod, ONLY: prt_level
@@ -17,5 +18,5 @@
 !------------
   REAL, DIMENSION(klon, klev),   INTENT (IN)         :: zddeltat, zddeltaq
-  REAL, DIMENSION(klon),         INTENT (IN)         :: zds, zddens
+  REAL, DIMENSION(klon),         INTENT (IN)         :: zds, zddensaw, zddensw
   INTEGER, DIMENSION(klon),      INTENT (IN)         :: zoccur
   CHARACTER*(*),                 INTENT (IN)         :: text
@@ -53,9 +54,11 @@
          DO i = 1, klon
            IF (zoccur(i) .GE. 1) THEN
-             wake_s(i)    = wake_s(i)    + zds(i)
-             wake_dens(i) = wake_dens(i) + zddens(i)
+             wake_s(i)     = wake_s(i)    + zds(i)
+             awake_dens(i) = awake_dens(i) + zddensaw(i)
+             wake_dens(i)  = wake_dens(i) + zddensw(i)
            ELSE
-             wake_s(i)    = 0.
-             wake_dens(i) = 0.
+             wake_s(i)     = 0.
+             awake_dens(i) = 0.
+             wake_dens(i)  = 0.
            ENDIF   ! (zoccur(i) .GE. 1)
          END DO
Index: LMDZ6/trunk/libf/phylmd/alpale_th.F90
===================================================================
--- LMDZ6/trunk/libf/phylmd/alpale_th.F90	(revision 3207)
+++ LMDZ6/trunk/libf/phylmd/alpale_th.F90	(revision 3208)
@@ -3,5 +3,6 @@
                        ale_bl_trig, ale_bl_stat, ale_bl,  &
                        alp_bl, alp_bl_stat, &
-                       proba_notrig, random_notrig)
+                       proba_notrig, random_notrig, birth_rate,  &
+                       q_alp)
 
 ! **************************************************************
@@ -42,4 +43,7 @@
   REAL, DIMENSION(klon), INTENT(OUT)                         :: random_notrig
 
+  REAL, DIMENSION(klon), INTENT(OUT)                         :: birth_rate
+  REAL, DIMENSION(klon), INTENT(OUT)                         :: q_alp
+
   include "thermcell.h"
 
@@ -53,5 +57,4 @@
   REAL, DIMENSION(klon)                                      :: ale_bl_ref
   REAL, DIMENSION(klon)                                      :: tau_trig
-  REAL, DIMENSION(klon)                                      :: birth_rate
 !
     !$OMP THREADPRIVATE(random_notrig_max) 
@@ -103,6 +106,6 @@
              !
              IF (prt_level .GE. 10) THEN
-                print *,'cin, ale_bl_stat, alp_bl_stat ', &
-                     cin, ale_bl_stat, alp_bl_stat
+                print *,'cin, ale_bl_stat, alp_bl, alp_bl_stat ', &
+                     cin, ale_bl_stat, alp_bl, alp_bl_stat
              ENDIF
 
@@ -141,8 +144,13 @@
                          ale_bl_trig(i)=0.
                       endif
+                      birth_rate(i) = n2(i)*exp(-s_trig/s2(i))/(tau_trig(i)*cell_area(i))
+!!!                      birth_rate(i) = max(birth_rate(i),1.e-18)
+                      q_alp(i) = alp_bl(i)/max(birth_rate(i),1.e-18)
                    else
 !!jyg                      proba_notrig(i)=1.
+                      birth_rate(i) = 0.
                       random_notrig(i)=0.
                       ale_bl_trig(i)=0.
+                      q_alp(i) = 0.
                    endif
                 enddo
@@ -160,8 +168,13 @@
                          ale_bl_trig(i)=0.
                       endif
+                      birth_rate(i) = n2(i)*exp(-s_trig/s2(i))/(tau_trig(i)*cell_area(i))
+!!!                      birth_rate(i) = max(birth_rate(i),1.e-18)
+                      q_alp(i) = alp_bl(i)/max(birth_rate(i),1.e-18)
                    else
 !!jyg                      proba_notrig(i)=1.
+                      birth_rate(i) = 0.
                       random_notrig(i)=0.
                       ale_bl_trig(i)=0.
+                      q_alp(i) = 0.
                    endif
                 enddo
@@ -257,5 +270,7 @@
               birth_number = n2(i)*exp(-s_trig/s2(i))
               birth_rate(i) = birth_number/(tau_trig(i)*cell_area(i))
+!!!              birth_rate(i) = max(birth_rate(i),1.e-18)
               proba_notrig(i)=proba_notrig(i)*exp(-birth_number*dtime/tau_trig(i))
+              q_alp(i) = alp_bl(i)/max(birth_rate(i),1.e-18)
               Alp_bl(i) = Alp_bl(i)* &
                           umexp(-birth_number*cv_feed_area/cell_area(i))/ &
@@ -264,6 +279,8 @@
           else 
 !!jyg              proba_notrig(i)=1.
+              birth_rate(i)=0.
               random_notrig(i)=0.
               alp_bl(i)=0.
+              q_alp(i) = 0.
            endif
         enddo
@@ -291,5 +308,6 @@
 
           IF (prt_level .GE. 10) THEN
-             print *,'ale_bl_trig, alp_bl_stat ',ale_bl_trig, alp_bl_stat
+             print *,'alpale_th: ale_bl_trig, alp_bl_stat, birth_rate, q_alp ', &
+                      ale_bl_trig(1), alp_bl_stat(1), birth_rate(1), q_alp(1)
           ENDIF
 
Index: LMDZ6/trunk/libf/phylmd/calwake.F90
===================================================================
--- LMDZ6/trunk/libf/phylmd/calwake.F90	(revision 3207)
+++ LMDZ6/trunk/libf/phylmd/calwake.F90	(revision 3208)
@@ -4,7 +4,7 @@
 SUBROUTINE calwake(iflag_wake_tend, paprs, pplay, dtime, &
     t, q, omgb, &
-    dt_dwn, dq_dwn, m_dwn, m_up, dt_a, dq_a, &
-    sigd, &
-    wake_deltat, wake_deltaq, wake_s, wake_dens, &
+    dt_dwn, dq_dwn, m_dwn, m_up, dt_a, dq_a, wgen, &
+    sigd, Cin, &
+    wake_deltat, wake_deltaq, wake_s, awake_dens, wake_dens, &
     wake_dth, wake_h, &
     wake_pe, wake_fip, wake_gfl, &
@@ -14,5 +14,5 @@
     wake_omg, wake_dp_deltomg, &
     wake_spread, wake_cstar, wake_d_deltat_gw, &
-    wake_ddeltat, wake_ddeltaq, wake_ds, wake_ddens)
+    wake_ddeltat, wake_ddeltaq, wake_ds, awake_ddens, wake_ddens)
   ! **************************************************************
   ! *
@@ -45,10 +45,12 @@
   REAL, DIMENSION(klon, klev),   INTENT (IN)         :: m_up, m_dwn
   REAL, DIMENSION(klon, klev),   INTENT (IN)         :: dt_a, dq_a
+  REAL, DIMENSION(klon),         INTENT (IN)         :: wgen
   REAL, DIMENSION(klon),         INTENT (IN)         :: sigd
+  REAL, DIMENSION(klon),         INTENT (IN)         :: Cin
   ! Input/Output
   ! ------------
   REAL, DIMENSION(klon, klev),   INTENT (INOUT)      :: wake_deltat, wake_deltaq
   REAL, DIMENSION(klon),         INTENT (INOUT)      :: wake_s
-  REAL, DIMENSION(klon),         INTENT (INOUT)      :: wake_dens
+  REAL, DIMENSION(klon),         INTENT (INOUT)      :: awake_dens, wake_dens
   ! Output
   ! ------
@@ -67,5 +69,5 @@
   REAL, DIMENSION(klon),         INTENT (OUT)        :: wake_cstar
   REAL, DIMENSION(klon, klev),   INTENT (OUT)        :: wake_ddeltat, wake_ddeltaq
-  REAL, DIMENSION(klon),         INTENT (OUT)        :: wake_ds, wake_ddens
+  REAL, DIMENSION(klon),         INTENT (OUT)        :: wake_ds, awake_ddens, wake_ddens
 
 
@@ -88,5 +90,5 @@
   REAL, DIMENSION(klon, klev)                        :: tx, qx
   REAL, DIMENSION(klon)                              :: hw, wape, fip, gfl
-  REAL, DIMENSION(klon)                              :: sigmaw, wdens
+  REAL, DIMENSION(klon)                              :: sigmaw, awdens, wdens
   REAL, DIMENSION(klon, klev)                        :: omgbdth
   REAL, DIMENSION(klon, klev)                        :: dp_omgb
@@ -99,5 +101,5 @@
   REAL, DIMENSION(klon, klev)                        :: d_deltat_gw
   REAL, DIMENSION(klon, klev)                        :: d_deltatw, d_deltaqw
-  REAL, DIMENSION(klon)                              :: d_sigmaw, d_wdens
+  REAL, DIMENSION(klon)                              :: d_sigmaw, d_awdens, d_wdens
 
   REAL                                               :: rdcp
@@ -105,5 +107,5 @@
 
   IF (prt_level >= 10) THEN
-    print *, '-> calwake, wake_s input ', wake_s(1)
+    print *, '-> calwake, wake_s, wgen input ', wake_s(1), wgen(1)
   ENDIF
 
@@ -147,4 +149,5 @@
 d_deltaqw(:,:) = 0.
 d_sigmaw(:) = 0.
+d_awdens(:) = 0.
 d_wdens(:) = 0.
 !
@@ -179,4 +182,5 @@
 
   DO i = 1, klon
+    awdens(i) = max(0., awake_dens(i))
     wdens(i) = max(0., wake_dens(i))
   END DO
@@ -206,12 +210,12 @@
   CALL wake(znatsurf, p, ph, pi, dtime, &
     te, qe, omgbe, &
-    dtdwn, dqdwn, amdwn, amup, dta, dqa, &
-    sigd0, &
-    dtw, dqw, sigmaw, wdens, &                                   ! state variables
+    dtdwn, dqdwn, amdwn, amup, dta, dqa, wgen, &
+    sigd0, Cin, &
+    dtw, dqw, sigmaw, awdens, wdens, &                                   ! state variables
     dth, hw, wape, fip, gfl, &
     dtls, dqls, ktopw, omgbdth, dp_omgb, tx, qx, &
     dtke, dqke, omg, dp_deltomg, spread, cstar, &
     d_deltat_gw, &
-    d_deltatw, d_deltaqw, d_sigmaw, d_wdens)                     ! tendencies
+    d_deltatw, d_deltaqw, d_sigmaw, d_awdens, d_wdens)                     ! tendencies
 
 !
@@ -274,4 +278,5 @@
     IF (ktopw(i)>0) THEN
       wake_ds(i) = d_sigmaw(i)*dtime
+      awake_ddens(i) = d_awdens(i)*dtime
       wake_ddens(i) = d_wdens(i)*dtime
     ELSE
@@ -298,4 +303,5 @@
     DO i = 1, klon
       wake_s(i) = sigmaw(i)
+      awake_dens(i) = awdens(i)
       wake_dens(i) = wdens(i)
     END DO
Index: LMDZ6/trunk/libf/phylmd/phys_local_var_mod.F90
===================================================================
--- LMDZ6/trunk/libf/phylmd/phys_local_var_mod.F90	(revision 3207)
+++ LMDZ6/trunk/libf/phylmd/phys_local_var_mod.F90	(revision 3208)
@@ -277,6 +277,6 @@
     REAL, SAVE, ALLOCATABLE,DIMENSION(:,:)          :: d_deltat_wk, d_deltaq_wk
 !$OMP THREADPRIVATE(d_deltat_wk, d_deltaq_wk)
-      REAL,ALLOCATABLE,SAVE,DIMENSION(:)            :: d_s_wk, d_dens_wk
-!$OMP THREADPRIVATE(d_s_wk, d_dens_wk)
+      REAL,ALLOCATABLE,SAVE,DIMENSION(:)            :: d_s_wk, d_dens_a_wk, d_dens_wk
+!$OMP THREADPRIVATE(d_s_wk, d_dens_a_wk, d_dens_wk)
     REAL, SAVE, ALLOCATABLE,DIMENSION(:,:)          :: d_deltat_wk_gw, d_deltaq_wk_gw
 !$OMP THREADPRIVATE(d_deltat_wk_gw, d_deltaq_wk_gw)
@@ -383,4 +383,6 @@
       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)
@@ -677,5 +679,5 @@
       ALLOCATE(wake_omg(klon, klev))
       ALLOCATE(d_deltat_wk(klon, klev), d_deltaq_wk(klon, klev))
-      ALLOCATE(d_s_wk(klon), d_dens_wk(klon))
+      ALLOCATE(d_s_wk(klon), d_dens_a_wk(klon), d_dens_wk(klon))
       ALLOCATE(d_deltat_wk_gw(klon, klev), d_deltaq_wk_gw(klon, klev))
       ALLOCATE(d_deltat_vdf(klon, klev), d_deltaq_vdf(klon, klev))
@@ -735,4 +737,5 @@
       ALLOCATE(alp_bl_stat(klon), n2(klon), s2(klon))
       ALLOCATE(proba_notrig(klon), random_notrig(klon))
+      ALLOCATE(cv_gen(klon))
 
       ALLOCATE(dnwd0(klon, klev))
@@ -968,5 +971,5 @@
       DEALLOCATE(wake_omg)
       DEALLOCATE(d_deltat_wk, d_deltaq_wk)
-      DEALLOCATE(d_s_wk, d_dens_wk)
+      DEALLOCATE(d_s_wk, d_dens_a_wk, d_dens_wk)
       DEALLOCATE(d_deltat_wk_gw, d_deltaq_wk_gw)
       DEALLOCATE(d_deltat_vdf, d_deltaq_vdf)
@@ -1023,4 +1026,5 @@
       DEALLOCATE(alp_bl_stat, n2, s2)
       DEALLOCATE(proba_notrig, random_notrig)
+      DEALLOCATE(cv_gen)
 
       DEALLOCATE(dnwd0)
Index: LMDZ6/trunk/libf/phylmd/phys_output_ctrlout_mod.F90
===================================================================
--- LMDZ6/trunk/libf/phylmd/phys_output_ctrlout_mod.F90	(revision 3207)
+++ LMDZ6/trunk/libf/phylmd/phys_output_ctrlout_mod.F90	(revision 3208)
@@ -1546,6 +1546,10 @@
   TYPE(ctrl_out), SAVE :: o_dqwak2d = ctrl_out((/ 4, 5, 10, 10, 10, 10, 11, 11, 11, 11/), &
     'dqwak2d', 'Wake dQ', '(kg/m2)/s', (/ ('', i=1, 10) /))
+  TYPE(ctrl_out), SAVE :: o_cv_gen = ctrl_out((/ 4, 5, 10, 10, 10, 10, 11, 11, 11, 11/), &
+    'cv_gen', 'Cumulonimbus genesis', '1/(m2 s)', (/ ('', i=1, 10) /))
   TYPE(ctrl_out), SAVE :: o_wake_h = ctrl_out((/ 4, 5, 10, 10, 10, 10, 11, 11, 11, 11/), &
     'wake_h', 'wake_h', '-', (/ ('', i=1, 10) /))
+  TYPE(ctrl_out), SAVE :: o_wake_dens = ctrl_out((/ 4, 5, 10, 10, 10, 10, 11, 11, 11, 11/), &
+    'wake_dens', 'number of wakes per m2', '1/m2', (/ ('', i=1, 10) /))
   TYPE(ctrl_out), SAVE :: o_wake_s = ctrl_out((/ 4, 5, 10, 10, 10, 10, 11, 11, 11, 11/), &
     'wake_s', 'wake_s', '-', (/ ('', i=1, 10) /))
@@ -1555,5 +1559,5 @@
     'wake_deltaq', 'wake_deltaq', ' ', (/ ('', i=1, 10) /))
   TYPE(ctrl_out), SAVE :: o_wake_omg = ctrl_out((/ 4, 5, 10, 10, 10, 10, 11, 11, 11, 11/), &
-    'wake_omg', 'wake_omg', ' ', (/ ('', i=1, 10) /))
+    'wake_omg', 'wake_omg', 'Pa/s', (/ ('', i=1, 10) /))
   TYPE(ctrl_out), SAVE :: o_wdtrainA = ctrl_out((/ 4, 5, 10,  4, 10, 10, 11, 11, 11, 11 /), &
     'wdtrainA', 'precipitation from AA', '-', (/ ('', i=1, 10) /))
Index: LMDZ6/trunk/libf/phylmd/phys_output_write_mod.F90
===================================================================
--- LMDZ6/trunk/libf/phylmd/phys_output_write_mod.F90	(revision 3207)
+++ LMDZ6/trunk/libf/phylmd/phys_output_write_mod.F90	(revision 3208)
@@ -83,5 +83,5 @@
          o_cdragh_x   , o_cdragh_w   , o_cdragm_x   , o_cdragm_w   , &
          o_kh         , o_kh_x       , o_kh_w       , &
-         o_ale, o_alp, o_cin, o_WAPE, o_wake_h, &
+         o_ale, o_alp, o_cin, o_WAPE, o_wake_h, o_cv_gen, o_wake_dens, &
          o_wake_s, o_wake_deltat, o_wake_deltaq, &
          o_wake_omg, o_dtwak, o_dqwak, o_dqwak2d, o_Vprecip, &
@@ -226,5 +226,5 @@
          wstar, cape, ema_pcb, ema_pct, &
          ema_cbmf, Ma, fm_therm, ale_bl, alp_bl, ale, &
-         alp, cin, wake_pe, wake_s, wake_deltat, &
+         alp, cin, wake_pe, wake_dens, wake_s, wake_deltat, &
          wake_deltaq, ftd, fqd, ale_bl_trig, albsol1, &
          ale_wake, ale_bl_stat, &
@@ -263,5 +263,5 @@
          cdragh_x   ,cdragh_w   ,cdragm_x   ,cdragm_w   , &
          kh         ,kh_x       ,kh_w       , &
-         wake_h, &
+         cv_gen, wake_h, &
          wake_omg, d_t_wake, d_q_wake, Vprecip, &
          wdtrainA, wdtrainM, n2, s2, proba_notrig, &
@@ -1137,5 +1137,7 @@
              CALL histwrite_phy(o_cin, cin)
              CALL histwrite_phy(o_WAPE, wake_pe)
+             CALL histwrite_phy(o_cv_gen, cv_gen)
              CALL histwrite_phy(o_wake_h, wake_h)
+             CALL histwrite_phy(o_wake_dens, wake_dens)
              CALL histwrite_phy(o_wake_s, wake_s)
              CALL histwrite_phy(o_wake_deltat, wake_deltat)
Index: LMDZ6/trunk/libf/phylmd/phys_state_var_mod.F90
===================================================================
--- LMDZ6/trunk/libf/phylmd/phys_state_var_mod.F90	(revision 3207)
+++ LMDZ6/trunk/libf/phylmd/phys_state_var_mod.F90	(revision 3208)
@@ -247,4 +247,5 @@
 ! wake_deltaq : ecart d'humidite avec la zone non perturbee
 ! wake_s      : fraction surfacique occupee par la poche froide
+! awake_dens  : number of active wakes per unit area
 ! wake_dens   : number of wakes per unit area
 ! wake_occ    : occurence of wakes (= 1 if wakes occur, =0 otherwise)
@@ -258,6 +259,6 @@
       REAL,ALLOCATABLE,SAVE :: wake_s(:)
 !$OMP THREADPRIVATE(wake_s)
-      REAL,ALLOCATABLE,SAVE :: wake_dens(:)
-!$OMP THREADPRIVATE(wake_dens)
+      REAL,ALLOCATABLE,SAVE :: awake_dens(:), wake_dens(:)
+!$OMP THREADPRIVATE(awake_dens, wake_dens)
       REAL,ALLOCATABLE,SAVE :: wake_Cstar(:)
 !$OMP THREADPRIVATE(wake_Cstar)
@@ -539,5 +540,5 @@
       ALLOCATE(wght_th(klon,klev))
       ALLOCATE(wake_deltat(klon,klev), wake_deltaq(klon,klev))
-      ALLOCATE(wake_s(klon), wake_dens(klon))
+      ALLOCATE(wake_s(klon), awake_dens(klon), wake_dens(klon))
       ALLOCATE(wake_Cstar(klon))
       ALLOCATE(wake_pe(klon), wake_fip(klon))
@@ -682,5 +683,5 @@
       deallocate(lalim_conv, wght_th)
       deallocate(wake_deltat, wake_deltaq)
-      deallocate(wake_s, wake_dens)
+      deallocate(wake_s, awake_dens, wake_dens)
       deallocate(wake_Cstar, wake_pe, wake_fip)
 !jyg<
Index: LMDZ6/trunk/libf/phylmd/physiq_mod.F90
===================================================================
--- LMDZ6/trunk/libf/phylmd/physiq_mod.F90	(revision 3207)
+++ LMDZ6/trunk/libf/phylmd/physiq_mod.F90	(revision 3208)
@@ -151,7 +151,7 @@
        d_deltat_ajs_cv, d_deltaq_ajs_cv, & ! due to dry adjustment of (w) before convection
                        ! tendencies of wake fractional area and wake number per unit area:
-       d_s_wk,  d_dens_wk, &             ! due to wakes
-!!!       d_s_vdf, d_dens_vdf, &            ! due to vertical diffusion
-!!!       d_s_the, d_dens_the, &            ! due to thermals
+       d_s_wk,  d_dens_a_wk,  d_dens_wk, &  ! due to wakes
+!!!       d_s_vdf, d_dens_a_vdf, d_dens_vdf, & ! due to vertical diffusion
+!!!       d_s_the, d_dens_a_the, d_dens_the, & ! due to thermals
        !                                  
        ptconv, ratqsc, &
@@ -162,4 +162,5 @@
        alp_bl_stat, n2, s2,  &
        proba_notrig, random_notrig,  &
+       cv_gen,  &
        !
        dnwd0,  &
@@ -2363,5 +2364,5 @@
           d_deltaq_vdf(:,:) = d_q_vdf_w(:,:)-d_q_vdf_x(:,:)
           CALL add_wake_tend &
-             (d_deltat_vdf, d_deltaq_vdf, dsig0, ddens0, wkoccur1, 'vdf', abortphy) 
+             (d_deltat_vdf, d_deltaq_vdf, dsig0, ddens0, ddens0, wkoccur1, 'vdf', abortphy) 
        ELSE
           d_deltat_vdf(:,:) = 0.
@@ -2606,5 +2607,5 @@
              IF (iflag_adjwk == 2) THEN
                CALL add_wake_tend &
-                 (d_deltat_ajs_cv, d_deltaq_ajs_cv, dsig0, ddens0, wkoccur1, 'ajs_cv', abortphy) 
+                 (d_deltat_ajs_cv, d_deltaq_ajs_cv, dsig0, ddens0, ddens0, wkoccur1, 'ajs_cv', abortphy) 
              ENDIF  ! (iflag_adjwk == 2)
           ENDIF  ! (iflag_adjwk >= 1)
@@ -2960,7 +2961,7 @@
                t_seri, q_seri, omega,  &
                dt_dwn, dq_dwn, M_dwn, M_up,  &
-               dt_a, dq_a,  &
-               sigd,  &
-               wake_deltat, wake_deltaq, wake_s, wake_dens,  &
+               dt_a, dq_a, cv_gen,  &
+               sigd, cin,  &
+               wake_deltat, wake_deltaq, wake_s, awake_dens, wake_dens,  &
                wake_dth, wake_h,  &
 !!               wake_pe, wake_fip, wake_gfl,  &
@@ -2972,5 +2973,5 @@
                wake_omg, wake_dp_deltomg,  &
                wake_spread, wake_Cstar, d_deltat_wk_gw,  &
-               d_deltat_wk, d_deltaq_wk, d_s_wk, d_dens_wk)
+               d_deltat_wk, d_deltaq_wk, d_s_wk, d_dens_a_wk, d_dens_wk)
           !
           !jyg    Reinitialize itapwk when wakes have been called
@@ -2991,5 +2992,5 @@
 
          CALL add_wake_tend &
-            (d_deltat_wk, d_deltaq_wk, d_s_wk, d_dens_wk, wake_k, &
+            (d_deltat_wk, d_deltaq_wk, d_s_wk, d_dens_a_wk, d_dens_wk, wake_k, &
              'wake', abortphy) 
           call prt_enerbil('wake',itap)
@@ -3130,8 +3131,8 @@
              IF (ok_bug_split_th) THEN
                CALL add_wake_tend &
-                   (d_deltat_the, d_deltaq_the, dsig0, ddens0, wkoccur1, 'the', abortphy) 
+                   (d_deltat_the, d_deltaq_the, dsig0, ddens0, ddens0, wkoccur1, 'the', abortphy) 
              ELSE
                CALL add_wake_tend &
-                   (d_deltat_the, d_deltaq_the, dsig0, ddens0, wake_k, 'the', abortphy) 
+                   (d_deltat_the, d_deltaq_the, dsig0, ddens0, ddens0, wake_k, 'the', abortphy) 
              ENDIF
              call prt_enerbil('the',itap)
@@ -3148,5 +3149,5 @@
                           ale_bl_trig, ale_bl_stat, ale_bl,  &
                           alp_bl, alp_bl_stat, &
-                          proba_notrig, random_notrig)
+                          proba_notrig, random_notrig, cv_gen)
           !>jyg
 
Index: LMDZ6/trunk/libf/phylmd/tend_to_tke.F90
===================================================================
--- LMDZ6/trunk/libf/phylmd/tend_to_tke.F90	(revision 3207)
+++ LMDZ6/trunk/libf/phylmd/tend_to_tke.F90	(revision 3208)
@@ -120,5 +120,5 @@
 
 
- DO isrf=1,nsrf
+ DO isrf=1,nbsrf
     DO k=1,klev
        DO i=1,klon
Index: LMDZ6/trunk/libf/phylmd/wake.F90
===================================================================
--- LMDZ6/trunk/libf/phylmd/wake.F90	(revision 3207)
+++ LMDZ6/trunk/libf/phylmd/wake.F90	(revision 3208)
@@ -4,12 +4,12 @@
 SUBROUTINE wake(znatsurf, p, ph, pi, dtime, &
                 te0, qe0, omgb, &
-                dtdwn, dqdwn, amdwn, amup, dta, dqa, &
-                sigd_con, &
-                deltatw, deltaqw, sigmaw, wdens, &                          ! state variables
+                dtdwn, dqdwn, amdwn, amup, dta, dqa, wgen, &
+                sigd_con, Cin, &
+                deltatw, deltaqw, sigmaw, awdens, wdens, &                  ! state variables
                 dth, hw, wape, fip, gfl, &
                 dtls, dqls, ktopw, omgbdth, dp_omgb, tu, qu, &
                 dtke, dqke, omg, dp_deltomg, spread, cstar, &
                 d_deltat_gw, &
-                d_deltatw2, d_deltaqw2, d_sigmaw2, d_wdens2)                ! tendencies
+                d_deltatw2, d_deltaqw2, d_sigmaw2, d_awdens2, d_wdens2)     ! tendencies
 
 
@@ -48,6 +48,7 @@
   ! dtls : large scale temperature tendency due to wake
   ! dqls : large scale humidity tendency due to wake
-  ! hw   : hauteur de la poche
+  ! hw   : wake top hight (given by hw*deltatw(1)/2=wape)
   ! dp_omgb : vertical gradient of large scale omega
+  ! awdens  : densite de poches actives
   ! wdens   : densite de poches
   ! omgbdth: flux of Delta_Theta transported by LS omega
@@ -72,8 +73,11 @@
   ! dta  : source de chaleur due courants satures et detrain  (K/s)
   ! dqa  : source d'humidite due aux courants satures et detra (kg/kg/s)
+  ! wgen : number of wakes generated per unit area and per sec (/m^2/s)
   ! amdwn: flux de masse total des descentes, par unite de
-  ! surface de la maille (kg/m2/s)
+  !        surface de la maille (kg/m2/s)
   ! amup : flux de masse total des ascendances, par unite de
-  ! surface de la maille (kg/m2/s)
+  !        surface de la maille (kg/m2/s)
+  ! sigd_con: 
+  ! Cin  : convective inhibition
   ! p    : pressions aux milieux des couches (Pa)
   ! ph   : pressions aux interfaces (Pa)
@@ -105,6 +109,5 @@
   ! deltatw0   : deltatw initial
   ! deltaqw0   : deltaqw initial
-  ! hw0    : hw initial
-  ! sigmaw0: sigmaw initial
+  ! hw0    : wake top hight (defined as the altitude at which deltatw=0)
   ! amflux : horizontal mass flux through wake boundary
   ! wdens_ref: initial number of wakes per unit area (3D) or per
@@ -133,5 +136,7 @@
   REAL, DIMENSION (klon, klev),     INTENT(IN)          :: amdwn, amup
   REAL, DIMENSION (klon, klev),     INTENT(IN)          :: dta, dqa
+  REAL, DIMENSION (klon),           INTENT(IN)          :: wgen
   REAL, DIMENSION (klon),           INTENT(IN)          :: sigd_con
+  REAL, DIMENSION (klon),           INTENT(IN)          :: Cin
 
   !
@@ -140,4 +145,5 @@
   REAL, DIMENSION (klon, klev),     INTENT(INOUT)       :: deltatw, deltaqw
   REAL, DIMENSION (klon),           INTENT(INOUT)       :: sigmaw
+  REAL, DIMENSION (klon),           INTENT(INOUT)       :: awdens
   REAL, DIMENSION (klon),           INTENT(INOUT)       :: wdens
 
@@ -149,5 +155,5 @@
   REAL, DIMENSION (klon, klev),     INTENT(OUT)         :: dtls, dqls
   REAL, DIMENSION (klon, klev),     INTENT(OUT)         :: dtke, dqke
-  REAL, DIMENSION (klon, klev),     INTENT(OUT)         :: spread
+  REAL, DIMENSION (klon, klev),     INTENT(OUT)         :: spread    !  unused (jyg)
   REAL, DIMENSION (klon, klev),     INTENT(OUT)         :: omgbdth, omg
   REAL, DIMENSION (klon, klev),     INTENT(OUT)         :: dp_omgb, dp_deltomg
@@ -157,5 +163,5 @@
   ! Tendencies of state variables
   REAL, DIMENSION (klon, klev),     INTENT(OUT)         :: d_deltatw2, d_deltaqw2
-  REAL, DIMENSION (klon),           INTENT(OUT)         :: d_sigmaw2, d_wdens2
+  REAL, DIMENSION (klon),           INTENT(OUT)         :: d_sigmaw2, d_awdens2, d_wdens2
 
   ! Variables internes
@@ -165,5 +171,4 @@
   INTEGER, SAVE                                         :: igout
   !$OMP THREADPRIVATE(igout)
-  REAL                                                  :: alon
   LOGICAL, SAVE                                         :: first = .TRUE.
   !$OMP THREADPRIVATE(first)
@@ -176,13 +181,22 @@
   !$OMP THREADPRIVATE(stark, wdens_ref, coefgw, alpk, crep_upper, crep_sol)
 
+  REAL, SAVE                                            :: tau_cv
+  !$OMP THREADPRIVATE(tau_cv)
+  REAL, SAVE                                            :: rzero, aa0 ! minimal wake radius and area
+  !$OMP THREADPRIVATE(rzero, aa0)
+
   LOGICAL, SAVE                                         :: flag_wk_check_trgl
   !$OMP THREADPRIVATE(flag_wk_check_trgl)
   INTEGER, SAVE                                         :: iflag_wk_check_trgl
   !$OMP THREADPRIVATE(iflag_wk_check_trgl)
+  INTEGER, SAVE                                         :: iflag_wk_pop_dyn
+  !$OMP THREADPRIVATE(iflag_wk_pop_dyn)
 
   REAL                                                  :: delta_t_min
   INTEGER                                               :: nsub
   REAL                                                  :: dtimesub
-  REAL                                                  :: sigmad, hwmin, wapecut
+  REAL                                                  :: wdensmin
+  REAL, SAVE                                            :: sigmad, hwmin, wapecut, cstart
+  !$OMP THREADPRIVATE(sigmad, hwmin, wapecut, cstart)
   REAL                                                  :: sigmaw_max
   REAL                                                  :: dens_rate
@@ -195,6 +209,18 @@
   REAL, DIMENSION (klon, klev)                          :: deltaqw0
   REAL, DIMENSION (klon, klev)                          :: te, qe
-  REAL, DIMENSION (klon)                                :: sigmaw0
 !!  REAL, DIMENSION (klon)                                :: sigmaw1
+
+  ! Variables liees a la dynamique de population
+  REAL, DIMENSION(klon)                                 :: act
+  REAL, DIMENSION(klon)                                 :: rad_wk, tau_wk_inv
+  REAL, DIMENSION(klon)                                 :: f_shear
+  REAL, DIMENSION(klon)                                 :: drdt
+  REAL, DIMENSION(klon)                                 :: d_sig_gen, d_sig_death, d_sig_col
+  REAL, DIMENSION(klon)                                 :: wape1_act, wape2_act
+  LOGICAL, DIMENSION (klon)                             :: kill_wake
+  INTEGER, SAVE                                         :: iflag_wk_act
+  !$OMP THREADPRIVATE(iflag_wk_act)
+  REAL                                                  :: drdt_pos
+  REAL                                                  :: tau_wk_inv_min
 
   ! Variables pour les GW
@@ -204,5 +230,5 @@
   REAL, DIMENSION (klon, klev)                          :: tgw
 
-  ! Variables liées au calcul de hw
+  ! Variables liees au calcul de hw
   REAL, DIMENSION (klon)                                :: ptop_provis, ptop, ptop_new
   REAL, DIMENSION (klon)                                :: sum_dth
@@ -211,5 +237,5 @@
   INTEGER, DIMENSION (klon)                             :: ktop, kupper
 
-  ! Variables liées au test de la forme triangulaire du profil de Delta_theta
+  ! Variables liees au test de la forme triangulaire du profil de Delta_theta
   REAL, DIMENSION (klon)                                :: sum_half_dth
   REAL, DIMENSION (klon)                                :: dz_half
@@ -218,4 +244,5 @@
   REAL, DIMENSION (klon, klev)                          :: d_deltatw, d_deltaqw
   REAL, DIMENSION (klon, klev)                          :: d_te, d_qe
+  REAL, DIMENSION (klon)                                :: d_awdens, d_wdens
   REAL, DIMENSION (klon)                                :: d_sigmaw, alpha
   REAL, DIMENSION (klon)                                :: q0_min, q1_min
@@ -228,4 +255,5 @@
   INTEGER                                               ::isubstep, k, i
 
+  REAL                                                  :: wdens_targ
   REAL                                                  :: sigmaw_targ
 
@@ -273,5 +301,6 @@
   REAL, DIMENSION (klon, klev)                          :: detr
 
-  REAL, DIMENSION(klon)                                 :: sigmaw_in   ! pour les prints
+  REAL, DIMENSION(klon)                                 :: sigmaw_in             ! pour les prints
+  REAL, DIMENSION(klon)                                 :: awdens_in, wdens_in   ! pour les prints
 
   ! -------------------------------------------------------------------------
@@ -284,8 +313,11 @@
   ! -------------------------------------------------------------------------
 
-  DATA wapecut, sigmad, hwmin/5., .02, 10./
+!!  DATA wapecut, sigmad, hwmin/5., .02, 10./
+  DATA wapecut, sigmad, hwmin/1., .02, 10./
+  DATA wdensmin/1.e-12/
   ! cc nrlmd
   DATA sigmaw_max/0.4/
   DATA dens_rate/0.1/
+  DATA rzero /5000./
   ! cc
   ! Longueur de maille (en m)
@@ -293,5 +325,8 @@
 
   ! ALON = 3.e5
-  alon = 1.E6
+  ! alon = 1.E6
+
+  !  Provisionnal; to be suppressed when f_shear is parameterized
+  f_shear(:) = 1.       ! 0. for strong shear, 1. for weak shear
 
 
@@ -300,5 +335,5 @@
   ! coefgw : Coefficient pour les ondes de gravité
   ! stark : Coefficient k dans Cstar=k*sqrt(2*WAPE)
-  ! wdens : Densité de poche froide par maille
+  ! wdens : Densité surfacique de poche froide
   ! -------------------------------------------------------------------------
 
@@ -321,7 +356,13 @@
   crep_sol = 1.0
 
+  aa0 = 3.14*rzero*rzero
+
+  tau_cv = 4000.
+
   ! cc nrlmd Lecture du fichier wake_param.data
   stark=0.33
   CALL getin_p('stark',stark)
+  cstart = stark*sqrt(2.*wapecut)
+
   alpk=0.25
   CALL getin_p('alpk',alpk)
@@ -334,4 +375,11 @@
   CALL getin_p('wdens_ref_l',wdens_ref(2))    !wake number per unit area ; land
 !>jyg
+  iflag_wk_pop_dyn = 0
+  CALL getin_p('iflag_wk_pop_dyn',iflag_wk_pop_dyn) ! switch between wdens prescribed 
+                                                    ! and wdens prognostic
+  iflag_wk_act = 0
+  CALL getin_p('iflag_wk_act',iflag_wk_act) ! 0: act(:)=0.
+                                            ! 1: act(:)=1.
+                                            ! 2: act(:)=f(Wape)
   coefgw=4.
   CALL getin_p('coefgw',coefgw)
@@ -344,4 +392,6 @@
   WRITE(*,*) 'wdens_ref_l=', wdens_ref(2)
 !>jyg
+  WRITE(*,*) 'iflag_wk_pop_dyn=',iflag_wk_pop_dyn
+  WRITE(*,*) 'iflag_wk_act',iflag_wk_act
   WRITE(*,*) 'coefgw=', coefgw 
 
@@ -357,13 +407,15 @@
  endif
 
+ IF (iflag_wk_pop_dyn == 0) THEN
   ! Initialisation de toutes des densites a wdens_ref.
   ! Les densites peuvent evoluer si les poches debordent
   ! (voir au tout debut de la boucle sur les substeps)
-!jyg<
-!!  wdens(:) = wdens_ref
-  DO i = 1,klon
-    wdens(i) = wdens_ref(znatsurf(i)+1)
-  ENDDO 
-!>jyg
+  !jyg<
+  !!  wdens(:) = wdens_ref
+   DO i = 1,klon
+     wdens(i) = wdens_ref(znatsurf(i)+1)
+   ENDDO 
+  !>jyg
+ ENDIF  ! (iflag_wk_pop_dyn == 0)
 
   ! print*,'stark',stark
@@ -415,4 +467,11 @@
       d_deltatw2(:,:) = 0.
       d_deltaqw2(:,:) = 0.
+
+      IF (iflag_wk_act == 0) THEN
+        act(:) = 0.
+      ELSEIF (iflag_wk_act == 1) THEN
+        act(:) = 1.
+      ENDIF
+
 !!  DO i = 1, klon
 !!   sigmaw_in(i) = sigmaw(i)
@@ -425,4 +484,17 @@
   ! print*, 'sigmaw,sigd_con', sigmaw, sigd_con
   ! ENDIF
+  IF (iflag_wk_pop_dyn >=1) THEN
+    DO i = 1, klon
+      wdens_targ = max(wdens(i),wdensmin)
+      d_wdens2(i) = wdens_targ - wdens(i)
+      wdens(i) = wdens_targ
+    END DO
+  ELSE
+    DO i = 1, klon
+      d_awdens2(i) = 0.
+      d_wdens2(i) = 0.
+    END DO
+  ENDIF  ! (iflag_wk_pop_dyn >=1)
+!
   DO i = 1, klon
     ! c      sigmaw(i) = amax1(sigmaw(i),sigd_con(i))
@@ -434,11 +506,19 @@
     sigmaw(i) = sigmaw_targ
 !>jyg
-    sigmaw0(i) = sigmaw(i)
-    wape(i) = 0.
-    wape2(i) = 0.
-    d_sigmaw(i) = 0.
-    d_wdens2(i) = 0.
-    ktopw(i) = 0
-  END DO
+  END DO
+
+!
+  IF (iflag_wk_pop_dyn >= 1) THEN
+    awdens_in(:) = awdens(:)
+    wdens_in(:) = wdens(:)
+!!    wdens(:) = wdens(:) + wgen(:)*dtime
+!!    d_wdens2(:) = wgen(:)*dtime
+!!  ELSE
+  ENDIF  ! (iflag_wk_pop_dyn >= 1)
+
+  wape(:) = 0.
+  wape2(:) = 0.
+  d_sigmaw(:) = 0.
+  ktopw(:) = 0
 !
 !<jyg
@@ -833,4 +913,5 @@
       gwake(i) = .FALSE.
     ELSE
+      hw(i) = hw0(i)
       cstar(i) = stark*sqrt(2.*wape(i))
       gwake(i) = .TRUE.
@@ -891,4 +972,11 @@
     ! cc           On calcule pour cela une densité wdens0 pour laquelle on
     ! aurait un entrainement nul ---
+    !jyg<
+    ! Dans la configuration avec wdens prognostique, il s'agit d'un cas ou 
+    ! les poches sont insuffisantes pour accueillir tout le flux de masse 
+    ! des descentes unsaturees. Nous faisons alors l'hypothese que la 
+    ! convection profonde cree directement de nouvelles poches, sans passer 
+    ! par les thermiques. La nouvelle valeur de wdens est alors imposée.
+
     DO i = 1, klon
       ! c       print *,' isubstep,wk_adv(i),cstar(i),wape(i) ',
@@ -900,4 +988,7 @@
           ((1.-sigmaw(i))*omg(i,kupper(i)+1)/((ph(i,1)-pupper(i))*cstar(i)))**(2)
         IF (wdens(i)<=wdens0*1.1) THEN
+          IF (iflag_wk_pop_dyn >= 1) THEN
+             d_wdens2(i) = d_wdens2(i) + wdens0 - wdens(i)
+          ENDIF
           wdens(i) = wdens0
         END IF
@@ -909,9 +1000,8 @@
     END DO
 
-    ! cc nrlmd
-
     DO i = 1, klon
       IF (wk_adv(i)) THEN
         gfl(i) = 2.*sqrt(3.14*wdens(i)*sigmaw(i))
+        rad_wk(i) = sqrt(sigmaw(i)/(3.14*wdens(i)))
 !jyg<
 !!        sigmaw(i) = amin1(sigmaw(i), sigmaw_max)
@@ -923,30 +1013,90 @@
     END DO
 
-    DO i = 1, klon
-      IF (wk_adv(i)) THEN
-        ! cc nrlmd          Introduction du taux de mortalité des poches et
-        ! test sur sigmaw_max=0.4
-        ! cc         d_sigmaw(i) = gfl(i)*Cstar(i)*dtimesub
-        IF (sigmaw(i)>=sigmaw_max) THEN
-          death_rate(i) = gfl(i)*cstar(i)/sigmaw(i)
-        ELSE
-          death_rate(i) = 0.
-        END IF
-
-        d_sigmaw(i) = gfl(i)*cstar(i)*dtimesub - death_rate(i)*sigmaw(i)* &
-          dtimesub
-        ! $              - nat_rate(i)*sigmaw(i)*dtimesub
-        ! c        print*, 'd_sigmaw(i),sigmaw(i),gfl(i),Cstar(i),wape(i),
-        ! c     $  death_rate(i),ktop(i),kupper(i)',
-        ! c     $	         d_sigmaw(i),sigmaw(i),gfl(i),Cstar(i),wape(i),
-        ! c     $  death_rate(i),ktop(i),kupper(i)
-
-        ! sigmaw(i) =sigmaw(i) + gfl(i)*Cstar(i)*dtimesub
-        ! sigmaw(i) =min(sigmaw(i),0.99)     !!!!!!!!
-        ! wdens = wdens0/(10.*sigmaw)
-        ! sigmaw =max(sigmaw,sigd_con)
-        ! sigmaw =max(sigmaw,sigmad)
-      END IF
-    END DO
+    IF (iflag_wk_pop_dyn >= 1) THEN
+
+      IF (iflag_wk_act ==2) THEN
+      DO i = 1, klon
+        IF (wk_adv(i)) THEN
+          wape1_act(i) = abs(cin(i))
+          wape2_act(i) = 2.*wape1_act(i) + 1.
+          act(i) = min(1., max(0., (wape(i)-wape1_act(i)) / (wape2_act(i)-wape1_act(i)) ))
+        ENDIF  ! (wk_adv(i))
+      ENDDO
+      ENDIF  ! (iflag_wk_act ==2)
+
+
+      DO i = 1, klon
+        IF (wk_adv(i)) THEN
+!!          tau_wk(i) = max(rad_wk(i)/(3.*cstar(i))*((cstar(i)/cstart)**1.5 - 1), 100.)
+          tau_wk_inv(i) = max( (3.*cstar(i))/(rad_wk(i)*((cstar(i)/cstart)**1.5 - 1)), 0.)
+          tau_wk_inv_min = min(tau_wk_inv(i), 1./dtimesub)
+          drdt(i) = (cstar(i) - wgen(i)*(sigmaw(i)/wdens(i)-aa0)/gfl(i)) / &
+                    (1 - 2*sigmaw(i)*(1.-f_shear(i)))
+          drdt_pos=max(drdt(i),0.)
+
+!!          d_wdens(i) = ( wgen(i)*(1.+2.*(sigmaw(i)-sigmad)) &
+!!                     - wdens(i)*tau_wk_inv_min &
+!!                     - 2.*gfl(i)*wdens(i)*Cstar(i) )*dtimesub
+          d_awdens(i) = ( wgen(i) - (1./tau_cv)*(awdens(i) - act(i)*wdens(i)) )*dtimesub
+          d_wdens(i) = ( wgen(i) - (wdens(i)-awdens(i))*tau_wk_inv_min -  &
+                         2.*wdens(i)*gfl(i)*drdt_pos )*dtimesub
+          d_wdens(i) = max(d_wdens(i), wdensmin-wdens(i))
+
+!!          d_sigmaw(i) = ( (1.-2*f_shear(i)*sigmaw(i))*(gfl(i)*Cstar(i)+wgen(i)*sigmad/wdens(i)) &
+!!                      + 2.*f_shear(i)*wgen(i)*sigmaw(i)**2/wdens(i) &
+!!                      - sigmaw(i)*tau_wk_inv_min )*dtimesub
+          d_sig_gen(i) = wgen(i)*aa0
+          d_sig_death(i) = - sigmaw(i)*(1.-awdens(i)/wdens(i))*tau_wk_inv_min
+!!          d_sig_col(i) = - 2*f_shear(i)*sigmaw(i)*gfl(i)*drdt_pos
+          d_sig_col(i) = - 2*f_shear(i)*(2.*sigmaw(i)-wdens(i)*aa0)*gfl(i)*drdt_pos
+          d_sigmaw(i) = ( d_sig_gen(i) + d_sig_death(i) + d_sig_col(i) + gfl(i)*cstar(i) )*dtimesub
+          d_sigmaw(i) = max(d_sigmaw(i), sigmad-sigmaw(i))
+        ENDIF
+      ENDDO
+
+      IF (prt_level >= 10) THEN
+        print *,'wake, cstar(1), cstar(1)/cstart, rad_wk(1), tau_wk_inv(1), drdt(1) ', &
+                       cstar(1), cstar(1)/cstart, rad_wk(1), tau_wk_inv(1), drdt(1)
+        print *,'wake, wdens(1), awdens(1), act(1), d_awdens(1) ', &
+                       wdens(1), awdens(1), act(1), d_awdens(1)
+        print *,'wake, wgen, -(wdens-awdens)*tau_wk_inv, -2.*wdens*gfl*drdt_pos, d_wdens ', &
+                       wgen(1), -(wdens(1)-awdens(1))*tau_wk_inv(1), -2.*wdens(1)*gfl(1)*drdt_pos, d_wdens(1)
+        print *,'wake, d_sig_gen(1), d_sig_death(1), d_sig_col(1), d_sigmaw(1) ', &
+                       d_sig_gen(1), d_sig_death(1), d_sig_col(1), d_sigmaw(1)
+      ENDIF
+    
+    ELSE  !  (iflag_wk_pop_dyn >= 1)
+
+    ! cc nrlmd
+
+      DO i = 1, klon
+        IF (wk_adv(i)) THEN
+          ! cc nrlmd          Introduction du taux de mortalité des poches et
+          ! test sur sigmaw_max=0.4
+          ! cc         d_sigmaw(i) = gfl(i)*Cstar(i)*dtimesub
+          IF (sigmaw(i)>=sigmaw_max) THEN
+            death_rate(i) = gfl(i)*cstar(i)/sigmaw(i)
+          ELSE
+            death_rate(i) = 0.
+          END IF
+    
+          d_sigmaw(i) = gfl(i)*cstar(i)*dtimesub - death_rate(i)*sigmaw(i)* &
+            dtimesub
+          ! $              - nat_rate(i)*sigmaw(i)*dtimesub
+          ! c        print*, 'd_sigmaw(i),sigmaw(i),gfl(i),Cstar(i),wape(i),
+          ! c     $  death_rate(i),ktop(i),kupper(i)',
+          ! c     $	         d_sigmaw(i),sigmaw(i),gfl(i),Cstar(i),wape(i),
+          ! c     $  death_rate(i),ktop(i),kupper(i)
+    
+          ! sigmaw(i) =sigmaw(i) + gfl(i)*Cstar(i)*dtimesub
+          ! sigmaw(i) =min(sigmaw(i),0.99)     !!!!!!!!
+          ! wdens = wdens0/(10.*sigmaw)
+          ! sigmaw =max(sigmaw,sigd_con)
+          ! sigmaw =max(sigmaw,sigmad)
+        END IF
+      END DO
+
+    ENDIF   !  (iflag_wk_pop_dyn >= 1)
+
 
     ! calcul de la difference de vitesse verticale poche - zone non perturbee
@@ -1223,4 +1373,27 @@
 
     ! Increment state variables
+!jyg<
+    IF (iflag_wk_pop_dyn >= 1) THEN
+      DO k = 1, klev
+        DO i = 1, klon
+          IF (wk_adv(i) .AND. k<=kupper(i)) THEN
+            detr(i,k) = - d_sig_death(i) - d_sig_col(i)      
+            entr(i,k) = d_sig_gen(i)
+          ENDIF
+        ENDDO
+      ENDDO
+      ELSE  ! (iflag_wk_pop_dyn >= 1)
+      DO k = 1, klev
+        DO i = 1, klon
+          IF (wk_adv(i) .AND. k<=kupper(i)) THEN
+            detr(i, k) = 0.
+   
+            entr(i, k) = 0.
+          ENDIF
+        ENDDO
+      ENDDO
+    ENDIF  ! (iflag_wk_pop_dyn >= 1)
+
+    
 
     DO k = 1, klev
@@ -1264,10 +1437,15 @@
           ! cc nrlmd          Prise en compte du taux de mortalité
           ! cc               Définitions de entr, detr
-          detr(i, k) = 0.
-
-          entr(i, k) = detr(i, k) + gfl(i)*cstar(i) + &
-            sigmaw(i)*(1.-sigmaw(i))*dp_deltomg(i, k)
-
-          spread(i, k) = (entr(i,k)-detr(i,k))/sigmaw(i)
+!jyg<
+!!            detr(i, k) = 0.
+!!   
+!!            entr(i, k) = detr(i, k) + gfl(i)*cstar(i) + &
+!!              sigmaw(i)*(1.-sigmaw(i))*dp_deltomg(i, k)
+!!
+            entr(i, k) = entr(i,k) + gfl(i)*cstar(i) + &
+                         sigmaw(i)*(1.-sigmaw(i))*dp_deltomg(i, k)   
+!>jyg
+            spread(i, k) = (entr(i,k)-detr(i,k))/sigmaw(i)
+
           ! cc        spread(i,k) =
           ! (1.-sigmaw(i))*dp_deltomg(i,k)+gfl(i)*Cstar(i)/
@@ -1384,12 +1562,41 @@
       END DO
     END DO
+!
     DO i = 1, klon
       IF (wk_adv(i)) THEN
         sigmaw(i) = sigmaw(i) + d_sigmaw(i)
+        d_sigmaw2(i) = d_sigmaw2(i) + d_sigmaw(i)
+      END IF
+    END DO
 !jyg<
-        d_sigmaw2(i) = d_sigmaw2(i) + d_sigmaw(i)
+    IF (iflag_wk_pop_dyn >= 1) THEN
+      DO i = 1, klon
+        IF (wk_adv(i)) THEN
+          awdens(i) = awdens(i) + d_awdens(i)
+          wdens(i) = wdens(i) + d_wdens(i)
+          d_awdens2(i) = d_awdens2(i) + d_awdens(i)
+          d_wdens2(i) = d_wdens2(i) + d_wdens(i)
+        END IF
+      END DO
+      DO i = 1, klon
+        IF (wk_adv(i)) THEN
+          wdens_targ = max(wdens(i),wdensmin)
+          d_wdens2(i) = d_wdens2(i) + wdens_targ - wdens(i)
+          wdens(i) = wdens_targ
+!
+          wdens_targ = min( max(awdens(i),0.), wdens(i) )
+          d_awdens2(i) = d_awdens2(i) + wdens_targ - awdens(i)
+          awdens(i) = wdens_targ
+        END IF
+      END DO
+      DO i = 1, klon
+        IF (wk_adv(i)) THEN
+          sigmaw_targ = max(sigmaw(i),sigmad)
+          d_sigmaw2(i) = d_sigmaw2(i) + sigmaw_targ - sigmaw(i)
+          sigmaw(i) = sigmaw_targ
+        END IF
+      END DO
+    ENDIF  ! (iflag_wk_pop_dyn >= 1)
 !>jyg
-      END IF
-    END DO
 
 
@@ -1901,12 +2108,24 @@
   ! ENDDO
   ! cc
+
+  !jyg<
+  IF (iflag_wk_pop_dyn >= 1) THEN
+    DO i = 1, klon
+      kill_wake(i) = ((wape(i)>=wape2(i)) .AND. (wape2(i)<=wapecut)) .OR. (ktopw(i)<=2) .OR. &
+          .NOT. ok_qx_qw(i) .OR. (wdens(i) < 2.*wdensmin)
+    ENDDO
+  ELSE  ! (iflag_wk_pop_dyn >= 1)
+    DO i = 1, klon
+      kill_wake(i) = ((wape(i)>=wape2(i)) .AND. (wape2(i)<=wapecut)) .OR. (ktopw(i)<=2) .OR. &
+          .NOT. ok_qx_qw(i)
+    ENDDO
+  ENDIF  ! (iflag_wk_pop_dyn >= 1)
+  !>jyg
+
   DO k = 1, klev
     DO i = 1, klon
-
-      ! cc nrlmd      On maintient désormais constant sigmaw en régime
-      ! permanent
-      ! cc      IF ((sigmaw(i).GT.sigmaw_max).or.
-      IF (((wape(i)>=wape2(i)) .AND. (wape2(i)<=1.0)) .OR. (ktopw(i)<=2) .OR. &
-          .NOT. ok_qx_qw(i)) THEN
+!!jyg      IF (((wape(i)>=wape2(i)) .AND. (wape2(i)<=wapecut)) .OR. (ktopw(i)<=2) .OR. &
+!!jyg          .NOT. ok_qx_qw(i)) THEN
+      IF (kill_wake(i)) THEN
         ! cc
         dtls(i, k) = 0.
@@ -1916,25 +2135,38 @@
         d_deltatw2(i,k) = -deltatw0(i,k)
         d_deltaqw2(i,k) = -deltaqw0(i,k)
-      END IF
-    END DO
-  END DO
-
-  ! cc nrlmd      On maintient désormais constant sigmaw en régime permanent
-  DO i = 1, klon
-    IF (((wape(i)>=wape2(i)) .AND. (wape2(i)<=1.0)) .OR. (ktopw(i)<=2) .OR. &
-        .NOT. ok_qx_qw(i)) THEN
+      END IF  ! (kill_wake(i))
+    END DO
+  END DO
+
+  DO i = 1, klon
+!!jyg    IF (((wape(i)>=wape2(i)) .AND. (wape2(i)<=wapecut)) .OR. (ktopw(i)<=2) .OR. &
+!!jyg        .NOT. ok_qx_qw(i)) THEN
+      IF (kill_wake(i)) THEN
       ktopw(i) = 0
       wape(i) = 0.
       cstar(i) = 0.
-!!jyg   Outside subroutine "Wake" hw and sigmaw are zero when there are no wakes
+!!jyg   Outside subroutine "Wake" hw, wdens and sigmaw are zero when there are no wakes
 !!      hw(i) = hwmin                       !jyg
 !!      sigmaw(i) = sigmad                  !jyg
       hw(i) = 0.                            !jyg
-      sigmaw(i) = 0.                        !jyg
       fip(i) = 0.
-    ELSE
+!!      sigmaw(i) = 0.                        !jyg
+      sigmaw_targ = 0.
+      d_sigmaw2(i) = d_sigmaw2(i) + sigmaw_targ - sigmaw(i)
+      sigmaw(i) = sigmaw_targ
+      IF (iflag_wk_pop_dyn >= 1) THEN
+!!        awdens(i) = 0.
+!!        wdens(i) = 0.
+        wdens_targ = 0.
+        d_wdens2(i) = wdens_targ - wdens(i)
+        wdens(i) = wdens_targ
+        wdens_targ = 0.
+        d_awdens2(i) = wdens_targ - awdens(i)
+        awdens(i) = wdens_targ
+      ENDIF  ! (iflag_wk_pop_dyn >= 1)
+    ELSE  ! (kill_wake(i))
       wape(i) = wape2(i)
       cstar(i) = cstar2(i)
-    END IF
+    END IF  ! (kill_wake(i))
     ! c        print*,'wape wape2 ktopw OK_qx_qw =',
     ! c     $          wape(i),wape2(i),ktopw(i),OK_qx_qw(i)
@@ -1972,4 +2204,5 @@
   DO i = 1, klon
     d_sigmaw2(i) = d_sigmaw2(i)/dtime
+    d_awdens2(i) = d_awdens2(i)/dtime
     d_wdens2(i) = d_wdens2(i)/dtime
   ENDDO
