source: LMDZ6/trunk/libf/phylmd/lmdz_wake.F90 @ 4841

Last change on this file since 4841 was 4841, checked in by fhourdin, 3 months ago

Suite wake

  • Property copyright set to
    Name of program: LMDZ
    Creation date: 1984
    Version: LMDZ5
    License: CeCILL version 2
    Holder: Laboratoire de m\'et\'eorologie dynamique, CNRS, UMR 8539
    See the license file in the root directory
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 117.6 KB
Line 
1MODULE lmdz_wake
2
3! $Id: lmdz_wake.F90 4841 2024-03-02 20:37:56Z fhourdin $
4
5CONTAINS
6
7SUBROUTINE wake(klon,klev,znatsurf, p, ph, pi, dtime, &
8                tb0, qb0, omgb, &
9                dtdwn, dqdwn, amdwn, amup, dta, dqa, wgen, &
10                sigd_con, Cin, &
11                deltatw, deltaqw, sigmaw, asigmaw, wdens, awdens, &                  ! state variables           
12                dth, hw, wape, fip, gfl, &
13                dtls, dqls, ktopw, omgbdth, dp_omgb, tx, qx, &
14                dtke, dqke, omg, dp_deltomg, wkspread, cstar, &
15                d_deltat_gw, &                                                      ! tendencies
16                d_deltatw2, d_deltaqw2, d_sigmaw2, d_asigmaw2, d_wdens2, d_awdens2)             ! tendencies
17
18
19  ! **************************************************************
20  ! *
21  ! WAKE                                                        *
22  ! retour a un Pupper fixe                                *
23  ! *
24  ! written by   :  GRANDPEIX Jean-Yves   09/03/2000            *
25  ! modified by :   ROEHRIG Romain        01/29/2007            *
26  ! **************************************************************
27
28
29  USE lmdz_wake_ini , ONLY : wake_ini
30  USE lmdz_wake_ini , ONLY : prt_level,epsim1,RG,RD
31  USE lmdz_wake_ini , ONLY : stark, wdens_ref, coefgw, alpk, wk_pupper
32  USE lmdz_wake_ini , ONLY : crep_upper, crep_sol, tau_cv, rzero, aa0, flag_wk_check_trgl
33  USE lmdz_wake_ini , ONLY : ok_bug_gfl
34  USE lmdz_wake_ini , ONLY : iflag_wk_act, iflag_wk_check_trgl, iflag_wk_pop_dyn, wdensinit, wdensthreshold
35  USE lmdz_wake_ini , ONLY : sigmad, hwmin, wapecut, cstart, sigmaw_max, dens_rate, epsilon_loc
36  USE lmdz_wake_ini , ONLY : iflag_wk_profile
37  USE lmdz_wake_ini , ONLY : smallestreal
38
39
40  IMPLICIT NONE
41  ! ============================================================================
42
43
44  ! But : Decrire le comportement des poches froides apparaissant dans les
45  ! grands systemes convectifs, et fournir l'energie disponible pour
46  ! le declenchement de nouvelles colonnes convectives.
47
48  ! State variables :
49  ! deltatw    : temperature difference between wake and off-wake regions
50  ! deltaqw    : specific humidity difference between wake and off-wake regions
51  ! sigmaw     : fractional area covered by wakes.
52  ! asigmaw    : fractional area covered by active wakes.
53  ! wdens      : number of wakes per unit area
54  ! awdens     : number of active wakes per unit area
55
56  ! Variable de sortie :
57
58  ! wape : WAke Potential Energy
59  ! fip  : Front Incident Power (W/m2) - ALP
60  ! gfl  : Gust Front Length per unit area (m-1)
61  ! dtls : large scale temperature tendency due to wake
62  ! dqls : large scale humidity tendency due to wake
63  ! hw   : wake top hight (given by hw*deltatw(1)/2=wape)
64  ! dp_omgb : vertical gradient of large scale omega
65  ! awdens  : densite de poches actives
66  ! wdens   : densite de poches
67  ! omgbdth: flux of Delta_Theta transported by LS omega
68  ! dtKE   : differential heating (wake - unpertubed)
69  ! dqKE   : differential moistening (wake - unpertubed)
70  ! omg    : Delta_omg =vertical velocity diff. wake-undist. (Pa/s)
71  ! dp_deltomg  : vertical gradient of omg (s-1)
72  ! wkspread  : spreading term in d_t_wake and d_q_wake
73  ! deltatw     : updated temperature difference (T_w-T_u).
74  ! deltaqw     : updated humidity difference (q_w-q_u).
75  ! sigmaw      : updated wake fractional area.
76  ! asigmaw     : updated active wake fractional area.
77  ! d_deltat_gw : delta T tendency due to GW
78
79  ! Variables d'entree :
80
81  ! aire : aire de la maille
82  ! tb0  : horizontal average of temperature  (K)
83  ! qb0  : horizontal average of humidity   (kg/kg)
84  ! omgb : vitesse verticale moyenne sur la maille (Pa/s)
85  ! dtdwn: source de chaleur due aux descentes (K/s)
86  ! dqdwn: source d'humidite due aux descentes (kg/kg/s)
87  ! dta  : source de chaleur due courants satures et detrain  (K/s)
88  ! dqa  : source d'humidite due aux courants satures et detra (kg/kg/s)
89  ! wgen : number of wakes generated per unit area and per sec (/m^2/s)
90  ! amdwn: flux de masse total des descentes, par unite de
91  !        surface de la maille (kg/m2/s)
92  ! amup : flux de masse total des ascendances, par unite de
93  !        surface de la maille (kg/m2/s)
94  ! sigd_con:
95  ! Cin  : convective inhibition
96  ! p    : pressions aux milieux des couches (Pa)
97  ! ph   : pressions aux interfaces (Pa)
98  ! pi  : (p/p_0)**kapa (adim)
99  ! dtime: increment temporel (s)
100
101  ! Variables internes :
102
103  ! rho  : mean density at P levels
104  ! rhoh : mean density at Ph levels
105  ! tb   : mean temperature | may change within
106  ! qb   : mean humidity    | sub-time-stepping
107  ! thb  : mean potential temperature
108  ! thx  : potential temperature in (x) area
109  ! tx   : temperature  in (x) area
110  ! qx   : humidity in (x) area
111  ! dp_omgb: vertical gradient og LS omega
112  ! omgbw  : wake average vertical omega
113  ! dp_omgbw: vertical gradient of omgbw
114  ! omgbdq : flux of Delta_q transported by LS omega
115  ! dth  : potential temperature diff. wake-undist.
116  ! th1  : first pot. temp. for vertical advection (=thx)
117  ! th2  : second pot. temp. for vertical advection (=thw)
118  ! q1   : first humidity for vertical advection
119  ! q2   : second humidity for vertical advection
120  ! d_deltatw   : redistribution term for deltatw
121  ! d_deltaqw   : redistribution term for deltaqw
122  ! deltatw0   : initial deltatw
123  ! deltaqw0   : initial deltaqw
124  ! hw0    : wake top hight (defined as the altitude at which deltatw=0)
125  ! amflux : horizontal mass flux through wake boundary
126  ! wdens_ref: initial number of wakes per unit area (3D) or per
127  !            unit length (2D), at the beginning of each time step
128  ! Tgw    : 1 sur la periode de onde de gravite
129  ! Cgw    : vitesse de propagation de onde de gravite
130  ! LL     : distance between 2 wakes
131
132  ! -------------------------------------------------------------------------
133  ! Declaration de variables
134  ! -------------------------------------------------------------------------
135
136
137  ! Arguments en entree
138  ! --------------------
139
140  INTEGER, INTENT(IN) :: klon,klev
141  INTEGER, DIMENSION (klon),        INTENT(IN)          :: znatsurf
142  REAL, DIMENSION (klon, klev),     INTENT(IN)          :: p, pi
143  REAL, DIMENSION (klon, klev+1),   INTENT(IN)          :: ph
144  REAL, DIMENSION (klon, klev),     INTENT(IN)          :: omgb
145  REAL,                             INTENT(IN)          :: dtime
146  REAL, DIMENSION (klon, klev),     INTENT(IN)          :: tb0, qb0
147  REAL, DIMENSION (klon, klev),     INTENT(IN)          :: dtdwn, dqdwn
148  REAL, DIMENSION (klon, klev),     INTENT(IN)          :: amdwn, amup
149  REAL, DIMENSION (klon, klev),     INTENT(IN)          :: dta, dqa
150  REAL, DIMENSION (klon),           INTENT(IN)          :: wgen
151  REAL, DIMENSION (klon),           INTENT(IN)          :: sigd_con
152  REAL, DIMENSION (klon),           INTENT(IN)          :: Cin
153
154  !
155  ! Input/Output
156  ! State variables
157  REAL, DIMENSION (klon, klev),     INTENT(INOUT)       :: deltatw, deltaqw
158  REAL, DIMENSION (klon),           INTENT(INOUT)       :: sigmaw
159  REAL, DIMENSION (klon),           INTENT(INOUT)       :: asigmaw
160  REAL, DIMENSION (klon),           INTENT(INOUT)       :: wdens
161  REAL, DIMENSION (klon),           INTENT(INOUT)       :: awdens
162
163  ! Sorties
164  ! --------
165
166  REAL, DIMENSION (klon, klev),     INTENT(OUT)         :: dth
167  REAL, DIMENSION (klon, klev),     INTENT(OUT)         :: tx, qx
168  REAL, DIMENSION (klon, klev),     INTENT(OUT)         :: dtls, dqls
169  REAL, DIMENSION (klon, klev),     INTENT(OUT)         :: dtke, dqke
170  REAL, DIMENSION (klon, klev),     INTENT(OUT)         :: wkspread    !  unused (jyg)
171  REAL, DIMENSION (klon, klev),     INTENT(OUT)         :: omgbdth, omg
172  REAL, DIMENSION (klon, klev),     INTENT(OUT)         :: dp_omgb, dp_deltomg
173  REAL, DIMENSION (klon),           INTENT(OUT)         :: hw, wape, fip, gfl, cstar
174  INTEGER, DIMENSION (klon),        INTENT(OUT)         :: ktopw
175  ! Tendencies of state variables (2 is appended to the names of fields which are the cumul of fields
176  !                                 computed at each sub-timestep; e.g. d_wdens2 is the cumul of d_wdens)
177  REAL, DIMENSION (klon, klev),     INTENT(OUT)         :: d_deltat_gw
178  REAL, DIMENSION (klon, klev),     INTENT(OUT)         :: d_deltatw2, d_deltaqw2
179  REAL, DIMENSION (klon),           INTENT(OUT)         :: d_sigmaw2, d_asigmaw2, d_wdens2, d_awdens2
180
181  ! Variables internes
182  ! -------------------
183
184  ! Variables a fixer
185
186  REAL                                                  :: delta_t_min
187  INTEGER                                               :: nsub
188  REAL                                                  :: dtimesub
189  REAL                                                  :: wdens0
190  ! IM 080208
191  LOGICAL, DIMENSION (klon)                             :: gwake
192
193  ! Variables de sauvegarde
194  REAL, DIMENSION (klon, klev)                          :: deltatw0
195  REAL, DIMENSION (klon, klev)                          :: deltaqw0
196  REAL, DIMENSION (klon, klev)                          :: tb, qb
197
198  ! Variables liees a la dynamique de population 1
199  REAL, DIMENSION(klon)                                 :: act
200  REAL, DIMENSION(klon)                                 :: rad_wk, tau_wk_inv
201  REAL, DIMENSION(klon)                                 :: f_shear
202  REAL, DIMENSION(klon)                                 :: drdt
203 
204  ! Variables liees a la dynamique de population 2
205  REAL, DIMENSION(klon)                                 :: cont_fact 
206 
207  ! Variables liees a la dynamique de population 3
208  REAL, DIMENSION(klon)                                 :: arad_wk, irad_wk
209 
210!!  REAL, DIMENSION(klon)                                 :: d_sig_gen, d_sig_death, d_sig_col
211  REAL, DIMENSION(klon)                                 :: wape1_act, wape2_act
212  LOGICAL, DIMENSION (klon)                             :: kill_wake
213  REAL                                                  :: drdt_pos
214  REAL                                                  :: tau_wk_inv_min
215  ! Some components of the tendencies of state variables 
216  REAL, DIMENSION (klon)                                :: d_sig_gen2, d_sig_death2, d_sig_col2, d_sig_spread2, d_sig_bnd2
217  REAL, DIMENSION (klon)                                :: d_asig_death2, d_asig_aicol2, d_asig_iicol2, d_asig_spread2, d_asig_bnd2
218  REAL, DIMENSION (klon)                                :: d_dens_gen2, d_dens_death2, d_dens_col2, d_dens_bnd2
219  REAL, DIMENSION (klon)                                :: d_adens_death2, d_adens_icol2, d_adens_acol2, d_adens_bnd2
220
221  ! Variables pour les GW
222  REAL, DIMENSION (klon)                                :: ll
223  REAL, DIMENSION (klon, klev)                          :: n2
224  REAL, DIMENSION (klon, klev)                          :: cgw
225  REAL, DIMENSION (klon, klev)                          :: tgw
226
227  ! Variables liees au calcul de hw
228  REAL, DIMENSION (klon)                                :: ptop
229  REAL, DIMENSION (klon)                                :: sum_dth
230  REAL, DIMENSION (klon)                                :: dthmin
231  REAL, DIMENSION (klon)                                :: z, dz, hw0
232  INTEGER, DIMENSION (klon)                             :: ktop, kupper
233
234  ! Variables liees au test de la forme triangulaire du profil de Delta_theta
235  REAL, DIMENSION (klon)                                :: sum_half_dth
236  REAL, DIMENSION (klon)                                :: dz_half
237
238  ! Sub-timestep tendencies and related variables
239  REAL, DIMENSION (klon, klev)                          :: d_deltatw, d_deltaqw
240  REAL, DIMENSION (klon, klev)                          :: d_tb, d_qb
241  REAL, DIMENSION (klon)                                :: d_wdens, d_awdens, d_sigmaw, d_asigmaw
242  REAL, DIMENSION (klon)                                :: d_sig_gen, d_sig_death, d_sig_col, d_sig_spread, d_sig_bnd
243  REAL, DIMENSION (klon)                                :: d_asig_death, d_asig_aicol, d_asig_iicol, d_asig_spread, d_asig_bnd
244  REAL, DIMENSION (klon)                                :: d_dens_gen, d_dens_death, d_dens_col, d_dens_bnd
245  REAL, DIMENSION (klon)                                :: d_adens_death, d_adens_icol, d_adens_acol, d_adens_bnd
246  REAL, DIMENSION (klon)                                :: agfl              !! gust front length of active wakes
247                                                                             !!  per unit area
248  REAL, DIMENSION (klon)                                :: alpha, alpha_tot
249  REAL, DIMENSION (klon)                                :: q0_min, q1_min
250  LOGICAL, DIMENSION (klon)                             :: wk_adv, ok_qx_qw
251
252  ! Autres variables internes
253  INTEGER                                               ::isubstep, k, i, igout
254
255  REAL                                                  :: wdensmin
256
257  REAL                                                  :: sigmaw_targ
258  REAL                                                  :: wdens_targ
259  REAL                                                  :: d_sigmaw_targ
260  REAL                                                  :: d_wdens_targ
261
262  REAL, DIMENSION (klon)                                :: sum_thx, sum_tx, sum_qx, sum_thvx
263  REAL, DIMENSION (klon)                                :: sum_dq
264  REAL, DIMENSION (klon)                                :: sum_dtdwn, sum_dqdwn
265  REAL, DIMENSION (klon)                                :: av_thx, av_tx, av_qx, av_thvx
266  REAL, DIMENSION (klon)                                :: av_dth, av_dq
267  REAL, DIMENSION (klon)                                :: av_dtdwn, av_dqdwn
268
269  REAL, DIMENSION (klon, klev)                          :: rho
270  REAL, DIMENSION (klon, klev+1)                        :: rhoh
271  REAL, DIMENSION (klon, klev)                          :: zh
272  REAL, DIMENSION (klon, klev+1)                        :: zhh
273
274  REAL, DIMENSION (klon, klev)                          :: thb, thx
275
276  REAL, DIMENSION (klon, klev)                          :: omgbw
277  REAL, DIMENSION (klon)                                :: pupper
278  REAL, DIMENSION (klon)                                :: omgtop
279  REAL, DIMENSION (klon, klev)                          :: dp_omgbw
280  REAL, DIMENSION (klon)                                :: ztop, dztop
281  REAL, DIMENSION (klon, klev)                          :: alpha_up
282
283  REAL, DIMENSION (klon)                                :: rre1, rre2
284  REAL                                                  :: rrd1, rrd2
285  REAL, DIMENSION (klon, klev)                          :: th1, th2, q1, q2
286  REAL, DIMENSION (klon, klev)                          :: d_th1, d_th2, d_dth
287  REAL, DIMENSION (klon, klev)                          :: d_q1, d_q2, d_dq
288  REAL, DIMENSION (klon, klev)                          :: omgbdq
289
290  REAL, DIMENSION (klon)                                :: ff, gg
291  REAL, DIMENSION (klon)                                :: wape2, cstar2, heff
292                                                       
293  REAL, DIMENSION (klon, klev)                          :: crep
294                                                       
295  REAL, DIMENSION (klon, klev)                          :: ppi
296
297  ! cc nrlmd
298  REAL, DIMENSION (klon)                                :: death_rate
299!!  REAL, DIMENSION (klon)                                :: nat_rate
300  REAL, DIMENSION (klon, klev)                          :: entr
301  REAL, DIMENSION (klon, klev)                          :: detr
302
303  REAL, DIMENSION(klon)                                 :: sigmaw_in, asigmaw_in ! pour les prints
304  REAL, DIMENSION(klon)                                 :: wdens_in, awdens_in   ! pour les prints
305
306!!!  LOGICAL                                               :: phys_sub=.true.
307  LOGICAL                                               :: phys_sub=.false.
308
309  LOGICAL                                               :: first_call=.true.
310
311
312  !!-- variables liees au nouveau calcul de ptop et hw
313  REAL, DIMENSION (klon, klev)                          :: int_dth
314  REAL, DIMENSION (klon, klev)                          :: zzz, dzzz
315  REAL                                                  :: epsil
316  REAL, DIMENSION (klon)                                :: ptop1
317  INTEGER, DIMENSION (klon)                             :: ktop1
318  REAL, DIMENSION (klon)                                :: omega
319  REAL, DIMENSION (klon)                                :: h_zzz
320
321!print*,'WAKE LJYFo'
322
323  ! -------------------------------------------------------------------------
324  ! Initialisations
325  ! -------------------------------------------------------------------------
326  ! ALON = 3.e5
327  ! alon = 1.E6
328
329  !  Provisionnal; to be suppressed when f_shear is parameterized
330  f_shear(:) = 1.       ! 0. for strong shear, 1. for weak shear
331
332  ! Configuration de coefgw,stark,wdens (22/02/06 by YU Jingmei)
333
334  ! coefgw : Coefficient pour les ondes de gravite
335  ! stark : Coefficient k dans Cstar=k*sqrt(2*WAPE)
336  ! wdens : Densite surfacique de poche froide
337  ! -------------------------------------------------------------------------
338
339  ! cc nrlmd      coefgw=10
340  ! coefgw=1
341  ! wdens0 = 1.0/(alon**2)
342  ! cc nrlmd      wdens = 1.0/(alon**2)
343  ! cc nrlmd      stark = 0.50
344  ! CRtest
345  ! cc nrlmd      alpk=0.1
346  ! alpk = 1.0
347  ! alpk = 0.5
348  ! alpk = 0.05
349!
350 igout = klon/2+1/klon
351!
352!   sub-time-stepping parameters
353  nsub = 10
354  dtimesub = dtime/nsub
355!
356IF (first_call) THEN
357!!#define IOPHYS_WK
358#undef IOPHYS_WK
359#ifdef IOPHYS_WK
360  IF (phys_sub) THEN
361    call iophys_ini(dtimesub)
362  ELSE
363    call iophys_ini(dtime)
364  ENDIF
365#endif
366  first_call = .false.
367ENDIF   !(first_call)
368
369 IF (iflag_wk_pop_dyn == 0) THEN
370  ! Initialisation de toutes des densites a wdens_ref.
371  ! Les densites peuvent evoluer si les poches debordent
372  ! (voir au tout debut de la boucle sur les substeps)
373  !jyg<
374  !!  wdens(:) = wdens_ref
375   DO i = 1,klon
376     wdens(i) = wdens_ref(znatsurf(i)+1)
377   ENDDO
378  !>jyg
379 ENDIF  ! (iflag_wk_pop_dyn == 0)
380!
381 IF (iflag_wk_pop_dyn >=1) THEN
382   IF (iflag_wk_pop_dyn == 3) THEN
383     wdensmin = wdensthreshold
384   ELSE
385     wdensmin = wdensinit
386   ENDIF
387 ENDIF
388
389  ! print*,'stark',stark
390  ! print*,'alpk',alpk
391  ! print*,'wdens',wdens
392  ! print*,'coefgw',coefgw
393  ! cc
394  ! Minimum value for |T_wake - T_undist|. Used for wake top definition
395  ! -------------------------------------------------------------------------
396
397  delta_t_min = 0.2
398! delta_t_min = 0.001
399
400  ! 1. - Save initial values, initialize tendencies, initialize output fields
401  ! ------------------------------------------------------------------------
402
403!jyg<
404!!  DO k = 1, klev
405!!    DO i = 1, klon
406!!      ppi(i, k) = pi(i, k)
407!!      deltatw0(i, k) = deltatw(i, k)
408!!      deltaqw0(i, k) = deltaqw(i, k)
409!!      tb(i, k) = tb0(i, k)
410!!      qb(i, k) = qb0(i, k)
411!!      dtls(i, k) = 0.
412!!      dqls(i, k) = 0.
413!!      d_deltat_gw(i, k) = 0.
414!!      d_tb(i, k) = 0.
415!!      d_qb(i, k) = 0.
416!!      d_deltatw(i, k) = 0.
417!!      d_deltaqw(i, k) = 0.
418!!      ! IM 060508 beg
419!!      d_deltatw2(i, k) = 0.
420!!      d_deltaqw2(i, k) = 0.
421!!      ! IM 060508 end
422!!    END DO
423!!  END DO
424      ppi(:,:) = pi(:,:)
425      deltatw0(:,:) = deltatw(:,:)
426      deltaqw0(:,:) = deltaqw(:,:)
427      tb(:,:) = tb0(:,:)
428      qb(:,:) = qb0(:,:)
429      dtls(:,:) = 0.
430      dqls(:,:) = 0.
431      d_deltat_gw(:,:) = 0.
432      d_tb(:,:) = 0.
433      d_qb(:,:) = 0.
434      d_deltatw(:,:) = 0.
435      d_deltaqw(:,:) = 0.
436      d_deltatw2(:,:) = 0.
437      d_deltaqw2(:,:) = 0.
438
439      d_sig_gen2(:)   = 0.
440      d_sig_death2(:) = 0.
441      d_sig_col2(:)   = 0.
442      d_sig_spread2(:)= 0.
443      d_asig_death2(:) = 0.
444      d_asig_iicol2(:) = 0.
445      d_asig_aicol2(:) = 0.
446      d_asig_spread2(:)= 0.
447      d_asig_bnd2(:) = 0.
448      d_asigmaw2(:) = 0.
449!
450      d_dens_gen2(:)   = 0.
451      d_dens_death2(:) = 0.
452      d_dens_col2(:)   = 0.
453      d_dens_bnd2(:) = 0.
454      d_wdens2(:) = 0.
455      d_adens_bnd2(:) = 0.
456      d_awdens2(:) = 0.
457      d_adens_death2(:) = 0.
458      d_adens_icol2(:) = 0.
459      d_adens_acol2(:) = 0.
460
461      IF (iflag_wk_act == 0) THEN
462        act(:) = 0.
463      ELSEIF (iflag_wk_act == 1) THEN
464        act(:) = 1.
465      ENDIF
466
467!!  DO i = 1, klon
468!!   sigmaw_in(i) = sigmaw(i)
469!!  END DO
470   sigmaw_in(:)  = sigmaw(:)
471   asigmaw_in(:) = asigmaw(:)
472!>jyg
473!
474  IF (iflag_wk_pop_dyn >= 1) THEN
475    awdens_in(:) = awdens(:)
476    wdens_in(:) = wdens(:)
477!!    wdens(:) = wdens(:) + wgen(:)*dtime
478!!    d_wdens2(:) = wgen(:)*dtime
479!!  ELSE
480  ENDIF  ! (iflag_wk_pop_dyn >= 1)
481
482
483  ! sigmaw1=sigmaw
484  ! IF (sigd_con.GT.sigmaw1) THEN
485  ! print*, 'sigmaw,sigd_con', sigmaw, sigd_con
486  ! ENDIF
487  IF (iflag_wk_pop_dyn >= 1) THEN
488    DO i = 1, klon
489      d_dens_gen2(i)   = 0.
490      d_dens_death2(i) = 0.
491      d_dens_col2(i)   = 0.
492      d_awdens2(i) = 0.
493      IF (wdens(i) < wdensthreshold) THEN
494  !!      wdens_targ = max(wdens(i),wdensmin)
495        wdens_targ = max(wdens(i),wdensinit)
496        d_dens_bnd2(i) = wdens_targ - wdens(i)
497        d_wdens2(i) = wdens_targ - wdens(i)
498        wdens(i) = wdens_targ
499      ELSE
500        d_dens_bnd2(i) = 0.
501        d_wdens2(i) = 0.
502      ENDIF  !! (wdens(i) < wdensthreshold)
503    END DO
504    IF (iflag_wk_pop_dyn >= 2) THEN
505      DO i = 1, klon 
506        IF (awdens(i) < wdensthreshold) THEN
507!!          wdens_targ = min(max(awdens(i),wdensmin),wdens(i))
508            wdens_targ = min(max(awdens(i),wdensinit),wdens(i))
509            d_adens_bnd2(i) = wdens_targ - awdens(i)
510            d_awdens2(i) = wdens_targ - awdens(i)
511            awdens(i) = wdens_targ
512        ELSE
513            wdens_targ = min(awdens(i), wdens(i))
514            d_adens_bnd2(i) = wdens_targ - awdens(i)
515            d_awdens2(i) = wdens_targ - awdens(i)
516            awdens(i) = wdens_targ
517        ENDIF
518      END DO
519    ENDIF ! (iflag_wk_pop_dyn >= 2)
520  ELSE 
521    DO i = 1, klon
522      d_awdens2(i) = 0.
523      d_wdens2(i) = 0.
524    END DO
525  ENDIF  ! (iflag_wk_pop_dyn >= 1)
526!
527  DO i = 1, klon
528    sigmaw_targ = min(max(sigmaw(i), sigmad),0.99)
529    d_sig_bnd2(i) = sigmaw_targ - sigmaw(i)
530    d_sigmaw2(i) = sigmaw_targ - sigmaw(i)
531    sigmaw(i) = sigmaw_targ
532  END DO
533!
534  IF (iflag_wk_pop_dyn == 3) THEN
535     DO i = 1, klon 
536        IF ((wdens(i)-awdens(i)) <= smallestreal) THEN
537          sigmaw_targ = sigmaw(i)
538        ELSE
539          sigmaw_targ = min(max(asigmaw(i),sigmad),sigmaw(i))
540        ENDIF
541        d_asig_bnd2(i) = sigmaw_targ - asigmaw(i)
542        d_asigmaw2(i) = sigmaw_targ - asigmaw(i)
543        asigmaw(i) = sigmaw_targ
544     END DO
545  ENDIF ! (iflag_wk_pop_dyn == 3)
546
547  wape(:) = 0.
548  wape2(:) = 0.
549  d_sigmaw(:) = 0.
550  d_asigmaw(:) = 0.
551  ktopw(:) = 0
552!
553!<jyg
554dth(:,:) = 0.
555tx(:,:) = 0.
556qx(:,:) = 0.
557dtke(:,:) = 0.
558dqke(:,:) = 0.
559wkspread(:,:) = 0.
560omgbdth(:,:) = 0.
561omg(:,:) = 0.
562dp_omgb(:,:) = 0.
563dp_deltomg(:,:) = 0.
564hw(:) = 0.
565wape(:) = 0.
566fip(:) = 0.
567gfl(:) = 0.
568cstar(:) = 0.
569ktopw(:) = 0
570!
571!  Vertical advection local variables
572omgbw(:,:) = 0.
573omgtop(:) = 0
574dp_omgbw(:,:) = 0.
575omgbdq(:,:) = 0.
576
577!>jyg
578!
579  IF (prt_level>=10) THEN
580    PRINT *, 'wake-1, sigmaw(igout) ', sigmaw(igout)
581    PRINT *, 'wake-1, deltatw(igout,k) ', (k,deltatw(igout,k), k=1,klev)
582    PRINT *, 'wake-1, deltaqw(igout,k) ', (k,deltaqw(igout,k), k=1,klev)
583    PRINT *, 'wake-1, dowwdraughts, amdwn(igout,k) ', (k,amdwn(igout,k), k=1,klev)
584    PRINT *, 'wake-1, dowwdraughts, dtdwn(igout,k) ', (k,dtdwn(igout,k), k=1,klev)
585    PRINT *, 'wake-1, dowwdraughts, dqdwn(igout,k) ', (k,dqdwn(igout,k), k=1,klev)
586    PRINT *, 'wake-1, updraughts, amup(igout,k) ', (k,amup(igout,k), k=1,klev)
587    PRINT *, 'wake-1, updraughts, dta(igout,k) ', (k,dta(igout,k), k=1,klev)
588    PRINT *, 'wake-1, updraughts, dqa(igout,k) ', (k,dqa(igout,k), k=1,klev)
589  ENDIF
590
591  ! 2. - Prognostic part
592  ! --------------------
593
594
595  ! 2.1 - Undisturbed area and Wake integrals
596  ! ---------------------------------------------------------
597
598  DO i = 1, klon
599    z(i) = 0.
600    ktop(i) = 0
601    kupper(i) = 0
602    sum_thx(i) = 0.
603    sum_tx(i) = 0.
604    sum_qx(i) = 0.
605    sum_thvx(i) = 0.
606    sum_dth(i) = 0.
607    sum_dq(i) = 0.
608    sum_dtdwn(i) = 0.
609    sum_dqdwn(i) = 0.
610
611    av_thx(i) = 0.
612    av_tx(i) = 0.
613    av_qx(i) = 0.
614    av_thvx(i) = 0.
615    av_dth(i) = 0.
616    av_dq(i) = 0.
617    av_dtdwn(i) = 0.
618    av_dqdwn(i) = 0.
619  END DO
620
621  ! Distance between wakes
622  DO i = 1, klon
623    ll(i) = (1-sqrt(sigmaw(i)))/sqrt(wdens(i))
624  END DO
625  ! Potential temperatures and humidity
626  ! ----------------------------------------------------------
627  DO k = 1, klev
628    DO i = 1, klon
629      ! write(*,*)'wake 1',i,k,RD,tb(i,k)
630      rho(i, k) = p(i, k)/(RD*tb(i,k))
631      ! write(*,*)'wake 2',rho(i,k)
632      IF (k==1) THEN
633        ! write(*,*)'wake 3',i,k,rd,tb(i,k)
634        rhoh(i, k) = ph(i, k)/(RD*tb(i,k))
635        ! write(*,*)'wake 4',i,k,rd,tb(i,k)
636        zhh(i, k) = 0
637      ELSE
638        ! write(*,*)'wake 5',rd,(tb(i,k)+tb(i,k-1))
639        rhoh(i, k) = ph(i, k)*2./(RD*(tb(i,k)+tb(i,k-1)))
640        ! write(*,*)'wake 6',(-rhoh(i,k)*RG)+zhh(i,k-1)
641        zhh(i, k) = (ph(i,k)-ph(i,k-1))/(-rhoh(i,k)*RG) + zhh(i, k-1)
642      END IF
643      ! write(*,*)'wake 7',ppi(i,k)
644      thb(i, k) = tb(i, k)/ppi(i, k)
645      thx(i, k) = (tb(i,k)-deltatw(i,k)*sigmaw(i))/ppi(i, k)
646      tx(i, k) = tb(i, k) - deltatw(i, k)*sigmaw(i)
647      qx(i, k) = qb(i, k) - deltaqw(i, k)*sigmaw(i)
648      ! write(*,*)'wake 8',(RD*(tb(i,k)+deltatw(i,k)))
649      dth(i, k) = deltatw(i, k)/ppi(i, k)
650    END DO
651  END DO
652
653  DO k = 1, klev - 1
654    DO i = 1, klon
655      IF (k==1) THEN
656        n2(i, k) = 0
657      ELSE
658        n2(i, k) = amax1(0., -RG**2/thb(i,k)*rho(i,k)*(thb(i,k+1)-thb(i,k-1))/ &
659                             (p(i,k+1)-p(i,k-1)))
660      END IF
661      zh(i, k) = (zhh(i,k)+zhh(i,k+1))/2
662
663      cgw(i, k) = sqrt(n2(i,k))*zh(i, k)
664      tgw(i, k) = coefgw*cgw(i, k)/ll(i)
665    END DO
666  END DO
667
668  DO i = 1, klon
669    n2(i, klev) = 0
670    zh(i, klev) = 0
671    cgw(i, klev) = 0
672    tgw(i, klev) = 0
673  END DO
674
675 
676  ! Choose an integration bound well above wake top
677  ! -----------------------------------------------------------------
678
679  ! Determine Wake top pressure (Ptop) from buoyancy integral
680  ! --------------------------------------------------------
681
682   Do i=1, klon
683       wk_adv(i) = .True.
684   Enddo
685   Call pkupper (klon, klev, ptop, ph, p, pupper, kupper, &
686                    dth, hw0, rho, delta_t_min, &
687                    ktop, wk_adv, h_zzz, ptop1, ktop1)
688   
689   IF (prt_level>=10) THEN
690     PRINT *, 'wake-3, ktop(igout), kupper(igout) ', ktop(igout), kupper(igout)
691  ENDIF
692
693  ! -5/ Set deltatw & deltaqw to 0 above kupper
694
695  DO k = 1, klev
696    DO i = 1, klon
697      IF (k>=kupper(i)) THEN
698        deltatw(i, k) = 0.
699        deltaqw(i, k) = 0.
700        d_deltatw2(i,k) = -deltatw0(i,k)
701        d_deltaqw2(i,k) = -deltaqw0(i,k)
702      END IF
703    END DO
704  END DO
705
706
707  ! Vertical gradient of LS omega
708
709  DO k = 1, klev
710    DO i = 1, klon
711      IF (k<=kupper(i)) THEN
712        dp_omgb(i, k) = (omgb(i,k+1)-omgb(i,k))/(ph(i,k+1)-ph(i,k))
713      END IF
714    END DO
715  END DO
716
717  ! Integrals (and wake top level number)
718  ! --------------------------------------
719
720  ! Initialize sum_thvx to 1st level virt. pot. temp.
721
722  DO i = 1, klon
723    z(i) = 1.
724    dz(i) = 1.
725    sum_thvx(i) = thx(i, 1)*(1.+epsim1*qx(i,1))*dz(i)
726    sum_dth(i) = 0.
727  END DO
728
729  DO k = 1, klev
730    DO i = 1, klon
731      dz(i) = -(amax1(ph(i,k+1),ptop(i))-ph(i,k))/(rho(i,k)*RG)
732      IF (dz(i)>0) THEN
733              ! LJYF : ecriture pas sympa avec un tableau z(i) qui n'est pas utilise come tableau
734        z(i) = z(i) + dz(i)
735        sum_thx(i) = sum_thx(i) + thx(i, k)*dz(i)
736        sum_tx(i) = sum_tx(i) + tx(i, k)*dz(i)
737        sum_qx(i) = sum_qx(i) + qx(i, k)*dz(i)
738        sum_thvx(i) = sum_thvx(i) + thx(i, k)*(1.+epsim1*qx(i,k))*dz(i)
739        sum_dth(i) = sum_dth(i) + dth(i, k)*dz(i)
740        sum_dq(i) = sum_dq(i) + deltaqw(i, k)*dz(i)
741        sum_dtdwn(i) = sum_dtdwn(i) + dtdwn(i, k)*dz(i)
742        sum_dqdwn(i) = sum_dqdwn(i) + dqdwn(i, k)*dz(i)
743      END IF
744    END DO
745  END DO
746
747  DO i = 1, klon
748    hw0(i) = z(i)
749  END DO
750
751
752  ! 2.1 - WAPE and mean forcing computation
753  ! ---------------------------------------
754
755  ! ---------------------------------------
756
757  ! Means
758
759  DO i = 1, klon
760    av_thx(i) = sum_thx(i)/hw0(i)
761    av_tx(i) = sum_tx(i)/hw0(i)
762    av_qx(i) = sum_qx(i)/hw0(i)
763    av_thvx(i) = sum_thvx(i)/hw0(i)
764    ! av_thve = sum_thve/hw0
765    av_dth(i) = sum_dth(i)/hw0(i)
766    av_dq(i) = sum_dq(i)/hw0(i)
767    av_dtdwn(i) = sum_dtdwn(i)/hw0(i)
768    av_dqdwn(i) = sum_dqdwn(i)/hw0(i)
769
770    wape(i) = -RG*hw0(i)*(av_dth(i)+ &
771        epsim1*(av_thx(i)*av_dq(i)+av_dth(i)*av_qx(i)+av_dth(i)*av_dq(i)))/av_thvx(i)
772
773  END DO
774#ifdef IOPHYS_WK
775  IF (.not.phys_sub) CALL iophys_ecrit('wape_a',1,'wape_a','J/kg',wape)
776#endif
777
778  ! 2.2 Prognostic variable update
779  ! ------------------------------
780
781  ! Filter out bad wakes
782
783  DO k = 1, klev
784    DO i = 1, klon
785      IF (wape(i)<0.) THEN
786        deltatw(i, k) = 0.
787        deltaqw(i, k) = 0.
788        dth(i, k) = 0.
789        d_deltatw2(i,k) = -deltatw0(i,k)
790        d_deltaqw2(i,k) = -deltaqw0(i,k)
791      END IF
792    END DO
793  END DO
794
795  DO i = 1, klon
796    IF (wape(i)<0.) THEN
797!!      sigmaw(i) = amax1(sigmad, sigd_con(i))
798      sigmaw_targ = max(sigmad, sigd_con(i))
799      d_sig_bnd2(i) = d_sig_bnd2(i) + sigmaw_targ - sigmaw(i)
800      d_sigmaw2(i) = d_sigmaw2(i) + sigmaw_targ - sigmaw(i)
801      sigmaw(i) = sigmaw_targ
802    ENDIF  !!  (wape(i)<0.)
803  ENDDO
804  !
805  IF (iflag_wk_pop_dyn == 3) THEN
806    DO i = 1, klon
807      IF (wape(i)<0.) THEN
808        sigmaw_targ = max(sigmad, sigd_con(i))
809        d_asig_bnd2(i) = d_asig_bnd2(i) + sigmaw_targ - asigmaw(i)
810        d_asigmaw2(i) = d_asigmaw2(i) + sigmaw_targ - asigmaw(i)
811        asigmaw(i) = sigmaw_targ
812      ENDIF  !!  (wape(i)<0.)
813    ENDDO
814  ENDIF  !!  (iflag_wk_pop_dyn == 3)
815
816  DO i = 1, klon
817    IF (wape(i)<0.) THEN
818      wape(i) = 0.
819      cstar(i) = 0.
820      hw(i) = hwmin
821      fip(i) = 0.
822      gwake(i) = .FALSE.
823    ELSE
824      hw(i) = hw0(i)
825      cstar(i) = stark*sqrt(2.*wape(i))
826      gwake(i) = .TRUE.
827    END IF
828  END DO
829  !
830
831  ! Check qx and qw positivity
832  ! --------------------------
833  DO i = 1, klon
834    q0_min(i) = min((qb(i,1)-sigmaw(i)*deltaqw(i,1)),  &
835                    (qb(i,1)+(1.-sigmaw(i))*deltaqw(i,1)))
836  END DO
837  DO k = 2, klev
838    DO i = 1, klon
839      q1_min(i) = min((qb(i,k)-sigmaw(i)*deltaqw(i,k)), &
840                      (qb(i,k)+(1.-sigmaw(i))*deltaqw(i,k)))
841      IF (q1_min(i)<=q0_min(i)) THEN
842        q0_min(i) = q1_min(i)
843      END IF
844    END DO
845  END DO
846
847  DO i = 1, klon
848    ok_qx_qw(i) = q0_min(i) >= 0.
849    alpha(i) = 1.
850    alpha_tot(i) = 1.
851  END DO
852
853  IF (prt_level>=10) THEN
854    PRINT *, 'wake-4, sigmaw(igout), cstar(igout), wape(igout), ktop(igout) ', &
855                      sigmaw(igout), cstar(igout), wape(igout), ktop(igout)
856  ENDIF
857
858
859  ! C -----------------------------------------------------------------
860  ! Sub-time-stepping
861  ! -----------------
862
863!    nsub and dtimesub definitions moved to begining of routine.
864!!  nsub = 10
865!!  dtimesub = dtime/nsub
866
867 
868  ! ------------------------------------------------------------------------
869  ! ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
870  ! ------------------------------------------------------------------------
871  !
872  DO isubstep = 1, nsub
873  !
874  ! ------------------------------------------------------------------------
875    ! wk_adv is the logical flag enabling wake evolution in the time advance
876    ! loop
877    DO i = 1, klon
878      wk_adv(i) = ok_qx_qw(i) .AND. alpha(i) >= 1.
879    END DO
880    IF (prt_level>=10) THEN
881      PRINT *, 'wake-4.1, isubstep,wk_adv(igout),cstar(igout),wape(igout), ptop(igout) ', &
882                          isubstep,wk_adv(igout),cstar(igout),wape(igout), ptop(igout)
883     
884    ENDIF
885
886    ! cc nrlmd   Ajout d'un recalcul de wdens dans le cas d'un entrainement
887    ! negatif de ktop a kupper --------
888    ! cc           On calcule pour cela une densite wdens0 pour laquelle on
889    ! aurait un entrainement nul ---
890    !jyg<
891    ! Dans la configuration avec wdens prognostique, il s'agit d'un cas ou
892    ! les poches sont insuffisantes pour accueillir tout le flux de masse
893    ! des descentes unsaturees. Nous faisons alors l'hypothese que la
894    ! convection profonde cree directement de nouvelles poches, sans passer
895    ! par les thermiques. La nouvelle valeur de wdens est alors imposee.
896
897    DO i = 1, klon
898      ! c       print *,' isubstep,wk_adv(i),cstar(i),wape(i) ',
899      ! c     $           isubstep,wk_adv(i),cstar(i),wape(i)
900      IF (wk_adv(i) .AND. cstar(i)>0.01) THEN
901        IF ( iflag_wk_profile == 0 ) THEN
902           omg(i, kupper(i)+1)=-RG*amdwn(i, kupper(i)+1)/sigmaw(i) + &
903                               RG*amup(i, kupper(i)+1)/(1.-sigmaw(i))
904        ELSE
905           omg(i, kupper(i)+1)=0.
906        ENDIF
907        wdens0 = (sigmaw(i)/(4.*3.14))* &
908          ((1.-sigmaw(i))*omg(i,kupper(i)+1)/((ph(i,1)-pupper(i))*cstar(i)))**(2)
909        IF (prt_level >= 10) THEN
910             print*,'omg(i,kupper(i)+1),wdens0,wdens(i),cstar(i), ph(i,1)-pupper(i)', &
911                     omg(i,kupper(i)+1),wdens0,wdens(i),cstar(i), ph(i,1)-pupper(i)
912        ENDIF
913        IF (wdens(i)<=wdens0*1.1) THEN
914          IF (iflag_wk_pop_dyn >= 1) THEN
915             d_dens_bnd2(i) = d_dens_bnd2(i) + wdens0 - wdens(i)
916             d_wdens2(i) = d_wdens2(i) + wdens0 - wdens(i)
917          ENDIF
918          wdens(i) = wdens0
919        END IF
920      END IF
921    END DO
922
923    IF (iflag_wk_pop_dyn == 0 .AND. ok_bug_gfl) THEN
924!!--------------------------------------------------------
925!!Bug : computing gfl and rad_wk before changing sigmaw
926!!      This bug exists only for iflag_wk_pop_dyn=0. Otherwise, gfl and rad_wk
927!!      are computed within  wake_popdyn
928!!--------------------------------------------------------
929      DO i = 1, klon
930        IF (wk_adv(i)) THEN
931          gfl(i) = 2.*sqrt(3.14*wdens(i)*sigmaw(i))
932          rad_wk(i) = sqrt(sigmaw(i)/(3.14*wdens(i)))
933        END IF
934      END DO
935    ENDIF   ! (iflag_wk_pop_dyn == 0 .AND. ok_bug_gfl)
936!!--------------------------------------------------------
937
938    DO i = 1, klon
939      IF (wk_adv(i)) THEN
940        sigmaw_targ = min(sigmaw(i), sigmaw_max)
941        d_sig_bnd2(i) = d_sig_bnd2(i) + sigmaw_targ - sigmaw(i)
942        d_sigmaw2(i)  = d_sigmaw2(i)  + sigmaw_targ - sigmaw(i)
943        sigmaw(i) = sigmaw_targ
944      END IF
945    END DO
946
947    IF (iflag_wk_pop_dyn == 0 .AND. .NOT.ok_bug_gfl) THEN
948!!--------------------------------------------------------
949!!Fix : computing gfl and rad_wk after changing sigmaw
950!!--------------------------------------------------------
951      DO i = 1, klon
952        IF (wk_adv(i)) THEN
953          gfl(i) = 2.*sqrt(3.14*wdens(i)*sigmaw(i))
954          rad_wk(i) = sqrt(sigmaw(i)/(3.14*wdens(i)))
955        END IF
956      END DO
957    ENDIF   ! (iflag_wk_pop_dyn == 0 .AND. .NOT.ok_bug_gfl)
958!!--------------------------------------------------------
959
960    IF (iflag_wk_pop_dyn >= 1) THEN
961  !  The variable "death_rate" is significant only when iflag_wk_pop_dyn = 0.
962  !  Here, it has to be set to zero.
963      death_rate(:) = 0.
964    ENDIF
965 
966    IF (iflag_wk_pop_dyn >= 3) THEN
967      DO i = 1, klon
968        IF (wk_adv(i)) THEN
969         sigmaw_targ = min(asigmaw(i), sigmaw_max)
970         d_asig_bnd2(i) = d_asig_bnd2(i) + sigmaw_targ - asigmaw(i)
971         d_asigmaw2(i)  = d_asigmaw2(i)  + sigmaw_targ - asigmaw(i)
972         asigmaw(i) = sigmaw_targ
973        ENDIF
974      ENDDO
975    ENDIF
976 
977!!--------------------------------------------------------
978!!--------------------------------------------------------
979    IF (iflag_wk_pop_dyn == 1) THEN
980  !
981     CALL wake_popdyn_1 (klon, klev, dtime, cstar, tau_wk_inv, wgen, wdens, awdens, sigmaw, &
982                  wdensmin, &
983                  dtimesub, gfl, rad_wk, f_shear, drdt_pos, &
984                  d_awdens, d_wdens, d_sigmaw, &
985                  iflag_wk_act, wk_adv, cin, wape, &
986                  drdt, &
987                  d_dens_gen, d_dens_death, d_dens_col, d_dens_bnd, &
988                  d_sig_gen, d_sig_death, d_sig_col, d_sig_spread, d_sig_bnd, &
989                  d_wdens_targ, d_sigmaw_targ)
990                     
991   
992!!--------------------------------------------------------
993    ELSEIF (iflag_wk_pop_dyn == 2) THEN
994  !
995     CALL wake_popdyn_2 ( klon, klev, wk_adv, dtimesub, wgen, &
996                             wdensmin, &
997                             sigmaw, wdens, awdens, &   !! state variables
998                             gfl, cstar, cin, wape, rad_wk, &
999                             d_sigmaw, d_wdens, d_awdens, &  !! tendencies                             
1000                             cont_fact, &
1001                             d_sig_gen, d_sig_death, d_sig_col, d_sig_spread, d_sig_bnd, &
1002                             d_dens_gen, d_dens_death, d_dens_col, d_dens_bnd, &
1003                             d_adens_death, d_adens_icol, d_adens_acol, d_adens_bnd )
1004sigmaw=sigmaw-d_sigmaw
1005wdens=wdens-d_wdens
1006awdens=awdens-d_awdens
1007
1008!!--------------------------------------------------------
1009    ELSEIF (iflag_wk_pop_dyn == 3) THEN
1010#ifdef IOPHYS_WK
1011    IF (phys_sub) THEN
1012     CALL iophys_ecrit('ptop',1,'ptop','Pa',ptop)
1013     CALL iophys_ecrit('sigmaw',1,'sigmaw','',sigmaw)
1014     CALL iophys_ecrit('asigmaw',1,'asigmaw','',asigmaw)
1015     CALL iophys_ecrit('wdens',1,'wdens','1/m2',wdens)
1016     CALL iophys_ecrit('awdens',1,'awdens','1/m2',awdens)
1017     CALL iophys_ecrit('rad_wk',1,'rad_wk','m',rad_wk)
1018     CALL iophys_ecrit('arad_wk',1,'arad_wk','m',arad_wk)
1019     CALL iophys_ecrit('irad_wk',1,'irad_wk','m',irad_wk)
1020    ENDIF
1021#endif
1022  !
1023     CALL wake_popdyn_3 ( klon, klev, phys_sub, wk_adv, dtimesub, wgen, &
1024                             wdensmin, &
1025                             sigmaw, asigmaw, wdens, awdens, &   !! state variables
1026                             gfl, agfl, cstar, cin, wape, &
1027                             rad_wk, arad_wk, irad_wk, &
1028                             d_sigmaw, d_asigmaw, d_wdens, d_awdens, &  !! tendencies                             
1029                             d_sig_gen, d_sig_death, d_sig_col, d_sig_spread, d_sig_bnd, &
1030                             d_asig_death, d_asig_aicol, d_asig_iicol, d_asig_spread, d_asig_bnd, &
1031                             d_dens_gen, d_dens_death, d_dens_col, d_dens_bnd, &
1032                             d_adens_death, d_adens_icol, d_adens_acol, d_adens_bnd )
1033sigmaw=sigmaw-d_sigmaw
1034asigmaw=asigmaw-d_asigmaw
1035wdens=wdens-d_wdens
1036awdens=awdens-d_awdens
1037   
1038!!--------------------------------------------------------
1039    ELSEIF (iflag_wk_pop_dyn == 0) THEN
1040   
1041    ! cc nrlmd
1042
1043      DO i = 1, klon
1044        IF (wk_adv(i)) THEN
1045
1046          ! cc nrlmd          Introduction du taux de mortalite des poches et
1047          ! test sur sigmaw_max=0.4
1048          ! cc         d_sigmaw(i) = gfl(i)*Cstar(i)*dtimesub
1049          IF (sigmaw(i)>=sigmaw_max) THEN
1050            death_rate(i) = gfl(i)*cstar(i)/sigmaw(i)
1051          ELSE
1052            death_rate(i) = 0.
1053          END IF
1054   
1055          d_sigmaw(i) = gfl(i)*cstar(i)*dtimesub - death_rate(i)*sigmaw(i)* &
1056            dtimesub
1057          ! $              - nat_rate(i)*sigmaw(i)*dtimesub
1058          ! c        print*, 'd_sigmaw(i),sigmaw(i),gfl(i),Cstar(i),wape(i),
1059          ! c     $  death_rate(i),ktop(i),kupper(i)',
1060          ! c     $              d_sigmaw(i),sigmaw(i),gfl(i),Cstar(i),wape(i),
1061          ! c     $  death_rate(i),ktop(i),kupper(i)
1062   
1063          ! sigmaw(i) =sigmaw(i) + gfl(i)*Cstar(i)*dtimesub
1064          ! sigmaw(i) =min(sigmaw(i),0.99)     !!!!!!!!
1065          ! wdens = wdens0/(10.*sigmaw)
1066          ! sigmaw =max(sigmaw,sigd_con)
1067          ! sigmaw =max(sigmaw,sigmad)
1068        END IF
1069      END DO
1070
1071    ENDIF   !  (iflag_wk_pop_dyn == 1) ... ELSEIF (iflag_wk_pop_dyn == 0)
1072!!--------------------------------------------------------
1073!!--------------------------------------------------------
1074
1075#ifdef IOPHYS_WK
1076    IF (phys_sub) THEN
1077     CALL iophys_ecrit('wdensa',1,'wdensa','m',wdens)
1078     CALL iophys_ecrit('awdensa',1,'awdensa','m',awdens)
1079     CALL iophys_ecrit('sigmawa',1,'sigmawa','m',sigmaw)
1080     CALL iophys_ecrit('asigmawa',1,'asigmawa','m',asigmaw)
1081    ENDIF
1082#endif
1083    ! calcul de la difference de vitesse verticale poche - zone non perturbee
1084    ! IM 060208 differences par rapport au code initial; init. a 0 dp_deltomg
1085    ! IM 060208 et omg sur les niveaux de 1 a klev+1, alors que avant l'on definit
1086    ! IM 060208 au niveau k=1...
1087    !JYG 161013 Correction : maintenant omg est dimensionne a klev.
1088    DO k = 1, klev
1089      DO i = 1, klon
1090        IF (wk_adv(i)) THEN !!! nrlmd
1091          dp_deltomg(i, k) = 0.
1092        END IF
1093      END DO
1094    END DO
1095    DO k = 1, klev
1096      DO i = 1, klon
1097        IF (wk_adv(i)) THEN !!! nrlmd
1098          omg(i, k) = 0.
1099        END IF
1100      END DO
1101    END DO
1102
1103    DO i = 1, klon
1104      IF (wk_adv(i)) THEN
1105        z(i) = 0.
1106        omg(i, 1) = 0.
1107        dp_deltomg(i, 1) = -(gfl(i)*cstar(i))/(sigmaw(i)*(1-sigmaw(i)))
1108      END IF
1109    END DO
1110
1111    DO k = 2, klev
1112      DO i = 1, klon
1113        IF (wk_adv(i) .AND. k<=ktop(i)) THEN
1114          dz(i) = -(ph(i,k)-ph(i,k-1))/(rho(i,k-1)*RG)
1115          z(i) = z(i) + dz(i)
1116          dp_deltomg(i, k) = dp_deltomg(i, 1)
1117          omg(i, k) = dp_deltomg(i, 1)*z(i)
1118        END IF
1119      END DO
1120    END DO
1121
1122    DO i = 1, klon
1123      IF (wk_adv(i)) THEN
1124        dztop(i) = -(ptop(i)-ph(i,ktop(i)))/(rho(i,ktop(i))*RG)
1125        ztop(i) = z(i) + dztop(i)
1126        omgtop(i) = dp_deltomg(i, 1)*ztop(i)
1127      END IF
1128    END DO
1129
1130    IF (prt_level>=10) THEN
1131      PRINT *, 'wake-4.2, omg(igout,k) ', (k,omg(igout,k), k=1,klev)
1132      PRINT *, 'wake-4.2, omgtop(igout), ptop(igout), ktop(igout) ', &
1133                          omgtop(igout), ptop(igout), ktop(igout)
1134    ENDIF
1135
1136    ! -----------------
1137    ! From m/s to Pa/s
1138    ! -----------------
1139
1140    DO i = 1, klon
1141      IF (wk_adv(i)) THEN
1142        omgtop(i) = -rho(i, ktop(i))*RG*omgtop(i)
1143!! LJYF        dp_deltomg(i, 1) = omgtop(i)/(ptop(i)-ph(i,1))
1144        dp_deltomg(i, 1) = omgtop(i)/min(ptop(i)-ph(i,1),-smallestreal)
1145      END IF
1146    END DO
1147
1148    DO k = 1, klev
1149      DO i = 1, klon
1150        IF (wk_adv(i) .AND. k<=ktop(i)) THEN
1151          omg(i, k) = -rho(i, k)*RG*omg(i, k)
1152          dp_deltomg(i, k) = dp_deltomg(i, 1)
1153        END IF
1154      END DO
1155    END DO
1156
1157    ! raccordement lineaire de omg de ptop a pupper
1158
1159    DO i = 1, klon
1160      IF (wk_adv(i) .AND. kupper(i)>ktop(i)) THEN
1161        IF ( iflag_wk_profile == 0 ) THEN
1162           omg(i, kupper(i)+1) =-RG*amdwn(i, kupper(i)+1)/sigmaw(i) + &
1163          RG*amup(i, kupper(i)+1)/(1.-sigmaw(i))
1164        ELSE
1165           omg(i, kupper(i)+1) = 0.
1166        ENDIF
1167        dp_deltomg(i, kupper(i)) = (omgtop(i)-omg(i,kupper(i)+1))/ &
1168          (ptop(i)-pupper(i))
1169      END IF
1170    END DO
1171
1172    ! c      DO i=1,klon
1173    ! c        print*,'Pente entre 0 et kupper (reference)'
1174    ! c     $           ,omg(i,kupper(i)+1)/(pupper(i)-ph(i,1))
1175    ! c        print*,'Pente entre ktop et kupper'
1176    ! c     $   ,(omg(i,kupper(i)+1)-omgtop(i))/(pupper(i)-ptop(i))
1177    ! c      ENDDO
1178    ! c
1179    DO k = 1, klev
1180      DO i = 1, klon
1181        IF (wk_adv(i) .AND. k>ktop(i) .AND. k<=kupper(i)) THEN
1182          dp_deltomg(i, k) = dp_deltomg(i, kupper(i))
1183          omg(i, k) = omgtop(i) + (ph(i,k)-ptop(i))*dp_deltomg(i, kupper(i))
1184        END IF
1185      END DO
1186    END DO
1187!!    print *,'omg(igout,k) ', (k,omg(igout,k),k=1,klev)
1188    ! cc nrlmd
1189    ! c      DO i=1,klon
1190    ! c      print*,'deltaw_ktop,deltaw_conv',omgtop(i),omg(i,kupper(i)+1)
1191    ! c      END DO
1192    ! cc
1193
1194
1195    ! --    Compute wake average vertical velocity omgbw
1196
1197
1198    DO k = 1, klev
1199      DO i = 1, klon
1200        IF (wk_adv(i)) THEN
1201          omgbw(i, k) = omgb(i, k) + (1.-sigmaw(i))*omg(i, k)
1202        END IF
1203      END DO
1204    END DO
1205    ! --    and its vertical gradient dp_omgbw
1206
1207    DO k = 1, klev-1
1208      DO i = 1, klon
1209        IF (wk_adv(i)) THEN
1210          dp_omgbw(i, k) = (omgbw(i,k+1)-omgbw(i,k))/(ph(i,k+1)-ph(i,k))
1211        END IF
1212      END DO
1213    END DO
1214    DO i = 1, klon
1215      IF (wk_adv(i)) THEN
1216          dp_omgbw(i, klev) = 0.
1217      END IF
1218    END DO
1219
1220    ! --    Upstream coefficients for omgb velocity
1221    ! --    (alpha_up(k) is the coefficient of the value at level k)
1222    ! --    (1-alpha_up(k) is the coefficient of the value at level k-1)
1223    DO k = 1, klev
1224      DO i = 1, klon
1225        IF (wk_adv(i)) THEN
1226          alpha_up(i, k) = 0.
1227          IF (omgb(i,k)>0.) alpha_up(i, k) = 1.
1228        END IF
1229      END DO
1230    END DO
1231
1232    ! Matrix expressing [The,deltatw] from  [Th1,Th2]
1233
1234    DO i = 1, klon
1235      IF (wk_adv(i)) THEN
1236        rre1(i) = 1. - sigmaw(i)
1237        rre2(i) = sigmaw(i)
1238      END IF
1239    END DO
1240    rrd1 = -1.
1241    rrd2 = 1.
1242
1243    ! --    Get [Th1,Th2], dth and [q1,q2]
1244
1245    DO k = 1, klev
1246      DO i = 1, klon
1247        IF (wk_adv(i) .AND. k<=kupper(i)+1) THEN
1248          dth(i, k) = deltatw(i, k)/ppi(i, k)
1249          th1(i, k) = thb(i, k) - sigmaw(i)*dth(i, k) ! undisturbed area
1250          th2(i, k) = thb(i, k) + (1.-sigmaw(i))*dth(i, k) ! wake
1251          q1(i, k) = qb(i, k) - sigmaw(i)*deltaqw(i, k) ! undisturbed area
1252          q2(i, k) = qb(i, k) + (1.-sigmaw(i))*deltaqw(i, k) ! wake
1253        END IF
1254      END DO
1255    END DO
1256
1257    DO i = 1, klon
1258      IF (wk_adv(i)) THEN !!! nrlmd
1259        d_th1(i, 1) = 0.
1260        d_th2(i, 1) = 0.
1261        d_dth(i, 1) = 0.
1262        d_q1(i, 1) = 0.
1263        d_q2(i, 1) = 0.
1264        d_dq(i, 1) = 0.
1265      END IF
1266    END DO
1267
1268    DO k = 2, klev
1269      DO i = 1, klon
1270        IF (wk_adv(i) .AND. k<=kupper(i)+1) THEN
1271          d_th1(i, k) = th1(i, k-1) - th1(i, k)
1272          d_th2(i, k) = th2(i, k-1) - th2(i, k)
1273          d_dth(i, k) = dth(i, k-1) - dth(i, k)
1274          d_q1(i, k) = q1(i, k-1) - q1(i, k)
1275          d_q2(i, k) = q2(i, k-1) - q2(i, k)
1276          d_dq(i, k) = deltaqw(i, k-1) - deltaqw(i, k)
1277        END IF
1278      END DO
1279    END DO
1280
1281    DO i = 1, klon
1282      IF (wk_adv(i)) THEN
1283        omgbdth(i, 1) = 0.
1284        omgbdq(i, 1) = 0.
1285      END IF
1286    END DO
1287
1288    DO k = 2, klev
1289      DO i = 1, klon
1290        IF (wk_adv(i) .AND. k<=kupper(i)+1) THEN !   loop on interfaces
1291          omgbdth(i, k) = omgb(i, k)*(dth(i,k-1)-dth(i,k))
1292          omgbdq(i, k) = omgb(i, k)*(deltaqw(i,k-1)-deltaqw(i,k))
1293        END IF
1294      END DO
1295    END DO
1296
1297!!    IF (prt_level>=10) THEN
1298    IF (prt_level>=10 .and. wk_adv(igout)) THEN
1299      PRINT *, 'wake-4.3, th1(igout,k) ', (k,th1(igout,k), k=1,kupper(igout))
1300      PRINT *, 'wake-4.3, th2(igout,k) ', (k,th2(igout,k), k=1,kupper(igout))
1301      PRINT *, 'wake-4.3, dth(igout,k) ', (k,dth(igout,k), k=1,kupper(igout))
1302      PRINT *, 'wake-4.3, omgbdth(igout,k) ', (k,omgbdth(igout,k), k=1,kupper(igout))
1303    ENDIF
1304
1305    ! -----------------------------------------------------------------
1306    DO k = 1, klev-1
1307      DO i = 1, klon
1308        IF (wk_adv(i) .AND. k<=kupper(i)-1) THEN
1309          ! -----------------------------------------------------------------
1310
1311          ! Compute redistribution (advective) term
1312
1313          d_deltatw(i, k) = dtimesub/(ph(i,k)-ph(i,k+1))* &
1314            (rrd1*omg(i,k)*sigmaw(i)*d_th1(i,k) - &
1315             rrd2*omg(i,k+1)*(1.-sigmaw(i))*d_th2(i,k+1)- &
1316             (1.-alpha_up(i,k))*omgbdth(i,k)- &
1317             alpha_up(i,k+1)*omgbdth(i,k+1))*ppi(i, k)
1318!           print*,'d_deltatw=', k, d_deltatw(i,k)
1319
1320          d_deltaqw(i, k) = dtimesub/(ph(i,k)-ph(i,k+1))* &
1321            (rrd1*omg(i,k)*sigmaw(i)*d_q1(i,k)- &
1322             rrd2*omg(i,k+1)*(1.-sigmaw(i))*d_q2(i,k+1)- &
1323             (1.-alpha_up(i,k))*omgbdq(i,k)- &
1324             alpha_up(i,k+1)*omgbdq(i,k+1))
1325!           print*,'d_deltaqw=', k, d_deltaqw(i,k)
1326
1327          ! and increment large scale tendencies
1328
1329
1330
1331
1332          ! C
1333          ! -----------------------------------------------------------------
1334          d_tb(i, k) = dtimesub*((rre1(i)*omg(i,k)*sigmaw(i)*d_th1(i,k)- &
1335                                  rre2(i)*omg(i,k+1)*(1.-sigmaw(i))*d_th2(i,k+1))/ &
1336                                 (ph(i,k)-ph(i,k+1)) &
1337                                 -sigmaw(i)*(1.-sigmaw(i))*dth(i,k)*(omg(i,k)-omg(i,k+1))/ &
1338                                 (ph(i,k)-ph(i,k+1)) )*ppi(i, k)
1339
1340          d_qb(i, k) = dtimesub*((rre1(i)*omg(i,k)*sigmaw(i)*d_q1(i,k)- &
1341                                  rre2(i)*omg(i,k+1)*(1.-sigmaw(i))*d_q2(i,k+1))/ &
1342                                 (ph(i,k)-ph(i,k+1)) &
1343                                 -sigmaw(i)*(1.-sigmaw(i))*deltaqw(i,k)*(omg(i,k)-omg(i,k+1))/ &
1344                                 (ph(i,k)-ph(i,k+1)) )
1345        ELSE IF (wk_adv(i) .AND. k==kupper(i)) THEN
1346          d_tb(i, k) = dtimesub*(rre1(i)*omg(i,k)*sigmaw(i)*d_th1(i,k)/(ph(i,k)-ph(i,k+1)))*ppi(i, k)
1347
1348          d_qb(i, k) = dtimesub*(rre1(i)*omg(i,k)*sigmaw(i)*d_q1(i,k)/(ph(i,k)-ph(i,k+1)))
1349
1350        END IF
1351        ! cc
1352      END DO
1353    END DO
1354    ! ------------------------------------------------------------------
1355
1356    IF (prt_level>=10) THEN
1357      PRINT *, 'wake-4.3, d_deltatw(igout,k) ', (k,d_deltatw(igout,k), k=1,klev)
1358      PRINT *, 'wake-4.3, d_deltaqw(igout,k) ', (k,d_deltaqw(igout,k), k=1,klev)
1359    ENDIF
1360
1361    ! Increment state variables
1362!jyg<
1363    IF (iflag_wk_pop_dyn >= 1) THEN
1364      DO k = 1, klev
1365        DO i = 1, klon
1366          IF (wk_adv(i) .AND. k<=kupper(i)) THEN
1367            detr(i,k) = - d_sig_death(i) - d_sig_col(i)     
1368            entr(i,k) = d_sig_gen(i)
1369          ENDIF
1370        ENDDO
1371      ENDDO
1372      ELSE  ! (iflag_wk_pop_dyn >= 1)
1373      DO k = 1, klev
1374        DO i = 1, klon
1375          IF (wk_adv(i) .AND. k<=kupper(i)) THEN
1376            detr(i, k) = 0.
1377   
1378            entr(i, k) = 0.
1379          ENDIF
1380        ENDDO
1381      ENDDO
1382    ENDIF  ! (iflag_wk_pop_dyn >= 1)
1383
1384   
1385
1386    DO k = 1, klev
1387      DO i = 1, klon
1388        ! cc nrlmd       IF( wk_adv(i) .AND. k .LE. kupper(i)-1) THEN
1389        IF (wk_adv(i) .AND. k<=kupper(i)) THEN
1390          ! cc
1391
1392
1393
1394          ! Coefficient de repartition
1395
1396          crep(i, k) = crep_sol*(ph(i,kupper(i))-ph(i,k))/ &
1397            (ph(i,kupper(i))-ph(i,1))
1398          crep(i, k) = crep(i, k) + crep_upper*(ph(i,1)-ph(i,k))/ &
1399            (ph(i,1)-ph(i,kupper(i)))
1400
1401
1402          ! Reintroduce compensating subsidence term.
1403
1404          ! dtKE(k)=(dtdwn(k)*Crep(k))/sigmaw
1405          ! dtKE(k)=dtKE(k)-(dtdwn(k)*(1-Crep(k))+dta(k))
1406          ! .                   /(1-sigmaw)
1407          ! dqKE(k)=(dqdwn(k)*Crep(k))/sigmaw
1408          ! dqKE(k)=dqKE(k)-(dqdwn(k)*(1-Crep(k))+dqa(k))
1409          ! .                   /(1-sigmaw)
1410
1411          ! dtKE(k)=(dtdwn(k)*Crep(k)+(1-Crep(k))*dta(k))/sigmaw
1412          ! dtKE(k)=dtKE(k)-(dtdwn(k)*(1-Crep(k))+dta(k)*Crep(k))
1413          ! .                   /(1-sigmaw)
1414          ! dqKE(k)=(dqdwn(k)*Crep(k)+(1-Crep(k))*dqa(k))/sigmaw
1415          ! dqKE(k)=dqKE(k)-(dqdwn(k)*(1-Crep(k))+dqa(k)*Crep(k))
1416          ! .                   /(1-sigmaw)
1417
1418          dtke(i, k) = (dtdwn(i,k)/sigmaw(i)-dta(i,k)/(1.-sigmaw(i)))
1419          dqke(i, k) = (dqdwn(i,k)/sigmaw(i)-dqa(i,k)/(1.-sigmaw(i)))
1420          ! print*,'dtKE= ',dtKE(i,k),' dqKE= ',dqKE(i,k)
1421
1422!
1423
1424          ! cc nrlmd          Prise en compte du taux de mortalite
1425          ! cc               Definitions de entr, detr
1426!jyg<
1427!!            detr(i, k) = 0.
1428!!   
1429!!            entr(i, k) = detr(i, k) + gfl(i)*cstar(i) + &
1430!!              sigmaw(i)*(1.-sigmaw(i))*dp_deltomg(i, k)
1431!!
1432            entr(i, k) = entr(i,k) + gfl(i)*cstar(i) + &
1433                         sigmaw(i)*(1.-sigmaw(i))*dp_deltomg(i, k)   
1434!>jyg
1435            wkspread(i, k) = (entr(i,k)-detr(i,k))/sigmaw(i)
1436
1437          ! cc        wkspread(i,k) =
1438          ! (1.-sigmaw(i))*dp_deltomg(i,k)+gfl(i)*Cstar(i)/
1439          ! cc     $  sigmaw(i)
1440
1441
1442          ! ajout d'un effet onde de gravite -Tgw(k)*deltatw(k) 03/02/06 YU
1443          ! Jingmei
1444
1445          ! write(lunout,*)'wake.F ',i,k, dtimesub,d_deltat_gw(i,k),
1446          ! &  Tgw(i,k),deltatw(i,k)
1447          d_deltat_gw(i, k) = d_deltat_gw(i, k) - tgw(i, k)*deltatw(i, k)* &
1448            dtimesub
1449          ! write(lunout,*)'wake.F ',i,k, dtimesub,d_deltatw(i,k)
1450          ff(i) = d_deltatw(i, k)/dtimesub
1451
1452          ! Sans GW
1453
1454          ! deltatw(k)=deltatw(k)+dtimesub*(ff+dtKE(k)-wkspread(k)*deltatw(k))
1455
1456          ! GW formule 1
1457
1458          ! deltatw(k) = deltatw(k)+dtimesub*
1459          ! $         (ff+dtKE(k) - wkspread(k)*deltatw(k)-Tgw(k)*deltatw(k))
1460
1461          ! GW formule 2
1462
1463          IF (dtimesub*tgw(i,k)<1.E-10) THEN
1464            d_deltatw(i, k) = dtimesub*(ff(i)+dtke(i,k) - &
1465               entr(i,k)*deltatw(i,k)/sigmaw(i) - &
1466               (death_rate(i)*sigmaw(i)+detr(i,k))*deltatw(i,k)/(1.-sigmaw(i)) - & ! cc
1467               tgw(i,k)*deltatw(i,k) )
1468          ELSE
1469            d_deltatw(i, k) = 1/tgw(i, k)*(1-exp(-dtimesub*tgw(i,k)))* &
1470               (ff(i)+dtke(i,k) - &
1471                entr(i,k)*deltatw(i,k)/sigmaw(i) - &
1472                (death_rate(i)*sigmaw(i)+detr(i,k))*deltatw(i,k)/(1.-sigmaw(i)) - &
1473                tgw(i,k)*deltatw(i,k) )
1474          END IF
1475
1476          dth(i, k) = deltatw(i, k)/ppi(i, k)
1477
1478          gg(i) = d_deltaqw(i, k)/dtimesub
1479
1480          d_deltaqw(i, k) = dtimesub*(gg(i)+dqke(i,k) - &
1481            entr(i,k)*deltaqw(i,k)/sigmaw(i) - &
1482            (death_rate(i)*sigmaw(i)+detr(i,k))*deltaqw(i,k)/(1.-sigmaw(i)))
1483          ! cc
1484
1485          ! cc nrlmd
1486          ! cc       d_deltatw2(i,k)=d_deltatw2(i,k)+d_deltatw(i,k)
1487          ! cc       d_deltaqw2(i,k)=d_deltaqw2(i,k)+d_deltaqw(i,k)
1488          ! cc
1489        END IF
1490      END DO
1491    END DO
1492
1493
1494    ! Scale tendencies so that water vapour remains positive in w and x.
1495
1496    CALL wake_vec_modulation(klon, klev, wk_adv, epsilon_loc, qb, d_qb, deltaqw, &
1497      d_deltaqw, sigmaw, d_sigmaw, alpha)
1498    !
1499    ! Alpha_tot = Product of all the alpha's
1500    DO i = 1, klon
1501      IF (wk_adv(i)) THEN
1502        alpha_tot(i) = alpha_tot(i)*alpha(i)   
1503      END IF
1504    END DO
1505
1506    ! cc nrlmd
1507    ! c      print*,'alpha'
1508    ! c      do i=1,klon
1509    ! c         print*,alpha(i)
1510    ! c      end do
1511    ! cc
1512    DO k = 1, klev
1513      DO i = 1, klon
1514        IF (wk_adv(i) .AND. k<=kupper(i)) THEN
1515          d_tb(i, k) = alpha(i)*d_tb(i, k)
1516          d_qb(i, k) = alpha(i)*d_qb(i, k)
1517          d_deltatw(i, k) = alpha(i)*d_deltatw(i, k)
1518          d_deltaqw(i, k) = alpha(i)*d_deltaqw(i, k)
1519          d_deltat_gw(i, k) = alpha(i)*d_deltat_gw(i, k)
1520        END IF
1521      END DO
1522    END DO
1523    DO i = 1, klon
1524      IF (wk_adv(i)) THEN
1525        d_sigmaw(i) = alpha(i)*d_sigmaw(i)
1526      END IF
1527    END DO
1528
1529    ! Update large scale variables and wake variables
1530    ! IM 060208 manque DO i + remplace DO k=1,kupper(i)
1531    ! IM 060208     DO k = 1,kupper(i)
1532    DO k = 1, klev
1533      DO i = 1, klon
1534        IF (wk_adv(i) .AND. k<=kupper(i)) THEN
1535          dtls(i, k) = dtls(i, k) + d_tb(i, k)
1536          dqls(i, k) = dqls(i, k) + d_qb(i, k)
1537          ! cc nrlmd
1538          d_deltatw2(i, k) = d_deltatw2(i, k) + d_deltatw(i, k)
1539          d_deltaqw2(i, k) = d_deltaqw2(i, k) + d_deltaqw(i, k)
1540          ! cc
1541        END IF
1542      END DO
1543    END DO
1544    DO k = 1, klev
1545      DO i = 1, klon
1546        IF (wk_adv(i) .AND. k<=kupper(i)) THEN
1547          tb(i, k) = tb0(i, k) + dtls(i, k)
1548          qb(i, k) = qb0(i, k) + dqls(i, k)
1549          thb(i, k) = tb(i, k)/ppi(i, k)
1550          deltatw(i, k) = deltatw(i, k) + d_deltatw(i, k)
1551          deltaqw(i, k) = deltaqw(i, k) + d_deltaqw(i, k)
1552          dth(i, k) = deltatw(i, k)/ppi(i, k)
1553          ! c      print*,'k,qx,qw',k,qb(i,k)-sigmaw(i)*deltaqw(i,k)
1554          ! c     $        ,qb(i,k)+(1-sigmaw(i))*deltaqw(i,k)
1555        END IF
1556      END DO
1557    END DO
1558!
1559    DO i = 1, klon
1560      IF (wk_adv(i)) THEN
1561        sigmaw(i) = sigmaw(i) + d_sigmaw(i)
1562        d_sigmaw2(i) = d_sigmaw2(i) + d_sigmaw(i)
1563      END IF
1564    END DO
1565!jyg<
1566    IF (iflag_wk_pop_dyn >= 1) THEN
1567!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! sigmaw !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1568!  Cumulatives
1569      DO i = 1, klon
1570        IF (wk_adv(i)) THEN
1571          d_sig_gen2(i)   = d_sig_gen2(i)   + d_sig_gen(i)
1572          d_sig_death2(i) = d_sig_death2(i) + d_sig_death(i)
1573          d_sig_col2(i)   = d_sig_col2(i)   + d_sig_col(i)
1574          d_sig_spread2(i)= d_sig_spread2(i)+ d_sig_spread(i)
1575          d_sig_bnd2(i)   = d_sig_bnd2(i)   + d_sig_bnd(i)
1576        END IF
1577      END DO
1578!  Bounds
1579      DO i = 1, klon
1580        IF (wk_adv(i)) THEN
1581          sigmaw_targ = max(sigmaw(i),sigmad)
1582          d_sig_bnd2(i) = d_sig_bnd2(i) + sigmaw_targ - sigmaw(i)
1583          d_sigmaw2(i) = d_sigmaw2(i) + sigmaw_targ - sigmaw(i)
1584          sigmaw(i) = sigmaw_targ
1585        END IF
1586      END DO
1587!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! wdens  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1588!  Cumulatives
1589      DO i = 1, klon
1590        IF (wk_adv(i)) THEN
1591          wdens(i) = wdens(i) + d_wdens(i)
1592          d_wdens2(i) = d_wdens2(i) + d_wdens(i)
1593          d_dens_gen2(i)   = d_dens_gen2(i)   + d_dens_gen(i)
1594          d_dens_death2(i) = d_dens_death2(i) + d_dens_death(i)
1595          d_dens_col2(i)   = d_dens_col2(i)   + d_dens_col(i)
1596          d_dens_bnd2(i)   = d_dens_bnd2(i)   + d_dens_bnd(i)
1597        END IF
1598      END DO
1599!  Bounds
1600      DO i = 1, klon
1601        IF (wk_adv(i)) THEN
1602          wdens_targ = max(wdens(i),wdensmin)
1603          d_dens_bnd2(i) = d_dens_bnd2(i) + wdens_targ - wdens(i)
1604          d_wdens2(i) = d_wdens2(i) + wdens_targ - wdens(i)
1605          wdens(i) = wdens_targ
1606        END IF
1607      END DO
1608!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! awdens !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1609!  Cumulatives
1610      DO i = 1, klon
1611        IF (wk_adv(i)) THEN
1612          awdens(i) = awdens(i) + d_awdens(i)
1613          d_awdens2(i) = d_awdens2(i) + d_awdens(i)
1614        END IF
1615      END DO
1616!  Bounds
1617      DO i = 1, klon
1618        IF (wk_adv(i)) THEN
1619          wdens_targ = min( max(awdens(i),0.), wdens(i) )
1620          d_adens_bnd2(i) = d_adens_bnd2(i) + wdens_targ - awdens(i)
1621          d_awdens2(i) = d_awdens2(i) + wdens_targ - awdens(i)
1622          awdens(i) = wdens_targ
1623        END IF
1624      END DO
1625!
1626      IF (iflag_wk_pop_dyn >= 2) THEN
1627!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! awdens again for iflag_wk_pop_dyn >= 2!!!!!!
1628!  Cumulatives
1629        DO i = 1, klon
1630           IF (wk_adv(i)) THEN
1631               d_adens_death2(i)   = d_adens_death2(i)   + d_adens_death(i)
1632               d_adens_icol2(i)   = d_adens_icol2(i)   + d_adens_icol(i)
1633               d_adens_acol2(i)   = d_adens_acol2(i)   + d_adens_acol(i)
1634               d_adens_bnd2(i)   = d_adens_bnd2(i)   + d_adens_bnd(i)         
1635           END IF
1636        END DO
1637!  Bounds
1638        DO i = 1, klon
1639           IF (wk_adv(i)) THEN
1640               wdens_targ = min( max(awdens(i),0.), wdens(i) )
1641               d_adens_bnd2(i) = d_adens_bnd2(i) + wdens_targ - awdens(i)
1642               awdens(i) = wdens_targ
1643           END IF
1644        END DO
1645!
1646        IF (iflag_wk_pop_dyn == 3) THEN
1647!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! asigmaw for iflag_wk_pop_dyn = 3!!!!!!
1648!  Cumulatives
1649          DO i = 1, klon
1650             IF (wk_adv(i)) THEN
1651                 asigmaw(i) = asigmaw(i) + d_asigmaw(i)
1652                 d_asigmaw2(i) = d_asigmaw2(i) + d_asigmaw(i)
1653                 d_asig_death2(i)   = d_asig_death2(i)   + d_asig_death(i)
1654                 d_asig_spread2(i)  = d_asig_spread2(i)  + d_asig_spread(i)
1655                 d_asig_iicol2(i)   = d_asig_iicol2(i)   + d_asig_iicol(i)
1656                 d_asig_aicol2(i)   = d_asig_aicol2(i)   + d_asig_aicol(i)
1657                 d_asig_bnd2(i)     = d_asig_bnd2(i)     + d_asig_bnd(i)         
1658             END IF
1659          END DO
1660!  Bounds
1661          DO i = 1, klon
1662             IF (wk_adv(i)) THEN
1663   !   asigmaw lower bound set to sigmad/2 in order to allow asigmaw values lower than sigmad.
1664   !!             sigmaw_targ = min(max(asigmaw(i),sigmad),sigmaw(i))
1665                sigmaw_targ = min(max(asigmaw(i),sigmad/2.),sigmaw(i))
1666                d_asig_bnd2(i) = d_asig_bnd2(i) + sigmaw_targ - asigmaw(i)
1667                d_asigmaw2(i) = d_asigmaw2(i) + sigmaw_targ - asigmaw(i)
1668                asigmaw(i) = sigmaw_targ
1669             END IF
1670          END DO
1671
1672#ifdef IOPHYS_WK
1673    IF (phys_sub) THEN
1674     CALL iophys_ecrit('wdensb',1,'wdensb','m',wdens)
1675     CALL iophys_ecrit('awdensb',1,'awdensb','m',awdens)
1676     CALL iophys_ecrit('sigmawb',1,'sigmawb','m',sigmaw)
1677     CALL iophys_ecrit('asigmawb',1,'asigmawb','m',asigmaw)
1678!
1679     call iophys_ecrit('d_wdens2',1,'d_wdens2','',d_wdens2)
1680     call iophys_ecrit('d_dens_gen2',1,'d_dens_gen2','',d_dens_gen2)
1681     call iophys_ecrit('d_dens_death2',1,'d_dens_death2','',d_dens_death2)
1682     call iophys_ecrit('d_dens_col2',1,'d_dens_col2','',d_dens_col2)
1683     call iophys_ecrit('d_dens_bnd2',1,'d_dens_bnd2','',d_dens_bnd2)
1684!
1685     call iophys_ecrit('d_awdens2',1,'d_awdens2','',d_awdens2)
1686     call iophys_ecrit('d_adens_death2',1,'d_adens_death2','',d_adens_death2)
1687     call iophys_ecrit('d_adens_icol2',1,'d_adens_icol2','',d_adens_icol2)
1688     call iophys_ecrit('d_adens_acol2',1,'d_adens_acol2','',d_adens_acol2)
1689     call iophys_ecrit('d_adens_bnd2',1,'d_adens_bnd2','',d_adens_bnd2)
1690!
1691     CALL iophys_ecrit('d_sigmaw2',1,'d_sigmaw2','',d_sigmaw2)
1692     CALL iophys_ecrit('d_sig_gen2',1,'d_sig_gen2','m',d_sig_gen2)
1693     CALL iophys_ecrit('d_sig_spread2',1,'d_sig_spread2','',d_sig_spread2)
1694     CALL iophys_ecrit('d_sig_col2',1,'d_sig_col2','',d_sig_col2)
1695     CALL iophys_ecrit('d_sig_death2',1,'d_sig_death2','',d_sig_death2)
1696     CALL iophys_ecrit('d_sig_bnd2',1,'d_sig_bnd2','',d_sig_bnd2)
1697!
1698     CALL iophys_ecrit('d_asigmaw2',1,'d_asigmaw2','',d_asigmaw2)
1699     CALL iophys_ecrit('d_asig_spread2',1,'d_asig_spread2','m',d_asig_spread2)
1700     CALL iophys_ecrit('d_asig_aicol2',1,'d_asig_aicol2','m',d_asig_aicol2)
1701     CALL iophys_ecrit('d_asig_iicol2',1,'d_asig_iicol2','m',d_asig_iicol2)
1702     CALL iophys_ecrit('d_asig_death2',1,'d_asig_death2','m',d_asig_death2)
1703     CALL iophys_ecrit('d_asig_bnd2',1,'d_asig_bnd2','m',d_asig_bnd2)
1704    ENDIF
1705#endif
1706        ENDIF ! (iflag_wk_pop_dyn == 3)
1707      ENDIF ! (iflag_wk_pop_dyn >= 2)
1708    ENDIF  ! (iflag_wk_pop_dyn >= 1)
1709
1710
1711
1712   Call pkupper (klon, klev, ptop, ph, p, pupper, kupper, &
1713                    dth, hw, rho, delta_t_min, &
1714                    ktop, wk_adv, h_zzz, ptop1, ktop1)
1715
1716    ! 5/ Set deltatw & deltaqw to 0 above kupper
1717
1718    DO k = 1, klev
1719      DO i = 1, klon
1720        IF (wk_adv(i) .AND. k>=kupper(i)) THEN
1721          deltatw(i, k) = 0.
1722          deltaqw(i, k) = 0.
1723          d_deltatw2(i,k) = -deltatw0(i,k)
1724          d_deltaqw2(i,k) = -deltaqw0(i,k)
1725        END IF
1726      END DO
1727    END DO
1728
1729
1730    ! -------------Cstar computation---------------------------------
1731    DO i = 1, klon
1732      IF (wk_adv(i)) THEN !!! nrlmd
1733        sum_thx(i) = 0.
1734        sum_tx(i) = 0.
1735        sum_qx(i) = 0.
1736        sum_thvx(i) = 0.
1737        sum_dth(i) = 0.
1738        sum_dq(i) = 0.
1739        sum_dtdwn(i) = 0.
1740        sum_dqdwn(i) = 0.
1741
1742        av_thx(i) = 0.
1743        av_tx(i) = 0.
1744        av_qx(i) = 0.
1745        av_thvx(i) = 0.
1746        av_dth(i) = 0.
1747        av_dq(i) = 0.
1748        av_dtdwn(i) = 0.
1749        av_dqdwn(i) = 0.
1750      END IF
1751    END DO
1752
1753    ! Integrals (and wake top level number)
1754    ! --------------------------------------
1755
1756    ! Initialize sum_thvx to 1st level virt. pot. temp.
1757
1758    DO i = 1, klon
1759      IF (wk_adv(i)) THEN !!! nrlmd
1760        z(i) = 1.
1761        dz(i) = 1.
1762        sum_thvx(i) = thx(i, 1)*(1.+epsim1*qx(i,1))*dz(i)
1763        sum_dth(i) = 0.
1764      END IF
1765    END DO
1766
1767    DO k = 1, klev
1768      DO i = 1, klon
1769        IF (wk_adv(i)) THEN !!! nrlmd
1770          dz(i) = -(max(ph(i,k+1),ptop(i))-ph(i,k))/(rho(i,k)*RG)
1771          IF (dz(i)>0) THEN
1772            z(i) = z(i) + dz(i)
1773            sum_thx(i) = sum_thx(i) + thx(i, k)*dz(i)
1774            sum_tx(i) = sum_tx(i) + tx(i, k)*dz(i)
1775            sum_qx(i) = sum_qx(i) + qx(i, k)*dz(i)
1776            sum_thvx(i) = sum_thvx(i) + thx(i, k)*(1.+epsim1*qx(i,k))*dz(i)
1777            sum_dth(i) = sum_dth(i) + dth(i, k)*dz(i)
1778            sum_dq(i) = sum_dq(i) + deltaqw(i, k)*dz(i)
1779            sum_dtdwn(i) = sum_dtdwn(i) + dtdwn(i, k)*dz(i)
1780            sum_dqdwn(i) = sum_dqdwn(i) + dqdwn(i, k)*dz(i)
1781          END IF
1782        END IF
1783      END DO
1784    END DO
1785
1786    DO i = 1, klon
1787      IF (wk_adv(i)) THEN !!! nrlmd
1788        hw0(i) = z(i)
1789      END IF
1790    END DO
1791
1792
1793    ! - WAPE and mean forcing computation
1794    ! ---------------------------------------
1795
1796    ! ---------------------------------------
1797
1798    ! Means
1799
1800    DO i = 1, klon
1801      IF (wk_adv(i)) THEN !!! nrlmd
1802        av_thx(i) = sum_thx(i)/hw0(i)
1803        av_tx(i) = sum_tx(i)/hw0(i)
1804        av_qx(i) = sum_qx(i)/hw0(i)
1805        av_thvx(i) = sum_thvx(i)/hw0(i)
1806        av_dth(i) = sum_dth(i)/hw0(i)
1807        av_dq(i) = sum_dq(i)/hw0(i)
1808        av_dtdwn(i) = sum_dtdwn(i)/hw0(i)
1809        av_dqdwn(i) = sum_dqdwn(i)/hw0(i)
1810
1811        wape(i) = -RG*hw0(i)*(av_dth(i)+epsim1*(av_thx(i)*av_dq(i) + &
1812                              av_dth(i)*av_qx(i)+av_dth(i)*av_dq(i)))/av_thvx(i)
1813      END IF
1814    END DO
1815
1816
1817    ! Filter out bad wakes
1818
1819    DO k = 1, klev
1820      DO i = 1, klon
1821        IF (wk_adv(i)) THEN !!! nrlmd
1822          IF (wape(i)<0.) THEN
1823            deltatw(i, k) = 0.
1824            deltaqw(i, k) = 0.
1825            dth(i, k) = 0.
1826            d_deltatw2(i,k) = -deltatw0(i,k)
1827            d_deltaqw2(i,k) = -deltaqw0(i,k)
1828          END IF
1829        END IF
1830      END DO
1831    END DO
1832
1833    DO i = 1, klon
1834      IF (wk_adv(i)) THEN !!! nrlmd
1835        IF (wape(i)<0.) THEN
1836          wape(i) = 0.
1837          cstar(i) = 0.
1838          hw(i) = hwmin
1839!jyg<
1840!!          sigmaw(i) = max(sigmad, sigd_con(i))
1841          sigmaw_targ = max(sigmad, sigd_con(i))
1842          d_sig_bnd2(i) = d_sig_bnd2(i) + sigmaw_targ - sigmaw(i)
1843          d_sigmaw2(i) = d_sigmaw2(i) + sigmaw_targ - sigmaw(i)
1844          sigmaw(i) = sigmaw_targ
1845!
1846          d_asig_bnd2(i) = d_asig_bnd2(i) + sigmaw_targ - asigmaw(i)
1847          d_asigmaw2(i) = d_asigmaw2(i) + sigmaw_targ - asigmaw(i)
1848          asigmaw(i) = sigmaw_targ
1849!>jyg
1850          fip(i) = 0.
1851          gwake(i) = .FALSE.
1852        ELSE
1853          cstar(i) = stark*sqrt(2.*wape(i))
1854          gwake(i) = .TRUE.
1855        END IF
1856      END IF
1857    END DO
1858  !
1859  ! ------------------------------------------------------------------------
1860  !
1861  END DO   ! isubstep end sub-timestep loop
1862  !
1863  ! ------------------------------------------------------------------------
1864  ! ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1865  ! ------------------------------------------------------------------------
1866  !
1867
1868#ifdef IOPHYS_WK
1869    IF (.not.phys_sub) CALL iophys_ecrit('wape_b',1,'wape_b','J/kg',wape)
1870#endif
1871  IF (prt_level>=10) THEN
1872    PRINT *, 'wake-5, sigmaw(igout), cstar(igout), wape(igout), ptop(igout) ', &
1873                      sigmaw(igout), cstar(igout), wape(igout), ptop(igout)
1874  ENDIF
1875
1876
1877  ! ----------------------------------------------------------
1878  ! Determine wake final state; recompute wape, cstar, ktop;
1879  ! filter out bad wakes.
1880  ! ----------------------------------------------------------
1881
1882  ! 2.1 - Undisturbed area and Wake integrals
1883  ! ---------------------------------------------------------
1884
1885  DO i = 1, klon
1886    ! cc nrlmd       if (wk_adv(i)) then !!! nrlmd
1887    IF (ok_qx_qw(i)) THEN
1888      ! cc
1889      z(i) = 0.
1890      sum_thx(i) = 0.
1891      sum_tx(i) = 0.
1892      sum_qx(i) = 0.
1893      sum_thvx(i) = 0.
1894      sum_dth(i) = 0.
1895      sum_half_dth(i) = 0.
1896      sum_dq(i) = 0.
1897      sum_dtdwn(i) = 0.
1898      sum_dqdwn(i) = 0.
1899
1900      av_thx(i) = 0.
1901      av_tx(i) = 0.
1902      av_qx(i) = 0.
1903      av_thvx(i) = 0.
1904      av_dth(i) = 0.
1905      av_dq(i) = 0.
1906      av_dtdwn(i) = 0.
1907      av_dqdwn(i) = 0.
1908
1909      dthmin(i) = -delta_t_min
1910    END IF
1911  END DO
1912  ! Potential temperatures and humidity
1913  ! ----------------------------------------------------------
1914
1915  DO k = 1, klev
1916    DO i = 1, klon
1917      ! cc nrlmd       IF ( wk_adv(i)) THEN
1918      IF (ok_qx_qw(i)) THEN
1919        ! cc
1920        rho(i, k) = p(i, k)/(RD*tb(i,k))
1921        IF (k==1) THEN
1922          rhoh(i, k) = ph(i, k)/(RD*tb(i,k))
1923          zhh(i, k) = 0
1924        ELSE
1925          rhoh(i, k) = ph(i, k)*2./(RD*(tb(i,k)+tb(i,k-1)))
1926          zhh(i, k) = (ph(i,k)-ph(i,k-1))/(-rhoh(i,k)*RG) + zhh(i, k-1)
1927        END IF
1928        thb(i, k) = tb(i, k)/ppi(i, k)
1929        thx(i, k) = (tb(i,k)-deltatw(i,k)*sigmaw(i))/ppi(i, k)
1930        tx(i, k) = tb(i, k) - deltatw(i, k)*sigmaw(i)
1931        qx(i, k) = qb(i, k) - deltaqw(i, k)*sigmaw(i)
1932        dth(i, k) = deltatw(i, k)/ppi(i, k)
1933      END IF
1934    END DO
1935  END DO
1936
1937  ! Integrals (and wake top level number)
1938  ! -----------------------------------------------------------
1939
1940  ! Initialize sum_thvx to 1st level virt. pot. temp.
1941
1942  DO i = 1, klon
1943    ! cc nrlmd       IF ( wk_adv(i)) THEN
1944    IF (ok_qx_qw(i)) THEN
1945      ! cc
1946      z(i) = 1.
1947      dz(i) = 1.
1948      dz_half(i) = 1.
1949      sum_thvx(i) = thx(i, 1)*(1.+epsim1*qx(i,1))*dz(i)
1950      sum_dth(i) = 0.
1951    END IF
1952  END DO
1953
1954  DO k = 1, klev
1955    DO i = 1, klon
1956      ! cc nrlmd       IF ( wk_adv(i)) THEN
1957      IF (ok_qx_qw(i)) THEN
1958        ! cc
1959        dz(i) = -(amax1(ph(i,k+1),ptop(i))-ph(i,k))/(rho(i,k)*RG)
1960        dz_half(i) = -(amax1(ph(i,k+1),0.5*(ptop(i)+ph(i,1)))-ph(i,k))/(rho(i,k)*RG)
1961        IF (dz(i)>0) THEN
1962          z(i) = z(i) + dz(i)
1963          sum_thx(i) = sum_thx(i) + thx(i, k)*dz(i)
1964          sum_tx(i) = sum_tx(i) + tx(i, k)*dz(i)
1965          sum_qx(i) = sum_qx(i) + qx(i, k)*dz(i)
1966          sum_thvx(i) = sum_thvx(i) + thx(i, k)*(1.+epsim1*qx(i,k))*dz(i)
1967          sum_dth(i) = sum_dth(i) + dth(i, k)*dz(i)
1968          sum_dq(i) = sum_dq(i) + deltaqw(i, k)*dz(i)
1969          sum_dtdwn(i) = sum_dtdwn(i) + dtdwn(i, k)*dz(i)
1970          sum_dqdwn(i) = sum_dqdwn(i) + dqdwn(i, k)*dz(i)
1971!
1972          dthmin(i) = min(dthmin(i), dth(i,k))
1973        END IF
1974        IF (dz_half(i)>0) THEN
1975          sum_half_dth(i) = sum_half_dth(i) + dth(i, k)*dz_half(i)
1976        END IF
1977      END IF
1978    END DO
1979  END DO
1980
1981  DO i = 1, klon
1982    ! cc nrlmd       IF ( wk_adv(i)) THEN
1983    IF (ok_qx_qw(i)) THEN
1984      ! cc
1985      hw0(i) = z(i)
1986    END IF
1987  END DO
1988
1989  ! - WAPE and mean forcing computation
1990  ! -------------------------------------------------------------
1991
1992  ! Means
1993
1994  DO i = 1, klon
1995    ! cc nrlmd       IF ( wk_adv(i)) THEN
1996    IF (ok_qx_qw(i)) THEN
1997      ! cc
1998      av_thx(i) = sum_thx(i)/hw0(i)
1999      av_tx(i) = sum_tx(i)/hw0(i)
2000      av_qx(i) = sum_qx(i)/hw0(i)
2001      av_thvx(i) = sum_thvx(i)/hw0(i)
2002      av_dth(i) = sum_dth(i)/hw0(i)
2003      av_dq(i) = sum_dq(i)/hw0(i)
2004      av_dtdwn(i) = sum_dtdwn(i)/hw0(i)
2005      av_dqdwn(i) = sum_dqdwn(i)/hw0(i)
2006
2007      wape2(i) = -RG*hw0(i)*(av_dth(i)+epsim1*(av_thx(i)*av_dq(i) + &
2008                             av_dth(i)*av_qx(i)+av_dth(i)*av_dq(i)))/av_thvx(i)
2009    END IF
2010  END DO
2011#ifdef IOPHYS_WK
2012  IF (.not.phys_sub) CALL iophys_ecrit('wape2_a',1,'wape2_a','J/kg',wape2)
2013#endif
2014
2015
2016  ! Prognostic variable update
2017  ! ------------------------------------------------------------
2018
2019  ! Filter out bad wakes
2020
2021  IF (iflag_wk_check_trgl>=1) THEN
2022    ! Check triangular shape of dth profile
2023    DO i = 1, klon
2024      IF (ok_qx_qw(i)) THEN
2025        !! print *,'wake, hw0(i), dthmin(i) ', hw0(i), dthmin(i)
2026        !! print *,'wake, 2.*sum_dth(i)/(hw0(i)*dthmin(i)) ', &
2027        !!                2.*sum_dth(i)/(hw0(i)*dthmin(i))
2028        !! print *,'wake, sum_half_dth(i), sum_dth(i) ', &
2029        !!                sum_half_dth(i), sum_dth(i)
2030        IF ((hw0(i) < 1.) .or. (dthmin(i) >= -delta_t_min) ) THEN
2031          wape2(i) = -1.
2032          !! print *,'wake, rej 1'
2033        ELSE IF (iflag_wk_check_trgl==1.AND.abs(2.*sum_dth(i)/(hw0(i)*dthmin(i)) - 1.) > 0.5) THEN
2034          wape2(i) = -1.
2035          !! print *,'wake, rej 2'
2036        ELSE IF (abs(sum_half_dth(i)) < 0.5*abs(sum_dth(i)) ) THEN
2037          wape2(i) = -1.
2038          !! print *,'wake, rej 3'
2039        END IF
2040      END IF
2041    END DO
2042  END IF
2043#ifdef IOPHYS_WK
2044  IF (.not.phys_sub) CALL iophys_ecrit('wape2_b',1,'wape2_b','J/kg',wape2)
2045#endif
2046
2047
2048  DO k = 1, klev
2049    DO i = 1, klon
2050      ! cc nrlmd        IF ( wk_adv(i) .AND. wape2(i) .LT. 0.) THEN
2051      IF (ok_qx_qw(i) .AND. wape2(i)<0.) THEN
2052        ! cc
2053        deltatw(i, k) = 0.
2054        deltaqw(i, k) = 0.
2055        dth(i, k) = 0.
2056        d_deltatw2(i,k) = -deltatw0(i,k)
2057        d_deltaqw2(i,k) = -deltaqw0(i,k)
2058      END IF
2059    END DO
2060  END DO
2061
2062
2063  DO i = 1, klon
2064    ! cc nrlmd       IF ( wk_adv(i)) THEN
2065    IF (ok_qx_qw(i)) THEN
2066      ! cc
2067      IF (wape2(i)<0.) THEN
2068        wape2(i) = 0.
2069        cstar2(i) = 0.
2070        hw(i) = hwmin
2071!jyg<
2072!!      sigmaw(i) = amax1(sigmad, sigd_con(i))
2073      sigmaw_targ = max(sigmad, sigd_con(i))
2074      d_sig_bnd2(i) = d_sig_bnd2(i) + sigmaw_targ - sigmaw(i)
2075      d_sigmaw2(i) = d_sigmaw2(i) + sigmaw_targ - sigmaw(i)
2076      sigmaw(i) = sigmaw_targ
2077!
2078      d_asig_bnd2(i) = d_asig_bnd2(i) + sigmaw_targ - asigmaw(i)
2079      d_asigmaw2(i) = d_asigmaw2(i) + sigmaw_targ - asigmaw(i)
2080      asigmaw(i) = sigmaw_targ
2081!>jyg
2082        fip(i) = 0.
2083        gwake(i) = .FALSE.
2084      ELSE
2085        IF (prt_level>=10) PRINT *, 'wape2>0'
2086        cstar2(i) = stark*sqrt(2.*wape2(i))
2087        gwake(i) = .TRUE.
2088      END IF
2089#ifdef IOPHYS_WK
2090  IF (.not.phys_sub) CALL iophys_ecrit('cstar2',1,'cstar2','J/kg',cstar2)
2091#endif
2092    END IF  ! (ok_qx_qw(i))
2093  END DO
2094
2095  DO i = 1, klon
2096    ! cc nrlmd       IF ( wk_adv(i)) THEN
2097    IF (ok_qx_qw(i)) THEN
2098      ! cc
2099      ktopw(i) = ktop(i)
2100    END IF
2101  END DO
2102
2103  DO i = 1, klon
2104    ! cc nrlmd       IF ( wk_adv(i)) THEN
2105    IF (ok_qx_qw(i)) THEN
2106      ! cc
2107      IF (ktopw(i)>0 .AND. gwake(i)) THEN
2108
2109        ! jyg1     Utilisation d'un h_efficace constant ( ~ feeding layer)
2110        ! cc       heff = 600.
2111        ! Utilisation de la hauteur hw
2112        ! c       heff = 0.7*hw
2113        heff(i) = hw(i)
2114
2115        fip(i) = 0.5*rho(i, ktopw(i))*cstar2(i)**3*heff(i)*2* &
2116          sqrt(sigmaw(i)*wdens(i)*3.14)
2117        fip(i) = alpk*fip(i)
2118        ! jyg2
2119      ELSE
2120        fip(i) = 0.
2121      END IF
2122    END IF
2123  END DO
2124    IF (iflag_wk_pop_dyn >= 3) THEN
2125#ifdef IOPHYS_WK
2126      IF (.not.phys_sub) THEN
2127       CALL iophys_ecrit('fip',1,'fip','J/kg',fip)
2128       CALL iophys_ecrit('hw',1,'hw','J/kg',hw)
2129       CALL iophys_ecrit('ptop',1,'ptop','J/kg',ptop)
2130       CALL iophys_ecrit('wdens',1,'wdens','J/kg',wdens)
2131       CALL iophys_ecrit('awdens',1,'awdens','m',awdens)
2132       CALL iophys_ecrit('sigmaw',1,'sigmaw','m',sigmaw)
2133       CALL iophys_ecrit('asigmaw',1,'asigmaw','m',asigmaw)
2134!   
2135       CALL iophys_ecrit('rad_wk',1,'rad_wk','J/kg',rad_wk)
2136       CALL iophys_ecrit('arad_wk',1,'arad_wk','J/kg',arad_wk)
2137       CALL iophys_ecrit('irad_wk',1,'irad_wk','J/kg',irad_wk)
2138!   
2139       call iophys_ecrit('d_wdens2',1,'d_wdens2','',d_wdens2)
2140       call iophys_ecrit('d_dens_gen2',1,'d_dens_gen2','',d_dens_gen2)
2141       call iophys_ecrit('d_dens_death2',1,'d_dens_death2','',d_dens_death2)
2142       call iophys_ecrit('d_dens_col2',1,'d_dens_col2','',d_dens_col2)
2143       call iophys_ecrit('d_dens_bnd2',1,'d_dens_bnd2','',d_dens_bnd2)
2144!   
2145       call iophys_ecrit('d_awdens2',1,'d_awdens2','',d_awdens2)
2146       call iophys_ecrit('d_adens_death2',1,'d_adens_death2','',d_adens_death2)
2147       call iophys_ecrit('d_adens_icol2',1,'d_adens_icol2','',d_adens_icol2)
2148       call iophys_ecrit('d_adens_acol2',1,'d_adens_acol2','',d_adens_acol2)
2149       call iophys_ecrit('d_adens_bnd2',1,'d_adens_bnd2','',d_adens_bnd2)
2150!   
2151       CALL iophys_ecrit('d_sigmaw2',1,'d_sigmaw2','',d_sigmaw2)
2152       CALL iophys_ecrit('d_sig_gen2',1,'d_sig_gen2','m',d_sig_gen2)
2153       CALL iophys_ecrit('d_sig_spread2',1,'d_sig_spread2','',d_sig_spread2)
2154       CALL iophys_ecrit('d_sig_col2',1,'d_sig_col2','',d_sig_col2)
2155       CALL iophys_ecrit('d_sig_death2',1,'d_sig_death2','',d_sig_death2)
2156       CALL iophys_ecrit('d_sig_bnd2',1,'d_sig_bnd2','',d_sig_bnd2)
2157!   
2158       CALL iophys_ecrit('d_asigmaw2',1,'d_asigmaw2','',d_asigmaw2)
2159       CALL iophys_ecrit('d_asig_spread2',1,'d_asig_spread2','m',d_asig_spread2)
2160       CALL iophys_ecrit('d_asig_aicol2',1,'d_asig_aicol2','m',d_asig_aicol2)
2161       CALL iophys_ecrit('d_asig_iicol2',1,'d_asig_iicol2','m',d_asig_iicol2)
2162       CALL iophys_ecrit('d_asig_death2',1,'d_asig_death2','m',d_asig_death2)
2163       CALL iophys_ecrit('d_asig_bnd2',1,'d_asig_bnd2','m',d_asig_bnd2)
2164      ENDIF  ! (.not.phys_sub)
2165#endif
2166    ENDIF  ! (iflag_wk_pop_dyn >= 3)
2167  ! Limitation de sigmaw
2168
2169  ! cc nrlmd
2170  ! DO i=1,klon
2171  ! IF (OK_qx_qw(i)) THEN
2172  ! IF (sigmaw(i).GE.sigmaw_max) sigmaw(i)=sigmaw_max
2173  ! ENDIF
2174  ! ENDDO
2175  ! cc
2176
2177  !jyg<
2178  IF (iflag_wk_pop_dyn >= 1) THEN
2179    DO i = 1, klon
2180      kill_wake(i) = ((wape(i)>=wape2(i)) .AND. (wape2(i)<=wapecut)) .OR. (ktopw(i)<=2) .OR. &
2181          .NOT. ok_qx_qw(i) .OR. (wdens(i) < wdensthreshold)
2182!!          .NOT. ok_qx_qw(i) .OR. (wdens(i) < 2.*wdensmin)
2183    ENDDO
2184  ELSE  ! (iflag_wk_pop_dyn >= 1)
2185    DO i = 1, klon
2186      kill_wake(i) = ((wape(i)>=wape2(i)) .AND. (wape2(i)<=wapecut)) .OR. (ktopw(i)<=2) .OR. &
2187          .NOT. ok_qx_qw(i)
2188    ENDDO
2189  ENDIF  ! (iflag_wk_pop_dyn >= 1)
2190  !>jyg
2191
2192  DO k = 1, klev
2193    DO i = 1, klon
2194!!jyg      IF (((wape(i)>=wape2(i)) .AND. (wape2(i)<=wapecut)) .OR. (ktopw(i)<=2) .OR. &
2195!!jyg          .NOT. ok_qx_qw(i)) THEN
2196      IF (kill_wake(i)) THEN
2197        ! cc
2198        dtls(i, k) = 0.
2199        dqls(i, k) = 0.
2200        deltatw(i, k) = 0.
2201        deltaqw(i, k) = 0.
2202        d_deltatw2(i,k) = -deltatw0(i,k)
2203        d_deltaqw2(i,k) = -deltaqw0(i,k)
2204      END IF  ! (kill_wake(i))
2205    END DO
2206  END DO
2207
2208  DO i = 1, klon
2209!!jyg    IF (((wape(i)>=wape2(i)) .AND. (wape2(i)<=wapecut)) .OR. (ktopw(i)<=2) .OR. &
2210!!jyg        .NOT. ok_qx_qw(i)) THEN
2211      IF (kill_wake(i)) THEN
2212      ktopw(i) = 0
2213      wape(i) = 0.
2214      cstar(i) = 0.
2215!!jyg   Outside subroutine "Wake" hw, wdens sigmaw and asigmaw are zero when there are no wakes
2216!!      hw(i) = hwmin                       !jyg
2217!!      sigmaw(i) = sigmad                  !jyg
2218      hw(i) = 0.                            !jyg
2219      fip(i) = 0.
2220!
2221!!      sigmaw(i) = 0.                        !jyg
2222      sigmaw_targ = 0.
2223      d_sig_bnd2(i) = d_sig_bnd2(i) + sigmaw_targ - sigmaw(i)
2224!!      d_sigmaw2(i) = d_sigmaw2(i) + sigmaw_targ - sigmaw(i)
2225      d_sigmaw2(i) = sigmaw_targ - sigmaw_in(i)      ! _in = correction jyg 20220124
2226      sigmaw(i) = sigmaw_targ
2227!
2228      IF (iflag_wk_pop_dyn >= 3) THEN
2229        sigmaw_targ = 0.
2230        d_asig_bnd2(i) = d_asig_bnd2(i) + sigmaw_targ - asigmaw(i)
2231!!        d_sigmaw2(i) = d_sigmaw2(i) + sigmaw_targ - sigmaw(i)
2232        d_asigmaw2(i) = sigmaw_targ - asigmaw_in(i)      ! _in = correction jyg 20220124
2233        asigmaw(i) = sigmaw_targ
2234      ELSE
2235        asigmaw(i) = 0.
2236      ENDIF ! (iflag_wk_pop_dyn >= 3)
2237!
2238      IF (iflag_wk_pop_dyn >= 1) THEN
2239!!        awdens(i) = 0.
2240!!        wdens(i) = 0.
2241        wdens_targ = 0.
2242        d_dens_bnd2(i) = d_dens_bnd2(i) + wdens_targ - wdens(i)
2243!!        d_wdens2(i) = wdens_targ - wdens(i)
2244        d_wdens2(i) = wdens_targ - wdens_in(i)      ! jyg 20220916
2245        wdens(i) = wdens_targ
2246        wdens_targ = 0.
2247!!jyg: bug fix : the d_adens_bnd2 computation must be before the update of awdens.
2248        IF (iflag_wk_pop_dyn >= 2) THEN
2249            d_adens_bnd2(i) = d_adens_bnd2(i) + wdens_targ - awdens(i)
2250        ENDIF ! (iflag_wk_pop_dyn >= 2)
2251!!        d_awdens2(i) = wdens_targ - awdens(i)
2252        d_awdens2(i) = wdens_targ - awdens_in(i)    ! jyg 20220916
2253        awdens(i) = wdens_targ
2254!!        IF (iflag_wk_pop_dyn == 2) THEN
2255!!            d_adens_bnd2(i) = d_adens_bnd2(i) + wdens_targ - awdens(i)
2256!!        ENDIF ! (iflag_wk_pop_dyn == 2)
2257      ENDIF  ! (iflag_wk_pop_dyn >= 1)
2258    ELSE  ! (kill_wake(i))
2259      wape(i) = wape2(i)
2260      cstar(i) = cstar2(i)
2261    END IF  ! (kill_wake(i))
2262    ! c        print*,'wape wape2 ktopw OK_qx_qw =',
2263    ! c     $          wape(i),wape2(i),ktopw(i),OK_qx_qw(i)
2264  END DO
2265
2266  IF (prt_level>=10) THEN
2267    PRINT *, 'wake-6, wape wape2 ktopw OK_qx_qw =', &
2268                      wape(igout),wape2(igout),ktopw(igout),OK_qx_qw(igout)
2269  ENDIF
2270#ifdef IOPHYS_WK
2271  IF (.not.phys_sub) CALL iophys_ecrit('wape_c',1,'wape_c','J/kg',wape)
2272#endif
2273
2274
2275  ! -----------------------------------------------------------------
2276  ! Get back to tendencies per second
2277
2278  DO k = 1, klev
2279    DO i = 1, klon
2280
2281      ! cc nrlmd        IF ( wk_adv(i) .AND. k .LE. kupper(i)) THEN
2282!jyg<
2283!!      IF (ok_qx_qw(i) .AND. k<=kupper(i)) THEN
2284      IF (ok_qx_qw(i)) THEN
2285!>jyg
2286        ! cc
2287        dtls(i, k) = dtls(i, k)/dtime
2288        dqls(i, k) = dqls(i, k)/dtime
2289        d_deltatw2(i, k) = d_deltatw2(i, k)/dtime
2290        d_deltaqw2(i, k) = d_deltaqw2(i, k)/dtime
2291        d_deltat_gw(i, k) = d_deltat_gw(i, k)/dtime
2292        ! c      print*,'k,dqls,omg,entr,detr',k,dqls(i,k),omg(i,k),entr(i,k)
2293        ! c     $         ,death_rate(i)*sigmaw(i)
2294      END IF
2295    END DO
2296  END DO
2297!jyg<
2298  IF (iflag_wk_pop_dyn >= 1) THEN
2299    DO i = 1, klon
2300        IF (ok_qx_qw(i)) THEN
2301      d_sig_gen2(i) = d_sig_gen2(i)/dtime
2302      d_sig_death2(i) = d_sig_death2(i)/dtime
2303      d_sig_col2(i) = d_sig_col2(i)/dtime
2304      d_sig_spread2(i) = d_sig_spread2(i)/dtime
2305      d_sig_bnd2(i) = d_sig_bnd2(i)/dtime
2306      d_sigmaw2(i) = d_sigmaw2(i)/dtime
2307!
2308      d_dens_gen2(i) = d_dens_gen2(i)/dtime
2309      d_dens_death2(i) = d_dens_death2(i)/dtime
2310      d_dens_col2(i) = d_dens_col2(i)/dtime
2311      d_dens_bnd2(i) = d_dens_bnd2(i)/dtime
2312      d_awdens2(i) = d_awdens2(i)/dtime
2313      d_wdens2(i) = d_wdens2(i)/dtime
2314        ENDIF
2315    ENDDO
2316    IF (iflag_wk_pop_dyn >= 2) THEN
2317      DO i = 1, klon
2318        IF (ok_qx_qw(i)) THEN
2319        d_adens_death2(i) = d_adens_death2(i)/dtime
2320        d_adens_icol2(i) = d_adens_icol2(i)/dtime
2321        d_adens_acol2(i) = d_adens_acol2(i)/dtime
2322        d_adens_bnd2(i) = d_adens_bnd2(i)/dtime
2323        ENDIF
2324      ENDDO
2325      IF (iflag_wk_pop_dyn == 3) THEN
2326       DO i = 1, klon
2327          IF (ok_qx_qw(i)) THEN
2328        d_asig_death2(i)  = d_asig_death2(i)/dtime
2329        d_asig_iicol2(i)  = d_asig_iicol2(i)/dtime
2330        d_asig_aicol2(i)  = d_asig_aicol2(i)/dtime
2331        d_asig_spread2(i) = d_asig_spread2(i)/dtime
2332        d_asig_bnd2(i) = d_asig_bnd2(i)/dtime
2333          ENDIF
2334       ENDDO
2335      ENDIF ! (iflag_wk_pop_dyn == 3) 
2336    ENDIF ! (iflag_wk_pop_dyn >= 2) 
2337  ENDIF  ! (iflag_wk_pop_dyn >= 1)
2338 
2339!>jyg
2340
2341 RETURN
2342END SUBROUTINE wake
2343
2344SUBROUTINE wake_vec_modulation(nlon, nl, wk_adv, epsilon_loc, qb, d_qb, deltaqw, &
2345    d_deltaqw, sigmaw, d_sigmaw, alpha)
2346  ! ------------------------------------------------------
2347  ! Dtermination du coefficient alpha tel que les tendances
2348  ! corriges alpha*d_G, pour toutes les grandeurs G, correspondent
2349  ! a une humidite positive dans la zone (x) et dans la zone (w).
2350  ! ------------------------------------------------------
2351  IMPLICIT NONE
2352
2353  ! Input
2354  REAL qb(nlon, nl), d_qb(nlon, nl)
2355  REAL deltaqw(nlon, nl), d_deltaqw(nlon, nl)
2356  REAL sigmaw(nlon), d_sigmaw(nlon)
2357  LOGICAL wk_adv(nlon)
2358  INTEGER nl, nlon
2359  ! Output
2360  REAL alpha(nlon)
2361  ! Internal variables
2362  REAL zeta(nlon, nl)
2363  REAL alpha1(nlon)
2364  REAL x, a, b, c, discrim
2365  REAL epsilon_loc
2366  INTEGER i,k
2367
2368  DO k = 1, nl
2369    DO i = 1, nlon
2370      IF (wk_adv(i)) THEN
2371        IF ((deltaqw(i,k)+d_deltaqw(i,k))>=0.) THEN
2372          zeta(i, k) = 0.
2373        ELSE
2374          zeta(i, k) = 1.
2375        END IF
2376      END IF
2377    END DO
2378    DO i = 1, nlon
2379      IF (wk_adv(i)) THEN
2380        x = qb(i, k) + (zeta(i,k)-sigmaw(i))*deltaqw(i, k) + d_qb(i, k) + &
2381          (zeta(i,k)-sigmaw(i))*d_deltaqw(i, k) - d_sigmaw(i) * &
2382          (deltaqw(i,k)+d_deltaqw(i,k))
2383        a = -d_sigmaw(i)*d_deltaqw(i, k)
2384        b = d_qb(i, k) + (zeta(i,k)-sigmaw(i))*d_deltaqw(i, k) - &
2385          deltaqw(i, k)*d_sigmaw(i)
2386        c = qb(i, k) + (zeta(i,k)-sigmaw(i))*deltaqw(i, k) + epsilon_loc
2387        discrim = b*b - 4.*a*c
2388        ! print*, 'x, a, b, c, discrim', x, a, b, c, discrim
2389        IF (a+b>=0.) THEN !! Condition suffisante pour la positivite de ovap
2390          alpha1(i) = 1.
2391        ELSE
2392          IF (x>=0.) THEN
2393            alpha1(i) = 1.
2394          ELSE
2395            IF (a>0.) THEN
2396              alpha1(i) = 0.9*min( (2.*c)/(-b+sqrt(discrim)),  &
2397                                   (-b+sqrt(discrim))/(2.*a) )
2398            ELSE IF (a==0.) THEN
2399              alpha1(i) = 0.9*(-c/b)
2400            ELSE
2401              ! print*,'a,b,c discrim',a,b,c discrim
2402              alpha1(i) = 0.9*max( (2.*c)/(-b+sqrt(discrim)),  &
2403                                   (-b+sqrt(discrim))/(2.*a))
2404            END IF
2405          END IF
2406        END IF
2407        alpha(i) = min(alpha(i), alpha1(i))
2408      END IF
2409    END DO
2410  END DO
2411
2412  RETURN
2413END SUBROUTINE wake_vec_modulation
2414
2415
2416
2417SUBROUTINE pkupper (klon, klev, ptop, ph, p, pupper, kupper, &
2418                    dth, hw_, rho, delta_t_min, &
2419                    ktop, wk_adv, h_zzz, ptop1, ktop1)
2420
2421USE lmdz_wake_ini , ONLY : wk_pupper
2422USE lmdz_wake_ini , ONLY : RG
2423USE lmdz_wake_ini , ONLY : hwmin
2424
2425IMPLICIT NONE
2426
2427INTEGER,                              INTENT(IN) :: klon,klev
2428REAL,       DIMENSION (klon,klev+1) , INTENT(IN) :: ph, p
2429REAL,       DIMENSION (klon,klev+1) , INTENT(IN) :: rho
2430LOGICAL,    DIMENSION (klon)        , INTENT(IN) :: wk_adv
2431REAL,       DIMENSION (klon,klev+1) , INTENT(IN) :: dth
2432REAL,                                 INTENT(IN) :: delta_t_min
2433
2434REAL,       DIMENSION (klon)  , INTENT(OUT)        :: hw_
2435REAL,       DIMENSION (klon)  , INTENT(OUT)        :: ptop
2436INTEGER,    DIMENSION (klon)  , INTENT(OUT)        :: Ktop
2437REAL,       DIMENSION (klon)  , INTENT(OUT)        :: pupper
2438INTEGER,    DIMENSION (klon)  , INTENT(OUT)        :: kupper
2439REAL,       DIMENSION (klon)  , INTENT(OUT)        :: h_zzz       !!
2440REAL,       DIMENSION (klon)  , INTENT(OUT)        :: Ptop1      !!
2441INTEGER,    DIMENSION (klon)  , INTENT(OUT)        :: ktop1      !!
2442
2443INTEGER :: i,k
2444
2445REAL,     DIMENSION (klon)         :: dthmin
2446REAL,     DIMENSION (klon)         :: ptop_provis,ptop_new
2447REAL,     DIMENSION (klon)         :: z, dz
2448REAL,     DIMENSION (klon)         :: sum_dth
2449
2450INTEGER,     DIMENSION (klon)                     :: k_ptop_provis
2451REAL,     DIMENSION (klon)                        :: omega        !!
2452REAL,     DIMENSION (klon,klev+1)                 :: int_dth      !!
2453REAL,     DIMENSION (klon,klev+1)                 :: dzz          !!
2454REAL,     DIMENSION (klon,klev+1)                 :: zzz          !!
2455REAL,     DIMENSION (klon)                 :: frac_int_dth          !!
2456REAL                                              :: epsil        !!
2457REAL                                              :: ddd!!
2458
2459LOGICAL :: new_ptop
2460
2461INTEGER, SAVE :: ipas=0
2462
2463
2464
2465!INTEGER, SAVE :: compte=0
2466
2467! LJYF : a priori z, dz sum_dth sont aussi des variables internes
2468! Les eliminer apres verification convergence numerique
2469
2470!compte=compte+1
2471!print*,'compte=',compte
2472
2473new_ptop=.false.
2474
2475 
2476    ! Determine Ptop from buoyancy integral
2477    ! ---------------------------------------
2478
2479    ! -     1/ Pressure of the level where dth changes sign.
2480    !print*,'WAKE LJYF'
2481
2482    DO i = 1, klon
2483        ptop_provis(i) = ph(i, 1)
2484        k_ptop_provis(i) = 1
2485    END DO
2486
2487    DO k = 2, klev
2488      DO i = 1, klon
2489        IF (wk_adv(i) .AND. ptop_provis(i)==ph(i,1) .AND. &
2490! LJYF changer :           dth(i,k)>=-delta_t_min .AND. dth(i,k-1)<-delta_t_min) THEN
2491            dth(i,k)>-delta_t_min .AND. dth(i,k-1)<-delta_t_min) THEN
2492          ptop_provis(i) = ((dth(i,k)+delta_t_min)*p(i,k-1) - &
2493                            (dth(i,k-1)+delta_t_min)*p(i,k))/(dth(i,k)-dth(i,k-1))
2494          k_ptop_provis(i) = k
2495        END IF
2496      END DO
2497    END DO
2498
2499    ! -     2/ dth integral
2500
2501    DO i = 1, klon
2502      IF (wk_adv(i)) THEN !!! nrlmd
2503        sum_dth(i) = 0.
2504        dthmin(i) = -delta_t_min
2505        z(i) = 0.
2506      END IF
2507    END DO
2508
2509    DO k = 1, klev
2510      DO i = 1, klon
2511        IF (wk_adv(i)) THEN
2512          dz(i) = -(amax1(ph(i,k+1),ptop_provis(i))-ph(i,k))/(rho(i,k)*RG)
2513          IF (dz(i)>0) THEN
2514            z(i) = z(i) + dz(i)
2515            sum_dth(i) = sum_dth(i) + dth(i, k)*dz(i)
2516            dthmin(i) = amin1(dthmin(i), dth(i,k))
2517          END IF
2518        END IF
2519      END DO
2520    END DO
2521
2522    ! -     3/ height of triangle with area= sum_dth and base = dthmin
2523
2524    DO i = 1, klon
2525      IF (wk_adv(i)) THEN
2526        hw_(i) = 2.*sum_dth(i)/amin1(dthmin(i), -0.5)
2527        hw_(i) = amax1(hwmin, hw_(i))
2528      END IF
2529    END DO
2530
2531    ! -     4/ now, get Ptop
2532
2533    DO i = 1, klon
2534      IF (wk_adv(i)) THEN !!! nrlmd
2535        ktop(i) = 0
2536        z(i) = 0.
2537      END IF
2538    END DO
2539
2540    DO k = 1, klev
2541      DO i = 1, klon
2542        IF (wk_adv(i)) THEN
2543          dz(i) = amin1(-(ph(i,k+1)-ph(i,k))/(rho(i,k)*RG), hw_(i)-z(i))
2544          IF (dz(i)>0) THEN
2545            z(i) = z(i) + dz(i)
2546            ptop(i) = ph(i, k) - rho(i, k)*RG*dz(i)
2547            ktop(i) = k
2548          END IF
2549        END IF
2550      END DO
2551    END DO
2552
2553    ! 4.5/Correct ktop and ptop
2554
2555    DO i = 1, klon
2556        ptop_new(i) = ptop(i)
2557    END DO
2558
2559    DO k = klev, 2, -1
2560      DO i = 1, klon
2561        ! IM v3JYG; IF (k .GE. ktop(i)
2562        IF (wk_adv(i) .AND. k<=ktop(i) .AND. ptop_new(i)==ptop(i) .AND. &
2563! LJYF changer :           dth(i,k)>=-delta_t_min .AND. dth(i,k-1)<-delta_t_min) THEN
2564            dth(i,k)>=-delta_t_min .AND. dth(i,k-1)<-delta_t_min) THEN
2565          ptop_new(i) = ((dth(i,k)+delta_t_min)*p(i,k-1) - &
2566                         (dth(i,k-1)+delta_t_min)*p(i,k))/(dth(i,k)-dth(i,k-1))
2567        END IF
2568      END DO
2569    END DO
2570
2571
2572    DO i = 1, klon
2573        ptop(i) = ptop_new(i)
2574    END DO
2575
2576    DO k = klev, 1, -1
2577      DO i = 1, klon
2578        IF (wk_adv(i)) THEN !!! nrlmd
2579          IF (ph(i,k+1)<ptop(i)) ktop(i) = k
2580        END IF
2581      END DO
2582    END DO
2583 
2584!  IF (prt_level>=10) THEN
2585!    PRINT *, 'wake-3, ktop(igout), kupper(igout) ', ktop(igout), kupper(igout)
2586!  ENDIF
2587
2588    ! -----------------------------------------------------------------------
2589    ! nouveau calcul de hw et ptop
2590    ! -----------------------------------------------------------------------
2591if (new_ptop) then
2592   
2593    epsil = 0.05                            ! 5 pour cent
2594   !  epsil = 0.20
2595   
2596       DO i = 1, klon
2597          IF (wk_adv(i)) THEN
2598             int_dth(i,1) = 0.
2599         END IF
2600       END DO
2601   
2602   
2603   
2604    DO K = 2, klev+1
2605       Do i = 1, klon
2606          IF (wk_adv(i)) THEN
2607             if (k<=k_ptop_provis(i)) then
2608                  ddd=dth(i,k-1)*(ph(i,k-1) - min(ptop_provis(i),ph(i,k)))
2609             else
2610                  ddd=0.
2611             endif
2612             int_dth(i,k) = int_dth(i,k-1) + ddd
2613          END IF
2614       END DO
2615    END DO
2616   ! print*, 'xxx, int_dth', (k,int_dth(1,k),k=1,klev)
2617   ! print*, 'xxx, k_ptop_provis', k_ptop_provis(1)
2618   
2619 
2620    DO i=1,klon
2621       IF (wk_adv(i)) THEN
2622        frac_int_dth(i)=(1.-epsil)*int_dth(i,k_ptop_provis(i))
2623       ENDIF
2624    ENDDO
2625    DO k = 1,klev
2626       DO i =1, klon
2627!         print*,ipas,'yyy ',k,int_dth(i,k),frac_int_dth(i)
2628          IF (wk_adv(i) .AND. int_dth(i,k)>=frac_int_dth(i)) THEN
2629            ktop1(i) = min(k, k_ptop_provis(i))
2630            !print*,ipas,'yyy ktop1= ',ktop1
2631          END if
2632       END DO
2633    END DO
2634    !print*, 'LAMINE'
2635   
2636    DO i = 1, klon
2637       IF (wk_adv(i)) THEN
2638           !print*, ipas,'xxx1, int_dth(i,ktop1(i)), frac_int_dth(i), int_dth(i,ktop1(i)+1) ',ktop1
2639           ddd=int_dth(i,ktop1(i)+1)-int_dth(i,ktop1(i))
2640           if (ddd==0.) then
2641              omega(i)=0.
2642           else
2643              omega(i) = (frac_int_dth(i) - int_dth(i,ktop1(i)))/ddd
2644           endif
2645           print*,'OMEGA ',omega(i)
2646       END IF
2647    END DO
2648   
2649    print*, 'xxx'
2650    DO i = 1, klon
2651       IF (wk_adv(i)) THEN
2652      ! print*, 'xxx, int_dth(i,ktop1(i)), frac_int_dth(i), int_dth(i,ktop1(i)+1) ', &
2653      !               int_dth(i,ktop1(i)), frac_int_dth(i), int_dth(i,ktop1(i)+1)
2654      ! print*, 'xxx, omega(i), ph(i,ktop1(i)), ph(i,ktop1(i)+1) ',  &
2655      !e               omega(i), ph(i,ktop1(i)), ph(i,ktop1(i)+1)
2656          ptop1(i) = min((1 - omega(i))*ph(i,ktop1(i)) + omega(i)*ph(i,ktop1(i)+1), ph(i,1))
2657      END IF
2658    END DO
2659   
2660    DO i=1, klon
2661       IF (wk_adv(i)) THEN
2662           zzz(i, 1) = 0
2663       END IF
2664     END DO
2665    DO k = 1, klev
2666       DO i = 1, klon
2667           IF (wk_adv(i)) THEN         
2668              dzz(i,k) = (ph(i,k) - ph(i,k+1))/(rho(i,k)*RG)
2669              zzz(i,k+1) = zzz(i,k) + dzz(i,k)
2670           END IF
2671       END DO
2672    END DO
2673   
2674    DO i =1, klon
2675       IF (wk_adv(i)) THEN
2676           h_zzz(i) = max((1- omega(i))*zzz(i,ktop1(i)) + omega(i)*zzz(i,ktop1(i)+1), hwmin)
2677       END IF
2678    END DO
2679
2680endif
2681
2682 kupper = 0
2683 
2684IF (wk_pupper<1.) THEN
2685 ! Choose an integration bound well above wake top
2686  ! -----------------------------------------------------------------
2687
2688  ! Pupper = 50000.  ! melting level
2689  ! Pupper = 60000.
2690  ! Pupper = 80000.  ! essais pour case_e
2691  DO i = 1, klon
2692  !  pupper(i) = 0.6*ph(i, 1)
2693    pupper(i) = wk_pupper*ph(i, 1)
2694    pupper(i) = max(pupper(i), 45000.)
2695    ! cc        Pupper(i) = 60000.
2696  END DO
2697
2698ELSE
2699 
2700  DO i=1, klon
2701     ! pupper(i) = wk_pupper*ptop(i)+(1.-wk_pupper)*ph(i, 1)
2702     pupper(i) = min( wk_pupper*ptop(i)+(1.-wk_pupper)*ph(i, 1) , ptop(i)-5000.)
2703  END DO
2704END IF
2705 
2706  ! -5/ Determination de kupper
2707
2708  DO k = klev, 1, -1
2709    DO i = 1, klon
2710      IF (ph(i,k+1)<pupper(i)) kupper(i) = k
2711    END DO
2712  END DO
2713
2714  ! On evite kupper = 1 et kupper = klev
2715  DO i = 1, klon
2716    kupper(i) = max(kupper(i), 2)
2717    kupper(i) = min(kupper(i), klev-1)
2718  END DO
2719  !---------- FIN nouveau calcul hw et ptop -------------------------------------
2720
2721    RETURN
2722END SUBROUTINE pkupper
2723
2724
2725SUBROUTINE wake_popdyn_1(klon, klev, dtime, cstar, tau_wk_inv, wgen, wdens, awdens, sigmaw, &
2726                  wdensmin, &
2727                  dtimesub, gfl, rad_wk, f_shear, drdt_pos, &
2728                  d_awdens, d_wdens, d_sigmaw, &
2729                  iflag_wk_act, wk_adv, cin, wape, &
2730                  drdt, &
2731                  d_dens_gen, d_dens_death, d_dens_col, d_dens_bnd, &
2732                  d_sig_gen, d_sig_death, d_sig_col, d_sig_spread, d_sig_bnd, &
2733                  d_wdens_targ, d_sigmaw_targ)
2734               
2735
2736  USE lmdz_wake_ini , ONLY : wake_ini
2737  USE lmdz_wake_ini , ONLY : prt_level,RG
2738  USE lmdz_wake_ini , ONLY : stark, wdens_ref
2739  USE lmdz_wake_ini , ONLY : tau_cv, rzero, aa0
2740!!  USE lmdz_wake_ini , ONLY : iflag_wk_pop_dyn, wdensmin
2741  USE lmdz_wake_ini , ONLY : iflag_wk_pop_dyn
2742  USE lmdz_wake_ini , ONLY : sigmad, cstart, sigmaw_max
2743 
2744IMPLICIT NONE
2745
2746  INTEGER, INTENT(IN)                                   :: klon,klev
2747  LOGICAL, DIMENSION (klon),        INTENT(IN)          :: wk_adv
2748  REAL,                             INTENT(IN)          :: dtime
2749  REAL,                             INTENT(IN)          :: dtimesub
2750  REAL,                             INTENT(IN)          :: wdensmin
2751  REAL, DIMENSION (klon),           INTENT(IN)          :: wgen
2752  REAL, DIMENSION (klon),           INTENT(IN)          :: wdens
2753  REAL, DIMENSION (klon),           INTENT(IN)          :: awdens
2754  REAL, DIMENSION (klon),           INTENT(IN)          :: sigmaw
2755  REAL, DIMENSION (klon),           INTENT(IN)          :: cstar
2756  REAL, DIMENSION (klon),           INTENT(IN)          :: cin, wape
2757  REAL, DIMENSION (klon),           INTENT(IN)          :: f_shear
2758  INTEGER,                          INTENT(IN)          :: iflag_wk_act
2759
2760 
2761  !
2762 
2763  ! Tendencies of state variables (2 is appended to the names of fields which are the cumul of fields
2764  !                                 computed at each sub-timestep; e.g. d_wdens2 is the cumul of d_wdens)
2765  REAL, DIMENSION (klon),           INTENT(OUT)         :: rad_wk
2766  REAL, DIMENSION (klon),           INTENT(OUT)         :: gfl
2767  REAL, DIMENSION (klon),           INTENT(OUT)         :: d_sigmaw, d_awdens, d_wdens
2768  REAL, DIMENSION (klon),           INTENT(OUT)         :: drdt
2769  ! Some components of the tendencies of state variables 
2770  REAL, DIMENSION (klon),           INTENT(OUT)         :: d_sig_gen, d_sig_death, d_sig_col, d_sig_bnd
2771  REAL, DIMENSION (klon),           INTENT(OUT)         :: d_sig_spread
2772  REAL, DIMENSION (klon),           INTENT(OUT)         :: d_dens_gen, d_dens_death, d_dens_col, d_dens_bnd
2773  REAL,                             INTENT(OUT)         :: d_wdens_targ, d_sigmaw_targ
2774 
2775 
2776  REAL                                                  :: delta_t_min
2777  INTEGER                                               :: nsub
2778  INTEGER                                               :: i, k
2779  REAL                                                  :: wdens0
2780  ! IM 080208
2781  LOGICAL, DIMENSION (klon)                             :: gwake
2782 
2783   ! Variables liees a la dynamique de population
2784  REAL, DIMENSION(klon)                                 :: act
2785  REAL, DIMENSION(klon)                                 :: tau_wk_inv
2786  REAL, DIMENSION(klon)                                 :: wape1_act, wape2_act
2787  LOGICAL, DIMENSION (klon)                             :: kill_wake
2788  REAL                                                  :: drdt_pos
2789  REAL                                                  :: tau_wk_inv_min
2790 
2791     
2792
2793      IF (iflag_wk_act == 0) THEN
2794        act(:) = 0.
2795      ELSEIF (iflag_wk_act == 1) THEN
2796        act(:) = 1.
2797      ELSEIF (iflag_wk_act ==2) THEN
2798      DO i = 1, klon
2799        IF (wk_adv(i)) THEN
2800          wape1_act(i) = abs(cin(i))
2801          wape2_act(i) = 2.*wape1_act(i) + 1.
2802          act(i) = min(1., max(0., (wape(i)-wape1_act(i)) / (wape2_act(i)-wape1_act(i)) ))
2803        ENDIF  ! (wk_adv(i))
2804      ENDDO
2805      ENDIF  ! (iflag_wk_act ==2)
2806
2807      DO i = 1, klon
2808        IF (wk_adv(i)) THEN
2809          rad_wk(i) = max( sqrt(sigmaw(i)/(3.14*wdens(i))) , rzero)
2810          gfl(i)  = 2.*sqrt(3.14*wdens(i)*sigmaw(i))
2811        END IF
2812      END DO
2813
2814      DO i = 1, klon
2815        IF (wk_adv(i)) THEN
2816!!          tau_wk(i) = max(rad_wk(i)/(3.*cstar(i))*((cstar(i)/cstart)**1.5 - 1), 100.)
2817          tau_wk_inv(i) = max( (3.*cstar(i))/(rad_wk(i)*((cstar(i)/cstart)**1.5 - 1)), 0.)
2818          tau_wk_inv_min = min(tau_wk_inv(i), 1./dtimesub)
2819          drdt(i) = (cstar(i) - wgen(i)*(sigmaw(i)/wdens(i)-aa0)/gfl(i)) / &
2820                    (1 + 2*f_shear(i)*(2.*sigmaw(i)-aa0*wdens(i)) - 2.*sigmaw(i))
2821!!                    (1 - 2*sigmaw(i)*(1.-f_shear(i)))
2822          drdt_pos=max(drdt(i),0.)
2823
2824!!          d_wdens(i) = ( wgen(i)*(1.+2.*(sigmaw(i)-sigmad)) &
2825!!                     - wdens(i)*tau_wk_inv_min &
2826!!                     - 2.*gfl(i)*wdens(i)*Cstar(i) )*dtimesub
2827!jyg+mlt<
2828          d_awdens(i) = ( wgen(i) - (1./tau_cv)*(awdens(i) - act(i)*wdens(i)) )*dtimesub
2829          d_dens_gen(i) = wgen(i)
2830          d_dens_death(i) = - (wdens(i)-awdens(i))*tau_wk_inv_min
2831          d_dens_col(i) =  -2.*wdens(i)*gfl(i)*drdt_pos
2832          d_dens_gen(i) =  d_dens_gen(i)*dtimesub
2833          d_dens_death(i) = d_dens_death(i)*dtimesub
2834          d_dens_col(i) =  d_dens_col(i)*dtimesub
2835
2836          d_wdens(i) = d_dens_gen(i)+d_dens_death(i)+d_dens_col(i)
2837!!          d_wdens(i) = ( wgen(i) - (wdens(i)-awdens(i))*tau_wk_inv_min -  &
2838!!                         2.*wdens(i)*gfl(i)*drdt_pos )*dtimesub
2839!>jyg+mlt
2840!
2841!jyg<
2842          d_wdens_targ = max(d_wdens(i), wdensmin-wdens(i))
2843!!          d_dens_bnd(i) = d_dens_bnd(i) + d_wdens_targ - d_wdens(i)
2844          d_dens_bnd(i) = d_wdens_targ - d_wdens(i)
2845          d_wdens(i) = d_wdens_targ
2846!!          d_wdens(i) = max(d_wdens(i), wdensmin-wdens(i))
2847!>jyg
2848
2849!jyg+mlt<
2850!!          d_sigmaw(i) = ( (1.-2*f_shear(i)*sigmaw(i))*(gfl(i)*Cstar(i)+wgen(i)*sigmad/wdens(i)) &
2851!!                      + 2.*f_shear(i)*wgen(i)*sigmaw(i)**2/wdens(i) &
2852!!                      - sigmaw(i)*tau_wk_inv_min )*dtimesub
2853          d_sig_gen(i) = wgen(i)*aa0
2854          d_sig_death(i) = - sigmaw(i)*(1.-awdens(i)/wdens(i))*tau_wk_inv_min
2855!!       
2856         
2857          d_sig_col(i) = - 2*f_shear(i)*sigmaw(i)*gfl(i)*drdt_pos
2858          d_sig_col(i) = - 2*f_shear(i)*(2.*sigmaw(i)-wdens(i)*aa0)*gfl(i)*drdt_pos
2859          d_sig_spread(i) = gfl(i)*cstar(i)
2860          d_sig_gen(i) =  d_sig_gen(i)*dtimesub
2861          d_sig_death(i) = d_sig_death(i)*dtimesub
2862          d_sig_col(i) =  d_sig_col(i)*dtimesub
2863          d_sig_spread(i) =  d_sig_spread(i)*dtimesub
2864          d_sigmaw(i) =  d_sig_gen(i) + d_sig_death(i) + d_sig_col(i) + d_sig_spread(i)
2865!>jyg+mlt
2866!
2867!jyg<
2868          d_sigmaw_targ = max(d_sigmaw(i), sigmad-sigmaw(i))
2869!!          d_sig_bnd(i) = d_sig_bnd(i) + d_sigmaw_targ - d_sigmaw(i)
2870!!          d_sig_bnd_provis(i) = d_sigmaw_targ - d_sigmaw(i)
2871          d_sig_bnd(i) = d_sigmaw_targ - d_sigmaw(i)
2872          d_sigmaw(i) = d_sigmaw_targ
2873!!          d_sigmaw(i) = max(d_sigmaw(i), sigmad-sigmaw(i))
2874!>jyg
2875        ENDIF
2876      ENDDO
2877
2878      IF (prt_level >= 10) THEN
2879        print *,'wake, cstar(1), cstar(1)/cstart, rad_wk(1), tau_wk_inv(1), drdt(1) ', &
2880                       cstar(1), cstar(1)/cstart, rad_wk(1), tau_wk_inv(1), drdt(1)
2881        print *,'wake, wdens(1), awdens(1), act(1), d_awdens(1) ', &
2882                       wdens(1), awdens(1), act(1), d_awdens(1)
2883        print *,'wake, wgen, -(wdens-awdens)*tau_wk_inv, -2.*wdens*gfl*drdt_pos, d_wdens ', &
2884                       wgen(1), -(wdens(1)-awdens(1))*tau_wk_inv(1), -2.*wdens(1)*gfl(1)*drdt_pos, d_wdens(1)
2885        print *,'wake, d_sig_gen(1), d_sig_death(1), d_sig_col(1), d_sigmaw(1) ', &
2886                       d_sig_gen(1), d_sig_death(1), d_sig_col(1), d_sigmaw(1)
2887      ENDIF
2888   
2889    RETURN
2890    END SUBROUTINE wake_popdyn_1
2891   
2892    SUBROUTINE wake_popdyn_2 ( klon, klev, wk_adv, dtimesub, wgen, &
2893                             wdensmin, &
2894                             sigmaw, wdens, awdens, &   !! states variables
2895                             gfl, cstar, cin, wape, rad_wk, &
2896                             d_sigmaw, d_wdens, d_awdens, &  !! tendences
2897                             cont_fact, &
2898                             d_sig_gen, d_sig_death, d_sig_col, d_sig_spread, d_sig_bnd, &
2899                             d_dens_gen, d_dens_death, d_dens_col, d_dens_bnd, &
2900                             d_adens_death, d_adens_icol, d_adens_acol, d_adens_bnd )
2901                             
2902                                             
2903
2904  USE lmdz_wake_ini , ONLY : wake_ini
2905  USE lmdz_wake_ini , ONLY : prt_level,RG
2906  USE lmdz_wake_ini , ONLY : stark, wdens_ref
2907  USE lmdz_wake_ini , ONLY : tau_cv, rzero, aa0
2908!!  USE lmdz_wake_ini , ONLY : iflag_wk_pop_dyn, wdensmin
2909  USE lmdz_wake_ini , ONLY : iflag_wk_pop_dyn
2910  USE lmdz_wake_ini , ONLY : sigmad, cstart, sigmaw_max
2911 
2912IMPLICIT NONE
2913
2914  INTEGER, INTENT(IN)                                   :: klon,klev
2915  LOGICAL, DIMENSION (klon),        INTENT(IN)          :: wk_adv
2916  REAL,                             INTENT(IN)          :: dtimesub
2917  REAL,                             INTENT(IN)          :: wdensmin
2918  REAL, DIMENSION (klon),           INTENT(IN)          :: wgen      !! B = birth rate of wakes
2919  REAL, DIMENSION (klon),           INTENT(INOUT)       :: sigmaw    !! sigma = fractional area of wakes
2920  REAL, DIMENSION (klon),           INTENT(INOUT)       :: wdens     !! D = number of wakes per unit area
2921  REAL, DIMENSION (klon),           INTENT(INOUT)       :: awdens    !! A = number of active wakes per unit area
2922  REAL, DIMENSION (klon),           INTENT(IN)          :: cstar     !! C* = spreading velocity of wakes
2923  REAL, DIMENSION (klon),           INTENT(IN)          :: cin, wape  ! RM : A Faire disparaitre
2924
2925
2926  REAL, DIMENSION (klon),           INTENT(OUT)         :: rad_wk    !! r = wake radius
2927  REAL, DIMENSION (klon),           INTENT(OUT)         :: gfl       !! Lg = gust front lenght per unit area
2928  REAL, DIMENSION (klon),           INTENT(OUT)         :: d_sigmaw, d_wdens, d_awdens
2929  REAL, DIMENSION (klon),           INTENT(OUT)         :: cont_fact  !! RM facteur de contact = 2 pi * rad * C*
2930  ! Some components of the tendencies of state variables 
2931  REAL, DIMENSION (klon),           INTENT(OUT)         :: d_sig_gen, d_sig_death, d_sig_col, d_sig_spread, d_sig_bnd
2932  REAL, DIMENSION (klon),           INTENT(OUT)         :: d_dens_gen, d_dens_death, d_dens_col, d_dens_bnd
2933  REAL, DIMENSION (klon),           INTENT(OUT)         :: d_adens_death, d_adens_icol, d_adens_acol, d_adens_bnd
2934
2935
2936!! internal variables
2937 
2938  INTEGER                                               :: i, k
2939  REAL, DIMENSION (klon)                                :: tau_wk_inv      !! tau = life time of wakes
2940  REAL                                                  :: tau_wk_inv_min
2941  REAL, DIMENSION (klon)                                :: tau_prime       !! tau_prime = life time of actives wakes
2942  REAL                                                  :: d_wdens_targ, d_sigmaw_targ
2943 
2944
2945!! Equations
2946!! dD/dt = B - (D-A)/tau - f D^2
2947!! dA/dt = B - A/tau_prime + f (D-A)^2 - f A^2
2948!! dsigma/dt = B a0 - sigma/D (D-A)/tau + Lg C* - f (D-A)^2 (sigma/D-a0)
2949!!
2950!! f = 2 (B (a0-sigma/D) + Lg C*) / (2 (D-A)^2 (2 sigma/D-a0) + D (1-2 sigma))
2951
2952
2953      DO i = 1, klon
2954        IF (wk_adv(i)) THEN
2955          rad_wk(i) = max( sqrt(sigmaw(i)/(3.14*wdens(i))) , rzero)
2956          gfl(i)  = 2.*sqrt(3.14*wdens(i)*sigmaw(i))
2957        END IF
2958      END DO
2959
2960
2961      DO i = 1, klon
2962        IF (wk_adv(i)) THEN
2963!!          tau_wk(i) = max(rad_wk(i)/(3.*cstar(i))*((cstar(i)/cstart)**1.5 - 1), 100.)
2964          tau_wk_inv(i) = max( (3.*cstar(i))/(rad_wk(i)*((cstar(i)/cstart)**1.5 - 1)), 0.)
2965          tau_wk_inv_min = min(tau_wk_inv(i), 1./dtimesub)
2966          tau_prime(i) = tau_cv
2967!!          cont_fact(i) = 2.*(wgen(i)*(aa0-sigmaw(i)/wdens(i)) + gfl(i)*cstar(i)) / &
2968!!                             (2.*(wdens(i)-awdens(i))**2*(2.*sigmaw(i)/wdens(i) - aa0) + wdens(i)*(1.-2.*sigmaw(i)))
2969!!          cont_fact(i) = 2.*3.14*rad_wk(i)*cstar(i)     ! bug
2970!!          cont_fact(i) = 4.*3.14*rad_wk(i)*cstar(i)
2971          cont_fact(i) = 2.*gfl(i)*cstar(i)/wdens(i)
2972
2973          d_sig_gen(i) = wgen(i)*aa0
2974          d_sig_death(i) = - sigmaw(i)*(1.-awdens(i)/wdens(i))*tau_wk_inv_min
2975          d_sig_col(i) = - cont_fact(i)*(wdens(i)-awdens(i))**2*(2.*sigmaw(i)/wdens(i)-aa0)
2976          d_sig_spread(i) = gfl(i)*cstar(i)
2977!
2978          d_sig_gen(i) =  d_sig_gen(i)*dtimesub
2979          d_sig_death(i) = d_sig_death(i)*dtimesub
2980          d_sig_col(i) =  d_sig_col(i)*dtimesub
2981          d_sig_spread(i) =  d_sig_spread(i)*dtimesub
2982          d_sigmaw(i) =  d_sig_gen(i) + d_sig_death(i) + d_sig_col(i) + d_sig_spread(i)
2983
2984         
2985          d_sigmaw_targ = max(d_sigmaw(i), sigmad-sigmaw(i))
2986!!          d_sig_bnd(i) = d_sig_bnd(i) + d_sigmaw_targ - d_sigmaw(i)
2987!!          d_sig_bnd_provis(i) = d_sigmaw_targ - d_sigmaw(i)
2988          d_sig_bnd(i) = d_sigmaw_targ - d_sigmaw(i)
2989          d_sigmaw(i) = d_sigmaw_targ
2990!!          d_sigmaw(i) = max(d_sigmaw(i), sigmad-sigmaw(i))
2991         
2992         
2993          d_dens_gen(i) = wgen(i)
2994          d_dens_death(i) = - (wdens(i)-awdens(i))*tau_wk_inv_min
2995          d_dens_col(i) =  - cont_fact(i)*wdens(i)**2
2996!
2997          d_dens_gen(i) =  d_dens_gen(i)*dtimesub
2998          d_dens_death(i) = d_dens_death(i)*dtimesub
2999          d_dens_col(i) =  d_dens_col(i)*dtimesub
3000          d_wdens(i) = d_dens_gen(i) + d_dens_death(i) + d_dens_col(i)
3001
3002
3003          d_adens_death(i) = -awdens(i)/tau_prime(i)
3004          d_adens_icol(i) = cont_fact(i)*(wdens(i)-awdens(i))**2
3005          d_adens_acol(i) = - cont_fact(i)*awdens(i)**2
3006!
3007          d_adens_death(i) =  d_adens_death(i)*dtimesub
3008          d_adens_icol(i) =   d_adens_icol(i)*dtimesub
3009          d_adens_acol(i) =   d_adens_acol(i)*dtimesub
3010          d_awdens(i) =   d_dens_gen(i) + d_adens_death(i) + d_adens_icol(i) + d_adens_acol(i)     
3011           
3012!!
3013          d_wdens_targ = max(d_wdens(i), wdensmin-wdens(i))
3014!!          d_dens_bnd(i) = d_dens_bnd(i) + d_wdens_targ - d_wdens(i)
3015          d_dens_bnd(i) = d_wdens_targ - d_wdens(i)
3016          d_wdens(i) = d_wdens_targ
3017         
3018          d_wdens_targ = min(max(d_awdens(i),-awdens(i)), wdens(i)-awdens(i))
3019!!          d_dens_bnd(i) = d_dens_bnd(i) + d_wdens_targ - d_wdens(i)
3020          d_adens_bnd(i) = d_wdens_targ - d_awdens(i)
3021          d_awdens(i) = d_wdens_targ
3022
3023
3024
3025        ENDIF
3026      ENDDO
3027
3028      IF (prt_level >= 10) THEN
3029        print *,'wake, cstar(1), cstar(1)/cstart, rad_wk(1), tau_wk_inv(1), cont_fact(1) ', &
3030                       cstar(1), cstar(1)/cstart, rad_wk(1), tau_wk_inv(1), cont_fact(1)
3031        print *,'wake, wdens(1), awdens(1), d_awdens(1) ', &
3032                       wdens(1), awdens(1), d_awdens(1)
3033        print *,'wake, d_sig_gen(1), d_sig_death(1), d_sig_col(1), d_sigmaw(1) ', &
3034                       d_sig_gen(1), d_sig_death(1), d_sig_col(1), d_sigmaw(1)
3035      ENDIF
3036sigmaw=sigmaw+d_sigmaw
3037wdens=wdens+d_wdens
3038awdens=awdens+d_awdens
3039
3040    RETURN
3041    END SUBROUTINE wake_popdyn_2 
3042 
3043    SUBROUTINE wake_popdyn_3 ( klon, klev, phys_sub, wk_adv, dtimesub, wgen, &
3044                             wdensmin, &
3045                             sigmaw, asigmaw, wdens, awdens, &                       !! state variables
3046                             gfl, agfl, cstar, cin, wape, &
3047                             rad_wk, arad_wk, irad_wk, &
3048                             d_sigmaw, d_asigmaw, d_wdens, d_awdens, &               !! tendencies
3049                             d_sig_gen, d_sig_death, d_sig_col, d_sig_spread, d_sig_bnd, &
3050                             d_asig_death, d_asig_aicol, d_asig_iicol, d_asig_spread, d_asig_bnd, &
3051                             d_dens_gen, d_dens_death, d_dens_col, d_dens_bnd, &
3052                             d_adens_death, d_adens_icol, d_adens_acol, d_adens_bnd )
3053                             
3054                                             
3055
3056  USE lmdz_wake_ini , ONLY : wake_ini
3057  USE lmdz_wake_ini , ONLY : prt_level,RG
3058  USE lmdz_wake_ini , ONLY : stark, wdens_ref
3059  USE lmdz_wake_ini , ONLY : tau_cv, rzero, aa0
3060!!  USE lmdz_wake_ini , ONLY : iflag_wk_pop_dyn, wdensmin
3061  USE lmdz_wake_ini , ONLY : iflag_wk_pop_dyn
3062  USE lmdz_wake_ini , ONLY : sigmad, cstart, sigmaw_max
3063  USE lmdz_wake_ini , ONLY : smallestreal
3064 
3065IMPLICIT NONE
3066
3067  INTEGER, INTENT(IN)                                   :: klon,klev
3068  LOGICAL,                          INTENT(IN)          :: phys_sub
3069  LOGICAL, DIMENSION (klon),        INTENT(IN)          :: wk_adv
3070  REAL,                             INTENT(IN)          :: dtimesub
3071  REAL,                             INTENT(IN)          :: wdensmin
3072  REAL, DIMENSION (klon),           INTENT(IN)          :: wgen      !! B = birth rate of wakes
3073  REAL, DIMENSION (klon),           INTENT(INOUT)       :: sigmaw    !! sigma = fractional area of wakes
3074  REAL, DIMENSION (klon),           INTENT(INOUT)       :: asigmaw   !! sigma = fractional area of active wakes
3075  REAL, DIMENSION (klon),           INTENT(INOUT)       :: wdens     !! D = number of wakes per unit area
3076  REAL, DIMENSION (klon),           INTENT(INOUT)       :: awdens    !! A = number of active wakes per unit area
3077  REAL, DIMENSION (klon),           INTENT(IN)          :: cstar     !! C* = spreading velocity of wakes
3078  REAL, DIMENSION (klon),           INTENT(IN)          :: cin, wape  ! RM : A Faire disparaitre
3079
3080
3081  REAL, DIMENSION (klon),           INTENT(OUT)         :: rad_wk    !! r = mean wake radius
3082  REAL, DIMENSION (klon),           INTENT(OUT)         :: arad_wk    !! r_A = wake radius of active wakes
3083  REAL, DIMENSION (klon),           INTENT(OUT)         :: irad_wk    !! r_I = wake radius of inactive wakes
3084  REAL, DIMENSION (klon),           INTENT(OUT)         :: gfl       !! Lg = gust front length per unit area
3085  REAL, DIMENSION (klon),           INTENT(OUT)         :: agfl      !! LgA = gust front length of active wakes
3086                                                                     !!  per unit area
3087  REAL, DIMENSION (klon),           INTENT(OUT)         :: d_sigmaw, d_asigmaw, d_wdens, d_awdens
3088  ! Some components of the tendencies of state variables 
3089  REAL, DIMENSION (klon),           INTENT(OUT)         :: d_sig_gen, d_sig_death, d_sig_col, d_sig_spread, d_sig_bnd
3090  REAL, DIMENSION (klon),           INTENT(OUT)         :: d_asig_death, d_asig_aicol, d_asig_iicol, d_asig_spread, d_asig_bnd
3091  REAL, DIMENSION (klon),           INTENT(OUT)         :: d_dens_gen, d_dens_death, d_dens_col, d_dens_bnd
3092  REAL, DIMENSION (klon),           INTENT(OUT)         :: d_adens_death, d_adens_acol, d_adens_icol, d_adens_bnd
3093
3094
3095!! internal variables
3096 
3097  INTEGER                                               :: i, k
3098  REAL, DIMENSION (klon)                                :: iwdens, isigmaw !! inactive wake density and fractional area
3099!!  REAL, DIMENSION (klon)                                :: d_arad, d_irad
3100  REAL, DIMENSION (klon)                                :: igfl            !! LgI = gust front length of inactive wakes
3101                                                                           !!  per unit area
3102  REAL, DIMENSION (klon)                                :: s_wk            !! mean area of individual wakes
3103  REAL, DIMENSION (klon)                                :: as_wk           !! mean area of individual active wakes
3104  REAL, DIMENSION (klon)                                :: is_wk           !! mean area of individual inactive wakes
3105  REAL, DIMENSION (klon)                                :: tau_wk_inv      !! tau = life time of wakes
3106  REAL                                                  :: tau_wk_inv_min
3107  REAL, DIMENSION (klon)                                :: tau_prime       !! tau_prime = life time of actives wakes
3108  REAL                                                  :: d_wdens_targ, d_sigmaw_targ
3109
3110
3111!! Equations
3112!! ---------
3113!! Gust fronts:
3114!! Lg_A = 2 pi r_A A
3115!! Lg_I = 2 pi r_I I
3116!! Lg   = 2 pi r   D
3117!!
3118!! Areas:
3119!! s = pi r^2
3120!! s_A = pi r_A^2
3121!! s_I = pi r_I^2
3122!!
3123!! Life expectancy:
3124!! tau_I = 3 C* ((C*/C*t)^3/2 - 1) / r_I
3125!!
3126!! Time deratives:
3127!! dD/dt = B - (D-A)/tau_I - 2 Lg C* D
3128!! dA/dt = B - A/tau_A     + 2 Lg_I C* (D-A) - 2 Lg_A C* A
3129!! dsigma/dt = B a0 - sigma_I/tau_I + Lg C* - 2 Lg_I C* (D-A) (2 s_I - a0)
3130!! dsigma_A/dt = B a0 - sigma_A/tau_A + Lg_A C* + (Lg_A I + Lg_I A) C* s_I + 2 Lg_I C* I a0
3131!!
3132
3133      DO i = 1, klon
3134        IF (wk_adv(i)) THEN
3135         iwdens(i) = wdens(i) - awdens(i)
3136         isigmaw(i) = sigmaw(i) - asigmaw(i)
3137!
3138         arad_wk(i) = max( sqrt(asigmaw(i)/(3.14*awdens(i))) , rzero)
3139         irad_wk(i) = max( sqrt((sigmaw(i)-asigmaw(i))/  &
3140                           (3.14*max(smallestreal,(wdens(i)-awdens(i))))), rzero)
3141         rad_wk(i) = (awdens(i)*arad_wk(i)+(wdens(i)-awdens(i))*irad_wk(i))/wdens(i)
3142!
3143         s_wk(i) = 3.14*rad_wk(i)**2
3144         as_wk(i) = 3.14*arad_wk(i)**2
3145         is_wk(i) = 3.14*irad_wk(i)**2
3146!
3147         gfl(i)  = 2.*sqrt(3.14*wdens(i)*sigmaw(i))
3148         agfl(i) = 2.*sqrt(3.14*awdens(i)*asigmaw(i))
3149         igfl(i) = gfl(i) - agfl(i)
3150        ENDIF
3151      ENDDO
3152
3153
3154      DO i = 1, klon
3155        IF (wk_adv(i)) THEN
3156          tau_wk_inv(i) = max( (3.*cstar(i))/(irad_wk(i)*((cstar(i)/cstart)**1.5 - 1)), 0.)
3157          tau_wk_inv_min = min(tau_wk_inv(i), 1./dtimesub)
3158          tau_prime(i) = tau_cv
3159
3160          d_sig_gen(i) = wgen(i)*aa0
3161          d_sig_death(i) = - isigmaw(i)*tau_wk_inv_min
3162          d_sig_col(i) = - 2.*igfl(i)*cstar(i)*iwdens(i)*(2.*is_wk(i)-aa0)
3163          d_sig_spread(i) = gfl(i)*cstar(i)
3164!
3165          d_sig_gen(i) =  d_sig_gen(i)*dtimesub
3166          d_sig_death(i) = d_sig_death(i)*dtimesub
3167          d_sig_col(i) =  d_sig_col(i)*dtimesub
3168          d_sig_spread(i) =  d_sig_spread(i)*dtimesub
3169          d_sigmaw(i) =  d_sig_gen(i) + d_sig_death(i) + d_sig_col(i) + d_sig_spread(i)
3170#ifdef IOPHYS_WK
3171          IF (phys_sub) call iophys_ecrit('d_sigmaw0',1,'d_sigmaw0','',d_sigmaw)
3172#endif
3173
3174         
3175          d_sigmaw_targ = max(d_sigmaw(i), sigmad-sigmaw(i))
3176!!          d_sig_bnd(i) = d_sig_bnd(i) + d_sigmaw_targ - d_sigmaw(i)
3177!!          d_sig_bnd_provis(i) = d_sigmaw_targ - d_sigmaw(i)
3178          d_sig_bnd(i) = d_sigmaw_targ - d_sigmaw(i)
3179          d_sigmaw(i) = d_sigmaw_targ
3180!!          d_sigmaw(i) = max(d_sigmaw(i), sigmad-sigmaw(i))
3181#ifdef IOPHYS_WK
3182          IF (phys_sub) THEN
3183             call iophys_ecrit('tauwk_inv',1,'tau_wk_inv_min','',tau_wk_inv_min)
3184             call iophys_ecrit('d_sigmaw',1,'d_sigmaw','',d_sigmaw)
3185             call iophys_ecrit('d_sig_gen',1,'d_sig_gen','',d_sig_gen)
3186             call iophys_ecrit('d_sig_death',1,'d_sig_death','',d_sig_death)
3187             call iophys_ecrit('d_sig_col',1,'d_sig_col','',d_sig_col)
3188             call iophys_ecrit('d_sig_spread',1,'d_sig_spread','',d_sig_spread)
3189             call iophys_ecrit('d_sig_bnd',1,'d_sig_bnd','',d_sig_bnd)
3190          ENDIF
3191#endif
3192          d_asig_death(i) = - asigmaw(i)/tau_prime(i)
3193          d_asig_aicol(i) = (agfl(i)*iwdens(i) + igfl(i)*awdens(i))*cstar(i)*is_wk(i)
3194          d_asig_iicol(i) = 2.*igfl(i)*cstar(i)*iwdens(i)*aa0
3195          d_asig_spread(i) = agfl(i)*cstar(i)
3196!
3197          d_asig_death(i) = d_asig_death(i)*dtimesub
3198          d_asig_aicol(i) =  d_asig_aicol(i)*dtimesub
3199          d_asig_iicol(i) =  d_asig_iicol(i)*dtimesub
3200          d_asig_spread(i) =  d_asig_spread(i)*dtimesub
3201          d_asigmaw(i) =  d_sig_gen(i) + d_asig_death(i) + d_asig_aicol(i) + d_asig_iicol(i) + d_asig_spread(i)
3202#ifdef IOPHYS_WK
3203          IF (phys_sub) call iophys_ecrit('d_asigmaw0',1,'d_asigmaw0','',d_asigmaw)
3204#endif
3205
3206          d_sigmaw_targ = min(max(d_asigmaw(i),-asigmaw(i)), sigmaw(i)-asigmaw(i))
3207!!          d_dens_bnd(i) = d_dens_bnd(i) + d_sigmaw_targ - d_sigmaw(i)
3208          d_asig_bnd(i) = d_sigmaw_targ - d_asigmaw(i)
3209          d_asigmaw(i) = d_sigmaw_targ
3210#ifdef IOPHYS_WK
3211          IF (phys_sub) THEN
3212             call iophys_ecrit('d_asigmaw',1,'d_asigmaw','',d_asigmaw)
3213             call iophys_ecrit('d_asig_death',1,'d_asig_death','',d_asig_death)
3214             call iophys_ecrit('d_asig_aicol',1,'d_asig_aicol','',d_asig_aicol)
3215             call iophys_ecrit('d_asig_iicol',1,'d_asig_iicol','',d_asig_iicol)
3216             call iophys_ecrit('d_asig_spread',1,'d_asig_spread','',d_asig_spread)
3217             call iophys_ecrit('d_asig_bnd',1,'d_asig_bnd','',d_asig_bnd)
3218          ENDIF
3219#endif
3220          d_dens_gen(i) = wgen(i)
3221          d_dens_death(i) = - iwdens(i)*tau_wk_inv_min
3222          d_dens_col(i) =  - 2.*gfl(i)*cstar(i)*wdens(i)
3223!
3224          d_dens_gen(i) =  d_dens_gen(i)*dtimesub
3225          d_dens_death(i) = d_dens_death(i)*dtimesub
3226          d_dens_col(i) =  d_dens_col(i)*dtimesub
3227          d_wdens(i) = d_dens_gen(i) + d_dens_death(i) + d_dens_col(i)
3228!!
3229          d_wdens_targ = max(d_wdens(i), wdensmin-wdens(i))
3230!!          d_dens_bnd(i) = d_dens_bnd(i) + d_wdens_targ - d_wdens(i)
3231          d_dens_bnd(i) = d_wdens_targ - d_wdens(i)
3232          d_wdens(i) = d_wdens_targ
3233#ifdef IOPHYS_WK
3234    IF (phys_sub) THEN
3235        call iophys_ecrit('d_wdens',1,'d_wdens','',d_wdens)
3236        call iophys_ecrit('d_dens_gen',1,'d_dens_gen','',d_dens_gen)
3237        call iophys_ecrit('d_dens_death',1,'d_dens_death','',d_dens_death)
3238        call iophys_ecrit('d_dens_col',1,'d_dens_col','',d_dens_col)
3239    ENDIF
3240#endif
3241
3242          d_adens_death(i) = -awdens(i)/tau_prime(i)
3243          d_adens_icol(i) =   2.*igfl(i)*cstar(i)*iwdens(i)
3244          d_adens_acol(i)  = - 2.*agfl(i)*cstar(i)*awdens(i)
3245!
3246          d_adens_death(i) =  d_adens_death(i)*dtimesub
3247          d_adens_icol(i) =   d_adens_icol(i)*dtimesub
3248          d_adens_acol(i)  =   d_adens_acol(i)*dtimesub
3249          d_awdens(i) =   d_dens_gen(i) + d_adens_death(i) + d_adens_icol(i) + d_adens_acol(i)     
3250#ifdef IOPHYS_WK
3251    IF (phys_sub) THEN
3252        call iophys_ecrit('d_awdens',1,'d_awdens','',d_awdens)
3253        call iophys_ecrit('d_adens_death',1,'d_adens_death','',d_adens_death)
3254        call iophys_ecrit('d_adens_icol',1,'d_adens_icol','',d_adens_icol)
3255        call iophys_ecrit('d_adens_acol',1,'d_adens_acol','',d_adens_acol)
3256    ENDIF
3257#endif
3258          d_wdens_targ = min(max(d_awdens(i),-awdens(i)), wdens(i)-awdens(i))
3259!!          d_dens_bnd(i) = d_dens_bnd(i) + d_wdens_targ - d_wdens(i)
3260          d_adens_bnd(i) = d_wdens_targ - d_awdens(i)
3261          d_awdens(i) = d_wdens_targ
3262
3263!!          d_irad(i) = (d_sigmaw(i)-d_asigmaw(i)-isigmaw(i)*(d_wdens(i)-awdens(i))/iwdens(i)) / &
3264!!                      max(smallestreal,(2.*3.14*iwdens(i)*irad_wk(i)))
3265!!          d_arad(i) = (d_asigmaw(i)-asigmaw(i)*d_awdens(i)/awdens(i)) / &
3266!!                      max(smallestreal,(2.*3.14*awdens(i)*arad_wk(i)))
3267!!          d_irad(i) = d_irad(i)*dtimesub
3268!!          d_arad(i) = d_arad(i)*dtimesub
3269!!          call iophys_ecrit('d_irad',1,'d_irad','m',d_irad)
3270!!          call iophys_ecrit('d_airad',1,'d_arad','m',d_arad)
3271!!
3272        ENDIF
3273      ENDDO
3274
3275      IF (prt_level >= 10) THEN
3276        print *,'wake, cstar(1), cstar(1)/cstart, rad_wk(1), tau_wk_inv(1), gfl(1) ', &
3277                       cstar(1), cstar(1)/cstart, rad_wk(1), tau_wk_inv(1), gfl(1)
3278        print *,'wake, wdens(1), awdens(1), d_awdens(1) ', &
3279                       wdens(1), awdens(1), d_awdens(1)
3280        print *,'wake, d_sig_gen(1), d_sig_death(1), d_sig_col(1), d_sigmaw(1) ', &
3281                       d_sig_gen(1), d_sig_death(1), d_sig_col(1), d_sigmaw(1)
3282      ENDIF
3283sigmaw=sigmaw+d_sigmaw
3284asigmaw=asigmaw+d_asigmaw
3285wdens=wdens+d_wdens
3286awdens=awdens+d_awdens
3287
3288    RETURN
3289    END SUBROUTINE wake_popdyn_3 
3290
3291END MODULE lmdz_wake
Note: See TracBrowser for help on using the repository browser.