Ignore:
Timestamp:
Oct 22, 2024, 4:06:28 PM (5 weeks ago)
Author:
Laurent Fairhead
Message:

Rollback to revision 5254 as a no-commit policy is in place at this time
LF

Location:
LMDZ6/trunk/libf/phylmdiso
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/trunk/libf/phylmdiso/calwake.F90

    r5255 r5256  
    66    dt_dwn, dq_dwn, m_dwn, m_up, dt_a, dq_a, wgen, &
    77    sigd, Cin, &
    8     wake_deltat, wake_deltaq, wake_s, awake_s, wake_dens, awake_dens, &
     8    wake_deltat, wake_deltaq, wake_s, awake_dens, wake_dens, &
    99    wake_dth, wake_h, &
    1010    wake_pe, wake_fip, wake_gfl, &
     
    1414    wake_omg, wake_dp_deltomg, &
    1515    wake_spread, wake_cstar, wake_d_deltat_gw, &
    16     wake_ddeltat, wake_ddeltaq, wake_ds, awake_ds, wake_ddens, awake_ddens &
     16    wake_ddeltat, wake_ddeltaq, wake_ds, awake_ddens, wake_ddens &
    1717#ifdef ISO
    1818     &               ,xt,dxt_dwn,dxt_a &
     
    6767  ! ------------
    6868  REAL, DIMENSION(klon, klev),   INTENT (INOUT)      :: wake_deltat, wake_deltaq
    69   REAL, DIMENSION(klon),         INTENT (INOUT)      :: wake_s, awake_s
    70   REAL, DIMENSION(klon),         INTENT (INOUT)      :: wake_dens, awake_dens
     69  REAL, DIMENSION(klon),         INTENT (INOUT)      :: wake_s
     70  REAL, DIMENSION(klon),         INTENT (INOUT)      :: awake_dens, wake_dens
    7171#ifdef ISO
    7272  REAL, DIMENSION(ntraciso,klon, klev),   INTENT (INOUT)      :: wake_deltaxt
     
    8888  REAL, DIMENSION(klon),         INTENT (OUT)        :: wake_cstar
    8989  REAL, DIMENSION(klon, klev),   INTENT (OUT)        :: wake_ddeltat, wake_ddeltaq
    90   REAL, DIMENSION(klon),         INTENT (OUT)        :: wake_ds, awake_ds, wake_ddens, awake_ddens
     90  REAL, DIMENSION(klon),         INTENT (OUT)        :: wake_ds, awake_ddens, wake_ddens
    9191#ifdef ISO
    9292  REAL, DIMENSION(ntraciso,klon, klev),   INTENT (OUT)        :: dxt_wake
     
    115115  REAL, DIMENSION(klon, klev)                        :: tx, qx
    116116  REAL, DIMENSION(klon)                              :: hw, wape, fip, gfl
    117   REAL, DIMENSION(klon)                              :: sigmaw, asigmaw, wdens, awdens
     117  REAL, DIMENSION(klon)                              :: sigmaw, awdens, wdens
    118118  REAL, DIMENSION(klon, klev)                        :: omgbdth
    119119  REAL, DIMENSION(klon, klev)                        :: dp_omgb
     
    126126  REAL, DIMENSION(klon, klev)                        :: d_deltat_gw
    127127  REAL, DIMENSION(klon, klev)                        :: d_deltatw, d_deltaqw
    128   REAL, DIMENSION(klon)                              :: d_sigmaw, d_asigmaw, d_wdens, d_awdens
     128  REAL, DIMENSION(klon)                              :: d_sigmaw, d_awdens, d_wdens
    129129#ifdef ISO
    130130  REAL, DIMENSION(ntraciso,klon, klev)                        :: xte
     
    142142
    143143  IF (prt_level >= 10) THEN
    144     print *, '-> calwake, wake_s, awake_s, wgen input ', wake_s(1), awake_s(1), wgen(1)
     144    print *, '-> calwake, wake_s, wgen input ', wake_s(1), wgen(1)
    145145  ENDIF
    146146
     
    191191d_deltaqw(:,:) = 0.
    192192d_sigmaw(:) = 0.
    193 d_asigmaw(:) = 0.
     193d_awdens(:) = 0.
    194194d_wdens(:) = 0.
    195 d_awdens(:) = 0.
    196195#ifdef ISO
    197196dxtls(:,:,:) = 0.
     
    228227
    229228  DO i = 1, klon
    230     sigmaw(i)  = wake_s(i)
    231     asigmaw(i) = awake_s(i)
    232   END DO
    233 
    234   DO i = 1, klon
     229    sigmaw(i) = wake_s(i)
     230  END DO
     231
     232  DO i = 1, klon
     233    awdens(i) = max(0., awake_dens(i))
    235234    wdens(i) = max(0., wake_dens(i))
    236     awdens(i) = max(0., awake_dens(i))
    237235  END DO
    238236
     
    274272#endif
    275273
    276 
    277   CALL wake(klon,klev,znatsurf, p, ph, pi, dtime, &
     274  CALL wake(znatsurf, p, ph, pi, dtime, &
    278275    te, qe, omgbe, &
    279276    dtdwn, dqdwn, amdwn, amup, dta, dqa, wgen, &
    280277    sigd0, Cin, &
    281     dtw, dqw, sigmaw, asigmaw, wdens, awdens, &                      ! state variables
     278    dtw, dqw, sigmaw, awdens, wdens, &                                   ! state variables
    282279    dth, hw, wape, fip, gfl, &
    283280    dtls, dqls, ktopw, omgbdth, dp_omgb, tx, qx, &
    284281    dtke, dqke, omg, dp_deltomg, spread, cstar, &
    285282    d_deltat_gw, &
    286     d_deltatw, d_deltaqw, d_sigmaw, d_asigmaw, d_wdens, d_awdens &      ! tendencies
     283    d_deltatw, d_deltaqw, d_sigmaw, d_awdens, d_wdens &                     ! tendencies
    287284#ifdef ISO
    288285     , xte,dxtdwn,dxta,dxtw &
     
    389386    IF (ktopw(i)>0) THEN
    390387      wake_ds(i) = d_sigmaw(i)*dtime
    391       awake_ds(i) = d_asigmaw(i)*dtime
    392388      awake_ddens(i) = d_awdens(i)*dtime
    393389      wake_ddens(i) = d_wdens(i)*dtime
    394390    ELSE
    395       wake_ds(i)    = -wake_s(i)
    396       awake_ds(i)   = -awake_s(i)
    397       wake_ddens(i) = -wake_dens(i)
    398       awake_ddens(i)= -awake_dens(i)
     391      wake_ds(i)   = -wake_s(i)
     392      wake_ddens(i)= -wake_dens(i)
    399393    END IF
    400394  END DO
     
    427421    DO i = 1, klon
    428422      wake_s(i) = sigmaw(i)
    429       awake_s(i) = asigmaw(i)
    430423      awake_dens(i) = awdens(i)
    431424      wake_dens(i) = wdens(i)
     
    442435  ENDIF  ! (first)
    443436!>jyg
    444   IF (prt_level >= 10) THEN
    445     print *, 'calwake ->, wake_s, awake_s ', wake_s(1), awake_s(1)
    446   ENDIF
    447437
    448438  RETURN
    449439END SUBROUTINE calwake
    450440
    451 
  • LMDZ6/trunk/libf/phylmdiso/isotopes_routines_mod.F90

    • Property svn:keywords set to Id
    r5255 r5256  
    11#ifdef ISO
    2 ! $Id: $
    3 
     2! $Id$
    43MODULE isotopes_routines_mod
    54  USE infotrac_phy, ONLY: niso, ntraciso=>ntiso, index_trac=>itZonIso, ntraceurs_zone=>nzone
     
    1882218821        if ((iso_HDO.gt.0).and.(ixt.eq.iso_HDO)) then
    1882318822            if (q.gt.ridicule) then
    18824                     !write(*,*) 'xt,q=',xt,q
    18825                     !write(*,*) 'alpha=',alpha
    18826                     !write(*,*) 'toce,kcin,h0=',toce,kcin,h0
    18827                     !write(*,*) 'RMerlivat=',RMerlivat
     18823                    write(*,*) 'xt,q=',xt,q
     18824                    write(*,*) 'alpha=',alpha
     18825                    write(*,*) 'toce,kcin,h0=',toce,kcin,h0
     18826                    write(*,*) 'RMerlivat=',RMerlivat
    1882818827                call iso_verif_aberrant_encadre( xt/q, 'isotopes_routines_mod 18930b: iso_init_ideal')
    1882918828            endif
  • LMDZ6/trunk/libf/phylmdiso/lmdz_wake.F90

    r5255 r5256  
    44
    55CONTAINS
    6 
    7 SUBROUTINE wake(klon,klev,znatsurf, p, ph, pi, dtime, &
    8                 tb0, qb0, omgb, &
     6SUBROUTINE wake(znatsurf, p, ph, pi, dtime, &
     7                te0, qe0, omgb, &
    98                dtdwn, dqdwn, amdwn, amup, dta, dqa, wgen, &
    109                sigd_con, Cin, &
    11                 deltatw, deltaqw, sigmaw, asigmaw, wdens, awdens, &                  ! state variables
     10                deltatw, deltaqw, sigmaw, awdens, wdens, &                  ! state variables
    1211                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 #ifdef ISO
    19                      ,xtb0,dxtdwn,dxta,deltaxtw &
    20                      ,dxtls,xtx,dxtke,d_deltaxtw2 &
     12                dtls, dqls, ktopw, omgbdth, dp_omgb, tu, qu, &
     13                dtke, dqke, omg, dp_deltomg, spread, cstar, &
     14                d_deltat_gw, &
     15                d_deltatw2, d_deltaqw2, d_sigmaw2, d_awdens2, d_wdens2 &     ! tendencies
     16
     17#ifdef ISO
     18                     ,xte0,dxtdwn,dxta,deltaxtw &
     19                     ,dxtls,xtu,dxtke,d_deltaxtw2 &
    2120#endif                 
    2221                ) 
     
    3231  ! **************************************************************
    3332
    34 
    35   USE lmdz_wake_ini , ONLY : wake_ini
    36   USE lmdz_wake_ini , ONLY : prt_level,epsim1,RG,RD
    37   USE lmdz_wake_ini , ONLY : stark, wdens_ref, coefgw, alpk, wk_pupper
    38   USE lmdz_wake_ini , ONLY : crep_upper, crep_sol, tau_cv, rzero, aa0, flag_wk_check_trgl
    39   USE lmdz_wake_ini , ONLY : ok_bug_gfl
    40   USE lmdz_wake_ini , ONLY : iflag_wk_act, iflag_wk_check_trgl, iflag_wk_pop_dyn, wdensinit, wdensthreshold
    41   USE lmdz_wake_ini , ONLY : sigmad, hwmin, wapecut, cstart, sigmaw_max, dens_rate, epsilon_loc
    42   USE lmdz_wake_ini , ONLY : iflag_wk_profile
    43   USE lmdz_wake_ini , ONLY : smallestreal,wk_nsub
    44 
    45 
     33  USE ioipsl_getin_p_mod, ONLY : getin_p
     34  USE dimphy
     35  use mod_phys_lmdz_para
     36  USE print_control_mod, ONLY: prt_level
    4637#ifdef ISO
    4738  USE infotrac_phy, ONLY : ntraciso=>ntiso
     
    6455  ! deltaqw    : specific humidity difference between wake and off-wake regions
    6556  ! sigmaw     : fractional area covered by wakes.
    66   ! asigmaw    : fractional area covered by active wakes.
    6757  ! wdens      : number of wakes per unit area
    68   ! awdens     : number of active wakes per unit area
    6958
    7059  ! Variable de sortie :
     
    8473  ! omg    : Delta_omg =vertical velocity diff. wake-undist. (Pa/s)
    8574  ! dp_deltomg  : vertical gradient of omg (s-1)
    86   ! wkspread  : spreading term in d_t_wake and d_q_wake
     75  ! spread  : spreading term in d_t_wake and d_q_wake
    8776  ! deltatw     : updated temperature difference (T_w-T_u).
    8877  ! deltaqw     : updated humidity difference (q_w-q_u).
    8978  ! sigmaw      : updated wake fractional area.
    90   ! asigmaw     : updated active wake fractional area.
    9179  ! d_deltat_gw : delta T tendency due to GW
    9280
     
    9482
    9583  ! aire : aire de la maille
    96   ! tb0  : horizontal average of temperature  (K)
    97   ! qb0  : horizontal average of humidity   (kg/kg)
     84  ! te0  : temperature dans l'environnement  (K)
     85  ! qe0  : humidite dans l'environnement     (kg/kg)
    9886  ! omgb : vitesse verticale moyenne sur la maille (Pa/s)
    9987  ! dtdwn: source de chaleur due aux descentes (K/s)
     
    115103  ! Variables internes :
    116104
    117   ! rho  : mean density at P levels
    118   ! rhoh : mean density at Ph levels
    119   ! tb   : mean temperature | may change within
    120   ! qb   : mean humidity    | sub-time-stepping
    121   ! thb  : mean potential temperature
    122   ! thx  : potential temperature in (x) area
    123   ! tx   : temperature  in (x) area
    124   ! qx   : humidity in (x) area
     105  ! rhow : masse volumique de la poche froide
     106  ! rho  : environment density at P levels
     107  ! rhoh : environment density at Ph levels
     108  ! te   : environment temperature | may change within
     109  ! qe   : environment humidity    | sub-time-stepping
     110  ! the  : environment potential temperature
     111  ! thu  : potential temperature in undisturbed area
     112  ! tu   :  temperature  in undisturbed area
     113  ! qu   : humidity in undisturbed area
    125114  ! dp_omgb: vertical gradient og LS omega
    126115  ! omgbw  : wake average vertical omega
     
    128117  ! omgbdq : flux of Delta_q transported by LS omega
    129118  ! dth  : potential temperature diff. wake-undist.
    130   ! th1  : first pot. temp. for vertical advection (=thx)
     119  ! th1  : first pot. temp. for vertical advection (=thu)
    131120  ! th2  : second pot. temp. for vertical advection (=thw)
    132121  ! q1   : first humidity for vertical advection
    133122  ! q2   : second humidity for vertical advection
    134   ! d_deltatw   : redistribution term for deltatw
    135   ! d_deltaqw   : redistribution term for deltaqw
    136   ! deltatw0   : initial deltatw
    137   ! deltaqw0   : initial deltaqw
     123  ! d_deltatw   : terme de redistribution pour deltatw
     124  ! d_deltaqw   : terme de redistribution pour deltaqw
     125  ! deltatw0   : deltatw initial
     126  ! deltaqw0   : deltaqw initial
    138127  ! hw0    : wake top hight (defined as the altitude at which deltatw=0)
    139128  ! amflux : horizontal mass flux through wake boundary
    140129  ! wdens_ref: initial number of wakes per unit area (3D) or per
    141   !            unit length (2D), at the beginning of each time step
    142   ! Tgw    : 1 sur la periode de onde de gravite
    143   ! Cgw    : vitesse de propagation de onde de gravite
    144   ! LL     : distance between 2 wakes
     130  ! unit length (2D), at the beginning of each time step
     131  ! Tgw    : 1 sur la période de onde de gravité
     132  ! Cgw    : vitesse de propagation de onde de gravité
     133  ! LL     : distance entre 2 poches
    145134
    146135  ! -------------------------------------------------------------------------
    147   ! Declaration de variables
     136  ! Déclaration de variables
    148137  ! -------------------------------------------------------------------------
    149138
     139  include "YOMCST.h"
     140  include "cvthermo.h"
    150141
    151142  ! Arguments en entree
    152143  ! --------------------
    153144
    154   INTEGER, INTENT(IN) :: klon,klev
    155145  INTEGER, DIMENSION (klon),        INTENT(IN)          :: znatsurf
    156146  REAL, DIMENSION (klon, klev),     INTENT(IN)          :: p, pi
     
    158148  REAL, DIMENSION (klon, klev),     INTENT(IN)          :: omgb
    159149  REAL,                             INTENT(IN)          :: dtime
    160   REAL, DIMENSION (klon, klev),     INTENT(IN)          :: tb0, qb0
     150  REAL, DIMENSION (klon, klev),     INTENT(IN)          :: te0, qe0
    161151  REAL, DIMENSION (klon, klev),     INTENT(IN)          :: dtdwn, dqdwn
    162152  REAL, DIMENSION (klon, klev),     INTENT(IN)          :: amdwn, amup
     
    166156  REAL, DIMENSION (klon),           INTENT(IN)          :: Cin
    167157#ifdef ISO
    168   REAL, DIMENSION (ntraciso,klon, klev),     INTENT(IN)          :: xtb0
     158  REAL, DIMENSION (ntraciso,klon, klev),     INTENT(IN)          :: xte0
    169159  REAL, DIMENSION (ntraciso,klon, klev),     INTENT(IN)          :: dxtdwn
    170160  REAL, DIMENSION (ntraciso,klon, klev),     INTENT(IN)          :: dxta
     
    176166  REAL, DIMENSION (klon, klev),     INTENT(INOUT)       :: deltatw, deltaqw
    177167  REAL, DIMENSION (klon),           INTENT(INOUT)       :: sigmaw
    178   REAL, DIMENSION (klon),           INTENT(INOUT)       :: asigmaw
     168  REAL, DIMENSION (klon),           INTENT(INOUT)       :: awdens
    179169  REAL, DIMENSION (klon),           INTENT(INOUT)       :: wdens
    180   REAL, DIMENSION (klon),           INTENT(INOUT)       :: awdens
    181170#ifdef ISO
    182171  REAL, DIMENSION (ntraciso,klon, klev),     INTENT(INOUT)       :: deltaxtw
     
    187176
    188177  REAL, DIMENSION (klon, klev),     INTENT(OUT)         :: dth
    189   REAL, DIMENSION (klon, klev),     INTENT(OUT)         :: tx, qx
     178  REAL, DIMENSION (klon, klev),     INTENT(OUT)         :: tu, qu
    190179  REAL, DIMENSION (klon, klev),     INTENT(OUT)         :: dtls, dqls
    191180  REAL, DIMENSION (klon, klev),     INTENT(OUT)         :: dtke, dqke
    192   REAL, DIMENSION (klon, klev),     INTENT(OUT)         :: wkspread    !  unused (jyg)
     181  REAL, DIMENSION (klon, klev),     INTENT(OUT)         :: spread    !  unused (jyg)
    193182  REAL, DIMENSION (klon, klev),     INTENT(OUT)         :: omgbdth, omg
    194183  REAL, DIMENSION (klon, klev),     INTENT(OUT)         :: dp_omgb, dp_deltomg
     184  REAL, DIMENSION (klon, klev),     INTENT(OUT)         :: d_deltat_gw
    195185  REAL, DIMENSION (klon),           INTENT(OUT)         :: hw, wape, fip, gfl, cstar
    196186  INTEGER, DIMENSION (klon),        INTENT(OUT)         :: ktopw
    197   ! Tendencies of state variables (2 is appended to the names of fields which are the cumul of fields
    198   !                                 computed at each sub-timestep; e.g. d_wdens2 is the cumul of d_wdens)
    199   REAL, DIMENSION (klon, klev),     INTENT(OUT)         :: d_deltat_gw
     187  ! Tendencies of state variables
    200188  REAL, DIMENSION (klon, klev),     INTENT(OUT)         :: d_deltatw2, d_deltaqw2
    201   REAL, DIMENSION (klon),           INTENT(OUT)         :: d_sigmaw2, d_asigmaw2, d_wdens2, d_awdens2
    202 
    203 #ifdef ISO
    204   REAL, DIMENSION (ntraciso,klon, klev),     INTENT(OUT)         :: xtx
     189  REAL, DIMENSION (klon),           INTENT(OUT)         :: d_sigmaw2, d_awdens2, d_wdens2
     190#ifdef ISO
     191  REAL, DIMENSION (ntraciso,klon, klev),     INTENT(OUT)         :: xtu
    205192  REAL, DIMENSION (ntraciso,klon, klev),     INTENT(OUT)         :: dxtls
    206193  REAL, DIMENSION (ntraciso,klon, klev),     INTENT(OUT)         :: dxtke
     
    211198  ! -------------------
    212199
    213   ! Variables a fixer
     200  ! Variables à fixer
     201  INTEGER, SAVE                                         :: igout
     202  !$OMP THREADPRIVATE(igout)
     203  LOGICAL, SAVE                                         :: first = .TRUE.
     204  !$OMP THREADPRIVATE(first)
     205!jyg<
     206!!  REAL, SAVE                                            :: stark, wdens_ref, coefgw, alpk
     207  REAL, SAVE, DIMENSION(2)                              :: wdens_ref
     208  REAL, SAVE                                            :: stark, coefgw, alpk
     209!>jyg
     210  REAL, SAVE                                            :: crep_upper, crep_sol 
     211  !$OMP THREADPRIVATE(stark, wdens_ref, coefgw, alpk, crep_upper, crep_sol)
     212
     213  REAL, SAVE                                            :: tau_cv
     214  !$OMP THREADPRIVATE(tau_cv)
     215  REAL, SAVE                                            :: rzero, aa0 ! minimal wake radius and area
     216  !$OMP THREADPRIVATE(rzero, aa0)
     217
     218  LOGICAL, SAVE                                         :: flag_wk_check_trgl
     219  !$OMP THREADPRIVATE(flag_wk_check_trgl)
     220  INTEGER, SAVE                                         :: iflag_wk_check_trgl
     221  !$OMP THREADPRIVATE(iflag_wk_check_trgl)
     222  INTEGER, SAVE                                         :: iflag_wk_pop_dyn
     223  !$OMP THREADPRIVATE(iflag_wk_pop_dyn)
    214224
    215225  REAL                                                  :: delta_t_min
     226  INTEGER                                               :: nsub
    216227  REAL                                                  :: dtimesub
     228  REAL, SAVE                                            :: wdensmin
     229  !$OMP THREADPRIVATE(wdensmin)
     230  REAL, SAVE                                            :: sigmad, hwmin, wapecut, cstart
     231  !$OMP THREADPRIVATE(sigmad, hwmin, wapecut, cstart)
     232  REAL, SAVE                                            :: sigmaw_max
     233  !$OMP THREADPRIVATE(sigmaw_max) 
     234  REAL, SAVE                                            :: dens_rate
     235  !$OMP THREADPRIVATE(dens_rate)
    217236  REAL                                                  :: wdens0
    218237  ! IM 080208
     
    222241  REAL, DIMENSION (klon, klev)                          :: deltatw0
    223242  REAL, DIMENSION (klon, klev)                          :: deltaqw0
    224   REAL, DIMENSION (klon, klev)                          :: tb, qb
     243  REAL, DIMENSION (klon, klev)                          :: te, qe
     244!!  REAL, DIMENSION (klon)                                :: sigmaw1
    225245#ifdef ISO
    226246  REAL, DIMENSION (ntraciso,klon, klev)                          :: deltaxtw0
    227   REAL, DIMENSION (ntraciso,klon, klev)                          :: xtb
    228 #endif
    229 
    230   ! Variables liees a la dynamique de population 1
     247  REAL, DIMENSION (ntraciso,klon, klev)                          :: xte
     248#endif
     249
     250  ! Variables liees a la dynamique de population
    231251  REAL, DIMENSION(klon)                                 :: act
    232252  REAL, DIMENSION(klon)                                 :: rad_wk, tau_wk_inv
    233253  REAL, DIMENSION(klon)                                 :: f_shear
    234254  REAL, DIMENSION(klon)                                 :: drdt
    235  
    236   ! Variables liees a la dynamique de population 2
    237   REAL, DIMENSION(klon)                                 :: cont_fact 
    238  
    239   ! Variables liees a la dynamique de population 3
    240   REAL, DIMENSION(klon)                                 :: arad_wk, irad_wk
    241  
    242 !!  REAL, DIMENSION(klon)                                 :: d_sig_gen, d_sig_death, d_sig_col
     255  REAL, DIMENSION(klon)                                 :: d_sig_gen, d_sig_death, d_sig_col
    243256  REAL, DIMENSION(klon)                                 :: wape1_act, wape2_act
    244257  LOGICAL, DIMENSION (klon)                             :: kill_wake
     258  INTEGER, SAVE                                         :: iflag_wk_act
     259  !$OMP THREADPRIVATE(iflag_wk_act)
    245260  REAL                                                  :: drdt_pos
    246261  REAL                                                  :: tau_wk_inv_min
    247   ! Some components of the tendencies of state variables 
    248   REAL, DIMENSION (klon)                                :: d_sig_gen2, d_sig_death2, d_sig_col2, d_sig_spread2, d_sig_bnd2
    249   REAL, DIMENSION (klon)                                :: d_asig_death2, d_asig_aicol2, d_asig_iicol2, d_asig_spread2, d_asig_bnd2
    250   REAL, DIMENSION (klon)                                :: d_dens_gen2, d_dens_death2, d_dens_col2, d_dens_bnd2
    251   REAL, DIMENSION (klon)                                :: d_adens_death2, d_adens_icol2, d_adens_acol2, d_adens_bnd2
    252262
    253263  ! Variables pour les GW
     
    258268
    259269  ! Variables liees au calcul de hw
    260   REAL, DIMENSION (klon)                                :: ptop
     270  REAL, DIMENSION (klon)                                :: ptop_provis, ptop, ptop_new
    261271  REAL, DIMENSION (klon)                                :: sum_dth
    262272  REAL, DIMENSION (klon)                                :: dthmin
     
    270280  ! Sub-timestep tendencies and related variables
    271281  REAL, DIMENSION (klon, klev)                          :: d_deltatw, d_deltaqw
    272   REAL, DIMENSION (klon, klev)                          :: d_tb, d_qb
    273   REAL, DIMENSION (klon)                                :: d_wdens, d_awdens, d_sigmaw, d_asigmaw
    274   REAL, DIMENSION (klon)                                :: d_sig_gen, d_sig_death, d_sig_col, d_sig_spread, d_sig_bnd
    275   REAL, DIMENSION (klon)                                :: d_asig_death, d_asig_aicol, d_asig_iicol, d_asig_spread, d_asig_bnd
    276   REAL, DIMENSION (klon)                                :: d_dens_gen, d_dens_death, d_dens_col, d_dens_bnd
    277   REAL, DIMENSION (klon)                                :: d_adens_death, d_adens_icol, d_adens_acol, d_adens_bnd
    278   REAL, DIMENSION (klon)                                :: agfl              !! gust front length of active wakes
    279                                                                              !!  per unit area
    280   REAL, DIMENSION (klon)                                :: alpha, alpha_tot
     282  REAL, DIMENSION (klon, klev)                          :: d_te, d_qe
     283  REAL, DIMENSION (klon)                                :: d_awdens, d_wdens
     284  REAL, DIMENSION (klon)                                :: d_sigmaw, alpha
    281285  REAL, DIMENSION (klon)                                :: q0_min, q1_min
    282286  LOGICAL, DIMENSION (klon)                             :: wk_adv, ok_qx_qw
    283287#ifdef ISO
    284288  REAL, DIMENSION (ntraciso,klon, klev)                          :: d_deltaxtw
    285   REAL, DIMENSION (ntraciso,klon, klev)                          :: d_xtb
    286 #endif
     289  REAL, DIMENSION (ntraciso,klon, klev)                          :: d_xte
     290#endif
     291  REAL, SAVE                                            :: epsilon
     292  !$OMP THREADPRIVATE(epsilon)
     293  DATA epsilon/1.E-15/
    287294
    288295  ! Autres variables internes
    289   INTEGER                                               ::isubstep, k, i, igout
    290 
    291   REAL                                                  :: wdensmin
    292 
     296  INTEGER                                               ::isubstep, k, i
     297
     298  REAL                                                  :: wdens_targ
    293299  REAL                                                  :: sigmaw_targ
    294   REAL                                                  :: wdens_targ
    295   REAL                                                  :: d_sigmaw_targ
    296   REAL                                                  :: d_wdens_targ
    297 
    298   REAL, DIMENSION (klon)                                :: sum_thx, sum_tx, sum_qx, sum_thvx
    299   REAL, DIMENSION (klon)                                :: sum_dq
     300
     301  REAL, DIMENSION (klon)                                :: sum_thu, sum_tu, sum_qu, sum_thvu
     302  REAL, DIMENSION (klon)                                :: sum_dq, sum_rho
    300303  REAL, DIMENSION (klon)                                :: sum_dtdwn, sum_dqdwn
    301   REAL, DIMENSION (klon)                                :: av_thx, av_tx, av_qx, av_thvx
    302   REAL, DIMENSION (klon)                                :: av_dth, av_dq
     304  REAL, DIMENSION (klon)                                :: av_thu, av_tu, av_qu, av_thvu
     305  REAL, DIMENSION (klon)                                :: av_dth, av_dq, av_rho
    303306  REAL, DIMENSION (klon)                                :: av_dtdwn, av_dqdwn
    304 
    305   REAL, DIMENSION (klon, klev)                          :: rho
     307! pas besoin d'isos ici
     308
     309  REAL, DIMENSION (klon, klev)                          :: rho, rhow
    306310  REAL, DIMENSION (klon, klev+1)                        :: rhoh
     311  REAL, DIMENSION (klon, klev)                          :: rhow_moyen
    307312  REAL, DIMENSION (klon, klev)                          :: zh
    308313  REAL, DIMENSION (klon, klev+1)                        :: zhh
    309 
    310   REAL, DIMENSION (klon, klev)                          :: thb, thx
     314  REAL, DIMENSION (klon, klev)                          :: epaisseur1, epaisseur2
     315
     316  REAL, DIMENSION (klon, klev)                          :: the, thu
    311317
    312318  REAL, DIMENSION (klon, klev)                          :: omgbw
     
    343349  REAL, DIMENSION (klon, klev)                          :: detr
    344350
    345   REAL, DIMENSION(klon)                                 :: sigmaw_in, asigmaw_in ! pour les prints
    346   REAL, DIMENSION(klon)                                 :: wdens_in, awdens_in   ! pour les prints
    347 
    348 !!!  LOGICAL                                               :: phys_sub=.true.
    349   LOGICAL                                               :: phys_sub=.false.
    350 
    351   LOGICAL                                               :: first_call=.true.
    352 
    353 
    354   !!-- variables liees au nouveau calcul de ptop et hw
    355   REAL, DIMENSION (klon, klev)                          :: int_dth
    356   REAL, DIMENSION (klon, klev)                          :: zzz, dzzz
    357   REAL                                                  :: epsil
    358   REAL, DIMENSION (klon)                                :: ptop1
    359   INTEGER, DIMENSION (klon)                             :: ktop1
    360   REAL, DIMENSION (klon)                                :: omega
    361   REAL, DIMENSION (klon)                                :: h_zzz
    362 
    363 !print*,'WAKE LJYFz'
     351  REAL, DIMENSION(klon)                                 :: sigmaw_in             ! pour les prints
     352  REAL, DIMENSION(klon)                                 :: awdens_in, wdens_in   ! pour les prints
    364353
    365354  ! -------------------------------------------------------------------------
    366355  ! Initialisations
    367356  ! -------------------------------------------------------------------------
     357
     358  ! print*, 'wake initialisations'
     359!#ifdef ISOVERIF
     360!        write(*,*) 'wake 358: entree'
     361!#endif
     362
     363  ! Essais d'initialisation avec sigmaw = 0.02 et hw = 10.
     364  ! -------------------------------------------------------------------------
     365
     366!!  DATA wapecut, sigmad, hwmin/5., .02, 10./
     367!!  DATA wapecut, sigmad, hwmin/1., .02, 10./
     368  DATA sigmad, hwmin/.02, 10./
     369!!  DATA wdensmin/1.e-12/
     370  DATA wdensmin/1.e-14/
     371  ! cc nrlmd
     372  DATA sigmaw_max/0.4/
     373  DATA dens_rate/0.1/
     374  ! cc
     375  ! Longueur de maille (en m)
     376  ! -------------------------------------------------------------------------
     377
    368378  ! ALON = 3.e5
    369379  ! alon = 1.E6
     
    372382  f_shear(:) = 1.       ! 0. for strong shear, 1. for weak shear
    373383
     384
    374385  ! Configuration de coefgw,stark,wdens (22/02/06 by YU Jingmei)
    375386
    376   ! coefgw : Coefficient pour les ondes de gravite
     387  ! coefgw : Coefficient pour les ondes de gravité
    377388  ! stark : Coefficient k dans Cstar=k*sqrt(2*WAPE)
    378   ! wdens : Densite surfacique de poche froide
     389  ! wdens : Densité surfacique de poche froide
    379390  ! -------------------------------------------------------------------------
    380391
     
    389400  ! alpk = 0.5
    390401  ! alpk = 0.05
     402
     403 if (first) then
     404
     405  igout = klon/2+1/klon
     406
     407  crep_upper = 0.9
     408  crep_sol = 1.0
     409
     410  ! Get wapecut from parameter file
     411  wapecut = 1.
     412  CALL getin_p('wapecut', wapecut)
     413
     414  ! cc nrlmd Lecture du fichier wake_param.data
     415  stark=0.33
     416  CALL getin_p('stark',stark)
     417  cstart = stark*sqrt(2.*wapecut)
     418
     419  alpk=0.25
     420  CALL getin_p('alpk',alpk)
     421!jyg<
     422!!  wdens_ref=8.E-12
     423!!  CALL getin_p('wdens_ref',wdens_ref)
     424  wdens_ref(1)=8.E-12
     425  wdens_ref(2)=8.E-12
     426  CALL getin_p('wdens_ref_o',wdens_ref(1))    !wake number per unit area ; ocean
     427  CALL getin_p('wdens_ref_l',wdens_ref(2))    !wake number per unit area ; land
     428!>jyg
    391429!
    392  igout = klon/2+1/klon
     430!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     431!!!!!!!!!  Population dynamics parameters    !!!!!!!!!!!!!!!!!!!!!!!!!!!!
     432!------------------------------------------------------------------------
     433
     434  iflag_wk_pop_dyn = 0
     435  CALL getin_p('iflag_wk_pop_dyn',iflag_wk_pop_dyn) ! switch between wdens prescribed
     436                                                    ! and wdens prognostic
     437  iflag_wk_act = 0
     438  CALL getin_p('iflag_wk_act',iflag_wk_act) ! 0: act(:)=0.
     439                                            ! 1: act(:)=1.
     440                                            ! 2: act(:)=f(Wape)
     441
     442  rzero = 5000.
     443  CALL getin_p('rzero_wk', rzero)
     444  aa0 = 3.14*rzero*rzero
    393445!
    394 !   sub-time-stepping parameters
    395   dtimesub = dtime/wk_nsub
    396 !
    397 IF (first_call) THEN
    398 !!#define IOPHYS_WK
    399 #undef IOPHYS_WK
    400 #ifdef IOPHYS_WK
    401   IF (phys_sub) THEN
    402     call iophys_ini(dtimesub)
    403   ELSE
    404     call iophys_ini(dtime)
    405   ENDIF
    406 #endif
    407   first_call = .false.
    408 ENDIF   !(first_call)
     446  tau_cv = 4000.
     447  CALL getin_p('tau_cv', tau_cv)
     448
     449!------------------------------------------------------------------------
     450
     451  coefgw=4.
     452  CALL getin_p('coefgw',coefgw)
     453
     454  WRITE(*,*) 'stark=', stark
     455  WRITE(*,*) 'alpk=', alpk
     456!jyg<
     457!!  WRITE(*,*) 'wdens_ref=', wdens_ref
     458  WRITE(*,*) 'wdens_ref_o=', wdens_ref(1)
     459  WRITE(*,*) 'wdens_ref_l=', wdens_ref(2)
     460!>jyg
     461  WRITE(*,*) 'iflag_wk_pop_dyn=',iflag_wk_pop_dyn
     462  WRITE(*,*) 'iflag_wk_act',iflag_wk_act
     463  WRITE(*,*) 'coefgw=', coefgw
     464
     465  flag_wk_check_trgl=.false.
     466  CALL getin_p('flag_wk_check_trgl ', flag_wk_check_trgl)
     467  WRITE(*,*) 'flag_wk_check_trgl=', flag_wk_check_trgl
     468  WRITE(*,*) 'flag_wk_check_trgl OBSOLETE. Utilisr iflag_wk_check_trgl plutot'
     469  iflag_wk_check_trgl=0 ; IF (flag_wk_check_trgl) iflag_wk_check_trgl=1
     470  CALL getin_p('iflag_wk_check_trgl ', iflag_wk_check_trgl)
     471  WRITE(*,*) 'iflag_wk_check_trgl=', iflag_wk_check_trgl
     472
     473  first=.false.
     474 endif
    409475
    410476 IF (iflag_wk_pop_dyn == 0) THEN
     
    419485  !>jyg
    420486 ENDIF  ! (iflag_wk_pop_dyn == 0)
    421 !
    422  IF (iflag_wk_pop_dyn >=1) THEN
    423    IF (iflag_wk_pop_dyn == 3) THEN
    424      wdensmin = wdensthreshold
    425    ELSE
    426      wdensmin = wdensinit
    427    ENDIF
    428  ENDIF
    429487
    430488  ! print*,'stark',stark
     
    436494  ! -------------------------------------------------------------------------
    437495
    438    delta_t_min = 0.2
     496  delta_t_min = 0.2
    439497
    440498  ! 1. - Save initial values, initialize tendencies, initialize output fields
     
    447505!!      deltatw0(i, k) = deltatw(i, k)
    448506!!      deltaqw0(i, k) = deltaqw(i, k)
    449 !!      tb(i, k) = tb0(i, k)
    450 !!      qb(i, k) = qb0(i, k)
     507!!      te(i, k) = te0(i, k)
     508!!      qe(i, k) = qe0(i, k)
    451509!!      dtls(i, k) = 0.
    452510!!      dqls(i, k) = 0.
    453511!!      d_deltat_gw(i, k) = 0.
    454 !!      d_tb(i, k) = 0.
    455 !!      d_qb(i, k) = 0.
     512!!      d_te(i, k) = 0.
     513!!      d_qe(i, k) = 0.
    456514!!      d_deltatw(i, k) = 0.
    457515!!      d_deltaqw(i, k) = 0.
     
    465523      deltatw0(:,:) = deltatw(:,:)
    466524      deltaqw0(:,:) = deltaqw(:,:)
    467       tb(:,:) = tb0(:,:)
    468       qb(:,:) = qb0(:,:)
     525      te(:,:) = te0(:,:)
     526      qe(:,:) = qe0(:,:)
    469527      dtls(:,:) = 0.
    470528      dqls(:,:) = 0.
    471529      d_deltat_gw(:,:) = 0.
    472       d_tb(:,:) = 0.
    473       d_qb(:,:) = 0.
     530      d_te(:,:) = 0.
     531      d_qe(:,:) = 0.
    474532      d_deltatw(:,:) = 0.
    475533      d_deltaqw(:,:) = 0.
    476534      d_deltatw2(:,:) = 0.
    477       d_deltaqw2(:,:) = 0.
     535      d_deltaqw2(:,:) = 0. 
    478536#ifdef ISO
    479537      deltaxtw0(:,:,:)= deltaxtw(:,:,:)
    480       xtb(:,:,:) = xtb0(:,:,:)
     538      xte(:,:,:) = xte0(:,:,:)
    481539      dxtls(:,:,:) = 0.
    482       d_xtb(:,:,:) = 0.
     540      d_xte(:,:,:) = 0.
    483541      d_deltaxtw(:,:,:) = 0.
    484542      d_deltaxtw2(:,:,:)=0.
    485 #endif
    486 
    487       d_sig_gen2(:)   = 0.
    488       d_sig_death2(:) = 0.
    489       d_sig_col2(:)   = 0.
    490       d_sig_spread2(:)= 0.
    491       d_asig_death2(:) = 0.
    492       d_asig_iicol2(:) = 0.
    493       d_asig_aicol2(:) = 0.
    494       d_asig_spread2(:)= 0.
    495       d_asig_bnd2(:) = 0.
    496       d_asigmaw2(:) = 0.
    497 !
    498       d_dens_gen2(:)   = 0.
    499       d_dens_death2(:) = 0.
    500       d_dens_col2(:)   = 0.
    501       d_dens_bnd2(:) = 0.
    502       d_wdens2(:) = 0.
    503       d_adens_bnd2(:) = 0.
    504       d_awdens2(:) = 0.
    505       d_adens_death2(:) = 0.
    506       d_adens_icol2(:) = 0.
    507       d_adens_acol2(:) = 0.
     543      xt1(:,:,:) = 0.
     544      xt2(:,:,:)=0.   
     545      ! init non indispensable mais facilite verif iso
     546      q1(:,:)=0.0
     547      q2(:,:)=0.0
     548#endif
    508549
    509550      IF (iflag_wk_act == 0) THEN
     
    516557!!   sigmaw_in(i) = sigmaw(i)
    517558!!  END DO
    518    sigmaw_in(:)  = sigmaw(:)
    519    asigmaw_in(:) = asigmaw(:)
     559   sigmaw_in(:) = sigmaw(:)
    520560!>jyg
     561
     562  ! sigmaw1=sigmaw
     563  ! IF (sigd_con.GT.sigmaw1) THEN
     564  ! print*, 'sigmaw,sigd_con', sigmaw, sigd_con
     565  ! ENDIF
     566  IF (iflag_wk_pop_dyn >=1) THEN
     567    DO i = 1, klon
     568      wdens_targ = max(wdens(i),wdensmin)
     569      d_wdens2(i) = wdens_targ - wdens(i)
     570      wdens(i) = wdens_targ
     571    END DO
     572  ELSE
     573    DO i = 1, klon
     574      d_awdens2(i) = 0.
     575      d_wdens2(i) = 0.
     576    END DO
     577  ENDIF  ! (iflag_wk_pop_dyn >=1)
     578!
     579  DO i = 1, klon
     580    ! c      sigmaw(i) = amax1(sigmaw(i),sigd_con(i))
     581!jyg<
     582!!    sigmaw(i) = amax1(sigmaw(i), sigmad)
     583!!    sigmaw(i) = amin1(sigmaw(i), 0.99)
     584    sigmaw_targ = min(max(sigmaw(i), sigmad),0.99)
     585    d_sigmaw2(i) = sigmaw_targ - sigmaw(i)
     586    sigmaw(i) = sigmaw_targ
     587!>jyg
     588  END DO
     589
    521590!
    522591  IF (iflag_wk_pop_dyn >= 1) THEN
     
    528597  ENDIF  ! (iflag_wk_pop_dyn >= 1)
    529598
    530 
    531   ! sigmaw1=sigmaw
    532   ! IF (sigd_con.GT.sigmaw1) THEN
    533   ! print*, 'sigmaw,sigd_con', sigmaw, sigd_con
    534   ! ENDIF
    535   IF (iflag_wk_pop_dyn >= 1) THEN
    536     DO i = 1, klon
    537       d_dens_gen2(i)   = 0.
    538       d_dens_death2(i) = 0.
    539       d_dens_col2(i)   = 0.
    540       d_awdens2(i) = 0.
    541       IF (wdens(i) < wdensthreshold) THEN
    542   !!      wdens_targ = max(wdens(i),wdensmin)
    543         wdens_targ = max(wdens(i),wdensinit)
    544         d_dens_bnd2(i) = wdens_targ - wdens(i)
    545         d_wdens2(i) = wdens_targ - wdens(i)
    546         wdens(i) = wdens_targ
    547       ELSE
    548         d_dens_bnd2(i) = 0.
    549         d_wdens2(i) = 0.
    550       ENDIF  !! (wdens(i) < wdensthreshold)
    551     END DO
    552     IF (iflag_wk_pop_dyn >= 2) THEN
    553       DO i = 1, klon 
    554         IF (awdens(i) < wdensthreshold) THEN
    555 !!          wdens_targ = min(max(awdens(i),wdensmin),wdens(i))
    556             wdens_targ = min(max(awdens(i),wdensinit),wdens(i))
    557             d_adens_bnd2(i) = wdens_targ - awdens(i)
    558             d_awdens2(i) = wdens_targ - awdens(i)
    559             awdens(i) = wdens_targ
    560         ELSE
    561             wdens_targ = min(awdens(i), wdens(i))
    562             d_adens_bnd2(i) = wdens_targ - awdens(i)
    563             d_awdens2(i) = wdens_targ - awdens(i)
    564             awdens(i) = wdens_targ
    565         ENDIF
    566       END DO
    567     ENDIF ! (iflag_wk_pop_dyn >= 2)
    568   ELSE 
    569     DO i = 1, klon
    570       d_awdens2(i) = 0.
    571       d_wdens2(i) = 0.
    572     END DO
    573   ENDIF  ! (iflag_wk_pop_dyn >= 1)
    574 !
    575   DO i = 1, klon
    576     sigmaw_targ = min(max(sigmaw(i), sigmad),0.99)
    577     d_sig_bnd2(i) = sigmaw_targ - sigmaw(i)
    578     d_sigmaw2(i) = sigmaw_targ - sigmaw(i)
    579     sigmaw(i) = sigmaw_targ
    580   END DO
    581 !
    582   IF (iflag_wk_pop_dyn == 3) THEN
    583      DO i = 1, klon 
    584         IF ((wdens(i)-awdens(i)) <= smallestreal) THEN
    585           sigmaw_targ = sigmaw(i)
    586         ELSE
    587           sigmaw_targ = min(max(asigmaw(i),sigmad),sigmaw(i))
    588         ENDIF
    589         d_asig_bnd2(i) = sigmaw_targ - asigmaw(i)
    590         d_asigmaw2(i) = sigmaw_targ - asigmaw(i)
    591         asigmaw(i) = sigmaw_targ
    592      END DO
    593   ENDIF ! (iflag_wk_pop_dyn == 3)
    594 
    595599  wape(:) = 0.
    596600  wape2(:) = 0.
    597601  d_sigmaw(:) = 0.
    598   d_asigmaw(:) = 0.
    599602  ktopw(:) = 0
    600603!
    601604!<jyg
    602605dth(:,:) = 0.
    603 tx(:,:) = 0.
    604 qx(:,:) = 0.
     606tu(:,:) = 0.
     607qu(:,:) = 0.
    605608dtke(:,:) = 0.
    606609dqke(:,:) = 0.
    607 wkspread(:,:) = 0.
     610spread(:,:) = 0.
    608611omgbdth(:,:) = 0.
    609612omg(:,:) = 0.
     
    623626omgbdq(:,:) = 0.
    624627#ifdef ISO
    625 xtx(:,:,:) = 0.
     628xtu(:,:,:) = 0.
    626629dxtke(:,:,:) = 0.
    627630omgbdxt(:,:,:) = 0.
     
    652655    ktop(i) = 0
    653656    kupper(i) = 0
    654     sum_thx(i) = 0.
    655     sum_tx(i) = 0.
    656     sum_qx(i) = 0.
    657     sum_thvx(i) = 0.
     657    sum_thu(i) = 0.
     658    sum_tu(i) = 0.
     659    sum_qu(i) = 0.
     660    sum_thvu(i) = 0.
    658661    sum_dth(i) = 0.
    659662    sum_dq(i) = 0.
     663    sum_rho(i) = 0.
    660664    sum_dtdwn(i) = 0.
    661665    sum_dqdwn(i) = 0.
    662666
    663     av_thx(i) = 0.
    664     av_tx(i) = 0.
    665     av_qx(i) = 0.
    666     av_thvx(i) = 0.
     667    av_thu(i) = 0.
     668    av_tu(i) = 0.
     669    av_qu(i) = 0.
     670    av_thvu(i) = 0.
    667671    av_dth(i) = 0.
    668672    av_dq(i) = 0.
     673    av_rho(i) = 0.
    669674    av_dtdwn(i) = 0.
    670675    av_dqdwn(i) = 0.
     
    672677  END DO
    673678
     679
     680#ifdef ISOVERIF
     681      ! TODO     
     682#endif
     683
    674684  ! Distance between wakes
    675685  DO i = 1, klon
     
    680690  DO k = 1, klev
    681691    DO i = 1, klon
    682       ! write(*,*)'wake 1',i,k,RD,tb(i,k)
    683       rho(i, k) = p(i, k)/(RD*tb(i,k))
     692      ! write(*,*)'wake 1',i,k,rd,te(i,k)
     693      rho(i, k) = p(i, k)/(rd*te(i,k))
    684694      ! write(*,*)'wake 2',rho(i,k)
    685695      IF (k==1) THEN
    686         ! write(*,*)'wake 3',i,k,rd,tb(i,k)
    687         rhoh(i, k) = ph(i, k)/(RD*tb(i,k))
    688         ! write(*,*)'wake 4',i,k,rd,tb(i,k)
     696        ! write(*,*)'wake 3',i,k,rd,te(i,k)
     697        rhoh(i, k) = ph(i, k)/(rd*te(i,k))
     698        ! write(*,*)'wake 4',i,k,rd,te(i,k)
    689699        zhh(i, k) = 0
    690700      ELSE
    691         ! write(*,*)'wake 5',rd,(tb(i,k)+tb(i,k-1))
    692         rhoh(i, k) = ph(i, k)*2./(RD*(tb(i,k)+tb(i,k-1)))
     701        ! write(*,*)'wake 5',rd,(te(i,k)+te(i,k-1))
     702        rhoh(i, k) = ph(i, k)*2./(rd*(te(i,k)+te(i,k-1)))
    693703        ! write(*,*)'wake 6',(-rhoh(i,k)*RG)+zhh(i,k-1)
    694         zhh(i, k) = (ph(i,k)-ph(i,k-1))/(-rhoh(i,k)*RG) + zhh(i, k-1)
     704        zhh(i, k) = (ph(i,k)-ph(i,k-1))/(-rhoh(i,k)*rg) + zhh(i, k-1)
    695705      END IF
    696706      ! write(*,*)'wake 7',ppi(i,k)
    697       thb(i, k) = tb(i, k)/ppi(i, k)
    698       thx(i, k) = (tb(i,k)-deltatw(i,k)*sigmaw(i))/ppi(i, k)
    699       tx(i, k) = tb(i, k) - deltatw(i, k)*sigmaw(i)
    700       qx(i, k) = qb(i, k) - deltaqw(i, k)*sigmaw(i)
    701       ! write(*,*)'wake 8',(RD*(tb(i,k)+deltatw(i,k)))
     707      the(i, k) = te(i, k)/ppi(i, k)
     708      thu(i, k) = (te(i,k)-deltatw(i,k)*sigmaw(i))/ppi(i, k)
     709      tu(i, k) = te(i, k) - deltatw(i, k)*sigmaw(i)
     710      qu(i, k) = qe(i, k) - deltaqw(i, k)*sigmaw(i)
     711      ! write(*,*)'wake 8',(rd*(te(i,k)+deltatw(i,k)))
     712      rhow(i, k) = p(i, k)/(rd*(te(i,k)+deltatw(i,k)))
    702713      dth(i, k) = deltatw(i, k)/ppi(i, k)
    703714#ifdef ISO
    704715        do ixt=1,ntraciso
    705           xtx(ixt,i,k)  =  xtb(ixt,i,k) - deltaxtw(ixt,i,k)*sigmaw(i)
     716          xtu(ixt,i,k)  =  xte(ixt,i,k) - deltaxtw(ixt,i,k)*sigmaw(i)
    706717        enddo !do ixt=1,ntraciso
    707718#ifdef ISOVERIF
    708719        if (iso_eau.gt.0) then
    709720              call iso_verif_egalite(deltaqw(i,k),deltaxtw(iso_eau,i,k),'wake 723a')
    710               call iso_verif_egalite(qx(i,k),xtx(iso_eau,i,k),'wake 723b')
     721              call iso_verif_egalite(qu(i,k),xtu(iso_eau,i,k),'wake 723b')
    711722        endif
    712723        if (iso_HDO.gt.0) then
    713                if (iso_verif_aberrant_enc_choix_nostop(xtx(iso_hdo,i,k),qx(i,k),ridicule,deltalim, &
    714                         'wake 723c xtx').eq.1) then
     724               if (iso_verif_aberrant_enc_choix_nostop(xtu(iso_hdo,i,k),qu(i,k),ridicule,deltalim, &
     725                        'wake 723c xtu').eq.1) then
    715726                     stop
    716727               endif
     
    721732  END DO
    722733
     734
     735
    723736  DO k = 1, klev - 1
    724737    DO i = 1, klon
     
    726739        n2(i, k) = 0
    727740      ELSE
    728         n2(i, k) = amax1(0., -RG**2/thb(i,k)*rho(i,k)*(thb(i,k+1)-thb(i,k-1))/ &
     741        n2(i, k) = amax1(0., -rg**2/the(i,k)*rho(i,k)*(the(i,k+1)-the(i,k-1))/ &
    729742                             (p(i,k+1)-p(i,k-1)))
    730743      END IF
     
    743756  END DO
    744757
    745  
     758  ! Calcul de la masse volumique moyenne de la colonne   (bdlmd)
     759  ! -----------------------------------------------------------------
     760
     761  DO k = 1, klev
     762    DO i = 1, klon
     763      epaisseur1(i, k) = 0.
     764      epaisseur2(i, k) = 0.
     765    END DO
     766  END DO
     767
     768  DO i = 1, klon
     769    epaisseur1(i, 1) = -(ph(i,2)-ph(i,1))/(rho(i,1)*rg) + 1.
     770    epaisseur2(i, 1) = -(ph(i,2)-ph(i,1))/(rho(i,1)*rg) + 1.
     771    rhow_moyen(i, 1) = rhow(i, 1)
     772  END DO
     773
     774  DO k = 2, klev
     775    DO i = 1, klon
     776      epaisseur1(i, k) = -(ph(i,k+1)-ph(i,k))/(rho(i,k)*rg) + 1.
     777      epaisseur2(i, k) = epaisseur2(i, k-1) + epaisseur1(i, k)
     778      rhow_moyen(i, k) = (rhow_moyen(i,k-1)*epaisseur2(i,k-1)+rhow(i,k)* &
     779        epaisseur1(i,k))/epaisseur2(i, k)
     780    END DO
     781  END DO
     782
     783
    746784  ! Choose an integration bound well above wake top
    747785  ! -----------------------------------------------------------------
    748786
     787  ! Pupper = 50000.  ! melting level
     788  ! Pupper = 60000.
     789  ! Pupper = 80000.  ! essais pour case_e
     790  DO i = 1, klon
     791    pupper(i) = 0.6*ph(i, 1)
     792    pupper(i) = max(pupper(i), 45000.)
     793    ! cc        Pupper(i) = 60000.
     794  END DO
     795
     796
    749797  ! Determine Wake top pressure (Ptop) from buoyancy integral
    750798  ! --------------------------------------------------------
    751799
    752    Do i=1, klon
    753        wk_adv(i) = .True.
    754    Enddo
    755    Call pkupper (klon, klev, ptop, ph, p, pupper, kupper, &
    756                     dth, hw0, rho, delta_t_min, &
    757                     ktop, wk_adv, h_zzz, ptop1, ktop1)
    758  
    759    !!print'("pkupper APPEL ",7i6)',0,int(ptop/100.),int(ptop1/100.),int(pupper/100.),ktop,ktop1,kupper
    760    
    761    IF (prt_level>=10) THEN
    762      PRINT *, 'wake-3, ktop(igout), kupper(igout) ', ktop(igout), kupper(igout)
     800  ! -1/ Pressure of the level where dth becomes less than delta_t_min.
     801
     802  DO i = 1, klon
     803    ptop_provis(i) = ph(i, 1)
     804  END DO
     805  DO k = 2, klev
     806    DO i = 1, klon
     807
     808      ! IM v3JYG; ptop_provis(i).LT. ph(i,1)
     809
     810      IF (dth(i,k)>-delta_t_min .AND. dth(i,k-1)<-delta_t_min .AND. &
     811          ptop_provis(i)==ph(i,1)) THEN
     812        ptop_provis(i) = ((dth(i,k)+delta_t_min)*p(i,k-1)- &
     813                          (dth(i,k-1)+delta_t_min)*p(i,k))/(dth(i,k)-dth(i,k-1))
     814      END IF
     815    END DO
     816  END DO
     817
     818  ! -2/ dth integral
     819
     820  DO i = 1, klon
     821    sum_dth(i) = 0.
     822    dthmin(i) = -delta_t_min
     823    z(i) = 0.
     824  END DO
     825
     826  DO k = 1, klev
     827    DO i = 1, klon
     828      dz(i) = -(amax1(ph(i,k+1),ptop_provis(i))-ph(i,k))/(rho(i,k)*rg)
     829      IF (dz(i)>0) THEN
     830        z(i) = z(i) + dz(i)
     831        sum_dth(i) = sum_dth(i) + dth(i, k)*dz(i)
     832        dthmin(i) = amin1(dthmin(i), dth(i,k))
     833      END IF
     834    END DO
     835  END DO
     836
     837  ! -3/ height of triangle with area= sum_dth and base = dthmin
     838
     839  DO i = 1, klon
     840    hw0(i) = 2.*sum_dth(i)/amin1(dthmin(i), -0.5)
     841    hw0(i) = amax1(hwmin, hw0(i))
     842  END DO
     843
     844  ! -4/ now, get Ptop
     845
     846  DO i = 1, klon
     847    z(i) = 0.
     848    ptop(i) = ph(i, 1)
     849  END DO
     850
     851  DO k = 1, klev
     852    DO i = 1, klon
     853      dz(i) = amin1(-(ph(i,k+1)-ph(i,k))/(rho(i,k)*rg), hw0(i)-z(i))
     854      IF (dz(i)>0) THEN
     855        z(i) = z(i) + dz(i)
     856        ptop(i) = ph(i, k) - rho(i, k)*rg*dz(i)
     857      END IF
     858    END DO
     859  END DO
     860
     861  IF (prt_level>=10) THEN
     862    PRINT *, 'wake-2, ptop_provis(igout), ptop(igout) ', ptop_provis(igout), ptop(igout)
     863  ENDIF
     864
     865
     866  ! -5/ Determination de ktop et kupper
     867
     868  DO k = klev, 1, -1
     869    DO i = 1, klon
     870      IF (ph(i,k+1)<ptop(i)) ktop(i) = k
     871      IF (ph(i,k+1)<pupper(i)) kupper(i) = k
     872    END DO
     873  END DO
     874
     875  ! On evite kupper = 1 et kupper = klev
     876  DO i = 1, klon
     877    kupper(i) = max(kupper(i), 2)
     878    kupper(i) = min(kupper(i), klev-1)
     879  END DO
     880
     881
     882  ! -6/ Correct ktop and ptop
     883
     884  DO i = 1, klon
     885    ptop_new(i) = ptop(i)
     886  END DO
     887  DO k = klev, 2, -1
     888    DO i = 1, klon
     889      IF (k<=ktop(i) .AND. ptop_new(i)==ptop(i) .AND. &
     890          dth(i,k)>-delta_t_min .AND. dth(i,k-1)<-delta_t_min) THEN
     891        ptop_new(i) = ((dth(i,k)+delta_t_min)*p(i,k-1)-(dth(i, &
     892          k-1)+delta_t_min)*p(i,k))/(dth(i,k)-dth(i,k-1))
     893      END IF
     894    END DO
     895  END DO
     896
     897  DO i = 1, klon
     898    ptop(i) = ptop_new(i)
     899  END DO
     900
     901  DO k = klev, 1, -1
     902    DO i = 1, klon
     903      IF (ph(i,k+1)<ptop(i)) ktop(i) = k
     904    END DO
     905  END DO
     906
     907  IF (prt_level>=10) THEN
     908    PRINT *, 'wake-3, ktop(igout), kupper(igout) ', ktop(igout), kupper(igout)
    763909  ENDIF
    764910
     
    771917        deltaqw(i, k) = 0.
    772918        d_deltatw2(i,k) = -deltatw0(i,k)
    773         d_deltaqw2(i,k) = -deltaqw0(i,k)
    774919#ifdef ISO
    775920        do ixt=1,ntraciso
     
    796941  ! --------------------------------------
    797942
    798   ! Initialize sum_thvx to 1st level virt. pot. temp.
     943  ! Initialize sum_thvu to 1st level virt. pot. temp.
    799944
    800945  DO i = 1, klon
    801946    z(i) = 1.
    802947    dz(i) = 1.
    803     sum_thvx(i) = thx(i, 1)*(1.+epsim1*qx(i,1))*dz(i)
     948    sum_thvu(i) = thu(i, 1)*(1.+epsim1*qu(i,1))*dz(i)
    804949    sum_dth(i) = 0.
    805950  END DO
     
    807952  DO k = 1, klev
    808953    DO i = 1, klon
    809       dz(i) = -(amax1(ph(i,k+1),ptop(i))-ph(i,k))/(rho(i,k)*RG)
     954      dz(i) = -(amax1(ph(i,k+1),ptop(i))-ph(i,k))/(rho(i,k)*rg)
    810955      IF (dz(i)>0) THEN
    811               ! LJYF : ecriture pas sympa avec un tableau z(i) qui n'est pas utilise come tableau
    812956        z(i) = z(i) + dz(i)
    813         sum_thx(i) = sum_thx(i) + thx(i, k)*dz(i)
    814         sum_tx(i) = sum_tx(i) + tx(i, k)*dz(i)
    815         sum_qx(i) = sum_qx(i) + qx(i, k)*dz(i)
    816         sum_thvx(i) = sum_thvx(i) + thx(i, k)*(1.+epsim1*qx(i,k))*dz(i)
     957        sum_thu(i) = sum_thu(i) + thu(i, k)*dz(i)
     958        sum_tu(i) = sum_tu(i) + tu(i, k)*dz(i)
     959        sum_qu(i) = sum_qu(i) + qu(i, k)*dz(i)
     960        sum_thvu(i) = sum_thvu(i) + thu(i, k)*(1.+epsim1*qu(i,k))*dz(i)
    817961        sum_dth(i) = sum_dth(i) + dth(i, k)*dz(i)
    818962        sum_dq(i) = sum_dq(i) + deltaqw(i, k)*dz(i)
     963        sum_rho(i) = sum_rho(i) + rhow(i, k)*dz(i)
    819964        sum_dtdwn(i) = sum_dtdwn(i) + dtdwn(i, k)*dz(i)
    820965        sum_dqdwn(i) = sum_dqdwn(i) + dqdwn(i, k)*dz(i)
     
    836981
    837982  DO i = 1, klon
    838     av_thx(i) = sum_thx(i)/hw0(i)
    839     av_tx(i) = sum_tx(i)/hw0(i)
    840     av_qx(i) = sum_qx(i)/hw0(i)
    841     av_thvx(i) = sum_thvx(i)/hw0(i)
     983    av_thu(i) = sum_thu(i)/hw0(i)
     984    av_tu(i) = sum_tu(i)/hw0(i)
     985    av_qu(i) = sum_qu(i)/hw0(i)
     986    av_thvu(i) = sum_thvu(i)/hw0(i)
    842987    ! av_thve = sum_thve/hw0
    843988    av_dth(i) = sum_dth(i)/hw0(i)
    844989    av_dq(i) = sum_dq(i)/hw0(i)
     990    av_rho(i) = sum_rho(i)/hw0(i)
    845991    av_dtdwn(i) = sum_dtdwn(i)/hw0(i)
    846992    av_dqdwn(i) = sum_dqdwn(i)/hw0(i)
    847993
    848     wape(i) = -RG*hw0(i)*(av_dth(i)+ &
    849         epsim1*(av_thx(i)*av_dq(i)+av_dth(i)*av_qx(i)+av_dth(i)*av_dq(i)))/av_thvx(i)
    850 
    851   END DO
    852 #ifdef IOPHYS_WK
    853   IF (.not.phys_sub) CALL iophys_ecrit('wape_a',1,'wape_a','J/kg',wape)
    854 #endif
     994    wape(i) = -rg*hw0(i)*(av_dth(i)+ &
     995        epsim1*(av_thu(i)*av_dq(i)+av_dth(i)*av_qu(i)+av_dth(i)*av_dq(i)))/av_thvu(i)
     996
     997  END DO
    855998
    856999  ! 2.2 Prognostic variable update
     
    8791022  DO i = 1, klon
    8801023    IF (wape(i)<0.) THEN
    881 !!      sigmaw(i) = amax1(sigmad, sigd_con(i))
    882       sigmaw_targ = max(sigmad, sigd_con(i))
    883       d_sig_bnd2(i) = d_sig_bnd2(i) + sigmaw_targ - sigmaw(i)
    884       d_sigmaw2(i) = d_sigmaw2(i) + sigmaw_targ - sigmaw(i)
    885       sigmaw(i) = sigmaw_targ
    886     ENDIF  !!  (wape(i)<0.)
    887   ENDDO
    888   !
    889   IF (iflag_wk_pop_dyn == 3) THEN
    890     DO i = 1, klon
    891       IF (wape(i)<0.) THEN
    892         sigmaw_targ = max(sigmad, sigd_con(i))
    893         d_asig_bnd2(i) = d_asig_bnd2(i) + sigmaw_targ - asigmaw(i)
    894         d_asigmaw2(i) = d_asigmaw2(i) + sigmaw_targ - asigmaw(i)
    895         asigmaw(i) = sigmaw_targ
    896       ENDIF  !!  (wape(i)<0.)
    897     ENDDO
    898   ENDIF  !!  (iflag_wk_pop_dyn == 3)
    899 
    900   DO i = 1, klon
    901     IF (wape(i)<0.) THEN
    9021024      wape(i) = 0.
    9031025      cstar(i) = 0.
    9041026      hw(i) = hwmin
     1027!jyg<
     1028!!      sigmaw(i) = amax1(sigmad, sigd_con(i))
     1029      sigmaw_targ = max(sigmad, sigd_con(i))
     1030      d_sigmaw2(i) = d_sigmaw2(i) + sigmaw_targ - sigmaw(i)
     1031      sigmaw(i) = sigmaw_targ
     1032!>jyg
    9051033      fip(i) = 0.
    9061034      gwake(i) = .FALSE.
     
    9111039    END IF
    9121040  END DO
    913   !
     1041
    9141042
    9151043  ! Check qx and qw positivity
    9161044  ! --------------------------
    9171045  DO i = 1, klon
    918     q0_min(i) = min((qb(i,1)-sigmaw(i)*deltaqw(i,1)),  &
    919                     (qb(i,1)+(1.-sigmaw(i))*deltaqw(i,1)))
     1046    q0_min(i) = min((qe(i,1)-sigmaw(i)*deltaqw(i,1)),  &
     1047                    (qe(i,1)+(1.-sigmaw(i))*deltaqw(i,1)))
    9201048  END DO
    9211049  DO k = 2, klev
    9221050    DO i = 1, klon
    923       q1_min(i) = min((qb(i,k)-sigmaw(i)*deltaqw(i,k)), &
    924                       (qb(i,k)+(1.-sigmaw(i))*deltaqw(i,k)))
     1051      q1_min(i) = min((qe(i,k)-sigmaw(i)*deltaqw(i,k)), &
     1052                      (qe(i,k)+(1.-sigmaw(i))*deltaqw(i,k)))
    9251053      IF (q1_min(i)<=q0_min(i)) THEN
    9261054        q0_min(i) = q1_min(i)
     
    9321060    ok_qx_qw(i) = q0_min(i) >= 0.
    9331061    alpha(i) = 1.
    934     alpha_tot(i) = 1.
    9351062  END DO
    9361063
     
    9451072  ! -----------------
    9461073
    947 !    wk_nsub and dtimesub definitions moved to begining of routine.
    948 !!  wk_nsub = 10
    949 !!  dtimesub = dtime/wk_nsub
    950 
    951  
    952   ! ------------------------------------------------------------------------
    953   ! ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    954   ! ------------------------------------------------------------------------
    955   !
    956   DO isubstep = 1, wk_nsub
    957   !
    958   ! ------------------------------------------------------------------------
     1074  nsub = 10
     1075  dtimesub = dtime/nsub
     1076
     1077  ! ------------------------------------------------------------
     1078  DO isubstep = 1, nsub
     1079    ! ------------------------------------------------------------
     1080
    9591081    ! wk_adv is the logical flag enabling wake evolution in the time advance
    9601082    ! loop
     
    9651087      PRINT *, 'wake-4.1, isubstep,wk_adv(igout),cstar(igout),wape(igout), ptop(igout) ', &
    9661088                          isubstep,wk_adv(igout),cstar(igout),wape(igout), ptop(igout)
    967      
    9681089    ENDIF
    9691090
    9701091    ! cc nrlmd   Ajout d'un recalcul de wdens dans le cas d'un entrainement
    971     ! negatif de ktop a kupper --------
    972     ! cc           On calcule pour cela une densite wdens0 pour laquelle on
     1092    ! négatif de ktop à kupper --------
     1093    ! cc           On calcule pour cela une densité wdens0 pour laquelle on
    9731094    ! aurait un entrainement nul ---
    9741095    !jyg<
     
    9771098    ! des descentes unsaturees. Nous faisons alors l'hypothese que la
    9781099    ! convection profonde cree directement de nouvelles poches, sans passer
    979     ! par les thermiques. La nouvelle valeur de wdens est alors imposee.
     1100    ! par les thermiques. La nouvelle valeur de wdens est alors imposée.
    9801101
    9811102    DO i = 1, klon
     
    9831104      ! c     $           isubstep,wk_adv(i),cstar(i),wape(i)
    9841105      IF (wk_adv(i) .AND. cstar(i)>0.01) THEN
    985         IF ( iflag_wk_profile == 0 ) THEN
    986            omg(i, kupper(i)+1)=-RG*amdwn(i, kupper(i)+1)/sigmaw(i) + &
    987                                RG*amup(i, kupper(i)+1)/(1.-sigmaw(i))
    988         ELSE
    989            omg(i, kupper(i)+1)=0.
    990         ENDIF
     1106        omg(i, kupper(i)+1) = -rg*amdwn(i, kupper(i)+1)/sigmaw(i) + &
     1107                               rg*amup(i, kupper(i)+1)/(1.-sigmaw(i))
    9911108        wdens0 = (sigmaw(i)/(4.*3.14))* &
    9921109          ((1.-sigmaw(i))*omg(i,kupper(i)+1)/((ph(i,1)-pupper(i))*cstar(i)))**(2)
     
    9971114        IF (wdens(i)<=wdens0*1.1) THEN
    9981115          IF (iflag_wk_pop_dyn >= 1) THEN
    999              d_dens_bnd2(i) = d_dens_bnd2(i) + wdens0 - wdens(i)
    10001116             d_wdens2(i) = d_wdens2(i) + wdens0 - wdens(i)
    10011117          ENDIF
     
    10051121    END DO
    10061122
    1007     IF (iflag_wk_pop_dyn == 0 .AND. ok_bug_gfl) THEN
    1008 !!--------------------------------------------------------
    1009 !!Bug : computing gfl and rad_wk before changing sigmaw
    1010 !!      This bug exists only for iflag_wk_pop_dyn=0. Otherwise, gfl and rad_wk
    1011 !!      are computed within  wake_popdyn
    1012 !!--------------------------------------------------------
     1123    DO i = 1, klon
     1124      IF (wk_adv(i)) THEN
     1125        gfl(i) = 2.*sqrt(3.14*wdens(i)*sigmaw(i))
     1126        rad_wk(i) = sqrt(sigmaw(i)/(3.14*wdens(i)))
     1127!jyg<
     1128!!        sigmaw(i) = amin1(sigmaw(i), sigmaw_max)
     1129        sigmaw_targ = min(sigmaw(i), sigmaw_max)
     1130        d_sigmaw2(i) = d_sigmaw2(i) + sigmaw_targ - sigmaw(i)
     1131        sigmaw(i) = sigmaw_targ
     1132!>jyg
     1133      END IF
     1134    END DO
     1135
     1136    IF (iflag_wk_pop_dyn >= 1) THEN
     1137!    The variable "death_rate" is significant only when iflag_wk_pop_dyn = 0.
     1138!    Here, it has to be set to zero.
     1139      death_rate(:) = 0.
     1140
     1141      IF (iflag_wk_act ==2) THEN
    10131142      DO i = 1, klon
    10141143        IF (wk_adv(i)) THEN
    1015           gfl(i) = 2.*sqrt(3.14*wdens(i)*sigmaw(i))
    1016           rad_wk(i) = sqrt(sigmaw(i)/(3.14*wdens(i)))
    1017         END IF
    1018       END DO
    1019     ENDIF   ! (iflag_wk_pop_dyn == 0 .AND. ok_bug_gfl)
    1020 !!--------------------------------------------------------
    1021 
    1022     DO i = 1, klon
    1023       IF (wk_adv(i)) THEN
    1024         sigmaw_targ = min(sigmaw(i), sigmaw_max)
    1025         d_sig_bnd2(i) = d_sig_bnd2(i) + sigmaw_targ - sigmaw(i)
    1026         d_sigmaw2(i)  = d_sigmaw2(i)  + sigmaw_targ - sigmaw(i)
    1027         sigmaw(i) = sigmaw_targ
    1028       END IF
    1029     END DO
    1030 
    1031     IF (iflag_wk_pop_dyn == 0 .AND. .NOT.ok_bug_gfl) THEN
    1032 !!--------------------------------------------------------
    1033 !!Fix : computing gfl and rad_wk after changing sigmaw
    1034 !!--------------------------------------------------------
     1144          wape1_act(i) = abs(cin(i))
     1145          wape2_act(i) = 2.*wape1_act(i) + 1.
     1146          act(i) = min(1., max(0., (wape(i)-wape1_act(i)) / (wape2_act(i)-wape1_act(i)) ))
     1147        ENDIF  ! (wk_adv(i))
     1148      ENDDO
     1149      ENDIF  ! (iflag_wk_act ==2)
     1150
     1151
    10351152      DO i = 1, klon
    10361153        IF (wk_adv(i)) THEN
    1037           gfl(i) = 2.*sqrt(3.14*wdens(i)*sigmaw(i))
    1038           rad_wk(i) = sqrt(sigmaw(i)/(3.14*wdens(i)))
    1039         END IF
    1040       END DO
    1041     ENDIF   ! (iflag_wk_pop_dyn == 0 .AND. .NOT.ok_bug_gfl)
    1042 !!--------------------------------------------------------
    1043 
    1044     IF (iflag_wk_pop_dyn >= 1) THEN
    1045   !  The variable "death_rate" is significant only when iflag_wk_pop_dyn = 0.
    1046   !  Here, it has to be set to zero.
    1047       death_rate(:) = 0.
    1048     ENDIF
    1049  
    1050     IF (iflag_wk_pop_dyn >= 3) THEN
    1051       DO i = 1, klon
    1052         IF (wk_adv(i)) THEN
    1053          sigmaw_targ = min(asigmaw(i), sigmaw_max)
    1054          d_asig_bnd2(i) = d_asig_bnd2(i) + sigmaw_targ - asigmaw(i)
    1055          d_asigmaw2(i)  = d_asigmaw2(i)  + sigmaw_targ - asigmaw(i)
    1056          asigmaw(i) = sigmaw_targ
     1154!!          tau_wk(i) = max(rad_wk(i)/(3.*cstar(i))*((cstar(i)/cstart)**1.5 - 1), 100.)
     1155          tau_wk_inv(i) = max( (3.*cstar(i))/(rad_wk(i)*((cstar(i)/cstart)**1.5 - 1)), 0.)
     1156          tau_wk_inv_min = min(tau_wk_inv(i), 1./dtimesub)
     1157          drdt(i) = (cstar(i) - wgen(i)*(sigmaw(i)/wdens(i)-aa0)/gfl(i)) / &
     1158                    (1 + 2*f_shear(i)*(2.*sigmaw(i)-aa0*wdens(i)) - 2.*sigmaw(i))
     1159!!                    (1 - 2*sigmaw(i)*(1.-f_shear(i)))
     1160          drdt_pos=max(drdt(i),0.)
     1161
     1162!!          d_wdens(i) = ( wgen(i)*(1.+2.*(sigmaw(i)-sigmad)) &
     1163!!                     - wdens(i)*tau_wk_inv_min &
     1164!!                     - 2.*gfl(i)*wdens(i)*Cstar(i) )*dtimesub
     1165          d_awdens(i) = ( wgen(i) - (1./tau_cv)*(awdens(i) - act(i)*wdens(i)) )*dtimesub
     1166          d_wdens(i) = ( wgen(i) - (wdens(i)-awdens(i))*tau_wk_inv_min -  &
     1167                         2.*wdens(i)*gfl(i)*drdt_pos )*dtimesub
     1168          d_wdens(i) = max(d_wdens(i), wdensmin-wdens(i))
     1169
     1170!!          d_sigmaw(i) = ( (1.-2*f_shear(i)*sigmaw(i))*(gfl(i)*Cstar(i)+wgen(i)*sigmad/wdens(i)) &
     1171!!                      + 2.*f_shear(i)*wgen(i)*sigmaw(i)**2/wdens(i) &
     1172!!                      - sigmaw(i)*tau_wk_inv_min )*dtimesub
     1173          d_sig_gen(i) = wgen(i)*aa0
     1174          d_sig_death(i) = - sigmaw(i)*(1.-awdens(i)/wdens(i))*tau_wk_inv_min
     1175!!          d_sig_col(i) = - 2*f_shear(i)*sigmaw(i)*gfl(i)*drdt_pos
     1176          d_sig_col(i) = - 2*f_shear(i)*(2.*sigmaw(i)-wdens(i)*aa0)*gfl(i)*drdt_pos
     1177          d_sigmaw(i) = ( d_sig_gen(i) + d_sig_death(i) + d_sig_col(i) + gfl(i)*cstar(i) )*dtimesub
     1178          d_sigmaw(i) = max(d_sigmaw(i), sigmad-sigmaw(i))
    10571179        ENDIF
    10581180      ENDDO
    1059     ENDIF
    1060  
    1061 !!--------------------------------------------------------
    1062 !!--------------------------------------------------------
    1063     IF (iflag_wk_pop_dyn == 1) THEN
    1064   !
    1065      CALL wake_popdyn_1 (klon, klev, dtime, cstar, tau_wk_inv, wgen, wdens, awdens, sigmaw, &
    1066                   wdensmin, &
    1067                   dtimesub, gfl, rad_wk, f_shear, drdt_pos, &
    1068                   d_awdens, d_wdens, d_sigmaw, &
    1069                   iflag_wk_act, wk_adv, cin, wape, &
    1070                   drdt, &
    1071                   d_dens_gen, d_dens_death, d_dens_col, d_dens_bnd, &
    1072                   d_sig_gen, d_sig_death, d_sig_col, d_sig_spread, d_sig_bnd, &
    1073                   d_wdens_targ, d_sigmaw_targ)
    1074                      
     1181
     1182      IF (prt_level >= 10) THEN
     1183        print *,'wake, cstar(1), cstar(1)/cstart, rad_wk(1), tau_wk_inv(1), drdt(1) ', &
     1184                       cstar(1), cstar(1)/cstart, rad_wk(1), tau_wk_inv(1), drdt(1)
     1185        print *,'wake, wdens(1), awdens(1), act(1), d_awdens(1) ', &
     1186                       wdens(1), awdens(1), act(1), d_awdens(1)
     1187        print *,'wake, wgen, -(wdens-awdens)*tau_wk_inv, -2.*wdens*gfl*drdt_pos, d_wdens ', &
     1188                       wgen(1), -(wdens(1)-awdens(1))*tau_wk_inv(1), -2.*wdens(1)*gfl(1)*drdt_pos, d_wdens(1)
     1189        print *,'wake, d_sig_gen(1), d_sig_death(1), d_sig_col(1), d_sigmaw(1) ', &
     1190                       d_sig_gen(1), d_sig_death(1), d_sig_col(1), d_sigmaw(1)
     1191      ENDIF
    10751192   
    1076 !!--------------------------------------------------------
    1077     ELSEIF (iflag_wk_pop_dyn == 2) THEN
    1078   !
    1079      CALL wake_popdyn_2 ( klon, klev, wk_adv, dtimesub, wgen, &
    1080                              wdensmin, &
    1081                              sigmaw, wdens, awdens, &   !! state variables
    1082                              gfl, cstar, cin, wape, rad_wk, &
    1083                              d_sigmaw, d_wdens, d_awdens, &  !! tendencies                             
    1084                              cont_fact, &
    1085                              d_sig_gen, d_sig_death, d_sig_col, d_sig_spread, d_sig_bnd, &
    1086                              d_dens_gen, d_dens_death, d_dens_col, d_dens_bnd, &
    1087                              d_adens_death, d_adens_icol, d_adens_acol, d_adens_bnd )
    1088 sigmaw=sigmaw-d_sigmaw
    1089 wdens=wdens-d_wdens
    1090 awdens=awdens-d_awdens
    1091 
    1092 !!--------------------------------------------------------
    1093     ELSEIF (iflag_wk_pop_dyn == 3) THEN
    1094 #ifdef IOPHYS_WK
    1095     IF (phys_sub) THEN
    1096      CALL iophys_ecrit('ptop',1,'ptop','Pa',ptop)
    1097      CALL iophys_ecrit('sigmaw',1,'sigmaw','',sigmaw)
    1098      CALL iophys_ecrit('asigmaw',1,'asigmaw','',asigmaw)
    1099      CALL iophys_ecrit('wdens',1,'wdens','1/m2',wdens)
    1100      CALL iophys_ecrit('awdens',1,'awdens','1/m2',awdens)
    1101      CALL iophys_ecrit('rad_wk',1,'rad_wk','m',rad_wk)
    1102      CALL iophys_ecrit('arad_wk',1,'arad_wk','m',arad_wk)
    1103      CALL iophys_ecrit('irad_wk',1,'irad_wk','m',irad_wk)
    1104     ENDIF
    1105 #endif
    1106   !
    1107      CALL wake_popdyn_3 ( klon, klev, phys_sub, wk_adv, dtimesub, wgen, &
    1108                              wdensmin, &
    1109                              sigmaw, asigmaw, wdens, awdens, &   !! state variables
    1110                              gfl, agfl, cstar, cin, wape, &
    1111                              rad_wk, arad_wk, irad_wk, &
    1112                              d_sigmaw, d_asigmaw, d_wdens, d_awdens, &  !! tendencies                             
    1113                              d_sig_gen, d_sig_death, d_sig_col, d_sig_spread, d_sig_bnd, &
    1114                              d_asig_death, d_asig_aicol, d_asig_iicol, d_asig_spread, d_asig_bnd, &
    1115                              d_dens_gen, d_dens_death, d_dens_col, d_dens_bnd, &
    1116                              d_adens_death, d_adens_icol, d_adens_acol, d_adens_bnd )
    1117 sigmaw=sigmaw-d_sigmaw
    1118 asigmaw=asigmaw-d_asigmaw
    1119 wdens=wdens-d_wdens
    1120 awdens=awdens-d_awdens
    1121    
    1122 !!--------------------------------------------------------
    1123     ELSEIF (iflag_wk_pop_dyn == 0) THEN
    1124    
     1193    ELSE  !  (iflag_wk_pop_dyn >= 1)
     1194
    11251195    ! cc nrlmd
    11261196
    11271197      DO i = 1, klon
    11281198        IF (wk_adv(i)) THEN
    1129 
    1130           ! cc nrlmd          Introduction du taux de mortalite des poches et
     1199          ! cc nrlmd          Introduction du taux de mortalité des poches et
    11311200          ! test sur sigmaw_max=0.4
    11321201          ! cc         d_sigmaw(i) = gfl(i)*Cstar(i)*dtimesub
     
    11531222      END DO
    11541223
    1155     ENDIF   !  (iflag_wk_pop_dyn == 1) ... ELSEIF (iflag_wk_pop_dyn == 0)
    1156 !!--------------------------------------------------------
    1157 !!--------------------------------------------------------
    1158 
    1159 #ifdef IOPHYS_WK
    1160     IF (phys_sub) THEN
    1161      CALL iophys_ecrit('wdensa',1,'wdensa','m',wdens)
    1162      CALL iophys_ecrit('awdensa',1,'awdensa','m',awdens)
    1163      CALL iophys_ecrit('sigmawa',1,'sigmawa','m',sigmaw)
    1164      CALL iophys_ecrit('asigmawa',1,'asigmawa','m',asigmaw)
    1165     ENDIF
    1166 #endif
     1224    ENDIF   !  (iflag_wk_pop_dyn >= 1)
     1225
     1226
    11671227    ! calcul de la difference de vitesse verticale poche - zone non perturbee
    11681228    ! IM 060208 differences par rapport au code initial; init. a 0 dp_deltomg
    11691229    ! IM 060208 et omg sur les niveaux de 1 a klev+1, alors que avant l'on definit
    1170     ! IM 060208 au niveau k=1...
     1230    ! IM 060208 au niveau k=1..?
    11711231    !JYG 161013 Correction : maintenant omg est dimensionne a klev.
    11721232    DO k = 1, klev
     
    11961256      DO i = 1, klon
    11971257        IF (wk_adv(i) .AND. k<=ktop(i)) THEN
    1198           dz(i) = -(ph(i,k)-ph(i,k-1))/(rho(i,k-1)*RG)
     1258          dz(i) = -(ph(i,k)-ph(i,k-1))/(rho(i,k-1)*rg)
    11991259          z(i) = z(i) + dz(i)
    12001260          dp_deltomg(i, k) = dp_deltomg(i, 1)
     
    12061266    DO i = 1, klon
    12071267      IF (wk_adv(i)) THEN
    1208         dztop(i) = -(ptop(i)-ph(i,ktop(i)))/(rho(i,ktop(i))*RG)
     1268        dztop(i) = -(ptop(i)-ph(i,ktop(i)))/(rho(i,ktop(i))*rg)
    12091269        ztop(i) = z(i) + dztop(i)
    12101270        omgtop(i) = dp_deltomg(i, 1)*ztop(i)
     
    12241284    DO i = 1, klon
    12251285      IF (wk_adv(i)) THEN
    1226         omgtop(i) = -rho(i, ktop(i))*RG*omgtop(i)
    1227 !! LJYF        dp_deltomg(i, 1) = omgtop(i)/(ptop(i)-ph(i,1))
    1228         dp_deltomg(i, 1) = omgtop(i)/min(ptop(i)-ph(i,1),-smallestreal)
     1286        omgtop(i) = -rho(i, ktop(i))*rg*omgtop(i)
     1287        dp_deltomg(i, 1) = omgtop(i)/(ptop(i)-ph(i,1))
    12291288      END IF
    12301289    END DO
     
    12331292      DO i = 1, klon
    12341293        IF (wk_adv(i) .AND. k<=ktop(i)) THEN
    1235           omg(i, k) = -rho(i, k)*RG*omg(i, k)
     1294          omg(i, k) = -rho(i, k)*rg*omg(i, k)
    12361295          dp_deltomg(i, k) = dp_deltomg(i, 1)
    12371296        END IF
     
    12431302    DO i = 1, klon
    12441303      IF (wk_adv(i) .AND. kupper(i)>ktop(i)) THEN
    1245         IF ( iflag_wk_profile == 0 ) THEN
    1246            omg(i, kupper(i)+1) =-RG*amdwn(i, kupper(i)+1)/sigmaw(i) + &
    1247           RG*amup(i, kupper(i)+1)/(1.-sigmaw(i))
    1248         ELSE
    1249            omg(i, kupper(i)+1) = 0.
    1250         ENDIF
     1304        omg(i, kupper(i)+1) = -rg*amdwn(i, kupper(i)+1)/sigmaw(i) + &
     1305          rg*amup(i, kupper(i)+1)/(1.-sigmaw(i))
    12511306        dp_deltomg(i, kupper(i)) = (omgtop(i)-omg(i,kupper(i)+1))/ &
    12521307          (ptop(i)-pupper(i))
     
    12551310
    12561311    ! c      DO i=1,klon
    1257     ! c        print*,'Pente entre 0 et kupper (reference)'
     1312    ! c        print*,'Pente entre 0 et kupper (référence)'
    12581313    ! c     $           ,omg(i,kupper(i)+1)/(pupper(i)-ph(i,1))
    12591314    ! c        print*,'Pente entre ktop et kupper'
     
    13311386        IF (wk_adv(i) .AND. k<=kupper(i)+1) THEN
    13321387          dth(i, k) = deltatw(i, k)/ppi(i, k)
    1333           th1(i, k) = thb(i, k) - sigmaw(i)*dth(i, k) ! undisturbed area
    1334           th2(i, k) = thb(i, k) + (1.-sigmaw(i))*dth(i, k) ! wake
    1335           q1(i, k) = qb(i, k) - sigmaw(i)*deltaqw(i, k) ! undisturbed area
    1336           q2(i, k) = qb(i, k) + (1.-sigmaw(i))*deltaqw(i, k) ! wake
     1388          th1(i, k) = the(i, k) - sigmaw(i)*dth(i, k) ! undisturbed area
     1389          th2(i, k) = the(i, k) + (1.-sigmaw(i))*dth(i, k) ! wake
     1390          q1(i, k) = qe(i, k) - sigmaw(i)*deltaqw(i, k) ! undisturbed area
     1391          q2(i, k) = qe(i, k) + (1.-sigmaw(i))*deltaqw(i, k) ! wake
    13371392#ifdef ISO
    13381393          do ixt=1,ntraciso
    1339             xt1(ixt,i,k) = xtb(ixt,i,k) -sigmaw(i)     *deltaxtw(ixt,i,k) ! undisturbed area
    1340             xt2(ixt,i,k) = xtb(ixt,i,k) +(1.-sigmaw(i))*deltaxtw(ixt,i,k) ! wake
     1394            xt1(ixt,i,k) = xte(ixt,i,k) -sigmaw(i)     *deltaxtw(ixt,i,k) ! undisturbed area
     1395            xt2(ixt,i,k) = xte(ixt,i,k) +(1.-sigmaw(i))*deltaxtw(ixt,i,k) ! wake
    13411396          enddo
    13421397#endif
     
    14161471    END DO
    14171472
    1418 !!    IF (prt_level>=10) THEN
    1419     IF (prt_level>=10 .and. wk_adv(igout)) THEN
    1420       PRINT *, 'wake-4.3, th1(igout,k) ', (k,th1(igout,k), k=1,kupper(igout))
    1421       PRINT *, 'wake-4.3, th2(igout,k) ', (k,th2(igout,k), k=1,kupper(igout))
    1422       PRINT *, 'wake-4.3, dth(igout,k) ', (k,dth(igout,k), k=1,kupper(igout))
    1423       PRINT *, 'wake-4.3, omgbdth(igout,k) ', (k,omgbdth(igout,k), k=1,kupper(igout))
     1473    IF (prt_level>=10) THEN
     1474      PRINT *, 'wake-4.3, th1(igout,k) ', (k,th1(igout,k), k=1,klev)
     1475      PRINT *, 'wake-4.3, th2(igout,k) ', (k,th2(igout,k), k=1,klev)
     1476      PRINT *, 'wake-4.3, dth(igout,k) ', (k,dth(igout,k), k=1,klev)
     1477      PRINT *, 'wake-4.3, omgbdth(igout,k) ', (k,omgbdth(igout,k), k=1,klev)
    14241478    ENDIF
    14251479
     
    14371491             (1.-alpha_up(i,k))*omgbdth(i,k)- &
    14381492             alpha_up(i,k+1)*omgbdth(i,k+1))*ppi(i, k)
    1439 !           print*,'d_d,k_ptop_provis(i)eltatw=', k, d_deltatw(i,k)
     1493!           print*,'d_deltatw=', k, d_deltatw(i,k)
    14401494
    14411495          d_deltaqw(i, k) = dtimesub/(ph(i,k)-ph(i,k+1))* &
     
    14711525          ! C
    14721526          ! -----------------------------------------------------------------
    1473           d_tb(i, k) = dtimesub*((rre1(i)*omg(i,k)*sigmaw(i)*d_th1(i,k)- &
     1527          d_te(i, k) = dtimesub*((rre1(i)*omg(i,k)*sigmaw(i)*d_th1(i,k)- &
    14741528                                  rre2(i)*omg(i,k+1)*(1.-sigmaw(i))*d_th2(i,k+1))/ &
    14751529                                 (ph(i,k)-ph(i,k+1)) &
     
    14771531                                 (ph(i,k)-ph(i,k+1)) )*ppi(i, k)
    14781532
    1479           d_qb(i, k) = dtimesub*((rre1(i)*omg(i,k)*sigmaw(i)*d_q1(i,k)- &
     1533          d_qe(i, k) = dtimesub*((rre1(i)*omg(i,k)*sigmaw(i)*d_q1(i,k)- &
    14801534                                  rre2(i)*omg(i,k+1)*(1.-sigmaw(i))*d_q2(i,k+1))/ &
    14811535                                 (ph(i,k)-ph(i,k+1)) &
     
    14841538#ifdef ISO
    14851539        do ixt=1,ntraciso
    1486          d_xtb(ixt,i,k) =  dtimesub*( &
     1540         d_xte(ixt,i,k) =  dtimesub*( &
    14871541             ( rre1(i)*omg(i,k  )*sigmaw(i)     *d_xt1(ixt,i,k) &
    14881542              -rre2(i)*omg(i,k+1)*(1.-sigmaw(i))*d_xt2(ixt,i,k+1) ) &
     
    14941548#endif
    14951549        ELSE IF (wk_adv(i) .AND. k==kupper(i)) THEN
    1496           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)
    1497 
    1498           d_qb(i, k) = dtimesub*(rre1(i)*omg(i,k)*sigmaw(i)*d_q1(i,k)/(ph(i,k)-ph(i,k+1)))
     1550          d_te(i, k) = dtimesub*(rre1(i)*omg(i,k)*sigmaw(i)*d_th1(i,k)/(ph(i,k)-ph(i,k+1)))*ppi(i, k)
     1551
     1552          d_qe(i, k) = dtimesub*(rre1(i)*omg(i,k)*sigmaw(i)*d_q1(i,k)/(ph(i,k)-ph(i,k+1)))
    14991553
    15001554#ifdef ISO
    15011555        do ixt=1,ntraciso
    1502          d_xtb(ixt,i,k) =  dtimesub*( &
     1556         d_xte(ixt,i,k) =  dtimesub*( &
    15031557            ( rre1(i)*omg(i,k  )*sigmaw(i)  *d_xt1(ixt,i,k)     &   
    15041558             /(Ph(i,k)-Ph(i,k+1))) &
     
    15501604
    15511605
    1552           ! Coefficient de repartition
     1606          ! Coefficient de répartition
    15531607
    15541608          crep(i, k) = crep_sol*(ph(i,kupper(i))-ph(i,k))/ &
    15551609            (ph(i,kupper(i))-ph(i,1))
    15561610          crep(i, k) = crep(i, k) + crep_upper*(ph(i,1)-ph(i,k))/ &
    1557             (ph(i,1)-ph(i,kupper(i)))
     1611            (p(i,1)-ph(i,kupper(i)))
    15581612
    15591613
     
    15941648!
    15951649
    1596           ! cc nrlmd          Prise en compte du taux de mortalite
    1597           ! cc               Definitions de entr, detr
     1650          ! cc nrlmd          Prise en compte du taux de mortalité
     1651          ! cc               Définitions de entr, detr
    15981652!jyg<
    15991653!!            detr(i, k) = 0.
     
    16051659                         sigmaw(i)*(1.-sigmaw(i))*dp_deltomg(i, k)   
    16061660!>jyg
    1607             wkspread(i, k) = (entr(i,k)-detr(i,k))/sigmaw(i)
    1608 
    1609           ! cc        wkspread(i,k) =
     1661            spread(i, k) = (entr(i,k)-detr(i,k))/sigmaw(i)
     1662
     1663          ! cc        spread(i,k) =
    16101664          ! (1.-sigmaw(i))*dp_deltomg(i,k)+gfl(i)*Cstar(i)/
    16111665          ! cc     $  sigmaw(i)
    16121666
    16131667
    1614           ! ajout d'un effet onde de gravite -Tgw(k)*deltatw(k) 03/02/06 YU
     1668          ! ajout d'un effet onde de gravité -Tgw(k)*deltatw(k) 03/02/06 YU
    16151669          ! Jingmei
    16161670
     
    16241678          ! Sans GW
    16251679
    1626           ! deltatw(k)=deltatw(k)+dtimesub*(ff+dtKE(k)-wkspread(k)*deltatw(k))
     1680          ! deltatw(k)=deltatw(k)+dtimesub*(ff+dtKE(k)-spread(k)*deltatw(k))
    16271681
    16281682          ! GW formule 1
    16291683
    16301684          ! deltatw(k) = deltatw(k)+dtimesub*
    1631           ! $         (ff+dtKE(k) - wkspread(k)*deltatw(k)-Tgw(k)*deltatw(k))
     1685          ! $         (ff+dtKE(k) - spread(k)*deltatw(k)-Tgw(k)*deltatw(k))
    16321686
    16331687          ! GW formule 2
     
    16891743    ! Scale tendencies so that water vapour remains positive in w and x.
    16901744
    1691     CALL wake_vec_modulation(klon, klev, wk_adv, epsilon_loc, qb, d_qb, deltaqw, &
     1745    CALL wake_vec_modulation(klon, klev, wk_adv, epsilon, qe, d_qe, deltaqw, &
    16921746      d_deltaqw, sigmaw, d_sigmaw, alpha)
    1693     !
    1694     ! Alpha_tot = Product of all the alpha's
    1695     DO i = 1, klon
    1696       IF (wk_adv(i)) THEN
    1697         alpha_tot(i) = alpha_tot(i)*alpha(i)   
    1698       END IF
    1699     END DO
    17001747
    17011748    ! cc nrlmd
     
    17081755      DO i = 1, klon
    17091756        IF (wk_adv(i) .AND. k<=kupper(i)) THEN
    1710           d_tb(i, k) = alpha(i)*d_tb(i, k)
    1711           d_qb(i, k) = alpha(i)*d_qb(i, k)
     1757          d_te(i, k) = alpha(i)*d_te(i, k)
     1758          d_qe(i, k) = alpha(i)*d_qe(i, k)
    17121759          d_deltatw(i, k) = alpha(i)*d_deltatw(i, k)
    17131760          d_deltaqw(i, k) = alpha(i)*d_deltaqw(i, k)
     
    17151762#ifdef ISO
    17161763        do ixt=1,ntraciso
    1717           d_xtb(ixt,i,k)=alpha(i)*d_xtb(ixt,i,k)
     1764          d_xte(ixt,i,k)=alpha(i)*d_xte(ixt,i,k)
    17181765          d_deltaxtw(ixt,i,k)=alpha(i)*d_deltaxtw(ixt,i,k)
    17191766        enddo !do ixt=1,ntraciso
     
    17341781      DO i = 1, klon
    17351782        IF (wk_adv(i) .AND. k<=kupper(i)) THEN
    1736           dtls(i, k) = dtls(i, k) + d_tb(i, k)
    1737           dqls(i, k) = dqls(i, k) + d_qb(i, k)
     1783          dtls(i, k) = dtls(i, k) + d_te(i, k)
     1784          dqls(i, k) = dqls(i, k) + d_qe(i, k)
    17381785#ifdef ISO
    17391786        do ixt=1,ntraciso
    1740           dxtls(ixt,i,k)=dxtls(ixt,i,k)+d_xtb(ixt,i,k)
     1787          dxtls(ixt,i,k)=dxtls(ixt,i,k)+d_xte(ixt,i,k)
    17411788        enddo !do ixt=1,ntraciso
    17421789#endif
     
    17721819      DO i = 1, klon
    17731820        IF (wk_adv(i) .AND. k<=kupper(i)) THEN
    1774           tb(i, k) = tb0(i, k) + dtls(i, k)
    1775           qb(i, k) = qb0(i, k) + dqls(i, k)
    1776           thb(i, k) = tb(i, k)/ppi(i, k)
     1821          te(i, k) = te0(i, k) + dtls(i, k)
     1822          qe(i, k) = qe0(i, k) + dqls(i, k)
     1823          the(i, k) = te(i, k)/ppi(i, k)
    17771824          deltatw(i, k) = deltatw(i, k) + d_deltatw(i, k)
    17781825          deltaqw(i, k) = deltaqw(i, k) + d_deltaqw(i, k)
    17791826          dth(i, k) = deltatw(i, k)/ppi(i, k)
    1780           ! c      print*,'k,qx,qw',k,qb(i,k)-sigmaw(i)*deltaqw(i,k)
    1781           ! c     $        ,qb(i,k)+(1-sigmaw(i))*deltaqw(i,k)
     1827          ! c      print*,'k,qx,qw',k,qe(i,k)-sigmaw(i)*deltaqw(i,k)
     1828          ! c     $        ,qe(i,k)+(1-sigmaw(i))*deltaqw(i,k)
    17821829#ifdef ISO
    17831830        do ixt=1,ntraciso
    1784           xtb(ixt,i,k) = xtb0(ixt,i,k) + dxtls(ixt,i,k)
     1831          xte(ixt,i,k) = xte0(ixt,i,k) + dxtls(ixt,i,k)
    17851832          deltaxtw(ixt,i,k) = deltaxtw(ixt,i,k)+d_deltaxtw(ixt,i,k)
    17861833        enddo !do ixt=1,ntraciso
     
    18031850        DO k= 1,klev
    18041851          DO i = 1,klon
    1805               call iso_verif_egalite_choix(xtb(iso_eau,i,k), &
    1806                 qb(i,k),'wake 1379',errmax,errmaxrel)
     1852              call iso_verif_egalite_choix(xte(iso_eau,i,k), &
     1853                qe(i,k),'wake 1379',errmax,errmaxrel)
    18071854          enddo ! DO i = 1,klon     
    18081855        enddo ! DO k= 1,klev
     
    18101857      if (iso_hdo.gt.0) then
    18111858      call iso_verif_aberrant_enc_vect2D( &
    1812             xtb,qb, &
    1813             'wake 1456, xtb apres modifs',ntraciso,klon,klev)
     1859            xte,qe, &
     1860            'wake 1456, xte apres modifs',ntraciso,klon,klev)
    18141861!      call iso_verif_aberrant_enc_vect2D_ns(
    18151862!     :       deltaxtw,deltaqw,
     
    18231870      DO i = 1, klon
    18241871        IF (wk_adv(i)) THEN
    1825           d_sig_gen2(i)   = d_sig_gen2(i)   + d_sig_gen(i)
    1826           d_sig_death2(i) = d_sig_death2(i) + d_sig_death(i)
    1827           d_sig_col2(i)   = d_sig_col2(i)   + d_sig_col(i)
    1828           d_sig_spread2(i)= d_sig_spread2(i)+ d_sig_spread(i)
    1829           d_sig_bnd2(i)   = d_sig_bnd2(i)   + d_sig_bnd(i)
    1830         END IF
    1831       END DO
    1832 !  Bounds
     1872          awdens(i) = awdens(i) + d_awdens(i)
     1873          wdens(i) = wdens(i) + d_wdens(i)
     1874          d_awdens2(i) = d_awdens2(i) + d_awdens(i)
     1875          d_wdens2(i) = d_wdens2(i) + d_wdens(i)
     1876        END IF
     1877      END DO
     1878      DO i = 1, klon
     1879        IF (wk_adv(i)) THEN
     1880          wdens_targ = max(wdens(i),wdensmin)
     1881          d_wdens2(i) = d_wdens2(i) + wdens_targ - wdens(i)
     1882          wdens(i) = wdens_targ
     1883!
     1884          wdens_targ = min( max(awdens(i),0.), wdens(i) )
     1885          d_awdens2(i) = d_awdens2(i) + wdens_targ - awdens(i)
     1886          awdens(i) = wdens_targ
     1887        END IF
     1888      END DO
    18331889      DO i = 1, klon
    18341890        IF (wk_adv(i)) THEN
    18351891          sigmaw_targ = max(sigmaw(i),sigmad)
    1836           d_sig_bnd2(i) = d_sig_bnd2(i) + sigmaw_targ - sigmaw(i)
    18371892          d_sigmaw2(i) = d_sigmaw2(i) + sigmaw_targ - sigmaw(i)
    18381893          sigmaw(i) = sigmaw_targ
    18391894        END IF
    18401895      END DO
    1841 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! wdens  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    1842 !  Cumulatives
     1896    ENDIF  ! (iflag_wk_pop_dyn >= 1)
     1897!>jyg
     1898
     1899
     1900    ! Determine Ptop from buoyancy integral
     1901    ! ---------------------------------------
     1902
     1903    ! -     1/ Pressure of the level where dth changes sign.
     1904
     1905    DO i = 1, klon
     1906      IF (wk_adv(i)) THEN
     1907        ptop_provis(i) = ph(i, 1)
     1908      END IF
     1909    END DO
     1910
     1911    DO k = 2, klev
     1912      DO i = 1, klon
     1913        IF (wk_adv(i) .AND. ptop_provis(i)==ph(i,1) .AND. &
     1914            dth(i,k)>-delta_t_min .AND. dth(i,k-1)<-delta_t_min) THEN
     1915          ptop_provis(i) = ((dth(i,k)+delta_t_min)*p(i,k-1) - &
     1916                            (dth(i,k-1)+delta_t_min)*p(i,k))/(dth(i,k)-dth(i,k-1))
     1917        END IF
     1918      END DO
     1919    END DO
     1920
     1921    ! -     2/ dth integral
     1922
     1923    DO i = 1, klon
     1924      IF (wk_adv(i)) THEN !!! nrlmd
     1925        sum_dth(i) = 0.
     1926        dthmin(i) = -delta_t_min
     1927        z(i) = 0.
     1928      END IF
     1929    END DO
     1930
     1931    DO k = 1, klev
    18431932      DO i = 1, klon
    18441933        IF (wk_adv(i)) THEN
    1845           wdens(i) = wdens(i) + d_wdens(i)
    1846           d_wdens2(i) = d_wdens2(i) + d_wdens(i)
    1847           d_dens_gen2(i)   = d_dens_gen2(i)   + d_dens_gen(i)
    1848           d_dens_death2(i) = d_dens_death2(i) + d_dens_death(i)
    1849           d_dens_col2(i)   = d_dens_col2(i)   + d_dens_col(i)
    1850           d_dens_bnd2(i)   = d_dens_bnd2(i)   + d_dens_bnd(i)
    1851         END IF
    1852       END DO
    1853 !  Bounds
     1934          dz(i) = -(amax1(ph(i,k+1),ptop_provis(i))-ph(i,k))/(rho(i,k)*rg)
     1935          IF (dz(i)>0) THEN
     1936            z(i) = z(i) + dz(i)
     1937            sum_dth(i) = sum_dth(i) + dth(i, k)*dz(i)
     1938            dthmin(i) = amin1(dthmin(i), dth(i,k))
     1939          END IF
     1940        END IF
     1941      END DO
     1942    END DO
     1943
     1944    ! -     3/ height of triangle with area= sum_dth and base = dthmin
     1945
     1946    DO i = 1, klon
     1947      IF (wk_adv(i)) THEN
     1948        hw(i) = 2.*sum_dth(i)/amin1(dthmin(i), -0.5)
     1949        hw(i) = amax1(hwmin, hw(i))
     1950      END IF
     1951    END DO
     1952
     1953    ! -     4/ now, get Ptop
     1954
     1955    DO i = 1, klon
     1956      IF (wk_adv(i)) THEN !!! nrlmd
     1957        ktop(i) = 0
     1958        z(i) = 0.
     1959      END IF
     1960    END DO
     1961
     1962    DO k = 1, klev
    18541963      DO i = 1, klon
    18551964        IF (wk_adv(i)) THEN
    1856           wdens_targ = max(wdens(i),wdensmin)
    1857           d_dens_bnd2(i) = d_dens_bnd2(i) + wdens_targ - wdens(i)
    1858           d_wdens2(i) = d_wdens2(i) + wdens_targ - wdens(i)
    1859           wdens(i) = wdens_targ
    1860         END IF
    1861       END DO
    1862 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! awdens !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    1863 !  Cumulatives
    1864       DO i = 1, klon
    1865         IF (wk_adv(i)) THEN
    1866           awdens(i) = awdens(i) + d_awdens(i)
    1867           d_awdens2(i) = d_awdens2(i) + d_awdens(i)
    1868         END IF
    1869       END DO
    1870 !  Bounds
    1871       DO i = 1, klon
    1872         IF (wk_adv(i)) THEN
    1873           wdens_targ = min( max(awdens(i),0.), wdens(i) )
    1874           d_adens_bnd2(i) = d_adens_bnd2(i) + wdens_targ - awdens(i)
    1875           d_awdens2(i) = d_awdens2(i) + wdens_targ - awdens(i)
    1876           awdens(i) = wdens_targ
    1877         END IF
    1878       END DO
    1879 !
    1880       IF (iflag_wk_pop_dyn >= 2) THEN
    1881 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! awdens again for iflag_wk_pop_dyn >= 2!!!!!!
    1882 !  Cumulatives
    1883         DO i = 1, klon
    1884            IF (wk_adv(i)) THEN
    1885                d_adens_death2(i)   = d_adens_death2(i)   + d_adens_death(i)
    1886                d_adens_icol2(i)   = d_adens_icol2(i)   + d_adens_icol(i)
    1887                d_adens_acol2(i)   = d_adens_acol2(i)   + d_adens_acol(i)
    1888                d_adens_bnd2(i)   = d_adens_bnd2(i)   + d_adens_bnd(i)         
    1889            END IF
    1890         END DO
    1891 !  Bounds
    1892         DO i = 1, klon
    1893            IF (wk_adv(i)) THEN
    1894                wdens_targ = min( max(awdens(i),0.), wdens(i) )
    1895                d_adens_bnd2(i) = d_adens_bnd2(i) + wdens_targ - awdens(i)
    1896                awdens(i) = wdens_targ
    1897            END IF
    1898         END DO
    1899 !
    1900         IF (iflag_wk_pop_dyn == 3) THEN
    1901 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! asigmaw for iflag_wk_pop_dyn = 3!!!!!!
    1902 !  Cumulatives
    1903           DO i = 1, klon
    1904              IF (wk_adv(i)) THEN
    1905                  asigmaw(i) = asigmaw(i) + d_asigmaw(i)
    1906                  d_asigmaw2(i) = d_asigmaw2(i) + d_asigmaw(i)
    1907                  d_asig_death2(i)   = d_asig_death2(i)   + d_asig_death(i)
    1908                  d_asig_spread2(i)  = d_asig_spread2(i)  + d_asig_spread(i)
    1909                  d_asig_iicol2(i)   = d_asig_iicol2(i)   + d_asig_iicol(i)
    1910                  d_asig_aicol2(i)   = d_asig_aicol2(i)   + d_asig_aicol(i)
    1911                  d_asig_bnd2(i)     = d_asig_bnd2(i)     + d_asig_bnd(i)         
    1912              END IF
    1913           END DO
    1914 !  Bounds
    1915           DO i = 1, klon
    1916              IF (wk_adv(i)) THEN
    1917    !   asigmaw lower bound set to sigmad/2 in order to allow asigmaw values lower than sigmad.
    1918    !!             sigmaw_targ = min(max(asigmaw(i),sigmad),sigmaw(i))
    1919                 sigmaw_targ = min(max(asigmaw(i),sigmad/2.),sigmaw(i))
    1920                 d_asig_bnd2(i) = d_asig_bnd2(i) + sigmaw_targ - asigmaw(i)
    1921                 d_asigmaw2(i) = d_asigmaw2(i) + sigmaw_targ - asigmaw(i)
    1922                 asigmaw(i) = sigmaw_targ
    1923              END IF
    1924           END DO
    1925 
    1926 #ifdef IOPHYS_WK
    1927     IF (phys_sub) THEN
    1928      CALL iophys_ecrit('wdensb',1,'wdensb','m',wdens)
    1929      CALL iophys_ecrit('awdensb',1,'awdensb','m',awdens)
    1930      CALL iophys_ecrit('sigmawb',1,'sigmawb','m',sigmaw)
    1931      CALL iophys_ecrit('asigmawb',1,'asigmawb','m',asigmaw)
    1932 !
    1933      call iophys_ecrit('d_wdens2',1,'d_wdens2','',d_wdens2)
    1934      call iophys_ecrit('d_dens_gen2',1,'d_dens_gen2','',d_dens_gen2)
    1935      call iophys_ecrit('d_dens_death2',1,'d_dens_death2','',d_dens_death2)
    1936      call iophys_ecrit('d_dens_col2',1,'d_dens_col2','',d_dens_col2)
    1937      call iophys_ecrit('d_dens_bnd2',1,'d_dens_bnd2','',d_dens_bnd2)
    1938 !
    1939      call iophys_ecrit('d_awdens2',1,'d_awdens2','',d_awdens2)
    1940      call iophys_ecrit('d_adens_death2',1,'d_adens_death2','',d_adens_death2)
    1941      call iophys_ecrit('d_adens_icol2',1,'d_adens_icol2','',d_adens_icol2)
    1942      call iophys_ecrit('d_adens_acol2',1,'d_adens_acol2','',d_adens_acol2)
    1943      call iophys_ecrit('d_adens_bnd2',1,'d_adens_bnd2','',d_adens_bnd2)
    1944 !
    1945      CALL iophys_ecrit('d_sigmaw2',1,'d_sigmaw2','',d_sigmaw2)
    1946      CALL iophys_ecrit('d_sig_gen2',1,'d_sig_gen2','m',d_sig_gen2)
    1947      CALL iophys_ecrit('d_sig_spread2',1,'d_sig_spread2','',d_sig_spread2)
    1948      CALL iophys_ecrit('d_sig_col2',1,'d_sig_col2','',d_sig_col2)
    1949      CALL iophys_ecrit('d_sig_death2',1,'d_sig_death2','',d_sig_death2)
    1950      CALL iophys_ecrit('d_sig_bnd2',1,'d_sig_bnd2','',d_sig_bnd2)
    1951 !
    1952      CALL iophys_ecrit('d_asigmaw2',1,'d_asigmaw2','',d_asigmaw2)
    1953      CALL iophys_ecrit('d_asig_spread2',1,'d_asig_spread2','m',d_asig_spread2)
    1954      CALL iophys_ecrit('d_asig_aicol2',1,'d_asig_aicol2','m',d_asig_aicol2)
    1955      CALL iophys_ecrit('d_asig_iicol2',1,'d_asig_iicol2','m',d_asig_iicol2)
    1956      CALL iophys_ecrit('d_asig_death2',1,'d_asig_death2','m',d_asig_death2)
    1957      CALL iophys_ecrit('d_asig_bnd2',1,'d_asig_bnd2','m',d_asig_bnd2)
    1958     ENDIF
    1959 #endif
    1960         ENDIF ! (iflag_wk_pop_dyn == 3)
    1961       ENDIF ! (iflag_wk_pop_dyn >= 2)
    1962     ENDIF  ! (iflag_wk_pop_dyn >= 1)
    1963 
    1964 
    1965 
    1966    Call pkupper (klon, klev, ptop, ph, p, pupper, kupper, &
    1967                     dth, hw, rho, delta_t_min, &
    1968                     ktop, wk_adv, h_zzz, ptop1, ktop1)
    1969    !! print'("pkupper APPEL ",7i6)',isubstep,int(ptop/100.),int(ptop1/100.),int(pupper/100.),ktop,ktop1,kupper
     1965          dz(i) = amin1(-(ph(i,k+1)-ph(i,k))/(rho(i,k)*rg), hw(i)-z(i))
     1966          IF (dz(i)>0) THEN
     1967            z(i) = z(i) + dz(i)
     1968            ptop(i) = ph(i, k) - rho(i, k)*rg*dz(i)
     1969            ktop(i) = k
     1970          END IF
     1971        END IF
     1972      END DO
     1973    END DO
     1974
     1975    ! 4.5/Correct ktop and ptop
     1976
     1977    DO i = 1, klon
     1978      IF (wk_adv(i)) THEN
     1979        ptop_new(i) = ptop(i)
     1980      END IF
     1981    END DO
     1982
     1983    DO k = klev, 2, -1
     1984      DO i = 1, klon
     1985        ! IM v3JYG; IF (k .GE. ktop(i)
     1986        IF (wk_adv(i) .AND. k<=ktop(i) .AND. ptop_new(i)==ptop(i) .AND. &
     1987            dth(i,k)>-delta_t_min .AND. dth(i,k-1)<-delta_t_min) THEN
     1988          ptop_new(i) = ((dth(i,k)+delta_t_min)*p(i,k-1) - &
     1989                         (dth(i,k-1)+delta_t_min)*p(i,k))/(dth(i,k)-dth(i,k-1))
     1990        END IF
     1991      END DO
     1992    END DO
     1993
     1994
     1995    DO i = 1, klon
     1996      IF (wk_adv(i)) THEN
     1997        ptop(i) = ptop_new(i)
     1998      END IF
     1999    END DO
     2000
     2001    DO k = klev, 1, -1
     2002      DO i = 1, klon
     2003        IF (wk_adv(i)) THEN !!! nrlmd
     2004          IF (ph(i,k+1)<ptop(i)) ktop(i) = k
     2005        END IF
     2006      END DO
     2007    END DO
    19702008
    19712009    ! 5/ Set deltatw & deltaqw to 0 above kupper
     
    19922030    DO i = 1, klon
    19932031      IF (wk_adv(i)) THEN !!! nrlmd
    1994         sum_thx(i) = 0.
    1995         sum_tx(i) = 0.
    1996         sum_qx(i) = 0.
    1997         sum_thvx(i) = 0.
     2032        sum_thu(i) = 0.
     2033        sum_tu(i) = 0.
     2034        sum_qu(i) = 0.
     2035        sum_thvu(i) = 0.
    19982036        sum_dth(i) = 0.
    19992037        sum_dq(i) = 0.
     2038        sum_rho(i) = 0.
    20002039        sum_dtdwn(i) = 0.
    20012040        sum_dqdwn(i) = 0.
    20022041
    2003         av_thx(i) = 0.
    2004         av_tx(i) = 0.
    2005         av_qx(i) = 0.
    2006         av_thvx(i) = 0.
     2042        av_thu(i) = 0.
     2043        av_tu(i) = 0.
     2044        av_qu(i) = 0.
     2045        av_thvu(i) = 0.
    20072046        av_dth(i) = 0.
    20082047        av_dq(i) = 0.
     2048        av_rho(i) = 0.
    20092049        av_dtdwn(i) = 0.
    20102050        av_dqdwn(i) = 0.
     
    20152055    ! --------------------------------------
    20162056
    2017     ! Initialize sum_thvx to 1st level virt. pot. temp.
     2057    ! Initialize sum_thvu to 1st level virt. pot. temp.
    20182058
    20192059    DO i = 1, klon
     
    20212061        z(i) = 1.
    20222062        dz(i) = 1.
    2023         sum_thvx(i) = thx(i, 1)*(1.+epsim1*qx(i,1))*dz(i)
     2063        sum_thvu(i) = thu(i, 1)*(1.+epsim1*qu(i,1))*dz(i)
    20242064        sum_dth(i) = 0.
    20252065      END IF
     
    20292069      DO i = 1, klon
    20302070        IF (wk_adv(i)) THEN !!! nrlmd
    2031           dz(i) = -(max(ph(i,k+1),ptop(i))-ph(i,k))/(rho(i,k)*RG)
     2071          dz(i) = -(max(ph(i,k+1),ptop(i))-ph(i,k))/(rho(i,k)*rg)
    20322072          IF (dz(i)>0) THEN
    20332073            z(i) = z(i) + dz(i)
    2034             sum_thx(i) = sum_thx(i) + thx(i, k)*dz(i)
    2035             sum_tx(i) = sum_tx(i) + tx(i, k)*dz(i)
    2036             sum_qx(i) = sum_qx(i) + qx(i, k)*dz(i)
    2037             sum_thvx(i) = sum_thvx(i) + thx(i, k)*(1.+epsim1*qx(i,k))*dz(i)
     2074            sum_thu(i) = sum_thu(i) + thu(i, k)*dz(i)
     2075            sum_tu(i) = sum_tu(i) + tu(i, k)*dz(i)
     2076            sum_qu(i) = sum_qu(i) + qu(i, k)*dz(i)
     2077            sum_thvu(i) = sum_thvu(i) + thu(i, k)*(1.+epsim1*qu(i,k))*dz(i)
    20382078            sum_dth(i) = sum_dth(i) + dth(i, k)*dz(i)
    20392079            sum_dq(i) = sum_dq(i) + deltaqw(i, k)*dz(i)
     2080            sum_rho(i) = sum_rho(i) + rhow(i, k)*dz(i)
    20402081            sum_dtdwn(i) = sum_dtdwn(i) + dtdwn(i, k)*dz(i)
    20412082            sum_dqdwn(i) = sum_dqdwn(i) + dqdwn(i, k)*dz(i)
     
    20612102    DO i = 1, klon
    20622103      IF (wk_adv(i)) THEN !!! nrlmd
    2063         av_thx(i) = sum_thx(i)/hw0(i)
    2064         av_tx(i) = sum_tx(i)/hw0(i)
    2065         av_qx(i) = sum_qx(i)/hw0(i)
    2066         av_thvx(i) = sum_thvx(i)/hw0(i)
     2104        av_thu(i) = sum_thu(i)/hw0(i)
     2105        av_tu(i) = sum_tu(i)/hw0(i)
     2106        av_qu(i) = sum_qu(i)/hw0(i)
     2107        av_thvu(i) = sum_thvu(i)/hw0(i)
    20672108        av_dth(i) = sum_dth(i)/hw0(i)
    20682109        av_dq(i) = sum_dq(i)/hw0(i)
     2110        av_rho(i) = sum_rho(i)/hw0(i)
    20692111        av_dtdwn(i) = sum_dtdwn(i)/hw0(i)
    20702112        av_dqdwn(i) = sum_dqdwn(i)/hw0(i)
    20712113
    2072         wape(i) = -RG*hw0(i)*(av_dth(i)+epsim1*(av_thx(i)*av_dq(i) + &
    2073                               av_dth(i)*av_qx(i)+av_dth(i)*av_dq(i)))/av_thvx(i)
    2074       END IF
    2075     END DO
    2076 
     2114        wape(i) = -rg*hw0(i)*(av_dth(i)+epsim1*(av_thu(i)*av_dq(i) + &
     2115                              av_dth(i)*av_qu(i)+av_dth(i)*av_dq(i)))/av_thvu(i)
     2116      END IF
     2117    END DO
    20772118
    20782119    ! Filter out bad wakes
     
    21072148!!          sigmaw(i) = max(sigmad, sigd_con(i))
    21082149          sigmaw_targ = max(sigmad, sigd_con(i))
    2109           d_sig_bnd2(i) = d_sig_bnd2(i) + sigmaw_targ - sigmaw(i)
    21102150          d_sigmaw2(i) = d_sigmaw2(i) + sigmaw_targ - sigmaw(i)
    21112151          sigmaw(i) = sigmaw_targ
    2112 !
    2113           d_asig_bnd2(i) = d_asig_bnd2(i) + sigmaw_targ - asigmaw(i)
    2114           d_asigmaw2(i) = d_asigmaw2(i) + sigmaw_targ - asigmaw(i)
    2115           asigmaw(i) = sigmaw_targ
    21162152!>jyg
    21172153          fip(i) = 0.
     
    21232159      END IF
    21242160    END DO
    2125   !
    2126   ! ------------------------------------------------------------------------
    2127   !
    2128   END DO   ! isubstep end sub-timestep loop
    2129   !
    2130   ! ------------------------------------------------------------------------
    2131   ! ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    2132   ! ------------------------------------------------------------------------
    2133   !
    2134 
    2135 #ifdef IOPHYS_WK
    2136     IF (.not.phys_sub) CALL iophys_ecrit('wape_b',1,'wape_b','J/kg',wape)
    2137 #endif
     2161
     2162  END DO ! end sub-timestep loop
     2163
    21382164  IF (prt_level>=10) THEN
    21392165    PRINT *, 'wake-5, sigmaw(igout), cstar(igout), wape(igout), ptop(igout) ', &
     
    21552181      ! cc
    21562182      z(i) = 0.
    2157       sum_thx(i) = 0.
    2158       sum_tx(i) = 0.
    2159       sum_qx(i) = 0.
    2160       sum_thvx(i) = 0.
     2183      sum_thu(i) = 0.
     2184      sum_tu(i) = 0.
     2185      sum_qu(i) = 0.
     2186      sum_thvu(i) = 0.
    21612187      sum_dth(i) = 0.
    21622188      sum_half_dth(i) = 0.
    21632189      sum_dq(i) = 0.
     2190      sum_rho(i) = 0.
    21642191      sum_dtdwn(i) = 0.
    21652192      sum_dqdwn(i) = 0.
    21662193
    2167       av_thx(i) = 0.
    2168       av_tx(i) = 0.
    2169       av_qx(i) = 0.
    2170       av_thvx(i) = 0.
     2194      av_thu(i) = 0.
     2195      av_tu(i) = 0.
     2196      av_qu(i) = 0.
     2197      av_thvu(i) = 0.
    21712198      av_dth(i) = 0.
    21722199      av_dq(i) = 0.
     2200      av_rho(i) = 0.
    21732201      av_dtdwn(i) = 0.
    21742202      av_dqdwn(i) = 0.
     
    21852213      IF (ok_qx_qw(i)) THEN
    21862214        ! cc
    2187         rho(i, k) = p(i, k)/(RD*tb(i,k))
     2215        rho(i, k) = p(i, k)/(rd*te(i,k))
    21882216        IF (k==1) THEN
    2189           rhoh(i, k) = ph(i, k)/(RD*tb(i,k))
     2217          rhoh(i, k) = ph(i, k)/(rd*te(i,k))
    21902218          zhh(i, k) = 0
    21912219        ELSE
    2192           rhoh(i, k) = ph(i, k)*2./(RD*(tb(i,k)+tb(i,k-1)))
    2193           zhh(i, k) = (ph(i,k)-ph(i,k-1))/(-rhoh(i,k)*RG) + zhh(i, k-1)
    2194         END IF
    2195         thb(i, k) = tb(i, k)/ppi(i, k)
    2196         thx(i, k) = (tb(i,k)-deltatw(i,k)*sigmaw(i))/ppi(i, k)
    2197         tx(i, k) = tb(i, k) - deltatw(i, k)*sigmaw(i)
    2198         qx(i, k) = qb(i, k) - deltaqw(i, k)*sigmaw(i)
     2220          rhoh(i, k) = ph(i, k)*2./(rd*(te(i,k)+te(i,k-1)))
     2221          zhh(i, k) = (ph(i,k)-ph(i,k-1))/(-rhoh(i,k)*rg) + zhh(i, k-1)
     2222        END IF
     2223        the(i, k) = te(i, k)/ppi(i, k)
     2224        thu(i, k) = (te(i,k)-deltatw(i,k)*sigmaw(i))/ppi(i, k)
     2225        tu(i, k) = te(i, k) - deltatw(i, k)*sigmaw(i)
     2226        qu(i, k) = qe(i, k) - deltaqw(i, k)*sigmaw(i)
     2227        rhow(i, k) = p(i, k)/(rd*(te(i,k)+deltatw(i,k)))
    21992228        dth(i, k) = deltatw(i, k)/ppi(i, k)
    22002229#ifdef ISO
    22012230        do ixt=1,ntraciso
    2202           xtx(ixt,i,k)  =  xtb(ixt,i,k) - deltaxtw(ixt,i,k)*sigmaw(i)
     2231          xtu(ixt,i,k)  =  xte(ixt,i,k) - deltaxtw(ixt,i,k)*sigmaw(i)
    22032232        enddo !do ixt=1,ntraciso
    22042233#endif
     
    22112240      if (iso_hdo.gt.0) then
    22122241      call iso_verif_aberrant_enc_vect2D( &
    2213               xtx,qx, &
     2242              xtu,qu, &
    22142243              'wake 1834, apres modifs',ntraciso,klon,klev)
    22152244      endif   
     
    22202249  ! -----------------------------------------------------------
    22212250
    2222   ! Initialize sum_thvx to 1st level virt. pot. temp.
     2251  ! Initialize sum_thvu to 1st level virt. pot. temp.
    22232252
    22242253  DO i = 1, klon
     
    22292258      dz(i) = 1.
    22302259      dz_half(i) = 1.
    2231       sum_thvx(i) = thx(i, 1)*(1.+epsim1*qx(i,1))*dz(i)
     2260      sum_thvu(i) = thu(i, 1)*(1.+epsim1*qu(i,1))*dz(i)
    22322261      sum_dth(i) = 0.
    22332262    END IF
     
    22392268      IF (ok_qx_qw(i)) THEN
    22402269        ! cc
    2241         dz(i) = -(amax1(ph(i,k+1),ptop(i))-ph(i,k))/(rho(i,k)*RG)
    2242         dz_half(i) = -(amax1(ph(i,k+1),0.5*(ptop(i)+ph(i,1)))-ph(i,k))/(rho(i,k)*RG)
     2270        dz(i) = -(amax1(ph(i,k+1),ptop(i))-ph(i,k))/(rho(i,k)*rg)
     2271        dz_half(i) = -(amax1(ph(i,k+1),0.5*(ptop(i)+ph(i,1)))-ph(i,k))/(rho(i,k)*rg)
    22432272        IF (dz(i)>0) THEN
    22442273          z(i) = z(i) + dz(i)
    2245           sum_thx(i) = sum_thx(i) + thx(i, k)*dz(i)
    2246           sum_tx(i) = sum_tx(i) + tx(i, k)*dz(i)
    2247           sum_qx(i) = sum_qx(i) + qx(i, k)*dz(i)
    2248           sum_thvx(i) = sum_thvx(i) + thx(i, k)*(1.+epsim1*qx(i,k))*dz(i)
     2274          sum_thu(i) = sum_thu(i) + thu(i, k)*dz(i)
     2275          sum_tu(i) = sum_tu(i) + tu(i, k)*dz(i)
     2276          sum_qu(i) = sum_qu(i) + qu(i, k)*dz(i)
     2277          sum_thvu(i) = sum_thvu(i) + thu(i, k)*(1.+epsim1*qu(i,k))*dz(i)
    22492278          sum_dth(i) = sum_dth(i) + dth(i, k)*dz(i)
    22502279          sum_dq(i) = sum_dq(i) + deltaqw(i, k)*dz(i)
     2280          sum_rho(i) = sum_rho(i) + rhow(i, k)*dz(i)
    22512281          sum_dtdwn(i) = sum_dtdwn(i) + dtdwn(i, k)*dz(i)
    22522282          sum_dqdwn(i) = sum_dqdwn(i) + dqdwn(i, k)*dz(i)
     
    22782308    IF (ok_qx_qw(i)) THEN
    22792309      ! cc
    2280       av_thx(i) = sum_thx(i)/hw0(i)
    2281       av_tx(i) = sum_tx(i)/hw0(i)
    2282       av_qx(i) = sum_qx(i)/hw0(i)
    2283       av_thvx(i) = sum_thvx(i)/hw0(i)
     2310      av_thu(i) = sum_thu(i)/hw0(i)
     2311      av_tu(i) = sum_tu(i)/hw0(i)
     2312      av_qu(i) = sum_qu(i)/hw0(i)
     2313      av_thvu(i) = sum_thvu(i)/hw0(i)
    22842314      av_dth(i) = sum_dth(i)/hw0(i)
    22852315      av_dq(i) = sum_dq(i)/hw0(i)
     2316      av_rho(i) = sum_rho(i)/hw0(i)
    22862317      av_dtdwn(i) = sum_dtdwn(i)/hw0(i)
    22872318      av_dqdwn(i) = sum_dqdwn(i)/hw0(i)
    22882319
    2289       wape2(i) = -RG*hw0(i)*(av_dth(i)+epsim1*(av_thx(i)*av_dq(i) + &
    2290                              av_dth(i)*av_qx(i)+av_dth(i)*av_dq(i)))/av_thvx(i)
     2320      wape2(i) = -rg*hw0(i)*(av_dth(i)+epsim1*(av_thu(i)*av_dq(i) + &
     2321                             av_dth(i)*av_qu(i)+av_dth(i)*av_dq(i)))/av_thvu(i)
    22912322    END IF
    22922323  END DO
    2293 #ifdef IOPHYS_WK
    2294   IF (.not.phys_sub) CALL iophys_ecrit('wape2_a',1,'wape2_a','J/kg',wape2)
    2295 #endif
     2324
    22962325
    22972326
     
    23232352    END DO
    23242353  END IF
    2325 #ifdef IOPHYS_WK
    2326   IF (.not.phys_sub) CALL iophys_ecrit('wape2_b',1,'wape2_b','J/kg',wape2)
    2327 #endif
    23282354
    23292355
     
    23602386!!      sigmaw(i) = amax1(sigmad, sigd_con(i))
    23612387      sigmaw_targ = max(sigmad, sigd_con(i))
    2362       d_sig_bnd2(i) = d_sig_bnd2(i) + sigmaw_targ - sigmaw(i)
    23632388      d_sigmaw2(i) = d_sigmaw2(i) + sigmaw_targ - sigmaw(i)
    23642389      sigmaw(i) = sigmaw_targ
    2365 !
    2366       d_asig_bnd2(i) = d_asig_bnd2(i) + sigmaw_targ - asigmaw(i)
    2367       d_asigmaw2(i) = d_asigmaw2(i) + sigmaw_targ - asigmaw(i)
    2368       asigmaw(i) = sigmaw_targ
    23692390!>jyg
    23702391        fip(i) = 0.
     
    23752396        gwake(i) = .TRUE.
    23762397      END IF
    2377 #ifdef IOPHYS_WK
    2378   IF (.not.phys_sub) CALL iophys_ecrit('cstar2',1,'cstar2','J/kg',cstar2)
    2379 #endif
    2380     END IF  ! (ok_qx_qw(i))
     2398    END IF
    23812399  END DO
    23822400
     
    24102428    END IF
    24112429  END DO
    2412     IF (iflag_wk_pop_dyn >= 3) THEN
    2413 #ifdef IOPHYS_WK
    2414       IF (.not.phys_sub) THEN
    2415        CALL iophys_ecrit('fip',1,'fip','J/kg',fip)
    2416        CALL iophys_ecrit('hw',1,'hw','J/kg',hw)
    2417        CALL iophys_ecrit('ptop',1,'ptop','J/kg',ptop)
    2418        CALL iophys_ecrit('wdens',1,'wdens','J/kg',wdens)
    2419        CALL iophys_ecrit('awdens',1,'awdens','m',awdens)
    2420        CALL iophys_ecrit('sigmaw',1,'sigmaw','m',sigmaw)
    2421        CALL iophys_ecrit('asigmaw',1,'asigmaw','m',asigmaw)
    2422 !   
    2423        CALL iophys_ecrit('rad_wk',1,'rad_wk','J/kg',rad_wk)
    2424        CALL iophys_ecrit('arad_wk',1,'arad_wk','J/kg',arad_wk)
    2425        CALL iophys_ecrit('irad_wk',1,'irad_wk','J/kg',irad_wk)
    2426 !   
    2427        call iophys_ecrit('d_wdens2',1,'d_wdens2','',d_wdens2)
    2428        call iophys_ecrit('d_dens_gen2',1,'d_dens_gen2','',d_dens_gen2)
    2429        call iophys_ecrit('d_dens_death2',1,'d_dens_death2','',d_dens_death2)
    2430        call iophys_ecrit('d_dens_col2',1,'d_dens_col2','',d_dens_col2)
    2431        call iophys_ecrit('d_dens_bnd2',1,'d_dens_bnd2','',d_dens_bnd2)
    2432 !   
    2433        call iophys_ecrit('d_awdens2',1,'d_awdens2','',d_awdens2)
    2434        call iophys_ecrit('d_adens_death2',1,'d_adens_death2','',d_adens_death2)
    2435        call iophys_ecrit('d_adens_icol2',1,'d_adens_icol2','',d_adens_icol2)
    2436        call iophys_ecrit('d_adens_acol2',1,'d_adens_acol2','',d_adens_acol2)
    2437        call iophys_ecrit('d_adens_bnd2',1,'d_adens_bnd2','',d_adens_bnd2)
    2438 !   
    2439        CALL iophys_ecrit('d_sigmaw2',1,'d_sigmaw2','',d_sigmaw2)
    2440        CALL iophys_ecrit('d_sig_gen2',1,'d_sig_gen2','m',d_sig_gen2)
    2441        CALL iophys_ecrit('d_sig_spread2',1,'d_sig_spread2','',d_sig_spread2)
    2442        CALL iophys_ecrit('d_sig_col2',1,'d_sig_col2','',d_sig_col2)
    2443        CALL iophys_ecrit('d_sig_death2',1,'d_sig_death2','',d_sig_death2)
    2444        CALL iophys_ecrit('d_sig_bnd2',1,'d_sig_bnd2','',d_sig_bnd2)
    2445 !   
    2446        CALL iophys_ecrit('d_asigmaw2',1,'d_asigmaw2','',d_asigmaw2)
    2447        CALL iophys_ecrit('d_asig_spread2',1,'d_asig_spread2','m',d_asig_spread2)
    2448        CALL iophys_ecrit('d_asig_aicol2',1,'d_asig_aicol2','m',d_asig_aicol2)
    2449        CALL iophys_ecrit('d_asig_iicol2',1,'d_asig_iicol2','m',d_asig_iicol2)
    2450        CALL iophys_ecrit('d_asig_death2',1,'d_asig_death2','m',d_asig_death2)
    2451        CALL iophys_ecrit('d_asig_bnd2',1,'d_asig_bnd2','m',d_asig_bnd2)
    2452       ENDIF  ! (.not.phys_sub)
    2453 #endif
    2454     ENDIF  ! (iflag_wk_pop_dyn >= 3)
     2430
    24552431  ! Limitation de sigmaw
    24562432
     
    24672443    DO i = 1, klon
    24682444      kill_wake(i) = ((wape(i)>=wape2(i)) .AND. (wape2(i)<=wapecut)) .OR. (ktopw(i)<=2) .OR. &
    2469           .NOT. ok_qx_qw(i) .OR. (wdens(i) < wdensthreshold)
    2470 !!          .NOT. ok_qx_qw(i) .OR. (wdens(i) < 2.*wdensmin)
     2445          .NOT. ok_qx_qw(i) .OR. (wdens(i) < 2.*wdensmin)
    24712446    ENDDO
    24722447  ELSE  ! (iflag_wk_pop_dyn >= 1)
     
    25082483      wape(i) = 0.
    25092484      cstar(i) = 0.
    2510 !!jyg   Outside subroutine "Wake" hw, wdens sigmaw and asigmaw are zero when there are no wakes
     2485!!jyg   Outside subroutine "Wake" hw, wdens and sigmaw are zero when there are no wakes
    25112486!!      hw(i) = hwmin                       !jyg
    25122487!!      sigmaw(i) = sigmad                  !jyg
    25132488      hw(i) = 0.                            !jyg
    25142489      fip(i) = 0.
    2515 !
    25162490!!      sigmaw(i) = 0.                        !jyg
    25172491      sigmaw_targ = 0.
    2518       d_sig_bnd2(i) = d_sig_bnd2(i) + sigmaw_targ - sigmaw(i)
    2519 !!      d_sigmaw2(i) = d_sigmaw2(i) + sigmaw_targ - sigmaw(i)
    2520       d_sigmaw2(i) = sigmaw_targ - sigmaw_in(i)      ! _in = correction jyg 20220124
     2492      d_sigmaw2(i) = d_sigmaw2(i) + sigmaw_targ - sigmaw(i)
    25212493      sigmaw(i) = sigmaw_targ
    2522 !
    2523       IF (iflag_wk_pop_dyn >= 3) THEN
    2524         sigmaw_targ = 0.
    2525         d_asig_bnd2(i) = d_asig_bnd2(i) + sigmaw_targ - asigmaw(i)
    2526 !!        d_sigmaw2(i) = d_sigmaw2(i) + sigmaw_targ - sigmaw(i)
    2527         d_asigmaw2(i) = sigmaw_targ - asigmaw_in(i)      ! _in = correction jyg 20220124
    2528         asigmaw(i) = sigmaw_targ
    2529       ELSE
    2530         asigmaw(i) = 0.
    2531       ENDIF ! (iflag_wk_pop_dyn >= 3)
    2532 !
    25332494      IF (iflag_wk_pop_dyn >= 1) THEN
    25342495!!        awdens(i) = 0.
    25352496!!        wdens(i) = 0.
    25362497        wdens_targ = 0.
    2537         d_dens_bnd2(i) = d_dens_bnd2(i) + wdens_targ - wdens(i)
    2538 !!        d_wdens2(i) = wdens_targ - wdens(i)
    2539         d_wdens2(i) = wdens_targ - wdens_in(i)      ! jyg 20220916
     2498        d_wdens2(i) = wdens_targ - wdens(i)
    25402499        wdens(i) = wdens_targ
    25412500        wdens_targ = 0.
    2542 !!jyg: bug fix : the d_adens_bnd2 computation must be before the update of awdens.
    2543         IF (iflag_wk_pop_dyn >= 2) THEN
    2544             d_adens_bnd2(i) = d_adens_bnd2(i) + wdens_targ - awdens(i)
    2545         ENDIF ! (iflag_wk_pop_dyn >= 2)
    2546 !!        d_awdens2(i) = wdens_targ - awdens(i)
    2547         d_awdens2(i) = wdens_targ - awdens_in(i)    ! jyg 20220916
     2501        d_awdens2(i) = wdens_targ - awdens(i)
    25482502        awdens(i) = wdens_targ
    2549 !!        IF (iflag_wk_pop_dyn == 2) THEN
    2550 !!            d_adens_bnd2(i) = d_adens_bnd2(i) + wdens_targ - awdens(i)
    2551 !!        ENDIF ! (iflag_wk_pop_dyn == 2)
    25522503      ENDIF  ! (iflag_wk_pop_dyn >= 1)
    25532504    ELSE  ! (kill_wake(i))
     
    25632514                      wape(igout),wape2(igout),ktopw(igout),OK_qx_qw(igout)
    25642515  ENDIF
    2565 #ifdef IOPHYS_WK
    2566   IF (.not.phys_sub) CALL iophys_ecrit('wape_c',1,'wape_c','J/kg',wape)
    2567 #endif
    25682516
    25692517
     
    25972545  END DO
    25982546!jyg<
    2599   IF (iflag_wk_pop_dyn >= 1) THEN
    2600     DO i = 1, klon
    2601         IF (ok_qx_qw(i)) THEN
    2602       d_sig_gen2(i) = d_sig_gen2(i)/dtime
    2603       d_sig_death2(i) = d_sig_death2(i)/dtime
    2604       d_sig_col2(i) = d_sig_col2(i)/dtime
    2605       d_sig_spread2(i) = d_sig_spread2(i)/dtime
    2606       d_sig_bnd2(i) = d_sig_bnd2(i)/dtime
    2607       d_sigmaw2(i) = d_sigmaw2(i)/dtime
    2608 !
    2609       d_dens_gen2(i) = d_dens_gen2(i)/dtime
    2610       d_dens_death2(i) = d_dens_death2(i)/dtime
    2611       d_dens_col2(i) = d_dens_col2(i)/dtime
    2612       d_dens_bnd2(i) = d_dens_bnd2(i)/dtime
    2613       d_awdens2(i) = d_awdens2(i)/dtime
    2614       d_wdens2(i) = d_wdens2(i)/dtime
    2615         ENDIF
    2616     ENDDO
    2617     IF (iflag_wk_pop_dyn >= 2) THEN
    2618       DO i = 1, klon
    2619         IF (ok_qx_qw(i)) THEN
    2620         d_adens_death2(i) = d_adens_death2(i)/dtime
    2621         d_adens_icol2(i) = d_adens_icol2(i)/dtime
    2622         d_adens_acol2(i) = d_adens_acol2(i)/dtime
    2623         d_adens_bnd2(i) = d_adens_bnd2(i)/dtime
    2624         ENDIF
    2625       ENDDO
    2626       IF (iflag_wk_pop_dyn == 3) THEN
    2627        DO i = 1, klon
    2628           IF (ok_qx_qw(i)) THEN
    2629         d_asig_death2(i)  = d_asig_death2(i)/dtime
    2630         d_asig_iicol2(i)  = d_asig_iicol2(i)/dtime
    2631         d_asig_aicol2(i)  = d_asig_aicol2(i)/dtime
    2632         d_asig_spread2(i) = d_asig_spread2(i)/dtime
    2633         d_asig_bnd2(i) = d_asig_bnd2(i)/dtime
    2634           ENDIF
    2635        ENDDO
    2636       ENDIF ! (iflag_wk_pop_dyn == 3) 
    2637     ENDIF ! (iflag_wk_pop_dyn >= 2) 
    2638   ENDIF  ! (iflag_wk_pop_dyn >= 1)
    2639  
     2547  DO i = 1, klon
     2548    d_sigmaw2(i) = d_sigmaw2(i)/dtime
     2549    d_awdens2(i) = d_awdens2(i)/dtime
     2550    d_wdens2(i) = d_wdens2(i)/dtime
     2551  ENDDO
    26402552!>jyg
    26412553
    2642  RETURN
     2554
     2555
     2556  RETURN
    26432557END SUBROUTINE wake
    26442558
    2645 SUBROUTINE wake_vec_modulation(nlon, nl, wk_adv, epsilon_loc, qb, d_qb, deltaqw, &
     2559SUBROUTINE wake_vec_modulation(nlon, nl, wk_adv, epsilon, qe, d_qe, deltaqw, &
    26462560    d_deltaqw, sigmaw, d_sigmaw, alpha)
    26472561  ! ------------------------------------------------------
    2648   ! Dtermination du coefficient alpha tel que les tendances
     2562  ! D\'etermination du coefficient alpha tel que les tendances
    26492563  ! corriges alpha*d_G, pour toutes les grandeurs G, correspondent
    26502564  ! a une humidite positive dans la zone (x) et dans la zone (w).
     
    26532567
    26542568  ! Input
    2655   REAL qb(nlon, nl), d_qb(nlon, nl)
     2569  REAL qe(nlon, nl), d_qe(nlon, nl)
    26562570  REAL deltaqw(nlon, nl), d_deltaqw(nlon, nl)
    26572571  REAL sigmaw(nlon), d_sigmaw(nlon)
     
    26642578  REAL alpha1(nlon)
    26652579  REAL x, a, b, c, discrim
    2666   REAL epsilon_loc
     2580  REAL epsilon
     2581  ! DATA epsilon/1.e-15/
    26672582  INTEGER i,k
    26682583
     
    26792594    DO i = 1, nlon
    26802595      IF (wk_adv(i)) THEN
    2681         x = qb(i, k) + (zeta(i,k)-sigmaw(i))*deltaqw(i, k) + d_qb(i, k) + &
     2596        x = qe(i, k) + (zeta(i,k)-sigmaw(i))*deltaqw(i, k) + d_qe(i, k) + &
    26822597          (zeta(i,k)-sigmaw(i))*d_deltaqw(i, k) - d_sigmaw(i) * &
    26832598          (deltaqw(i,k)+d_deltaqw(i,k))
    26842599        a = -d_sigmaw(i)*d_deltaqw(i, k)
    2685         b = d_qb(i, k) + (zeta(i,k)-sigmaw(i))*d_deltaqw(i, k) - &
     2600        b = d_qe(i, k) + (zeta(i,k)-sigmaw(i))*d_deltaqw(i, k) - &
    26862601          deltaqw(i, k)*d_sigmaw(i)
    2687         c = qb(i, k) + (zeta(i,k)-sigmaw(i))*deltaqw(i, k) + epsilon_loc
     2602        c = qe(i, k) + (zeta(i,k)-sigmaw(i))*deltaqw(i, k) + epsilon
    26882603        discrim = b*b - 4.*a*c
    26892604        ! print*, 'x, a, b, c, discrim', x, a, b, c, discrim
    2690         IF (a+b>=0.) THEN !! Condition suffisante pour la positivite de ovap
     2605        IF (a+b>=0.) THEN !! Condition suffisante pour la positivité de ovap
    26912606          alpha1(i) = 1.
    26922607        ELSE
     
    27142629END SUBROUTINE wake_vec_modulation
    27152630
    2716 
    2717 
    2718 SUBROUTINE pkupper (klon, klev, ptop, ph, p, pupper, kupper, &
    2719                     dth, hw_, rho, delta_t_min_in, &
    2720                     ktop, wk_adv, h_zzz, ptop1, ktop1)
    2721 
    2722 USE lmdz_wake_ini , ONLY : wk_pupper
    2723 USE lmdz_wake_ini , ONLY : RG
    2724 USE lmdz_wake_ini , ONLY : hwmin
    2725 USE lmdz_wake_ini , ONLY : iflag_wk_new_ptop, wk_delta_t_min, wk_frac_int_delta_t
    2726 USE lmdz_wake_ini , ONLY : wk_int_delta_t_min
    2727 
    2728 IMPLICIT NONE
    2729 
    2730 INTEGER,                              INTENT(IN) :: klon,klev
    2731 REAL,       DIMENSION (klon,klev+1) , INTENT(IN) :: ph, p
    2732 REAL,       DIMENSION (klon,klev+1) , INTENT(IN) :: rho
    2733 LOGICAL,    DIMENSION (klon)        , INTENT(IN) :: wk_adv
    2734 REAL,       DIMENSION (klon,klev+1) , INTENT(IN) :: dth
    2735 REAL,                                 INTENT(IN) :: delta_t_min_in
    2736 
    2737 
    2738 REAL,       DIMENSION (klon)  , INTENT(OUT)        :: hw_
    2739 REAL,       DIMENSION (klon)  , INTENT(OUT)        :: ptop
    2740 INTEGER,    DIMENSION (klon)  , INTENT(OUT)        :: Ktop
    2741 REAL,       DIMENSION (klon)  , INTENT(OUT)        :: pupper
    2742 INTEGER,    DIMENSION (klon)  , INTENT(OUT)        :: kupper
    2743 REAL,       DIMENSION (klon)  , INTENT(OUT)        :: h_zzz       !!
    2744 REAL,       DIMENSION (klon)  , INTENT(OUT)        :: Ptop1      !!
    2745 INTEGER,    DIMENSION (klon)  , INTENT(OUT)        :: ktop1      !!
    2746 
    2747 INTEGER :: i,k
    2748 
    2749 LOGICAL,    DIMENSION (klon)       :: wk_active
    2750 REAL                               :: delta_t_min
    2751 REAL,     DIMENSION (klon)         :: dthmin
    2752 REAL,     DIMENSION (klon)         :: ptop_provis,ptop_new
    2753 REAL,     DIMENSION (klon)         :: z, dz
    2754 REAL,     DIMENSION (klon)         :: sum_dth
    2755 
    2756 INTEGER,     DIMENSION (klon)                     :: k_ptop_provis
    2757 REAL,     DIMENSION (klon)                     :: zk_ptop_provis
    2758 REAL,     DIMENSION (klon)                        :: omega        !!
    2759 REAL,     DIMENSION (klon,klev+1)                 :: int_dth      !!
    2760 REAL,     DIMENSION (klon,klev+1)                 :: dzz          !!
    2761 REAL,     DIMENSION (klon,klev+1)                 :: zzz          !!
    2762 REAL,     DIMENSION (klon)                 :: frac_int_dth          !!
    2763 REAL                                              :: ddd!!
    2764 
    2765 
    2766 INTEGER, SAVE :: ipas=0
    2767 
    2768 
    2769 
    2770 !INTEGER, SAVE :: compte=0
    2771 
    2772 ! LJYF : a priori z, dz sum_dth sont aussi des variables internes
    2773 ! Les eliminer apres verification convergence numerique
    2774 
    2775 !compte=compte+1
    2776 !print*,'compte=',compte
    2777 
    2778     ! Determine Ptop from buoyancy integral
    2779     ! ---------------------------------------
    2780 
    2781     ! -     1/ Pressure of the level where dth changes sign.
    2782     !print*,'WAKE LJYF'
    2783 
    2784 
    2785 if (iflag_wk_new_ptop==0) then
    2786     delta_t_min=delta_t_min_in
    2787 else
    2788     delta_t_min=wk_delta_t_min
    2789 endif
    2790 
    2791     DO i = 1, klon
    2792         ptop_provis(i) = ph(i, 1)
    2793         k_ptop_provis(i) = 1
    2794     END DO
    2795 
    2796     DO k = 2, klev
    2797       DO i = 1, klon
    2798         IF (wk_adv(i) .AND. ptop_provis(i)==ph(i,1) .AND. &
    2799 ! LJYF changer :           dth(i,k)>=-delta_t_min .AND. dth(i,k-1)<-delta_t_min) THEN
    2800             dth(i,k)>-delta_t_min .AND. dth(i,k-1)<-delta_t_min) THEN
    2801           ptop_provis(i) = ((dth(i,k)+delta_t_min)*p(i,k-1) - &
    2802                             (dth(i,k-1)+delta_t_min)*p(i,k))/(dth(i,k)-dth(i,k-1))
    2803           k_ptop_provis(i) = k
    2804         END IF
    2805       END DO
    2806     END DO
    2807 
    2808 
    2809 
    2810     ! -     2/ dth integral
    2811 
    2812     DO i = 1, klon
    2813       IF (wk_adv(i)) THEN !!! nrlmd
    2814         sum_dth(i) = 0.
    2815         dthmin(i) = -delta_t_min
    2816         z(i) = 0.
    2817       END IF
    2818     END DO
    2819 
    2820     DO k = 1, klev
    2821       DO i = 1, klon
    2822         IF (wk_adv(i)) THEN
    2823           dz(i) = -(amax1(ph(i,k+1),ptop_provis(i))-ph(i,k))/(rho(i,k)*RG)
    2824           IF (dz(i)>0) THEN
    2825             z(i) = z(i) + dz(i)
    2826             sum_dth(i) = sum_dth(i) + dth(i, k)*dz(i)
    2827             dthmin(i) = amin1(dthmin(i), dth(i,k))
    2828           END IF
    2829         END IF
    2830       END DO
    2831     END DO
    2832 
    2833     ! -     3/ height of triangle with area= sum_dth and base = dthmin
    2834 
    2835     DO i = 1, klon
    2836       IF (wk_adv(i)) THEN
    2837         hw_(i) = 2.*sum_dth(i)/amin1(dthmin(i), -0.5)
    2838         hw_(i) = amax1(hwmin, hw_(i))
    2839       END IF
    2840     END DO
    2841 
    2842     ! -     4/ now, get Ptop
    2843 
    2844     DO i = 1, klon
    2845       IF (wk_adv(i)) THEN !!! nrlmd
    2846         ktop(i) = 0
    2847         z(i) = 0.
    2848       END IF
    2849     END DO
    2850 
    2851     DO k = 1, klev
    2852       DO i = 1, klon
    2853         IF (wk_adv(i)) THEN
    2854           dz(i) = amin1(-(ph(i,k+1)-ph(i,k))/(rho(i,k)*RG), hw_(i)-z(i))
    2855           IF (dz(i)>0) THEN
    2856             z(i) = z(i) + dz(i)
    2857             ptop(i) = ph(i, k) - rho(i, k)*RG*dz(i)
    2858             ktop(i) = k
    2859           END IF
    2860         END IF
    2861       END DO
    2862     END DO
    2863 
    2864     ! 4.5/Correct ktop and ptop
    2865 
    2866     DO i = 1, klon
    2867         ptop_new(i) = ptop(i)
    2868     END DO
    2869 
    2870     DO k = klev, 2, -1
    2871       DO i = 1, klon
    2872         ! IM v3JYG; IF (k .GE. ktop(i)
    2873         IF (wk_adv(i) .AND. k<=ktop(i) .AND. ptop_new(i)==ptop(i) .AND. &
    2874 ! LJYF changer :           dth(i,k)>=-delta_t_min .AND. dth(i,k-1)<-delta_t_min) THEN
    2875             dth(i,k)>=-delta_t_min .AND. dth(i,k-1)<-delta_t_min) THEN
    2876           ptop_new(i) = ((dth(i,k)+delta_t_min)*p(i,k-1) - &
    2877                          (dth(i,k-1)+delta_t_min)*p(i,k))/(dth(i,k)-dth(i,k-1))
    2878         END IF
    2879       END DO
    2880     END DO
    2881 
    2882 
    2883     DO i = 1, klon
    2884         ptop(i) = ptop_new(i)
    2885     END DO
    2886 
    2887     DO k = klev, 1, -1
    2888       DO i = 1, klon
    2889         IF (wk_adv(i)) THEN !!! nrlmd
    2890           IF (ph(i,k+1)<ptop(i)) ktop(i) = k
    2891         END IF
    2892       END DO
    2893     END DO
    2894  
    2895 !  IF (prt_level>=10) THEN
    2896 !    PRINT *, 'wake-3, ktop(igout), kupper(igout) ', ktop(igout), kupper(igout)
    2897 !  ENDIF
    2898 
    2899     ! -----------------------------------------------------------------------
    2900     ! nouveau calcul de hw et ptop
    2901     ! -----------------------------------------------------------------------
    2902 !if (iflag_wk_new_ptop>0) then
    2903 do i=1,klon
    2904    ptop1(i)=ph(i,1)
    2905    ktop1(i)=1
    2906    h_zzz(i)=0.
    2907 enddo
    2908    
    2909 IF (iflag_wk_new_ptop/=0) THEN
    2910    
    2911     int_dth(1:klon,1:klev+1)=0.
    2912     DO i = 1, klon
    2913        IF (wk_adv(i)) THEN
    2914           int_dth(i,1) = 0.
    2915       END IF
    2916     END DO
    2917    
    2918     if (abs(iflag_wk_new_ptop) == 1 ) then
    2919         DO k = 2, klev+1
    2920            Do i = 1, klon
    2921               IF (wk_adv(i)) THEN
    2922                  if (k<=k_ptop_provis(i)) then
    2923                       ddd=dth(i,k-1)*(ph(i,k-1) - max(ptop_provis(i),ph(i,k)))
    2924                       !ddd=dth(i,k-1)*(ph(i,k-1) - ph(i,k))
    2925                  else
    2926                       ddd=0.
    2927                  endif             
    2928                  int_dth(i,k) = int_dth(i,k-1) + ddd
    2929               !ELSE
    2930               !   int_dth(i,k) = 0.
    2931               END IF
    2932            END DO
    2933         END DO
    2934     else
    2935         k_ptop_provis(:)=klev+1
    2936         dthmin(:)=dth(:,1)
    2937         ! calcul de l'int??grale de dT * dP jusqu'au dernier
    2938         ! niveau avec dT<0. (en s'assurant qu'on a bien un
    2939         ! dT negatif plus bas)
    2940         DO k = 1, klev
    2941            DO i = 1, klon
    2942               dthmin(i)=min(dthmin(i),dth(i,k))
    2943               ddd=dth(i,k)*(ph(i,k)-ph(i,k+1))
    2944               if (dthmin(i)<0.) then
    2945                   if (k>=k_ptop_provis(i)) then
    2946                       ddd=0.
    2947                   else if (dth(i,k)>=0.) then
    2948                       ddd=0.
    2949                       k_ptop_provis(i)=k+1
    2950                   endif
    2951               endif
    2952               int_dth(i,k+1) = int_dth(i,k)+ ddd
    2953            ENDDO
    2954         ENDDO
    2955 
    2956         DO i = 1, klon
    2957            if ( k_ptop_provis(i)==klev+1 .or. .not. wk_adv(i)) then
    2958                 k_ptop_provis(i)=1
    2959            endif
    2960         ENDDO
    2961     endif ! (abs(iflag_wk_new_ptop) == 1 )
    2962    ! print*, 'xxx, int_dth', (k,int_dth(1,k),k=1,klev)
    2963    ! print*, 'xxx, k_ptop_provis', k_ptop_provis(1)
    2964    
    2965 
    2966  
    2967     ! On se limite ?? des poches avec integrale dT * dp < -wk_int_delta_t_min
    2968     do i=1,klon
    2969           if (int_dth(i,k_ptop_provis(i)) > -wk_int_delta_t_min .or. k_ptop_provis(i)==1) then
    2970           !if (1==0) then
    2971              wk_active(i)=.false.
    2972              ptop(i)=ph(i,1)
    2973              ktop(i)=1
    2974              hw_(i)=0.
    2975           else
    2976              wk_active(i)=wk_adv(i)
    2977           endif
    2978     enddo
    2979 
    2980     DO i=1,klon
    2981        IF (wk_active(i)) THEN
    2982         frac_int_dth(i)=wk_frac_int_delta_t*int_dth(i,k_ptop_provis(i))
    2983        ENDIF
    2984     ENDDO
    2985     DO k = 1,klev
    2986        DO i =1, klon
    2987 !         print*,ipas,'yyy ',k,int_dth(i,k),frac_int_dth(i)
    2988           IF (wk_active(i)) THEN
    2989             IF (int_dth(i,k)>=frac_int_dth(i)) THEN
    2990               ktop1(i) = min(k, k_ptop_provis(i))
    2991               !ktop1(i) = k
    2992               !print*,ipas,'yyy ktop1= ',ktop1
    2993             ENDIF
    2994           ENDIF
    2995        END DO
    2996     END DO
    2997     !print*, 'LAMINE'
    2998    
    2999     DO i = 1, klon
    3000        IF (wk_active(i)) THEN
    3001            !print*, ipas,'xxx1, int_dth(i,ktop1(i)), frac_int_dth(i), int_dth(i,ktop1(i)+1) ',ktop1
    3002            ddd=int_dth(i,ktop1(i)+1)-int_dth(i,ktop1(i))
    3003            if (ddd==0.) then
    3004               omega(i)=0.
    3005            else
    3006               omega(i) = (frac_int_dth(i) - int_dth(i,ktop1(i)))/ddd
    3007            endif
    3008            !! print*,'OMEGA ',omega(i)
    3009        END IF
    3010     END DO
    3011    
    3012     !! print*, 'xxx'
    3013     DO i = 1, klon
    3014        IF (wk_active(i)) THEN
    3015       ! print*, 'xxx, int_dth(i,ktop1(i)), frac_int_dth(i), int_dth(i,ktop1(i)+1) ', &
    3016       !               int_dth(i,ktop1(i)), frac_int_dth(i), int_dth(i,ktop1(i)+1)
    3017       ! print*, 'xxx, omega(i), ph(i,ktop1(i)), ph(i,ktop1(i)+1) ',  &
    3018       !e               omega(i), ph(i,ktop1(i)), ph(i,ktop1(i)+1)
    3019           ptop1(i) = min((1 - omega(i))*ph(i,ktop1(i)) + omega(i)*ph(i,ktop1(i)+1), ph(i,1))
    3020       END IF
    3021     END DO
    3022    
    3023     DO i=1, klon
    3024        IF (wk_active(i)) THEN
    3025            zzz(i, 1) = 0
    3026        END IF
    3027      END DO
    3028     DO k = 1, klev
    3029        DO i = 1, klon
    3030            IF (wk_active(i)) THEN         
    3031               dzz(i,k) = (ph(i,k) - ph(i,k+1))/(rho(i,k)*RG)
    3032               zzz(i,k+1) = zzz(i,k) + dzz(i,k)
    3033            END IF
    3034        END DO
    3035     END DO
    3036    
    3037     DO i =1, klon
    3038        IF (wk_active(i)) THEN
    3039            h_zzz(i) = max((1- omega(i))*zzz(i,ktop1(i)) + omega(i)*zzz(i,ktop1(i)+1), hwmin)
    3040        END IF
    3041     END DO
    3042 
    3043 
    3044 ENDIF ! (iflag_wk_new_ptop/=0)
    3045 
    3046 !if (iflag_wk_new_ptop==2) then
    3047 IF (iflag_wk_new_ptop>0) THEN
    3048    do i=1,klon
    3049       ptop(i)=ptop1(i)
    3050       ktop(i)=ktop1(i)
    3051       hw_(i)=h_zzz(i)
    3052    enddo
    3053 
    3054 !endif
    3055 ENDIF
    3056 
    3057  kupper = 0
    3058  
    3059 IF (wk_pupper<1.) THEN
    3060  ! Choose an integration bound well above wake top
    3061   ! -----------------------------------------------------------------
    3062 
    3063   ! Pupper = 50000.  ! melting level
    3064   ! Pupper = 60000.
    3065   ! Pupper = 80000.  ! essais pour case_e
    3066   DO i = 1, klon
    3067   !  pupper(i) = 0.6*ph(i, 1)
    3068     pupper(i) = wk_pupper*ph(i, 1)
    3069     pupper(i) = max(pupper(i), 45000.)
    3070     ! cc        Pupper(i) = 60000.
    3071   END DO
    3072 
    3073 ELSE
    3074   DO i=1, klon
    3075      ! pupper(i) = wk_pupper*ptop(i)+(1.-wk_pupper)*ph(i, 1)
    3076      !  pupper(i) = min( wk_pupper*ptop(i)+(1.-wk_pupper)*ph(i, 1) , ptop(i)-50.)
    3077       pupper(i) = min( wk_pupper*ptop(i)+(1.-wk_pupper)*ph(i, 1) , ptop(i)-5000.)
    3078   END DO
    3079 END IF
    3080  
    3081   ! -5/ Determination de kupper
    3082 
    3083   DO k = klev, 1, -1
    3084     DO i = 1, klon
    3085       IF (ph(i,k+1)<pupper(i)) kupper(i) = k
    3086     END DO
    3087   END DO
    3088 
    3089   ! On evite kupper = 1 et kupper = klev
    3090   DO i = 1, klon
    3091     kupper(i) = max(kupper(i), 2)
    3092     kupper(i) = min(kupper(i), klev-1)
    3093   END DO
    3094   !---------- FIN nouveau calcul hw et ptop -------------------------------------
    3095 
    3096 IF (iflag_wk_new_ptop==999) THEN
    3097     DO i = 1, klon
    3098     hw_(i)=0.
    3099     ptop(i)=ph(i,1)
    3100     Ktop(i)=1
    3101     pupper(i)=ph(i,2)
    3102     kupper(i)=2
    3103     h_zzz(i)=0.
    3104     Ptop1(i)=ph(i,1)
    3105     ENDDO
    3106 ENDIF
    3107 
    3108 zk_ptop_provis=k_ptop_provis
    3109 
    3110     RETURN
    3111 END SUBROUTINE pkupper
    3112 
    3113 
    3114 SUBROUTINE wake_popdyn_1(klon, klev, dtime, cstar, tau_wk_inv, wgen, wdens, awdens, sigmaw, &
    3115                   wdensmin, &
    3116                   dtimesub, gfl, rad_wk, f_shear, drdt_pos, &
    3117                   d_awdens, d_wdens, d_sigmaw, &
    3118                   iflag_wk_act, wk_adv, cin, wape, &
    3119                   drdt, &
    3120                   d_dens_gen, d_dens_death, d_dens_col, d_dens_bnd, &
    3121                   d_sig_gen, d_sig_death, d_sig_col, d_sig_spread, d_sig_bnd, &
    3122                   d_wdens_targ, d_sigmaw_targ)
    3123                
    3124 
    3125   USE lmdz_wake_ini , ONLY : wake_ini
    3126   USE lmdz_wake_ini , ONLY : prt_level,RG
    3127   USE lmdz_wake_ini , ONLY : stark, wdens_ref
    3128   USE lmdz_wake_ini , ONLY : tau_cv, rzero, aa0
    3129 !!  USE lmdz_wake_ini , ONLY : iflag_wk_pop_dyn, wdensmin
    3130   USE lmdz_wake_ini , ONLY : iflag_wk_pop_dyn
    3131   USE lmdz_wake_ini , ONLY : sigmad, cstart, sigmaw_max
    3132  
    3133 IMPLICIT NONE
    3134 
    3135   INTEGER, INTENT(IN)                                   :: klon,klev
    3136   LOGICAL, DIMENSION (klon),        INTENT(IN)          :: wk_adv
    3137   REAL,                             INTENT(IN)          :: dtime
    3138   REAL,                             INTENT(IN)          :: dtimesub
    3139   REAL,                             INTENT(IN)          :: wdensmin
    3140   REAL, DIMENSION (klon),           INTENT(IN)          :: wgen
    3141   REAL, DIMENSION (klon),           INTENT(IN)          :: wdens
    3142   REAL, DIMENSION (klon),           INTENT(IN)          :: awdens
    3143   REAL, DIMENSION (klon),           INTENT(IN)          :: sigmaw
    3144   REAL, DIMENSION (klon),           INTENT(IN)          :: cstar
    3145   REAL, DIMENSION (klon),           INTENT(IN)          :: cin, wape
    3146   REAL, DIMENSION (klon),           INTENT(IN)          :: f_shear
    3147   INTEGER,                          INTENT(IN)          :: iflag_wk_act
    3148 
    3149  
    3150   !
    3151  
    3152   ! Tendencies of state variables (2 is appended to the names of fields which are the cumul of fields
    3153   !                                 computed at each sub-timestep; e.g. d_wdens2 is the cumul of d_wdens)
    3154   REAL, DIMENSION (klon),           INTENT(OUT)         :: rad_wk
    3155   REAL, DIMENSION (klon),           INTENT(OUT)         :: gfl
    3156   REAL, DIMENSION (klon),           INTENT(OUT)         :: d_sigmaw, d_awdens, d_wdens
    3157   REAL, DIMENSION (klon),           INTENT(OUT)         :: drdt
    3158   ! Some components of the tendencies of state variables 
    3159   REAL, DIMENSION (klon),           INTENT(OUT)         :: d_sig_gen, d_sig_death, d_sig_col, d_sig_bnd
    3160   REAL, DIMENSION (klon),           INTENT(OUT)         :: d_sig_spread
    3161   REAL, DIMENSION (klon),           INTENT(OUT)         :: d_dens_gen, d_dens_death, d_dens_col, d_dens_bnd
    3162   REAL,                             INTENT(OUT)         :: d_wdens_targ, d_sigmaw_targ
    3163  
    3164  
    3165   REAL                                                  :: delta_t_min
    3166   INTEGER                                               :: i, k
    3167   REAL                                                  :: wdens0
    3168   ! IM 080208
    3169   LOGICAL, DIMENSION (klon)                             :: gwake
    3170  
    3171    ! Variables liees a la dynamique de population
    3172   REAL, DIMENSION(klon)                                 :: act
    3173   REAL, DIMENSION(klon)                                 :: tau_wk_inv
    3174   REAL, DIMENSION(klon)                                 :: wape1_act, wape2_act
    3175   LOGICAL, DIMENSION (klon)                             :: kill_wake
    3176   REAL                                                  :: drdt_pos
    3177   REAL                                                  :: tau_wk_inv_min
    3178  
    3179      
    3180 
    3181       IF (iflag_wk_act == 0) THEN
    3182         act(:) = 0.
    3183       ELSEIF (iflag_wk_act == 1) THEN
    3184         act(:) = 1.
    3185       ELSEIF (iflag_wk_act ==2) THEN
    3186       DO i = 1, klon
    3187         IF (wk_adv(i)) THEN
    3188           wape1_act(i) = abs(cin(i))
    3189           wape2_act(i) = 2.*wape1_act(i) + 1.
    3190           act(i) = min(1., max(0., (wape(i)-wape1_act(i)) / (wape2_act(i)-wape1_act(i)) ))
    3191         ENDIF  ! (wk_adv(i))
    3192       ENDDO
    3193       ENDIF  ! (iflag_wk_act ==2)
    3194 
    3195       DO i = 1, klon
    3196         IF (wk_adv(i)) THEN
    3197           rad_wk(i) = max( sqrt(sigmaw(i)/(3.14*wdens(i))) , rzero)
    3198           gfl(i)  = 2.*sqrt(3.14*wdens(i)*sigmaw(i))
    3199         END IF
    3200       END DO
    3201 
    3202       DO i = 1, klon
    3203         IF (wk_adv(i)) THEN
    3204 !!          tau_wk(i) = max(rad_wk(i)/(3.*cstar(i))*((cstar(i)/cstart)**1.5 - 1), 100.)
    3205           tau_wk_inv(i) = max( (3.*cstar(i))/(rad_wk(i)*((cstar(i)/cstart)**1.5 - 1)), 0.)
    3206           tau_wk_inv_min = min(tau_wk_inv(i), 1./dtimesub)
    3207           drdt(i) = (cstar(i) - wgen(i)*(sigmaw(i)/wdens(i)-aa0)/gfl(i)) / &
    3208                     (1 + 2*f_shear(i)*(2.*sigmaw(i)-aa0*wdens(i)) - 2.*sigmaw(i))
    3209 !!                    (1 - 2*sigmaw(i)*(1.-f_shear(i)))
    3210           drdt_pos=max(drdt(i),0.)
    3211 
    3212 !!          d_wdens(i) = ( wgen(i)*(1.+2.*(sigmaw(i)-sigmad)) &
    3213 !!                     - wdens(i)*tau_wk_inv_min &
    3214 !!                     - 2.*gfl(i)*wdens(i)*Cstar(i) )*dtimesub
    3215 !jyg+mlt<
    3216           d_awdens(i) = ( wgen(i) - (1./tau_cv)*(awdens(i) - act(i)*wdens(i)) )*dtimesub
    3217           d_dens_gen(i) = wgen(i)
    3218           d_dens_death(i) = - (wdens(i)-awdens(i))*tau_wk_inv_min
    3219           d_dens_col(i) =  -2.*wdens(i)*gfl(i)*drdt_pos
    3220           d_dens_gen(i) =  d_dens_gen(i)*dtimesub
    3221           d_dens_death(i) = d_dens_death(i)*dtimesub
    3222           d_dens_col(i) =  d_dens_col(i)*dtimesub
    3223 
    3224           d_wdens(i) = d_dens_gen(i)+d_dens_death(i)+d_dens_col(i)
    3225 !!          d_wdens(i) = ( wgen(i) - (wdens(i)-awdens(i))*tau_wk_inv_min -  &
    3226 !!                         2.*wdens(i)*gfl(i)*drdt_pos )*dtimesub
    3227 !>jyg+mlt
    3228 !
    3229 !jyg<
    3230           d_wdens_targ = max(d_wdens(i), wdensmin-wdens(i))
    3231 !!          d_dens_bnd(i) = d_dens_bnd(i) + d_wdens_targ - d_wdens(i)
    3232           d_dens_bnd(i) = d_wdens_targ - d_wdens(i)
    3233           d_wdens(i) = d_wdens_targ
    3234 !!          d_wdens(i) = max(d_wdens(i), wdensmin-wdens(i))
    3235 !>jyg
    3236 
    3237 !jyg+mlt<
    3238 !!          d_sigmaw(i) = ( (1.-2*f_shear(i)*sigmaw(i))*(gfl(i)*Cstar(i)+wgen(i)*sigmad/wdens(i)) &
    3239 !!                      + 2.*f_shear(i)*wgen(i)*sigmaw(i)**2/wdens(i) &
    3240 !!                      - sigmaw(i)*tau_wk_inv_min )*dtimesub
    3241           d_sig_gen(i) = wgen(i)*aa0
    3242           d_sig_death(i) = - sigmaw(i)*(1.-awdens(i)/wdens(i))*tau_wk_inv_min
    3243 !!       
    3244          
    3245           d_sig_col(i) = - 2*f_shear(i)*sigmaw(i)*gfl(i)*drdt_pos
    3246           d_sig_col(i) = - 2*f_shear(i)*(2.*sigmaw(i)-wdens(i)*aa0)*gfl(i)*drdt_pos
    3247           d_sig_spread(i) = gfl(i)*cstar(i)
    3248           d_sig_gen(i) =  d_sig_gen(i)*dtimesub
    3249           d_sig_death(i) = d_sig_death(i)*dtimesub
    3250           d_sig_col(i) =  d_sig_col(i)*dtimesub
    3251           d_sig_spread(i) =  d_sig_spread(i)*dtimesub
    3252           d_sigmaw(i) =  d_sig_gen(i) + d_sig_death(i) + d_sig_col(i) + d_sig_spread(i)
    3253 !>jyg+mlt
    3254 !
    3255 !jyg<
    3256           d_sigmaw_targ = max(d_sigmaw(i), sigmad-sigmaw(i))
    3257 !!          d_sig_bnd(i) = d_sig_bnd(i) + d_sigmaw_targ - d_sigmaw(i)
    3258 !!          d_sig_bnd_provis(i) = d_sigmaw_targ - d_sigmaw(i)
    3259           d_sig_bnd(i) = d_sigmaw_targ - d_sigmaw(i)
    3260           d_sigmaw(i) = d_sigmaw_targ
    3261 !!          d_sigmaw(i) = max(d_sigmaw(i), sigmad-sigmaw(i))
    3262 !>jyg
    3263         ENDIF
    3264       ENDDO
    3265 
    3266       IF (prt_level >= 10) THEN
    3267         print *,'wake, cstar(1), cstar(1)/cstart, rad_wk(1), tau_wk_inv(1), drdt(1) ', &
    3268                        cstar(1), cstar(1)/cstart, rad_wk(1), tau_wk_inv(1), drdt(1)
    3269         print *,'wake, wdens(1), awdens(1), act(1), d_awdens(1) ', &
    3270                        wdens(1), awdens(1), act(1), d_awdens(1)
    3271         print *,'wake, wgen, -(wdens-awdens)*tau_wk_inv, -2.*wdens*gfl*drdt_pos, d_wdens ', &
    3272                        wgen(1), -(wdens(1)-awdens(1))*tau_wk_inv(1), -2.*wdens(1)*gfl(1)*drdt_pos, d_wdens(1)
    3273         print *,'wake, d_sig_gen(1), d_sig_death(1), d_sig_col(1), d_sigmaw(1) ', &
    3274                        d_sig_gen(1), d_sig_death(1), d_sig_col(1), d_sigmaw(1)
    3275       ENDIF
    3276    
    3277     RETURN
    3278     END SUBROUTINE wake_popdyn_1
    3279    
    3280     SUBROUTINE wake_popdyn_2 ( klon, klev, wk_adv, dtimesub, wgen, &
    3281                              wdensmin, &
    3282                              sigmaw, wdens, awdens, &   !! states variables
    3283                              gfl, cstar, cin, wape, rad_wk, &
    3284                              d_sigmaw, d_wdens, d_awdens, &  !! tendences
    3285                              cont_fact, &
    3286                              d_sig_gen, d_sig_death, d_sig_col, d_sig_spread, d_sig_bnd, &
    3287                              d_dens_gen, d_dens_death, d_dens_col, d_dens_bnd, &
    3288                              d_adens_death, d_adens_icol, d_adens_acol, d_adens_bnd )
    3289                              
    3290                                              
    3291 
    3292   USE lmdz_wake_ini , ONLY : wake_ini
    3293   USE lmdz_wake_ini , ONLY : prt_level,RG
    3294   USE lmdz_wake_ini , ONLY : stark, wdens_ref
    3295   USE lmdz_wake_ini , ONLY : tau_cv, rzero, aa0
    3296 !!  USE lmdz_wake_ini , ONLY : iflag_wk_pop_dyn, wdensmin
    3297   USE lmdz_wake_ini , ONLY : iflag_wk_pop_dyn
    3298   USE lmdz_wake_ini , ONLY : sigmad, cstart, sigmaw_max
    3299  
    3300 IMPLICIT NONE
    3301 
    3302   INTEGER, INTENT(IN)                                   :: klon,klev
    3303   LOGICAL, DIMENSION (klon),        INTENT(IN)          :: wk_adv
    3304   REAL,                             INTENT(IN)          :: dtimesub
    3305   REAL,                             INTENT(IN)          :: wdensmin
    3306   REAL, DIMENSION (klon),           INTENT(IN)          :: wgen      !! B = birth rate of wakes
    3307   REAL, DIMENSION (klon),           INTENT(INOUT)       :: sigmaw    !! sigma = fractional area of wakes
    3308   REAL, DIMENSION (klon),           INTENT(INOUT)       :: wdens     !! D = number of wakes per unit area
    3309   REAL, DIMENSION (klon),           INTENT(INOUT)       :: awdens    !! A = number of active wakes per unit area
    3310   REAL, DIMENSION (klon),           INTENT(IN)          :: cstar     !! C* = spreading velocity of wakes
    3311   REAL, DIMENSION (klon),           INTENT(IN)          :: cin, wape  ! RM : A Faire disparaitre
    3312 
    3313 
    3314   REAL, DIMENSION (klon),           INTENT(OUT)         :: rad_wk    !! r = wake radius
    3315   REAL, DIMENSION (klon),           INTENT(OUT)         :: gfl       !! Lg = gust front lenght per unit area
    3316   REAL, DIMENSION (klon),           INTENT(OUT)         :: d_sigmaw, d_wdens, d_awdens
    3317   REAL, DIMENSION (klon),           INTENT(OUT)         :: cont_fact  !! RM facteur de contact = 2 pi * rad * C*
    3318   ! Some components of the tendencies of state variables 
    3319   REAL, DIMENSION (klon),           INTENT(OUT)         :: d_sig_gen, d_sig_death, d_sig_col, d_sig_spread, d_sig_bnd
    3320   REAL, DIMENSION (klon),           INTENT(OUT)         :: d_dens_gen, d_dens_death, d_dens_col, d_dens_bnd
    3321   REAL, DIMENSION (klon),           INTENT(OUT)         :: d_adens_death, d_adens_icol, d_adens_acol, d_adens_bnd
    3322 
    3323 
    3324 !! internal variables
    3325  
    3326   INTEGER                                               :: i, k
    3327   REAL, DIMENSION (klon)                                :: tau_wk_inv      !! tau = life time of wakes
    3328   REAL                                                  :: tau_wk_inv_min
    3329   REAL, DIMENSION (klon)                                :: tau_prime       !! tau_prime = life time of actives wakes
    3330   REAL                                                  :: d_wdens_targ, d_sigmaw_targ
    3331  
    3332 
    3333 !! Equations
    3334 !! dD/dt = B - (D-A)/tau - f D^2
    3335 !! dA/dt = B - A/tau_prime + f (D-A)^2 - f A^2
    3336 !! dsigma/dt = B a0 - sigma/D (D-A)/tau + Lg C* - f (D-A)^2 (sigma/D-a0)
    3337 !!
    3338 !! f = 2 (B (a0-sigma/D) + Lg C*) / (2 (D-A)^2 (2 sigma/D-a0) + D (1-2 sigma))
    3339 
    3340 
    3341       DO i = 1, klon
    3342         IF (wk_adv(i)) THEN
    3343           rad_wk(i) = max( sqrt(sigmaw(i)/(3.14*wdens(i))) , rzero)
    3344           gfl(i)  = 2.*sqrt(3.14*wdens(i)*sigmaw(i))
    3345         END IF
    3346       END DO
    3347 
    3348 
    3349       DO i = 1, klon
    3350         IF (wk_adv(i)) THEN
    3351 !!          tau_wk(i) = max(rad_wk(i)/(3.*cstar(i))*((cstar(i)/cstart)**1.5 - 1), 100.)
    3352           tau_wk_inv(i) = max( (3.*cstar(i))/(rad_wk(i)*((cstar(i)/cstart)**1.5 - 1)), 0.)
    3353           tau_wk_inv_min = min(tau_wk_inv(i), 1./dtimesub)
    3354           tau_prime(i) = tau_cv
    3355 !!          cont_fact(i) = 2.*(wgen(i)*(aa0-sigmaw(i)/wdens(i)) + gfl(i)*cstar(i)) / &
    3356 !!                             (2.*(wdens(i)-awdens(i))**2*(2.*sigmaw(i)/wdens(i) - aa0) + wdens(i)*(1.-2.*sigmaw(i)))
    3357 !!          cont_fact(i) = 2.*3.14*rad_wk(i)*cstar(i)     ! bug
    3358 !!          cont_fact(i) = 4.*3.14*rad_wk(i)*cstar(i)
    3359           cont_fact(i) = 2.*gfl(i)*cstar(i)/wdens(i)
    3360 
    3361           d_sig_gen(i) = wgen(i)*aa0
    3362           d_sig_death(i) = - sigmaw(i)*(1.-awdens(i)/wdens(i))*tau_wk_inv_min
    3363           d_sig_col(i) = - cont_fact(i)*(wdens(i)-awdens(i))**2*(2.*sigmaw(i)/wdens(i)-aa0)
    3364           d_sig_spread(i) = gfl(i)*cstar(i)
    3365 !
    3366           d_sig_gen(i) =  d_sig_gen(i)*dtimesub
    3367           d_sig_death(i) = d_sig_death(i)*dtimesub
    3368           d_sig_col(i) =  d_sig_col(i)*dtimesub
    3369           d_sig_spread(i) =  d_sig_spread(i)*dtimesub
    3370           d_sigmaw(i) =  d_sig_gen(i) + d_sig_death(i) + d_sig_col(i) + d_sig_spread(i)
    3371 
    3372          
    3373           d_sigmaw_targ = max(d_sigmaw(i), sigmad-sigmaw(i))
    3374 !!          d_sig_bnd(i) = d_sig_bnd(i) + d_sigmaw_targ - d_sigmaw(i)
    3375 !!          d_sig_bnd_provis(i) = d_sigmaw_targ - d_sigmaw(i)
    3376           d_sig_bnd(i) = d_sigmaw_targ - d_sigmaw(i)
    3377           d_sigmaw(i) = d_sigmaw_targ
    3378 !!          d_sigmaw(i) = max(d_sigmaw(i), sigmad-sigmaw(i))
    3379          
    3380          
    3381           d_dens_gen(i) = wgen(i)
    3382           d_dens_death(i) = - (wdens(i)-awdens(i))*tau_wk_inv_min
    3383           d_dens_col(i) =  - cont_fact(i)*wdens(i)**2
    3384 !
    3385           d_dens_gen(i) =  d_dens_gen(i)*dtimesub
    3386           d_dens_death(i) = d_dens_death(i)*dtimesub
    3387           d_dens_col(i) =  d_dens_col(i)*dtimesub
    3388           d_wdens(i) = d_dens_gen(i) + d_dens_death(i) + d_dens_col(i)
    3389 
    3390 
    3391           d_adens_death(i) = -awdens(i)/tau_prime(i)
    3392           d_adens_icol(i) = cont_fact(i)*(wdens(i)-awdens(i))**2
    3393           d_adens_acol(i) = - cont_fact(i)*awdens(i)**2
    3394 !
    3395           d_adens_death(i) =  d_adens_death(i)*dtimesub
    3396           d_adens_icol(i) =   d_adens_icol(i)*dtimesub
    3397           d_adens_acol(i) =   d_adens_acol(i)*dtimesub
    3398           d_awdens(i) =   d_dens_gen(i) + d_adens_death(i) + d_adens_icol(i) + d_adens_acol(i)     
    3399            
    3400 !!
    3401           d_wdens_targ = max(d_wdens(i), wdensmin-wdens(i))
    3402 !!          d_dens_bnd(i) = d_dens_bnd(i) + d_wdens_targ - d_wdens(i)
    3403           d_dens_bnd(i) = d_wdens_targ - d_wdens(i)
    3404           d_wdens(i) = d_wdens_targ
    3405          
    3406           d_wdens_targ = min(max(d_awdens(i),-awdens(i)), wdens(i)-awdens(i))
    3407 !!          d_dens_bnd(i) = d_dens_bnd(i) + d_wdens_targ - d_wdens(i)
    3408           d_adens_bnd(i) = d_wdens_targ - d_awdens(i)
    3409           d_awdens(i) = d_wdens_targ
    3410 
    3411 
    3412 
    3413         ENDIF
    3414       ENDDO
    3415 
    3416       IF (prt_level >= 10) THEN
    3417         print *,'wake, cstar(1), cstar(1)/cstart, rad_wk(1), tau_wk_inv(1), cont_fact(1) ', &
    3418                        cstar(1), cstar(1)/cstart, rad_wk(1), tau_wk_inv(1), cont_fact(1)
    3419         print *,'wake, wdens(1), awdens(1), d_awdens(1) ', &
    3420                        wdens(1), awdens(1), d_awdens(1)
    3421         print *,'wake, d_sig_gen(1), d_sig_death(1), d_sig_col(1), d_sigmaw(1) ', &
    3422                        d_sig_gen(1), d_sig_death(1), d_sig_col(1), d_sigmaw(1)
    3423       ENDIF
    3424 sigmaw=sigmaw+d_sigmaw
    3425 wdens=wdens+d_wdens
    3426 awdens=awdens+d_awdens
    3427 
    3428     RETURN
    3429     END SUBROUTINE wake_popdyn_2 
    3430  
    3431     SUBROUTINE wake_popdyn_3 ( klon, klev, phys_sub, wk_adv, dtimesub, wgen, &
    3432                              wdensmin, &
    3433                              sigmaw, asigmaw, wdens, awdens, &                       !! state variables
    3434                              gfl, agfl, cstar, cin, wape, &
    3435                              rad_wk, arad_wk, irad_wk, &
    3436                              d_sigmaw, d_asigmaw, d_wdens, d_awdens, &               !! tendencies
    3437                              d_sig_gen, d_sig_death, d_sig_col, d_sig_spread, d_sig_bnd, &
    3438                              d_asig_death, d_asig_aicol, d_asig_iicol, d_asig_spread, d_asig_bnd, &
    3439                              d_dens_gen, d_dens_death, d_dens_col, d_dens_bnd, &
    3440                              d_adens_death, d_adens_icol, d_adens_acol, d_adens_bnd )
    3441                              
    3442                                              
    3443 
    3444   USE lmdz_wake_ini , ONLY : wake_ini
    3445   USE lmdz_wake_ini , ONLY : prt_level,RG
    3446   USE lmdz_wake_ini , ONLY : stark, wdens_ref
    3447   USE lmdz_wake_ini , ONLY : tau_cv, rzero, aa0
    3448 !!  USE lmdz_wake_ini , ONLY : iflag_wk_pop_dyn, wdensmin
    3449   USE lmdz_wake_ini , ONLY : iflag_wk_pop_dyn
    3450   USE lmdz_wake_ini , ONLY : sigmad, cstart, sigmaw_max
    3451   USE lmdz_wake_ini , ONLY : smallestreal
    3452  
    3453 IMPLICIT NONE
    3454 
    3455   INTEGER, INTENT(IN)                                   :: klon,klev
    3456   LOGICAL,                          INTENT(IN)          :: phys_sub
    3457   LOGICAL, DIMENSION (klon),        INTENT(IN)          :: wk_adv
    3458   REAL,                             INTENT(IN)          :: dtimesub
    3459   REAL,                             INTENT(IN)          :: wdensmin
    3460   REAL, DIMENSION (klon),           INTENT(IN)          :: wgen      !! B = birth rate of wakes
    3461   REAL, DIMENSION (klon),           INTENT(INOUT)       :: sigmaw    !! sigma = fractional area of wakes
    3462   REAL, DIMENSION (klon),           INTENT(INOUT)       :: asigmaw   !! sigma = fractional area of active wakes
    3463   REAL, DIMENSION (klon),           INTENT(INOUT)       :: wdens     !! D = number of wakes per unit area
    3464   REAL, DIMENSION (klon),           INTENT(INOUT)       :: awdens    !! A = number of active wakes per unit area
    3465   REAL, DIMENSION (klon),           INTENT(IN)          :: cstar     !! C* = spreading velocity of wakes
    3466   REAL, DIMENSION (klon),           INTENT(IN)          :: cin, wape  ! RM : A Faire disparaitre
    3467 
    3468 
    3469   REAL, DIMENSION (klon),           INTENT(OUT)         :: rad_wk    !! r = mean wake radius
    3470   REAL, DIMENSION (klon),           INTENT(OUT)         :: arad_wk    !! r_A = wake radius of active wakes
    3471   REAL, DIMENSION (klon),           INTENT(OUT)         :: irad_wk    !! r_I = wake radius of inactive wakes
    3472   REAL, DIMENSION (klon),           INTENT(OUT)         :: gfl       !! Lg = gust front length per unit area
    3473   REAL, DIMENSION (klon),           INTENT(OUT)         :: agfl      !! LgA = gust front length of active wakes
    3474                                                                      !!  per unit area
    3475   REAL, DIMENSION (klon),           INTENT(OUT)         :: d_sigmaw, d_asigmaw, d_wdens, d_awdens
    3476   ! Some components of the tendencies of state variables 
    3477   REAL, DIMENSION (klon),           INTENT(OUT)         :: d_sig_gen, d_sig_death, d_sig_col, d_sig_spread, d_sig_bnd
    3478   REAL, DIMENSION (klon),           INTENT(OUT)         :: d_asig_death, d_asig_aicol, d_asig_iicol, d_asig_spread, d_asig_bnd
    3479   REAL, DIMENSION (klon),           INTENT(OUT)         :: d_dens_gen, d_dens_death, d_dens_col, d_dens_bnd
    3480   REAL, DIMENSION (klon),           INTENT(OUT)         :: d_adens_death, d_adens_acol, d_adens_icol, d_adens_bnd
    3481 
    3482 
    3483 !! internal variables
    3484  
    3485   INTEGER                                               :: i, k
    3486   REAL, DIMENSION (klon)                                :: iwdens, isigmaw !! inactive wake density and fractional area
    3487 !!  REAL, DIMENSION (klon)                                :: d_arad, d_irad
    3488   REAL, DIMENSION (klon)                                :: igfl            !! LgI = gust front length of inactive wakes
    3489                                                                            !!  per unit area
    3490   REAL, DIMENSION (klon)                                :: s_wk            !! mean area of individual wakes
    3491   REAL, DIMENSION (klon)                                :: as_wk           !! mean area of individual active wakes
    3492   REAL, DIMENSION (klon)                                :: is_wk           !! mean area of individual inactive wakes
    3493   REAL, DIMENSION (klon)                                :: tau_wk_inv      !! tau = life time of wakes
    3494   REAL                                                  :: tau_wk_inv_min
    3495   REAL, DIMENSION (klon)                                :: tau_prime       !! tau_prime = life time of actives wakes
    3496   REAL                                                  :: d_wdens_targ, d_sigmaw_targ
    3497 
    3498 
    3499 !! Equations
    3500 !! ---------
    3501 !! Gust fronts:
    3502 !! Lg_A = 2 pi r_A A
    3503 !! Lg_I = 2 pi r_I I
    3504 !! Lg   = 2 pi r   D
    3505 !!
    3506 !! Areas:
    3507 !! s = pi r^2
    3508 !! s_A = pi r_A^2
    3509 !! s_I = pi r_I^2
    3510 !!
    3511 !! Life expectancy:
    3512 !! tau_I = 3 C* ((C*/C*t)^3/2 - 1) / r_I
    3513 !!
    3514 !! Time deratives:
    3515 !! dD/dt = B - (D-A)/tau_I - 2 Lg C* D
    3516 !! dA/dt = B - A/tau_A     + 2 Lg_I C* (D-A) - 2 Lg_A C* A
    3517 !! dsigma/dt = B a0 - sigma_I/tau_I + Lg C* - 2 Lg_I C* (D-A) (2 s_I - a0)
    3518 !! 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
    3519 !!
    3520 
    3521       DO i = 1, klon
    3522         IF (wk_adv(i)) THEN
    3523          iwdens(i) = wdens(i) - awdens(i)
    3524          isigmaw(i) = sigmaw(i) - asigmaw(i)
    3525 !
    3526          arad_wk(i) = max( sqrt(asigmaw(i)/(3.14*awdens(i))) , rzero)
    3527          irad_wk(i) = max( sqrt((sigmaw(i)-asigmaw(i))/  &
    3528                            (3.14*max(smallestreal,(wdens(i)-awdens(i))))), rzero)
    3529          rad_wk(i) = (awdens(i)*arad_wk(i)+(wdens(i)-awdens(i))*irad_wk(i))/wdens(i)
    3530 !
    3531          s_wk(i) = 3.14*rad_wk(i)**2
    3532          as_wk(i) = 3.14*arad_wk(i)**2
    3533          is_wk(i) = 3.14*irad_wk(i)**2
    3534 !
    3535          gfl(i)  = 2.*sqrt(3.14*wdens(i)*sigmaw(i))
    3536          agfl(i) = 2.*sqrt(3.14*awdens(i)*asigmaw(i))
    3537          igfl(i) = gfl(i) - agfl(i)
    3538         ENDIF
    3539       ENDDO
    3540 
    3541 
    3542       DO i = 1, klon
    3543         IF (wk_adv(i)) THEN
    3544           tau_wk_inv(i) = max( (3.*cstar(i))/(irad_wk(i)*((cstar(i)/cstart)**1.5 - 1)), 0.)
    3545           tau_wk_inv_min = min(tau_wk_inv(i), 1./dtimesub)
    3546           tau_prime(i) = tau_cv
    3547 
    3548           d_sig_gen(i) = wgen(i)*aa0
    3549           d_sig_death(i) = - isigmaw(i)*tau_wk_inv_min
    3550           d_sig_col(i) = - 2.*igfl(i)*cstar(i)*iwdens(i)*(2.*is_wk(i)-aa0)
    3551           d_sig_spread(i) = gfl(i)*cstar(i)
    3552 !
    3553           d_sig_gen(i) =  d_sig_gen(i)*dtimesub
    3554           d_sig_death(i) = d_sig_death(i)*dtimesub
    3555           d_sig_col(i) =  d_sig_col(i)*dtimesub
    3556           d_sig_spread(i) =  d_sig_spread(i)*dtimesub
    3557           d_sigmaw(i) =  d_sig_gen(i) + d_sig_death(i) + d_sig_col(i) + d_sig_spread(i)
    3558 #ifdef IOPHYS_WK
    3559           IF (phys_sub) call iophys_ecrit('d_sigmaw0',1,'d_sigmaw0','',d_sigmaw)
    3560 #endif
    3561 
    3562          
    3563           d_sigmaw_targ = max(d_sigmaw(i), sigmad-sigmaw(i))
    3564 !!          d_sig_bnd(i) = d_sig_bnd(i) + d_sigmaw_targ - d_sigmaw(i)
    3565 !!          d_sig_bnd_provis(i) = d_sigmaw_targ - d_sigmaw(i)
    3566           d_sig_bnd(i) = d_sigmaw_targ - d_sigmaw(i)
    3567           d_sigmaw(i) = d_sigmaw_targ
    3568 !!          d_sigmaw(i) = max(d_sigmaw(i), sigmad-sigmaw(i))
    3569 #ifdef IOPHYS_WK
    3570           IF (phys_sub) THEN
    3571              call iophys_ecrit('tauwk_inv',1,'tau_wk_inv_min','',tau_wk_inv_min)
    3572              call iophys_ecrit('d_sigmaw',1,'d_sigmaw','',d_sigmaw)
    3573              call iophys_ecrit('d_sig_gen',1,'d_sig_gen','',d_sig_gen)
    3574              call iophys_ecrit('d_sig_death',1,'d_sig_death','',d_sig_death)
    3575              call iophys_ecrit('d_sig_col',1,'d_sig_col','',d_sig_col)
    3576              call iophys_ecrit('d_sig_spread',1,'d_sig_spread','',d_sig_spread)
    3577              call iophys_ecrit('d_sig_bnd',1,'d_sig_bnd','',d_sig_bnd)
    3578           ENDIF
    3579 #endif
    3580           d_asig_death(i) = - asigmaw(i)/tau_prime(i)
    3581           d_asig_aicol(i) = (agfl(i)*iwdens(i) + igfl(i)*awdens(i))*cstar(i)*is_wk(i)
    3582           d_asig_iicol(i) = 2.*igfl(i)*cstar(i)*iwdens(i)*aa0
    3583           d_asig_spread(i) = agfl(i)*cstar(i)
    3584 !
    3585           d_asig_death(i) = d_asig_death(i)*dtimesub
    3586           d_asig_aicol(i) =  d_asig_aicol(i)*dtimesub
    3587           d_asig_iicol(i) =  d_asig_iicol(i)*dtimesub
    3588           d_asig_spread(i) =  d_asig_spread(i)*dtimesub
    3589           d_asigmaw(i) =  d_sig_gen(i) + d_asig_death(i) + d_asig_aicol(i) + d_asig_iicol(i) + d_asig_spread(i)
    3590 #ifdef IOPHYS_WK
    3591           IF (phys_sub) call iophys_ecrit('d_asigmaw0',1,'d_asigmaw0','',d_asigmaw)
    3592 #endif
    3593 
    3594           d_sigmaw_targ = min(max(d_asigmaw(i),-asigmaw(i)), sigmaw(i)-asigmaw(i))
    3595 !!          d_dens_bnd(i) = d_dens_bnd(i) + d_sigmaw_targ - d_sigmaw(i)
    3596           d_asig_bnd(i) = d_sigmaw_targ - d_asigmaw(i)
    3597           d_asigmaw(i) = d_sigmaw_targ
    3598 #ifdef IOPHYS_WK
    3599           IF (phys_sub) THEN
    3600              call iophys_ecrit('d_asigmaw',1,'d_asigmaw','',d_asigmaw)
    3601              call iophys_ecrit('d_asig_death',1,'d_asig_death','',d_asig_death)
    3602              call iophys_ecrit('d_asig_aicol',1,'d_asig_aicol','',d_asig_aicol)
    3603              call iophys_ecrit('d_asig_iicol',1,'d_asig_iicol','',d_asig_iicol)
    3604              call iophys_ecrit('d_asig_spread',1,'d_asig_spread','',d_asig_spread)
    3605              call iophys_ecrit('d_asig_bnd',1,'d_asig_bnd','',d_asig_bnd)
    3606           ENDIF
    3607 #endif
    3608           d_dens_gen(i) = wgen(i)
    3609           d_dens_death(i) = - iwdens(i)*tau_wk_inv_min
    3610           d_dens_col(i) =  - 2.*gfl(i)*cstar(i)*wdens(i)
    3611 !
    3612           d_dens_gen(i) =  d_dens_gen(i)*dtimesub
    3613           d_dens_death(i) = d_dens_death(i)*dtimesub
    3614           d_dens_col(i) =  d_dens_col(i)*dtimesub
    3615           d_wdens(i) = d_dens_gen(i) + d_dens_death(i) + d_dens_col(i)
    3616 !!
    3617           d_wdens_targ = max(d_wdens(i), wdensmin-wdens(i))
    3618 !!          d_dens_bnd(i) = d_dens_bnd(i) + d_wdens_targ - d_wdens(i)
    3619           d_dens_bnd(i) = d_wdens_targ - d_wdens(i)
    3620           d_wdens(i) = d_wdens_targ
    3621 #ifdef IOPHYS_WK
    3622     IF (phys_sub) THEN
    3623         call iophys_ecrit('d_wdens',1,'d_wdens','',d_wdens)
    3624         call iophys_ecrit('d_dens_gen',1,'d_dens_gen','',d_dens_gen)
    3625         call iophys_ecrit('d_dens_death',1,'d_dens_death','',d_dens_death)
    3626         call iophys_ecrit('d_dens_col',1,'d_dens_col','',d_dens_col)
    3627     ENDIF
    3628 #endif
    3629 
    3630           d_adens_death(i) = -awdens(i)/tau_prime(i)
    3631           d_adens_icol(i) =   2.*igfl(i)*cstar(i)*iwdens(i)
    3632           d_adens_acol(i)  = - 2.*agfl(i)*cstar(i)*awdens(i)
    3633 !
    3634           d_adens_death(i) =  d_adens_death(i)*dtimesub
    3635           d_adens_icol(i) =   d_adens_icol(i)*dtimesub
    3636           d_adens_acol(i)  =   d_adens_acol(i)*dtimesub
    3637           d_awdens(i) =   d_dens_gen(i) + d_adens_death(i) + d_adens_icol(i) + d_adens_acol(i)     
    3638 #ifdef IOPHYS_WK
    3639     IF (phys_sub) THEN
    3640         call iophys_ecrit('d_awdens',1,'d_awdens','',d_awdens)
    3641         call iophys_ecrit('d_adens_death',1,'d_adens_death','',d_adens_death)
    3642         call iophys_ecrit('d_adens_icol',1,'d_adens_icol','',d_adens_icol)
    3643         call iophys_ecrit('d_adens_acol',1,'d_adens_acol','',d_adens_acol)
    3644     ENDIF
    3645 #endif
    3646           d_wdens_targ = min(max(d_awdens(i),-awdens(i)), wdens(i)-awdens(i))
    3647 !!          d_dens_bnd(i) = d_dens_bnd(i) + d_wdens_targ - d_wdens(i)
    3648           d_adens_bnd(i) = d_wdens_targ - d_awdens(i)
    3649           d_awdens(i) = d_wdens_targ
    3650 
    3651 !!          d_irad(i) = (d_sigmaw(i)-d_asigmaw(i)-isigmaw(i)*(d_wdens(i)-awdens(i))/iwdens(i)) / &
    3652 !!                      max(smallestreal,(2.*3.14*iwdens(i)*irad_wk(i)))
    3653 !!          d_arad(i) = (d_asigmaw(i)-asigmaw(i)*d_awdens(i)/awdens(i)) / &
    3654 !!                      max(smallestreal,(2.*3.14*awdens(i)*arad_wk(i)))
    3655 !!          d_irad(i) = d_irad(i)*dtimesub
    3656 !!          d_arad(i) = d_arad(i)*dtimesub
    3657 !!          call iophys_ecrit('d_irad',1,'d_irad','m',d_irad)
    3658 !!          call iophys_ecrit('d_airad',1,'d_arad','m',d_arad)
    3659 !!
    3660         ENDIF
    3661       ENDDO
    3662 
    3663       IF (prt_level >= 10) THEN
    3664         print *,'wake, cstar(1), cstar(1)/cstart, rad_wk(1), tau_wk_inv(1), gfl(1) ', &
    3665                        cstar(1), cstar(1)/cstart, rad_wk(1), tau_wk_inv(1), gfl(1)
    3666         print *,'wake, wdens(1), awdens(1), d_awdens(1) ', &
    3667                        wdens(1), awdens(1), d_awdens(1)
    3668         print *,'wake, d_sig_gen(1), d_sig_death(1), d_sig_col(1), d_sigmaw(1) ', &
    3669                        d_sig_gen(1), d_sig_death(1), d_sig_col(1), d_sigmaw(1)
    3670       ENDIF
    3671 sigmaw=sigmaw+d_sigmaw
    3672 asigmaw=asigmaw+d_asigmaw
    3673 wdens=wdens+d_wdens
    3674 awdens=awdens+d_awdens
    3675 
    3676     RETURN
    3677     END SUBROUTINE wake_popdyn_3 
    3678 
    36792631END MODULE lmdz_wake
  • LMDZ6/trunk/libf/phylmdiso/physiq_mod.F90

    r5255 r5256  
    329329       d_deltat_ajs_cv, d_deltaq_ajs_cv, & ! due to dry adjustment of (w) before convection
    330330                       ! tendencies of wake fractional area and wake number per unit area:
    331        d_s_wk, d_s_a_wk, d_dens_a_wk,  d_dens_wk, &  ! due to wakes
     331       d_s_wk, d_dens_a_wk,  d_dens_wk, &  ! due to wakes
    332332!!!       d_s_vdf, d_dens_a_vdf, d_dens_vdf, & ! due to vertical diffusion
    333333!!!       d_s_the, d_dens_a_the, d_dens_the, & ! due to thermals
     
    14141414    endif                                                                  !
    14151415    !======================================================================!
    1416 #ifdef ISO
    1417 #ifdef ISOVERIF
    1418         write(*,*) 'physiq 1421b: qx(1,1,:)=',qx(1,1,:)
    1419 #endif
    1420 #endif
    14211416
    14221417
     
    44504445               dt_a, dq_a, cv_gen,  &
    44514446               sigd, cin,  &
    4452                wake_deltat, wake_deltaq, wake_s, awake_s, wake_dens, awake_dens,  &
     4447               wake_deltat, wake_deltaq, wake_s, awake_dens, wake_dens,  &
    44534448               wake_dth, wake_h,  &
    44544449!!               wake_pe, wake_fip, wake_gfl,  &
     
    44604455               wake_omg, wake_dp_deltomg,  &
    44614456               wake_spread, wake_Cstar, d_deltat_wk_gw,  &
    4462                d_deltat_wk, d_deltaq_wk, d_s_wk, d_s_a_wk, d_dens_wk, d_dens_a_wk &
     4457               d_deltat_wk, d_deltaq_wk, d_s_wk, d_dens_a_wk, d_dens_wk &
    44634458#ifdef ISO
    44644459     &               ,xt_seri,dxt_dwn,dxt_a &
     
    45004495
    45014496         CALL add_wake_tend &
    4502             (d_deltat_wk, d_deltaq_wk, d_s_wk, d_s_a_wk, d_dens_wk, d_dens_a_wk, wake_k, &
     4497            (d_deltat_wk, d_deltaq_wk, d_s_wk, d_dens_a_wk, d_dens_wk, wake_k, &
    45034498             'wake', abortphy &
    45044499#ifdef ISO
     
    47754770               ,zqla,ztva &
    47764771#ifdef ISO         
    4777      &      ,xt_therm,d_xt_ajs &
     4772     &      ,xt_env,d_xt_ajs &
    47784773#ifdef DIAGISO         
    47794774     &      ,q_the,xt_the &
     
    65626557                IF(flag_verbose_strataer) print *,'IN physiq_mod: min max d_q_emiss=',&
    65636558                     minval(d_q_emiss),maxval(d_q_emiss)
    6564 #ifdef ISO
    6565        abort_message='isotopes pas encore dans emission volc H2O'
    6566        CALL abort_physic(modname,abort_message,1)
    6567 #endif
    65686559
    65696560                CALL add_phys_tend(du0, dv0, dt0, d_q_emiss, dql0, dqi0, dqbs0, paprs, &
     
    69576948
    69586949          print*,'avt add phys rep',abortphy
    6959 #ifdef ISO
    6960        abort_message='isotopes pas encore dans rep'
    6961        CALL abort_physic(modname,abort_message,1)
    6962 #endif
     6950
    69636951     CALL add_phys_tend &
    69646952            (du0,dv0,dt0,d_q_rep,d_ql_rep,d_qi_rep,dqbs0,paprs,&
Note: See TracChangeset for help on using the changeset viewer.