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

Last change on this file since 4845 was 4845, checked in by fhourdin, 2 months ago

Suite travail sur les poches

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