Ignore:
Timestamp:
Mar 5, 2014, 2:19:12 PM (11 years ago)
Author:
lguez
Message:

Converted to free source form files in libf/phylmd which were still in
fixed source form. The conversion was done using the polish mode of
the NAG Fortran Compiler.

In addition to converting to free source form, the processing of the
files also:

-- indented the code (including comments);

-- set Fortran keywords to uppercase, and set all other identifiers
to lower case;

-- added qualifiers to end statements (for example "end subroutine
conflx", instead of "end");

-- changed the terminating statements of all DO loops so that each
loop ends with an ENDDO statement (instead of a labeled continue).

-- replaced #include by include.

File:
1 moved

Legend:

Unmodified
Added
Removed
  • LMDZ5/trunk/libf/phylmd/wake.F90

    r1988 r1992  
    1 !
     1
    22! $Id$
    3 !
    4       Subroutine WAKE (p,ph,pi,dtime,sigd_con
    5      :                ,te0,qe0,omgb
    6      :                ,dtdwn,dqdwn,amdwn,amup,dta,dqa
    7      :                ,wdtPBL,wdqPBL,udtPBL,udqPBL
    8      o                ,deltatw,deltaqw,dth,hw,sigmaw,wape,fip,gfl
    9      o                ,dtls,dqls
    10      o                ,ktopw,omgbdth,dp_omgb,wdens
    11      o                ,tu,qu
    12      o                ,dtKE,dqKE
    13      o                ,dtPBL,dqPBL
    14      o                ,omg,dp_deltomg,spread
    15      o                ,Cstar,d_deltat_gw
    16      o                ,d_deltatw2,d_deltaqw2)
    17 
    18 
    19 ***************************************************************
    20 *                                                             *
    21 * WAKE                                                        *
    22 *      retour a un Pupper fixe                                *
    23 *                                                             *
    24 * written by   :  GRANDPEIX Jean-Yves   09/03/2000            *
    25 * modified by :   ROEHRIG Romain        01/29/2007            *
    26 ***************************************************************
    27 c
    28       use dimphy
    29       IMPLICIT none
    30 c============================================================================
    31 C
    32 C
    33 C   But : Decrire le comportement des poches froides apparaissant dans les
    34 C        grands systemes convectifs, et fournir l'energie disponible pour
    35 C        le declenchement de nouvelles colonnes convectives.
    36 C
    37 C   Variables d'etat : deltatw    : ecart de temperature wake-undisturbed area
    38 C                      deltaqw    : ecart d'humidite wake-undisturbed area
    39 C                      sigmaw     : fraction d'aire occupee par la poche.
    40 C
    41 C   Variable de sortie :
    42 c
    43 c                        wape : WAke Potential Energy
    44 c                        fip  : Front Incident Power (W/m2) - ALP
    45 c                        gfl  : Gust Front Length per unit area (m-1)
    46 C                        dtls : large scale temperature tendency due to wake
    47 C                        dqls : large scale humidity tendency due to wake
    48 C                        hw   : hauteur de la poche
    49 C                     dp_omgb : vertical gradient of large scale omega
    50 C                     wdens   : densite de poches
    51 C                      omgbdth: flux of Delta_Theta transported by LS omega
    52 C                      dtKE   : differential heating (wake - unpertubed)
    53 C                      dqKE   : differential moistening (wake - unpertubed)
    54 C                      omg    : Delta_omg =vertical velocity diff. wake-undist. (Pa/s)
    55 C                 dp_deltomg  : vertical gradient of omg (s-1)
    56 C                     spread  : spreading term in dt_wake and dq_wake
    57 C                 deltatw     : updated temperature difference (T_w-T_u).
    58 C                 deltaqw     : updated humidity difference (q_w-q_u).
    59 C                 sigmaw      : updated wake fractional area.
    60 C                 d_deltat_gw : delta T tendency due to GW
    61 c
    62 C   Variables d'entree :
    63 c
    64 c                        aire : aire de la maille
    65 c                        te0  : temperature dans l'environnement  (K)
    66 C                        qe0  : humidite dans l'environnement     (kg/kg)
    67 C                        omgb : vitesse verticale moyenne sur la maille (Pa/s)
    68 C                        dtdwn: source de chaleur due aux descentes (K/s)
    69 C                        dqdwn: source d'humidite due aux descentes (kg/kg/s)
    70 C                        dta  : source de chaleur due courants satures et detrain  (K/s)
    71 C                        dqa  : source d'humidite due aux courants satures et detra (kg/kg/s)
    72 C                        amdwn: flux de masse total des descentes, par unite de
    73 C                                surface de la maille (kg/m2/s)
    74 C                        amup : flux de masse total des ascendances, par unite de
    75 C                                surface de la maille (kg/m2/s)
    76 C                        p    : pressions aux milieux des couches (Pa)
    77 C                        ph   : pressions aux interfaces (Pa)
    78 C                        pi  : (p/p_0)**kapa (adim)
    79 C                        dtime: increment temporel (s)
    80 c
    81 C   Variables internes :
    82 c
    83 c                        rhow : masse volumique de la poche froide
    84 C                        rho  : environment density at P levels
    85 C                        rhoh : environment density at Ph levels
    86 C                        te   : environment temperature | may change within
    87 C                        qe   : environment humidity    | sub-time-stepping
    88 C                        the  : environment potential temperature
    89 C                        thu  : potential temperature in undisturbed area
    90 C                        tu   :  temperature  in undisturbed area
    91 C                        qu   : humidity in undisturbed area
    92 C                      dp_omgb: vertical gradient og LS omega
    93 C                      omgbw  : wake average vertical omega
    94 C                     dp_omgbw: vertical gradient of omgbw
    95 C                      omgbdq : flux of Delta_q transported by LS omega
    96 C                        dth  : potential temperature diff. wake-undist.
    97 C                        th1  : first pot. temp. for vertical advection (=thu)
    98 C                        th2  : second pot. temp. for vertical advection (=thw)
    99 C                        q1   : first humidity for vertical advection
    100 C                        q2   : second humidity for vertical advection
    101 C                     d_deltatw   : terme de redistribution pour deltatw
    102 C                     d_deltaqw   : terme de redistribution pour deltaqw
    103 C                      deltatw0   : deltatw initial
    104 C                      deltaqw0   : deltaqw initial
    105 C                      hw0    : hw initial
    106 C                      sigmaw0: sigmaw initial
    107 C                      amflux : horizontal mass flux through wake boundary
    108 C                      wdens_ref: initial number of wakes per unit area (3D) or per
    109 C                               unit length (2D), at the beginning of each time step
    110 C                      Tgw    : 1 sur la période de onde de gravité
    111 c                      Cgw    : vitesse de propagation de onde de gravité
    112 c                      LL     : distance entre 2 poches
    113 
    114 c-------------------------------------------------------------------------
    115 c          Déclaration de variables
    116 c-------------------------------------------------------------------------
    117 
    118       include "dimensions.h"
    119       include "YOMCST.h"
    120       include "cvthermo.h"
    121       include "iniprint.h"
    122 
    123 c Arguments en entree
    124 c--------------------
    125 
    126       REAL, dimension(klon,klev) :: p, pi
    127       REAL, dimension(klon,klev+1) :: ph, omgb
    128       REAL dtime
    129       REAL, dimension(klon,klev) :: te0,qe0
    130       REAL, dimension(klon,klev) :: dtdwn, dqdwn
    131       REAL, dimension(klon,klev) :: wdtPBL,wdqPBL
    132       REAL, dimension(klon,klev) :: udtPBL,udqPBL
    133       REAL, dimension(klon,klev) :: amdwn, amup
    134       REAL, dimension(klon,klev) :: dta, dqa
    135       REAL, dimension(klon) :: sigd_con
    136 
    137 c Sorties
    138 c--------
    139 
    140       REAL, dimension(klon,klev) :: deltatw, deltaqw, dth
    141       REAL, dimension(klon,klev) :: tu, qu
    142       REAL, dimension(klon,klev) :: dtls, dqls
    143       REAL, dimension(klon,klev) :: dtKE, dqKE
    144       REAL, dimension(klon,klev) :: dtPBL, dqPBL
    145       REAL, dimension(klon,klev) :: spread
    146       REAL, dimension(klon,klev) :: d_deltatgw
    147       REAL, dimension(klon,klev) :: d_deltatw2, d_deltaqw2
    148       REAL, dimension(klon,klev+1) :: omgbdth, omg
    149       REAL, dimension(klon,klev) :: dp_omgb, dp_deltomg
    150       REAL, dimension(klon,klev) :: d_deltat_gw
    151       REAL, dimension(klon) :: hw, sigmaw, wape, fip, gfl, Cstar
    152       REAL, dimension(klon) :: wdens
    153       INTEGER, dimension(klon) :: ktopw
    154 
    155 c Variables internes
    156 c-------------------
    157 
    158 c Variables à fixer
    159       REAL ALON
    160       REAL coefgw
    161       REAL :: wdens_ref
    162       REAL stark
    163       REAL alpk
    164       REAL delta_t_min
    165       INTEGER nsub
    166       REAL dtimesub
    167       REAL sigmad, hwmin,wapecut
    168       REAL :: sigmaw_max
    169       REAL :: dens_rate
    170       REAL wdens0
    171 cIM 080208
    172       LOGICAL, dimension(klon) :: gwake
    173 
    174 c Variables de sauvegarde
    175       REAL, dimension(klon,klev) :: deltatw0
    176       REAL, dimension(klon,klev) :: deltaqw0
    177       REAL, dimension(klon,klev) :: te, qe
    178       REAL, dimension(klon) :: sigmaw0, sigmaw1
    179 
    180 c Variables pour les GW
    181       REAL, DIMENSION(klon) :: LL
    182       REAL, dimension(klon,klev) :: N2
    183       REAL, dimension(klon,klev) :: Cgw
    184       REAL, dimension(klon,klev) :: Tgw
    185 
    186 c Variables liées au calcul de hw
    187       REAL, DIMENSION(klon) :: ptop_provis, ptop, ptop_new
    188       REAL, DIMENSION(klon) :: sum_dth
    189       REAL, DIMENSION(klon) :: dthmin
    190       REAL, DIMENSION(klon) :: z, dz, hw0
    191       INTEGER, DIMENSION(klon) :: ktop, kupper
    192 
    193 c Sub-timestep tendencies and related variables
    194        REAL d_deltatw(klon,klev),d_deltaqw(klon,klev)
    195        REAL d_te(klon,klev),d_qe(klon,klev)
    196        REAL d_sigmaw(klon),alpha(klon)
    197        REAL q0_min(klon),q1_min(klon)
    198        LOGICAL wk_adv(klon), OK_qx_qw(klon)
    199        REAL epsilon
    200        DATA epsilon/1.e-15/
    201 
    202 c Autres variables internes
    203       INTEGER isubstep, k, i
    204 
    205       REAL, DIMENSION(klon) :: sum_thu, sum_tu, sum_qu,sum_thvu
    206       REAL, DIMENSION(klon) :: sum_dq, sum_rho
    207       REAL, DIMENSION(klon) :: sum_dtdwn, sum_dqdwn
    208       REAL, DIMENSION(klon) :: av_thu, av_tu, av_qu, av_thvu
    209       REAL, DIMENSION(klon) :: av_dth, av_dq, av_rho
    210       REAL, DIMENSION(klon) :: av_dtdwn, av_dqdwn
    211 
    212       REAL, DIMENSION(klon,klev) :: rho, rhow
    213       REAL, DIMENSION(klon,klev+1) :: rhoh
    214       REAL, DIMENSION(klon,klev) :: rhow_moyen
    215       REAL, DIMENSION(klon,klev) :: zh
    216       REAL, DIMENSION(klon,klev+1) :: zhh
    217       REAL, DIMENSION(klon,klev) :: epaisseur1, epaisseur2
    218 
    219       REAL, DIMENSION(klon,klev) :: the, thu
    220 
    221 !      REAL, DIMENSION(klon,klev) :: d_deltatw, d_deltaqw
    222 
    223       REAL, DIMENSION(klon,klev+1) :: omgbw
    224       REAL, DIMENSION(klon) :: pupper
    225       REAL, DIMENSION(klon) :: omgtop
    226       REAL, DIMENSION(klon,klev) :: dp_omgbw
    227       REAL, DIMENSION(klon) :: ztop, dztop
    228       REAL, DIMENSION(klon,klev) :: alpha_up
    229      
    230       REAL, dimension(klon) :: RRe1, RRe2
    231       REAL :: RRd1, RRd2
    232       REAL, DIMENSION(klon,klev) :: Th1, Th2, q1, q2
    233       REAL, DIMENSION(klon,klev) :: D_Th1, D_Th2, D_dth
    234       REAL, DIMENSION(klon,klev) :: D_q1, D_q2, D_dq
    235       REAL, DIMENSION(klon,klev) :: omgbdq
    236 
    237       REAL, dimension(klon) :: ff, gg
    238       REAL, dimension(klon) :: wape2, Cstar2, heff
    239 
    240       REAL, DIMENSION(klon,klev) :: Crep
    241       REAL Crep_upper, Crep_sol
    242 
    243       REAL, DIMENSION(klon,klev) :: ppi
    244 
    245 ccc nrlmd
    246       real, dimension(klon) :: death_rate,nat_rate
    247       real, dimension(klon,klev) :: entr
    248       real, dimension(klon,klev) :: detr
    249 
    250 C-------------------------------------------------------------------------
    251 c         Initialisations
    252 c-------------------------------------------------------------------------
    253 
    254 c      print*, 'wake initialisations'
    255 
    256 c   Essais d'initialisation avec sigmaw = 0.02 et hw = 10.
    257 c-------------------------------------------------------------------------
    258 
    259       DATA wapecut,sigmad, hwmin /5.,.02,10./
    260 ccc nrlmd
    261       DATA sigmaw_max /0.4/
    262       DATA dens_rate /0.1/
    263 ccc
    264 C Longueur de maille (en m)
    265 c-------------------------------------------------------------------------
    266 
    267 c      ALON = 3.e5
    268       ALON = 1.e6
    269 
    270 
    271 C Configuration de coefgw,stark,wdens (22/02/06 by YU Jingmei)
    272 c
    273 c      coefgw : Coefficient pour les ondes de gravité
    274 c       stark : Coefficient k dans Cstar=k*sqrt(2*WAPE)
    275 c       wdens : Densité de poche froide par maille
    276 c-------------------------------------------------------------------------
    277 
    278 ccc nrlmd      coefgw=10
    279 c      coefgw=1
    280 c      wdens0 = 1.0/(alon**2)
    281 ccc nrlmd      wdens = 1.0/(alon**2)
    282 ccc nrlmd      stark = 0.50
    283 cCRtest
    284 ccc nrlmd      alpk=0.1
    285 c      alpk = 1.0
    286 c      alpk = 0.5
    287 c      alpk = 0.05
    288 c
    289        stark  = 0.33
    290        Alpk   = 0.25
    291        wdens_ref  = 8.e-12
    292        coefgw = 4.
    293       Crep_upper=0.9
    294       Crep_sol=1.0
    295 
    296 ccc nrlmd Lecture du fichier wake_param.data
    297       OPEN(99,file='wake_param.data',status='old',
    298      $          form='formatted',err=9999)
    299       READ(99,*,end=9998) stark
    300       READ(99,*,end=9998) Alpk
    301       READ(99,*,end=9998) wdens_ref
    302       READ(99,*,end=9998) coefgw
    303 9998  Continue
    304       CLOSE(99)
    305 9999  Continue
    306 c
    307 c   Initialisation de toutes des densites a wdens_ref.
    308 c   Les densites peuvent evoluer si les poches debordent
    309 c   (voir au tout debut de la boucle sur les substeps)
    310       wdens = wdens_ref
    311 c
    312 c      print*,'stark',stark
    313 c      print*,'alpk',alpk
    314 c      print*,'wdens',wdens
    315 c      print*,'coefgw',coefgw
    316 ccc
    317 C Minimum value for |T_wake - T_undist|. Used for wake top definition
    318 c-------------------------------------------------------------------------
    319 
    320       delta_t_min = 0.2
    321 
    322 C 1. - Save initial values and initialize tendencies
    323 C --------------------------------------------------
    324 
    325       DO k=1,klev
    326       DO i=1, klon
    327         ppi(i,k)=pi(i,k)
    328         deltatw0(i,k) = deltatw(i,k)
    329         deltaqw0(i,k)= deltaqw(i,k)
    330         te(i,k) = te0(i,k)
    331         qe(i,k) = qe0(i,k)
    332         dtls(i,k) = 0.
    333         dqls(i,k) = 0.
    334         d_deltat_gw(i,k)=0.
    335         d_te(i,k) = 0.
    336         d_qe(i,k) = 0.
    337         d_deltatw(i,k) = 0.
    338         d_deltaqw(i,k) = 0.
    339 !IM 060508 beg
    340         d_deltatw2(i,k)=0.
    341         d_deltaqw2(i,k)=0.
    342 !IM 060508 end
    343       ENDDO
    344       ENDDO
    345 c      sigmaw1=sigmaw
    346 c      IF (sigd_con.GT.sigmaw1) THEN
    347 c      print*, 'sigmaw,sigd_con', sigmaw, sigd_con
    348 c      ENDIF
    349       DO i=1, klon
    350 cc      sigmaw(i) = amax1(sigmaw(i),sigd_con(i))
    351       sigmaw(i) = amax1(sigmaw(i),sigmad)
    352       sigmaw(i) = amin1(sigmaw(i),0.99)
    353       sigmaw0(i) = sigmaw(i)
     3
     4SUBROUTINE wake(p, ph, pi, dtime, sigd_con, te0, qe0, omgb, dtdwn, dqdwn, &
     5    amdwn, amup, dta, dqa, wdtpbl, wdqpbl, udtpbl, udqpbl, deltatw, deltaqw, &
     6    dth, hw, sigmaw, wape, fip, gfl, dtls, dqls, ktopw, omgbdth, dp_omgb, &
     7    wdens, tu, qu, dtke, dqke, dtpbl, dqpbl, omg, dp_deltomg, spread, cstar, &
     8    d_deltat_gw, d_deltatw2, d_deltaqw2)
     9
     10
     11  ! **************************************************************
     12  ! *
     13  ! WAKE                                                        *
     14  ! retour a un Pupper fixe                                *
     15  ! *
     16  ! written by   :  GRANDPEIX Jean-Yves   09/03/2000            *
     17  ! modified by :   ROEHRIG Romain        01/29/2007            *
     18  ! **************************************************************
     19
     20  USE dimphy
     21  IMPLICIT NONE
     22  ! ============================================================================
     23
     24
     25  ! But : Decrire le comportement des poches froides apparaissant dans les
     26  ! grands systemes convectifs, et fournir l'energie disponible pour
     27  ! le declenchement de nouvelles colonnes convectives.
     28
     29  ! Variables d'etat : deltatw    : ecart de temperature wake-undisturbed
     30  ! area
     31  ! deltaqw    : ecart d'humidite wake-undisturbed area
     32  ! sigmaw     : fraction d'aire occupee par la poche.
     33
     34  ! Variable de sortie :
     35
     36  ! wape : WAke Potential Energy
     37  ! fip  : Front Incident Power (W/m2) - ALP
     38  ! gfl  : Gust Front Length per unit area (m-1)
     39  ! dtls : large scale temperature tendency due to wake
     40  ! dqls : large scale humidity tendency due to wake
     41  ! hw   : hauteur de la poche
     42  ! dp_omgb : vertical gradient of large scale omega
     43  ! wdens   : densite de poches
     44  ! omgbdth: flux of Delta_Theta transported by LS omega
     45  ! dtKE   : differential heating (wake - unpertubed)
     46  ! dqKE   : differential moistening (wake - unpertubed)
     47  ! omg    : Delta_omg =vertical velocity diff. wake-undist. (Pa/s)
     48  ! dp_deltomg  : vertical gradient of omg (s-1)
     49  ! spread  : spreading term in dt_wake and dq_wake
     50  ! deltatw     : updated temperature difference (T_w-T_u).
     51  ! deltaqw     : updated humidity difference (q_w-q_u).
     52  ! sigmaw      : updated wake fractional area.
     53  ! d_deltat_gw : delta T tendency due to GW
     54
     55  ! Variables d'entree :
     56
     57  ! aire : aire de la maille
     58  ! te0  : temperature dans l'environnement  (K)
     59  ! qe0  : humidite dans l'environnement     (kg/kg)
     60  ! omgb : vitesse verticale moyenne sur la maille (Pa/s)
     61  ! dtdwn: source de chaleur due aux descentes (K/s)
     62  ! dqdwn: source d'humidite due aux descentes (kg/kg/s)
     63  ! dta  : source de chaleur due courants satures et detrain  (K/s)
     64  ! dqa  : source d'humidite due aux courants satures et detra (kg/kg/s)
     65  ! amdwn: flux de masse total des descentes, par unite de
     66  ! surface de la maille (kg/m2/s)
     67  ! amup : flux de masse total des ascendances, par unite de
     68  ! surface de la maille (kg/m2/s)
     69  ! p    : pressions aux milieux des couches (Pa)
     70  ! ph   : pressions aux interfaces (Pa)
     71  ! pi  : (p/p_0)**kapa (adim)
     72  ! dtime: increment temporel (s)
     73
     74  ! Variables internes :
     75
     76  ! rhow : masse volumique de la poche froide
     77  ! rho  : environment density at P levels
     78  ! rhoh : environment density at Ph levels
     79  ! te   : environment temperature | may change within
     80  ! qe   : environment humidity    | sub-time-stepping
     81  ! the  : environment potential temperature
     82  ! thu  : potential temperature in undisturbed area
     83  ! tu   :  temperature  in undisturbed area
     84  ! qu   : humidity in undisturbed area
     85  ! dp_omgb: vertical gradient og LS omega
     86  ! omgbw  : wake average vertical omega
     87  ! dp_omgbw: vertical gradient of omgbw
     88  ! omgbdq : flux of Delta_q transported by LS omega
     89  ! dth  : potential temperature diff. wake-undist.
     90  ! th1  : first pot. temp. for vertical advection (=thu)
     91  ! th2  : second pot. temp. for vertical advection (=thw)
     92  ! q1   : first humidity for vertical advection
     93  ! q2   : second humidity for vertical advection
     94  ! d_deltatw   : terme de redistribution pour deltatw
     95  ! d_deltaqw   : terme de redistribution pour deltaqw
     96  ! deltatw0   : deltatw initial
     97  ! deltaqw0   : deltaqw initial
     98  ! hw0    : hw initial
     99  ! sigmaw0: sigmaw initial
     100  ! amflux : horizontal mass flux through wake boundary
     101  ! wdens_ref: initial number of wakes per unit area (3D) or per
     102  ! unit length (2D), at the beginning of each time step
     103  ! Tgw    : 1 sur la période de onde de gravité
     104  ! Cgw    : vitesse de propagation de onde de gravité
     105  ! LL     : distance entre 2 poches
     106
     107  ! -------------------------------------------------------------------------
     108  ! Déclaration de variables
     109  ! -------------------------------------------------------------------------
     110
     111  include "dimensions.h"
     112  include "YOMCST.h"
     113  include "cvthermo.h"
     114  include "iniprint.h"
     115
     116  ! Arguments en entree
     117  ! --------------------
     118
     119  REAL, DIMENSION (klon, klev) :: p, pi
     120  REAL, DIMENSION (klon, klev+1) :: ph, omgb
     121  REAL dtime
     122  REAL, DIMENSION (klon, klev) :: te0, qe0
     123  REAL, DIMENSION (klon, klev) :: dtdwn, dqdwn
     124  REAL, DIMENSION (klon, klev) :: wdtpbl, wdqpbl
     125  REAL, DIMENSION (klon, klev) :: udtpbl, udqpbl
     126  REAL, DIMENSION (klon, klev) :: amdwn, amup
     127  REAL, DIMENSION (klon, klev) :: dta, dqa
     128  REAL, DIMENSION (klon) :: sigd_con
     129
     130  ! Sorties
     131  ! --------
     132
     133  REAL, DIMENSION (klon, klev) :: deltatw, deltaqw, dth
     134  REAL, DIMENSION (klon, klev) :: tu, qu
     135  REAL, DIMENSION (klon, klev) :: dtls, dqls
     136  REAL, DIMENSION (klon, klev) :: dtke, dqke
     137  REAL, DIMENSION (klon, klev) :: dtpbl, dqpbl
     138  REAL, DIMENSION (klon, klev) :: spread
     139  REAL, DIMENSION (klon, klev) :: d_deltatgw
     140  REAL, DIMENSION (klon, klev) :: d_deltatw2, d_deltaqw2
     141  REAL, DIMENSION (klon, klev+1) :: omgbdth, omg
     142  REAL, DIMENSION (klon, klev) :: dp_omgb, dp_deltomg
     143  REAL, DIMENSION (klon, klev) :: d_deltat_gw
     144  REAL, DIMENSION (klon) :: hw, sigmaw, wape, fip, gfl, cstar
     145  REAL, DIMENSION (klon) :: wdens
     146  INTEGER, DIMENSION (klon) :: ktopw
     147
     148  ! Variables internes
     149  ! -------------------
     150
     151  ! Variables à fixer
     152  REAL alon
     153  REAL coefgw
     154  REAL :: wdens_ref
     155  REAL stark
     156  REAL alpk
     157  REAL delta_t_min
     158  INTEGER nsub
     159  REAL dtimesub
     160  REAL sigmad, hwmin, wapecut
     161  REAL :: sigmaw_max
     162  REAL :: dens_rate
     163  REAL wdens0
     164  ! IM 080208
     165  LOGICAL, DIMENSION (klon) :: gwake
     166
     167  ! Variables de sauvegarde
     168  REAL, DIMENSION (klon, klev) :: deltatw0
     169  REAL, DIMENSION (klon, klev) :: deltaqw0
     170  REAL, DIMENSION (klon, klev) :: te, qe
     171  REAL, DIMENSION (klon) :: sigmaw0, sigmaw1
     172
     173  ! Variables pour les GW
     174  REAL, DIMENSION (klon) :: ll
     175  REAL, DIMENSION (klon, klev) :: n2
     176  REAL, DIMENSION (klon, klev) :: cgw
     177  REAL, DIMENSION (klon, klev) :: tgw
     178
     179  ! Variables liées au calcul de hw
     180  REAL, DIMENSION (klon) :: ptop_provis, ptop, ptop_new
     181  REAL, DIMENSION (klon) :: sum_dth
     182  REAL, DIMENSION (klon) :: dthmin
     183  REAL, DIMENSION (klon) :: z, dz, hw0
     184  INTEGER, DIMENSION (klon) :: ktop, kupper
     185
     186  ! Sub-timestep tendencies and related variables
     187  REAL d_deltatw(klon, klev), d_deltaqw(klon, klev)
     188  REAL d_te(klon, klev), d_qe(klon, klev)
     189  REAL d_sigmaw(klon), alpha(klon)
     190  REAL q0_min(klon), q1_min(klon)
     191  LOGICAL wk_adv(klon), ok_qx_qw(klon)
     192  REAL epsilon
     193  DATA epsilon/1.E-15/
     194
     195  ! Autres variables internes
     196  INTEGER isubstep, k, i
     197
     198  REAL, DIMENSION (klon) :: sum_thu, sum_tu, sum_qu, sum_thvu
     199  REAL, DIMENSION (klon) :: sum_dq, sum_rho
     200  REAL, DIMENSION (klon) :: sum_dtdwn, sum_dqdwn
     201  REAL, DIMENSION (klon) :: av_thu, av_tu, av_qu, av_thvu
     202  REAL, DIMENSION (klon) :: av_dth, av_dq, av_rho
     203  REAL, DIMENSION (klon) :: av_dtdwn, av_dqdwn
     204
     205  REAL, DIMENSION (klon, klev) :: rho, rhow
     206  REAL, DIMENSION (klon, klev+1) :: rhoh
     207  REAL, DIMENSION (klon, klev) :: rhow_moyen
     208  REAL, DIMENSION (klon, klev) :: zh
     209  REAL, DIMENSION (klon, klev+1) :: zhh
     210  REAL, DIMENSION (klon, klev) :: epaisseur1, epaisseur2
     211
     212  REAL, DIMENSION (klon, klev) :: the, thu
     213
     214  ! REAL, DIMENSION(klon,klev) :: d_deltatw, d_deltaqw
     215
     216  REAL, DIMENSION (klon, klev+1) :: omgbw
     217  REAL, DIMENSION (klon) :: pupper
     218  REAL, DIMENSION (klon) :: omgtop
     219  REAL, DIMENSION (klon, klev) :: dp_omgbw
     220  REAL, DIMENSION (klon) :: ztop, dztop
     221  REAL, DIMENSION (klon, klev) :: alpha_up
     222
     223  REAL, DIMENSION (klon) :: rre1, rre2
     224  REAL :: rrd1, rrd2
     225  REAL, DIMENSION (klon, klev) :: th1, th2, q1, q2
     226  REAL, DIMENSION (klon, klev) :: d_th1, d_th2, d_dth
     227  REAL, DIMENSION (klon, klev) :: d_q1, d_q2, d_dq
     228  REAL, DIMENSION (klon, klev) :: omgbdq
     229
     230  REAL, DIMENSION (klon) :: ff, gg
     231  REAL, DIMENSION (klon) :: wape2, cstar2, heff
     232
     233  REAL, DIMENSION (klon, klev) :: crep
     234  REAL crep_upper, crep_sol
     235
     236  REAL, DIMENSION (klon, klev) :: ppi
     237
     238  ! cc nrlmd
     239  REAL, DIMENSION (klon) :: death_rate, nat_rate
     240  REAL, DIMENSION (klon, klev) :: entr
     241  REAL, DIMENSION (klon, klev) :: detr
     242
     243  ! -------------------------------------------------------------------------
     244  ! Initialisations
     245  ! -------------------------------------------------------------------------
     246
     247  ! print*, 'wake initialisations'
     248
     249  ! Essais d'initialisation avec sigmaw = 0.02 et hw = 10.
     250  ! -------------------------------------------------------------------------
     251
     252  DATA wapecut, sigmad, hwmin/5., .02, 10./
     253  ! cc nrlmd
     254  DATA sigmaw_max/0.4/
     255  DATA dens_rate/0.1/
     256  ! cc
     257  ! Longueur de maille (en m)
     258  ! -------------------------------------------------------------------------
     259
     260  ! ALON = 3.e5
     261  alon = 1.E6
     262
     263
     264  ! Configuration de coefgw,stark,wdens (22/02/06 by YU Jingmei)
     265
     266  ! coefgw : Coefficient pour les ondes de gravité
     267  ! stark : Coefficient k dans Cstar=k*sqrt(2*WAPE)
     268  ! wdens : Densité de poche froide par maille
     269  ! -------------------------------------------------------------------------
     270
     271  ! cc nrlmd      coefgw=10
     272  ! coefgw=1
     273  ! wdens0 = 1.0/(alon**2)
     274  ! cc nrlmd      wdens = 1.0/(alon**2)
     275  ! cc nrlmd      stark = 0.50
     276  ! CRtest
     277  ! cc nrlmd      alpk=0.1
     278  ! alpk = 1.0
     279  ! alpk = 0.5
     280  ! alpk = 0.05
     281
     282  stark = 0.33
     283  alpk = 0.25
     284  wdens_ref = 8.E-12
     285  coefgw = 4.
     286  crep_upper = 0.9
     287  crep_sol = 1.0
     288
     289  ! cc nrlmd Lecture du fichier wake_param.data
     290  OPEN (99, FILE='wake_param.data', STATUS='old', FORM='formatted', ERR=9999)
     291  READ (99, *, END=9998) stark
     292  READ (99, *, END=9998) alpk
     293  READ (99, *, END=9998) wdens_ref
     294  READ (99, *, END=9998) coefgw
     2959998 CONTINUE
     296  CLOSE (99)
     2979999 CONTINUE
     298
     299  ! Initialisation de toutes des densites a wdens_ref.
     300  ! Les densites peuvent evoluer si les poches debordent
     301  ! (voir au tout debut de la boucle sur les substeps)
     302  wdens = wdens_ref
     303
     304  ! print*,'stark',stark
     305  ! print*,'alpk',alpk
     306  ! print*,'wdens',wdens
     307  ! print*,'coefgw',coefgw
     308  ! cc
     309  ! Minimum value for |T_wake - T_undist|. Used for wake top definition
     310  ! -------------------------------------------------------------------------
     311
     312  delta_t_min = 0.2
     313
     314  ! 1. - Save initial values and initialize tendencies
     315  ! --------------------------------------------------
     316
     317  DO k = 1, klev
     318    DO i = 1, klon
     319      ppi(i, k) = pi(i, k)
     320      deltatw0(i, k) = deltatw(i, k)
     321      deltaqw0(i, k) = deltaqw(i, k)
     322      te(i, k) = te0(i, k)
     323      qe(i, k) = qe0(i, k)
     324      dtls(i, k) = 0.
     325      dqls(i, k) = 0.
     326      d_deltat_gw(i, k) = 0.
     327      d_te(i, k) = 0.
     328      d_qe(i, k) = 0.
     329      d_deltatw(i, k) = 0.
     330      d_deltaqw(i, k) = 0.
     331      ! IM 060508 beg
     332      d_deltatw2(i, k) = 0.
     333      d_deltaqw2(i, k) = 0.
     334      ! IM 060508 end
     335    END DO
     336  END DO
     337  ! sigmaw1=sigmaw
     338  ! IF (sigd_con.GT.sigmaw1) THEN
     339  ! print*, 'sigmaw,sigd_con', sigmaw, sigd_con
     340  ! ENDIF
     341  DO i = 1, klon
     342    ! c      sigmaw(i) = amax1(sigmaw(i),sigd_con(i))
     343    sigmaw(i) = amax1(sigmaw(i), sigmad)
     344    sigmaw(i) = amin1(sigmaw(i), 0.99)
     345    sigmaw0(i) = sigmaw(i)
     346    wape(i) = 0.
     347    wape2(i) = 0.
     348    d_sigmaw(i) = 0.
     349    ktopw(i) = 0
     350  END DO
     351
     352
     353  ! 2. - Prognostic part
     354  ! --------------------
     355
     356
     357  ! 2.1 - Undisturbed area and Wake integrals
     358  ! ---------------------------------------------------------
     359
     360  DO i = 1, klon
     361    z(i) = 0.
     362    ktop(i) = 0
     363    kupper(i) = 0
     364    sum_thu(i) = 0.
     365    sum_tu(i) = 0.
     366    sum_qu(i) = 0.
     367    sum_thvu(i) = 0.
     368    sum_dth(i) = 0.
     369    sum_dq(i) = 0.
     370    sum_rho(i) = 0.
     371    sum_dtdwn(i) = 0.
     372    sum_dqdwn(i) = 0.
     373
     374    av_thu(i) = 0.
     375    av_tu(i) = 0.
     376    av_qu(i) = 0.
     377    av_thvu(i) = 0.
     378    av_dth(i) = 0.
     379    av_dq(i) = 0.
     380    av_rho(i) = 0.
     381    av_dtdwn(i) = 0.
     382    av_dqdwn(i) = 0.
     383  END DO
     384
     385  ! Distance between wakes
     386  DO i = 1, klon
     387    ll(i) = (1-sqrt(sigmaw(i)))/sqrt(wdens(i))
     388  END DO
     389  ! Potential temperatures and humidity
     390  ! ----------------------------------------------------------
     391  DO k = 1, klev
     392    DO i = 1, klon
     393      ! write(*,*)'wake 1',i,k,rd,te(i,k)
     394      rho(i, k) = p(i, k)/(rd*te(i,k))
     395      ! write(*,*)'wake 2',rho(i,k)
     396      IF (k==1) THEN
     397        ! write(*,*)'wake 3',i,k,rd,te(i,k)
     398        rhoh(i, k) = ph(i, k)/(rd*te(i,k))
     399        ! write(*,*)'wake 4',i,k,rd,te(i,k)
     400        zhh(i, k) = 0
     401      ELSE
     402        ! write(*,*)'wake 5',rd,(te(i,k)+te(i,k-1))
     403        rhoh(i, k) = ph(i, k)*2./(rd*(te(i,k)+te(i,k-1)))
     404        ! write(*,*)'wake 6',(-rhoh(i,k)*RG)+zhh(i,k-1)
     405        zhh(i, k) = (ph(i,k)-ph(i,k-1))/(-rhoh(i,k)*rg) + zhh(i, k-1)
     406      END IF
     407      ! write(*,*)'wake 7',ppi(i,k)
     408      the(i, k) = te(i, k)/ppi(i, k)
     409      thu(i, k) = (te(i,k)-deltatw(i,k)*sigmaw(i))/ppi(i, k)
     410      tu(i, k) = te(i, k) - deltatw(i, k)*sigmaw(i)
     411      qu(i, k) = qe(i, k) - deltaqw(i, k)*sigmaw(i)
     412      ! write(*,*)'wake 8',(rd*(te(i,k)+deltatw(i,k)))
     413      rhow(i, k) = p(i, k)/(rd*(te(i,k)+deltatw(i,k)))
     414      dth(i, k) = deltatw(i, k)/ppi(i, k)
     415    END DO
     416  END DO
     417
     418  DO k = 1, klev - 1
     419    DO i = 1, klon
     420      IF (k==1) THEN
     421        n2(i, k) = 0
     422      ELSE
     423        n2(i, k) = amax1(0., -rg**2/the(i,k)*rho(i,k)*(the(i,k+1)-the(i, &
     424          k-1))/(p(i,k+1)-p(i,k-1)))
     425      END IF
     426      zh(i, k) = (zhh(i,k)+zhh(i,k+1))/2
     427
     428      cgw(i, k) = sqrt(n2(i,k))*zh(i, k)
     429      tgw(i, k) = coefgw*cgw(i, k)/ll(i)
     430    END DO
     431  END DO
     432
     433  DO i = 1, klon
     434    n2(i, klev) = 0
     435    zh(i, klev) = 0
     436    cgw(i, klev) = 0
     437    tgw(i, klev) = 0
     438  END DO
     439
     440  ! Calcul de la masse volumique moyenne de la colonne   (bdlmd)
     441  ! -----------------------------------------------------------------
     442
     443  DO k = 1, klev
     444    DO i = 1, klon
     445      epaisseur1(i, k) = 0.
     446      epaisseur2(i, k) = 0.
     447    END DO
     448  END DO
     449
     450  DO i = 1, klon
     451    epaisseur1(i, 1) = -(ph(i,2)-ph(i,1))/(rho(i,1)*rg) + 1.
     452    epaisseur2(i, 1) = -(ph(i,2)-ph(i,1))/(rho(i,1)*rg) + 1.
     453    rhow_moyen(i, 1) = rhow(i, 1)
     454  END DO
     455
     456  DO k = 2, klev
     457    DO i = 1, klon
     458      epaisseur1(i, k) = -(ph(i,k+1)-ph(i,k))/(rho(i,k)*rg) + 1.
     459      epaisseur2(i, k) = epaisseur2(i, k-1) + epaisseur1(i, k)
     460      rhow_moyen(i, k) = (rhow_moyen(i,k-1)*epaisseur2(i,k-1)+rhow(i,k)* &
     461        epaisseur1(i,k))/epaisseur2(i, k)
     462    END DO
     463  END DO
     464
     465
     466  ! Choose an integration bound well above wake top
     467  ! -----------------------------------------------------------------
     468
     469  ! Pupper = 50000.  ! melting level
     470  ! Pupper = 60000.
     471  ! Pupper = 80000.  ! essais pour case_e
     472  DO i = 1, klon
     473    pupper(i) = 0.6*ph(i, 1)
     474    pupper(i) = max(pupper(i), 45000.)
     475    ! cc        Pupper(i) = 60000.
     476  END DO
     477
     478
     479  ! Determine Wake top pressure (Ptop) from buoyancy integral
     480  ! --------------------------------------------------------
     481
     482  ! -1/ Pressure of the level where dth becomes less than delta_t_min.
     483
     484  DO i = 1, klon
     485    ptop_provis(i) = ph(i, 1)
     486  END DO
     487  DO k = 2, klev
     488    DO i = 1, klon
     489
     490      ! IM v3JYG; ptop_provis(i).LT. ph(i,1)
     491
     492      IF (dth(i,k)>-delta_t_min .AND. dth(i,k-1)<-delta_t_min .AND. &
     493          ptop_provis(i)==ph(i,1)) THEN
     494        ptop_provis(i) = ((dth(i,k)+delta_t_min)*p(i,k-1)-(dth(i, &
     495          k-1)+delta_t_min)*p(i,k))/(dth(i,k)-dth(i,k-1))
     496      END IF
     497    END DO
     498  END DO
     499
     500  ! -2/ dth integral
     501
     502  DO i = 1, klon
     503    sum_dth(i) = 0.
     504    dthmin(i) = -delta_t_min
     505    z(i) = 0.
     506  END DO
     507
     508  DO k = 1, klev
     509    DO i = 1, klon
     510      dz(i) = -(amax1(ph(i,k+1),ptop_provis(i))-ph(i,k))/(rho(i,k)*rg)
     511      IF (dz(i)>0) THEN
     512        z(i) = z(i) + dz(i)
     513        sum_dth(i) = sum_dth(i) + dth(i, k)*dz(i)
     514        dthmin(i) = amin1(dthmin(i), dth(i,k))
     515      END IF
     516    END DO
     517  END DO
     518
     519  ! -3/ height of triangle with area= sum_dth and base = dthmin
     520
     521  DO i = 1, klon
     522    hw0(i) = 2.*sum_dth(i)/amin1(dthmin(i), -0.5)
     523    hw0(i) = amax1(hwmin, hw0(i))
     524  END DO
     525
     526  ! -4/ now, get Ptop
     527
     528  DO i = 1, klon
     529    z(i) = 0.
     530    ptop(i) = ph(i, 1)
     531  END DO
     532
     533  DO k = 1, klev
     534    DO i = 1, klon
     535      dz(i) = amin1(-(ph(i,k+1)-ph(i,k))/(rho(i,k)*rg), hw0(i)-z(i))
     536      IF (dz(i)>0) THEN
     537        z(i) = z(i) + dz(i)
     538        ptop(i) = ph(i, k) - rho(i, k)*rg*dz(i)
     539      END IF
     540    END DO
     541  END DO
     542
     543
     544  ! -5/ Determination de ktop et kupper
     545
     546  DO k = klev, 1, -1
     547    DO i = 1, klon
     548      IF (ph(i,k+1)<ptop(i)) ktop(i) = k
     549      IF (ph(i,k+1)<pupper(i)) kupper(i) = k
     550    END DO
     551  END DO
     552
     553  ! On evite kupper = 1 et kupper = klev
     554  DO i = 1, klon
     555    kupper(i) = max(kupper(i), 2)
     556    kupper(i) = min(kupper(i), klev-1)
     557  END DO
     558
     559
     560  ! -6/ Correct ktop and ptop
     561
     562  DO i = 1, klon
     563    ptop_new(i) = ptop(i)
     564  END DO
     565  DO k = klev, 2, -1
     566    DO i = 1, klon
     567      IF (k<=ktop(i) .AND. ptop_new(i)==ptop(i) .AND. &
     568          dth(i,k)>-delta_t_min .AND. dth(i,k-1)<-delta_t_min) THEN
     569        ptop_new(i) = ((dth(i,k)+delta_t_min)*p(i,k-1)-(dth(i, &
     570          k-1)+delta_t_min)*p(i,k))/(dth(i,k)-dth(i,k-1))
     571      END IF
     572    END DO
     573  END DO
     574
     575  DO i = 1, klon
     576    ptop(i) = ptop_new(i)
     577  END DO
     578
     579  DO k = klev, 1, -1
     580    DO i = 1, klon
     581      IF (ph(i,k+1)<ptop(i)) ktop(i) = k
     582    END DO
     583  END DO
     584
     585  ! -5/ Set deltatw & deltaqw to 0 above kupper
     586
     587  DO k = 1, klev
     588    DO i = 1, klon
     589      IF (k>=kupper(i)) THEN
     590        deltatw(i, k) = 0.
     591        deltaqw(i, k) = 0.
     592      END IF
     593    END DO
     594  END DO
     595
     596
     597  ! Vertical gradient of LS omega
     598
     599  DO k = 1, klev
     600    DO i = 1, klon
     601      IF (k<=kupper(i)) THEN
     602        dp_omgb(i, k) = (omgb(i,k+1)-omgb(i,k))/(ph(i,k+1)-ph(i,k))
     603      END IF
     604    END DO
     605  END DO
     606
     607  ! Integrals (and wake top level number)
     608  ! --------------------------------------
     609
     610  ! Initialize sum_thvu to 1st level virt. pot. temp.
     611
     612  DO i = 1, klon
     613    z(i) = 1.
     614    dz(i) = 1.
     615    sum_thvu(i) = thu(i, 1)*(1.+eps*qu(i,1))*dz(i)
     616    sum_dth(i) = 0.
     617  END DO
     618
     619  DO k = 1, klev
     620    DO i = 1, klon
     621      dz(i) = -(amax1(ph(i,k+1),ptop(i))-ph(i,k))/(rho(i,k)*rg)
     622      IF (dz(i)>0) THEN
     623        z(i) = z(i) + dz(i)
     624        sum_thu(i) = sum_thu(i) + thu(i, k)*dz(i)
     625        sum_tu(i) = sum_tu(i) + tu(i, k)*dz(i)
     626        sum_qu(i) = sum_qu(i) + qu(i, k)*dz(i)
     627        sum_thvu(i) = sum_thvu(i) + thu(i, k)*(1.+eps*qu(i,k))*dz(i)
     628        sum_dth(i) = sum_dth(i) + dth(i, k)*dz(i)
     629        sum_dq(i) = sum_dq(i) + deltaqw(i, k)*dz(i)
     630        sum_rho(i) = sum_rho(i) + rhow(i, k)*dz(i)
     631        sum_dtdwn(i) = sum_dtdwn(i) + dtdwn(i, k)*dz(i)
     632        sum_dqdwn(i) = sum_dqdwn(i) + dqdwn(i, k)*dz(i)
     633      END IF
     634    END DO
     635  END DO
     636
     637  DO i = 1, klon
     638    hw0(i) = z(i)
     639  END DO
     640
     641
     642  ! 2.1 - WAPE and mean forcing computation
     643  ! ---------------------------------------
     644
     645  ! ---------------------------------------
     646
     647  ! Means
     648
     649  DO i = 1, klon
     650    av_thu(i) = sum_thu(i)/hw0(i)
     651    av_tu(i) = sum_tu(i)/hw0(i)
     652    av_qu(i) = sum_qu(i)/hw0(i)
     653    av_thvu(i) = sum_thvu(i)/hw0(i)
     654    ! av_thve = sum_thve/hw0
     655    av_dth(i) = sum_dth(i)/hw0(i)
     656    av_dq(i) = sum_dq(i)/hw0(i)
     657    av_rho(i) = sum_rho(i)/hw0(i)
     658    av_dtdwn(i) = sum_dtdwn(i)/hw0(i)
     659    av_dqdwn(i) = sum_dqdwn(i)/hw0(i)
     660
     661    wape(i) = -rg*hw0(i)*(av_dth(i)+eps*(av_thu(i)*av_dq(i)+av_dth(i)*av_qu(i &
     662      )+av_dth(i)*av_dq(i)))/av_thvu(i)
     663  END DO
     664
     665  ! 2.2 Prognostic variable update
     666  ! ------------------------------
     667
     668  ! Filter out bad wakes
     669
     670  DO k = 1, klev
     671    DO i = 1, klon
     672      IF (wape(i)<0.) THEN
     673        deltatw(i, k) = 0.
     674        deltaqw(i, k) = 0.
     675        dth(i, k) = 0.
     676      END IF
     677    END DO
     678  END DO
     679
     680  DO i = 1, klon
     681    IF (wape(i)<0.) THEN
    354682      wape(i) = 0.
    355       wape2(i) = 0.
    356       d_sigmaw(i) = 0.
    357       ktopw(i) = 0
    358       ENDDO
    359 C
    360 C
    361 C 2. - Prognostic part
    362 C --------------------
    363 C
    364 C
    365 C 2.1 - Undisturbed area and Wake integrals
    366 C ---------------------------------------------------------
    367 
    368       DO i=1, klon
     683      cstar(i) = 0.
     684      hw(i) = hwmin
     685      sigmaw(i) = amax1(sigmad, sigd_con(i))
     686      fip(i) = 0.
     687      gwake(i) = .FALSE.
     688    ELSE
     689      cstar(i) = stark*sqrt(2.*wape(i))
     690      gwake(i) = .TRUE.
     691    END IF
     692  END DO
     693
     694
     695  ! Check qx and qw positivity
     696  ! --------------------------
     697  DO i = 1, klon
     698    q0_min(i) = min((qe(i,1)-sigmaw(i)*deltaqw(i,1)), (qe(i, &
     699      1)+(1.-sigmaw(i))*deltaqw(i,1)))
     700  END DO
     701  DO k = 2, klev
     702    DO i = 1, klon
     703      q1_min(i) = min((qe(i,k)-sigmaw(i)*deltaqw(i,k)), (qe(i, &
     704        k)+(1.-sigmaw(i))*deltaqw(i,k)))
     705      IF (q1_min(i)<=q0_min(i)) THEN
     706        q0_min(i) = q1_min(i)
     707      END IF
     708    END DO
     709  END DO
     710
     711  DO i = 1, klon
     712    ok_qx_qw(i) = q0_min(i) >= 0.
     713    alpha(i) = 1.
     714  END DO
     715
     716  ! C -----------------------------------------------------------------
     717  ! Sub-time-stepping
     718  ! -----------------
     719
     720  nsub = 10
     721  dtimesub = dtime/nsub
     722
     723  ! ------------------------------------------------------------
     724  DO isubstep = 1, nsub
     725    ! ------------------------------------------------------------
     726
     727    ! wk_adv is the logical flag enabling wake evolution in the time advance
     728    ! loop
     729    DO i = 1, klon
     730      wk_adv(i) = ok_qx_qw(i) .AND. alpha(i) >= 1.
     731    END DO
     732
     733    ! cc nrlmd   Ajout d'un recalcul de wdens dans le cas d'un entrainement
     734    ! négatif de ktop à kupper --------
     735    ! cc           On calcule pour cela une densité wdens0 pour laquelle on
     736    ! aurait un entrainement nul ---
     737    DO i = 1, klon
     738      ! c       print *,' isubstep,wk_adv(i),cstar(i),wape(i) ',
     739      ! c     $           isubstep,wk_adv(i),cstar(i),wape(i)
     740      IF (wk_adv(i) .AND. cstar(i)>0.01) THEN
     741        omg(i, kupper(i)+1) = -rg*amdwn(i, kupper(i)+1)/sigmaw(i) + &
     742          rg*amup(i, kupper(i)+1)/(1.-sigmaw(i))
     743        wdens0 = (sigmaw(i)/(4.*3.14))*((1.-sigmaw(i))*omg(i,kupper(i)+1)/(( &
     744          ph(i,1)-pupper(i))*cstar(i)))**(2)
     745        IF (wdens(i)<=wdens0*1.1) THEN
     746          wdens(i) = wdens0
     747        END IF
     748        ! c        print*,'omg(i,kupper(i)+1),wdens0,wdens(i),cstar(i)
     749        ! c     $     ,ph(i,1)-pupper(i)',
     750        ! c     $             omg(i,kupper(i)+1),wdens0,wdens(i),cstar(i)
     751        ! c     $     ,ph(i,1)-pupper(i)
     752      END IF
     753    END DO
     754
     755    ! cc nrlmd
     756
     757    DO i = 1, klon
     758      IF (wk_adv(i)) THEN
     759        gfl(i) = 2.*sqrt(3.14*wdens(i)*sigmaw(i))
     760        sigmaw(i) = amin1(sigmaw(i), sigmaw_max)
     761      END IF
     762    END DO
     763    DO i = 1, klon
     764      IF (wk_adv(i)) THEN
     765        ! cc nrlmd          Introduction du taux de mortalité des poches et
     766        ! test sur sigmaw_max=0.4
     767        ! cc         d_sigmaw(i) = gfl(i)*Cstar(i)*dtimesub
     768        IF (sigmaw(i)>=sigmaw_max) THEN
     769          death_rate(i) = gfl(i)*cstar(i)/sigmaw(i)
     770        ELSE
     771          death_rate(i) = 0.
     772        END IF
     773        d_sigmaw(i) = gfl(i)*cstar(i)*dtimesub - death_rate(i)*sigmaw(i)* &
     774          dtimesub
     775        ! $              - nat_rate(i)*sigmaw(i)*dtimesub
     776        ! c        print*, 'd_sigmaw(i),sigmaw(i),gfl(i),Cstar(i),wape(i),
     777        ! c     $  death_rate(i),ktop(i),kupper(i)',
     778        ! c     $                d_sigmaw(i),sigmaw(i),gfl(i),Cstar(i),wape(i),
     779        ! c     $  death_rate(i),ktop(i),kupper(i)
     780
     781        ! sigmaw(i) =sigmaw(i) + gfl(i)*Cstar(i)*dtimesub
     782        ! sigmaw(i) =min(sigmaw(i),0.99)     !!!!!!!!
     783        ! wdens = wdens0/(10.*sigmaw)
     784        ! sigmaw =max(sigmaw,sigd_con)
     785        ! sigmaw =max(sigmaw,sigmad)
     786      END IF
     787    END DO
     788
     789
     790    ! calcul de la difference de vitesse verticale poche - zone non perturbee
     791    ! IM 060208 differences par rapport au code initial; init. a 0 dp_deltomg
     792    ! IM 060208 et omg sur les niveaux de 1 a klev+1, alors que avant l'on
     793    ! definit
     794    ! IM 060208 au niveau k=1..?
     795    DO k = 1, klev
     796      DO i = 1, klon
     797        IF (wk_adv(i)) THEN !!! nrlmd
     798          dp_deltomg(i, k) = 0.
     799        END IF
     800      END DO
     801    END DO
     802    DO k = 1, klev + 1
     803      DO i = 1, klon
     804        IF (wk_adv(i)) THEN !!! nrlmd
     805          omg(i, k) = 0.
     806        END IF
     807      END DO
     808    END DO
     809
     810    DO i = 1, klon
     811      IF (wk_adv(i)) THEN
     812        z(i) = 0.
     813        omg(i, 1) = 0.
     814        dp_deltomg(i, 1) = -(gfl(i)*cstar(i))/(sigmaw(i)*(1-sigmaw(i)))
     815      END IF
     816    END DO
     817
     818    DO k = 2, klev
     819      DO i = 1, klon
     820        IF (wk_adv(i) .AND. k<=ktop(i)) THEN
     821          dz(i) = -(ph(i,k)-ph(i,k-1))/(rho(i,k-1)*rg)
     822          z(i) = z(i) + dz(i)
     823          dp_deltomg(i, k) = dp_deltomg(i, 1)
     824          omg(i, k) = dp_deltomg(i, 1)*z(i)
     825        END IF
     826      END DO
     827    END DO
     828
     829    DO i = 1, klon
     830      IF (wk_adv(i)) THEN
     831        dztop(i) = -(ptop(i)-ph(i,ktop(i)))/(rho(i,ktop(i))*rg)
     832        ztop(i) = z(i) + dztop(i)
     833        omgtop(i) = dp_deltomg(i, 1)*ztop(i)
     834      END IF
     835    END DO
     836
     837    ! -----------------
     838    ! From m/s to Pa/s
     839    ! -----------------
     840
     841    DO i = 1, klon
     842      IF (wk_adv(i)) THEN
     843        omgtop(i) = -rho(i, ktop(i))*rg*omgtop(i)
     844        dp_deltomg(i, 1) = omgtop(i)/(ptop(i)-ph(i,1))
     845      END IF
     846    END DO
     847
     848    DO k = 1, klev
     849      DO i = 1, klon
     850        IF (wk_adv(i) .AND. k<=ktop(i)) THEN
     851          omg(i, k) = -rho(i, k)*rg*omg(i, k)
     852          dp_deltomg(i, k) = dp_deltomg(i, 1)
     853        END IF
     854      END DO
     855    END DO
     856
     857    ! raccordement lineaire de omg de ptop a pupper
     858
     859    DO i = 1, klon
     860      IF (wk_adv(i) .AND. kupper(i)>ktop(i)) THEN
     861        omg(i, kupper(i)+1) = -rg*amdwn(i, kupper(i)+1)/sigmaw(i) + &
     862          rg*amup(i, kupper(i)+1)/(1.-sigmaw(i))
     863        dp_deltomg(i, kupper(i)) = (omgtop(i)-omg(i,kupper(i)+1))/ &
     864          (ptop(i)-pupper(i))
     865      END IF
     866    END DO
     867
     868    ! c      DO i=1,klon
     869    ! c        print*,'Pente entre 0 et kupper (référence)'
     870    ! c     $           ,omg(i,kupper(i)+1)/(pupper(i)-ph(i,1))
     871    ! c        print*,'Pente entre ktop et kupper'
     872    ! c     $   ,(omg(i,kupper(i)+1)-omgtop(i))/(pupper(i)-ptop(i))
     873    ! c      ENDDO
     874    ! c
     875    DO k = 1, klev
     876      DO i = 1, klon
     877        IF (wk_adv(i) .AND. k>ktop(i) .AND. k<=kupper(i)) THEN
     878          dp_deltomg(i, k) = dp_deltomg(i, kupper(i))
     879          omg(i, k) = omgtop(i) + (ph(i,k)-ptop(i))*dp_deltomg(i, kupper(i))
     880        END IF
     881      END DO
     882    END DO
     883    ! cc nrlmd
     884    ! c      DO i=1,klon
     885    ! c      print*,'deltaw_ktop,deltaw_conv',omgtop(i),omg(i,kupper(i)+1)
     886    ! c      END DO
     887    ! cc
     888
     889
     890    ! --    Compute wake average vertical velocity omgbw
     891
     892
     893    DO k = 1, klev + 1
     894      DO i = 1, klon
     895        IF (wk_adv(i)) THEN
     896          omgbw(i, k) = omgb(i, k) + (1.-sigmaw(i))*omg(i, k)
     897        END IF
     898      END DO
     899    END DO
     900    ! --    and its vertical gradient dp_omgbw
     901
     902    DO k = 1, klev
     903      DO i = 1, klon
     904        IF (wk_adv(i)) THEN
     905          dp_omgbw(i, k) = (omgbw(i,k+1)-omgbw(i,k))/(ph(i,k+1)-ph(i,k))
     906        END IF
     907      END DO
     908    END DO
     909
     910    ! --    Upstream coefficients for omgb velocity
     911    ! --    (alpha_up(k) is the coefficient of the value at level k)
     912    ! --    (1-alpha_up(k) is the coefficient of the value at level k-1)
     913    DO k = 1, klev
     914      DO i = 1, klon
     915        IF (wk_adv(i)) THEN
     916          alpha_up(i, k) = 0.
     917          IF (omgb(i,k)>0.) alpha_up(i, k) = 1.
     918        END IF
     919      END DO
     920    END DO
     921
     922    ! Matrix expressing [The,deltatw] from  [Th1,Th2]
     923
     924    DO i = 1, klon
     925      IF (wk_adv(i)) THEN
     926        rre1(i) = 1. - sigmaw(i)
     927        rre2(i) = sigmaw(i)
     928      END IF
     929    END DO
     930    rrd1 = -1.
     931    rrd2 = 1.
     932
     933    ! --    Get [Th1,Th2], dth and [q1,q2]
     934
     935    DO k = 1, klev
     936      DO i = 1, klon
     937        IF (wk_adv(i) .AND. k<=kupper(i)+1) THEN
     938          dth(i, k) = deltatw(i, k)/ppi(i, k)
     939          th1(i, k) = the(i, k) - sigmaw(i)*dth(i, k) ! undisturbed area
     940          th2(i, k) = the(i, k) + (1.-sigmaw(i))*dth(i, k) ! wake
     941          q1(i, k) = qe(i, k) - sigmaw(i)*deltaqw(i, k) ! undisturbed area
     942          q2(i, k) = qe(i, k) + (1.-sigmaw(i))*deltaqw(i, k) ! wake
     943        END IF
     944      END DO
     945    END DO
     946
     947    DO i = 1, klon
     948      IF (wk_adv(i)) THEN !!! nrlmd
     949        d_th1(i, 1) = 0.
     950        d_th2(i, 1) = 0.
     951        d_dth(i, 1) = 0.
     952        d_q1(i, 1) = 0.
     953        d_q2(i, 1) = 0.
     954        d_dq(i, 1) = 0.
     955      END IF
     956    END DO
     957
     958    DO k = 2, klev
     959      DO i = 1, klon
     960        IF (wk_adv(i) .AND. k<=kupper(i)+1) THEN
     961          d_th1(i, k) = th1(i, k-1) - th1(i, k)
     962          d_th2(i, k) = th2(i, k-1) - th2(i, k)
     963          d_dth(i, k) = dth(i, k-1) - dth(i, k)
     964          d_q1(i, k) = q1(i, k-1) - q1(i, k)
     965          d_q2(i, k) = q2(i, k-1) - q2(i, k)
     966          d_dq(i, k) = deltaqw(i, k-1) - deltaqw(i, k)
     967        END IF
     968      END DO
     969    END DO
     970
     971    DO i = 1, klon
     972      IF (wk_adv(i)) THEN
     973        omgbdth(i, 1) = 0.
     974        omgbdq(i, 1) = 0.
     975      END IF
     976    END DO
     977
     978    DO k = 2, klev
     979      DO i = 1, klon
     980        IF (wk_adv(i) .AND. k<=kupper(i)+1) THEN !   loop on interfaces
     981          omgbdth(i, k) = omgb(i, k)*(dth(i,k-1)-dth(i,k))
     982          omgbdq(i, k) = omgb(i, k)*(deltaqw(i,k-1)-deltaqw(i,k))
     983        END IF
     984      END DO
     985    END DO
     986
     987    ! -----------------------------------------------------------------
     988    DO k = 1, klev
     989      DO i = 1, klon
     990        IF (wk_adv(i) .AND. k<=kupper(i)-1) THEN
     991          ! -----------------------------------------------------------------
     992
     993          ! Compute redistribution (advective) term
     994
     995          d_deltatw(i, k) = dtimesub/(ph(i,k)-ph(i,k+1))* &
     996            (rrd1*omg(i,k)*sigmaw(i)*d_th1(i,k)-rrd2*omg(i,k+1)*(1.-sigmaw( &
     997            i))*d_th2(i,k+1)-(1.-alpha_up(i,k))*omgbdth(i,k)-alpha_up(i,k+1)* &
     998            omgbdth(i,k+1))*ppi(i, k)
     999          ! print*,'d_deltatw=',d_deltatw(i,k)
     1000
     1001          d_deltaqw(i, k) = dtimesub/(ph(i,k)-ph(i,k+1))* &
     1002            (rrd1*omg(i,k)*sigmaw(i)*d_q1(i,k)-rrd2*omg(i,k+1)*(1.-sigmaw( &
     1003            i))*d_q2(i,k+1)-(1.-alpha_up(i,k))*omgbdq(i,k)-alpha_up(i,k+1)* &
     1004            omgbdq(i,k+1))
     1005          ! print*,'d_deltaqw=',d_deltaqw(i,k)
     1006
     1007          ! and increment large scale tendencies
     1008
     1009
     1010
     1011
     1012          ! C
     1013          ! -----------------------------------------------------------------
     1014          d_te(i, k) = dtimesub*((rre1(i)*omg(i,k)*sigmaw(i)*d_th1(i, &
     1015            k)-rre2(i)*omg(i,k+1)*(1.-sigmaw(i))*d_th2(i,k+1))/(ph(i,k)-ph(i, &
     1016            k+1)) &                ! cc nrlmd     $
     1017                                   ! -sigmaw(i)*(1.-sigmaw(i))*dth(i,k)*dp_deltomg(i,k)
     1018            -sigmaw(i)*(1.-sigmaw(i))*dth(i,k)*(omg(i,k)-omg(i,k+1))/(ph(i, &
     1019            k)-ph(i,k+1)) &        ! cc
     1020            )*ppi(i, k)
     1021
     1022          d_qe(i, k) = dtimesub*((rre1(i)*omg(i,k)*sigmaw(i)*d_q1(i, &
     1023            k)-rre2(i)*omg(i,k+1)*(1.-sigmaw(i))*d_q2(i,k+1))/(ph(i,k)-ph(i, &
     1024            k+1)) &                ! cc nrlmd     $
     1025                                   ! -sigmaw(i)*(1.-sigmaw(i))*deltaqw(i,k)*dp_deltomg(i,k)
     1026            -sigmaw(i)*(1.-sigmaw(i))*deltaqw(i,k)*(omg(i,k)-omg(i, &
     1027            k+1))/(ph(i,k)-ph(i,k+1)) & ! cc
     1028            )
     1029          ! cc nrlmd
     1030        ELSE IF (wk_adv(i) .AND. k==kupper(i)) THEN
     1031          d_te(i, k) = dtimesub*((rre1(i)*omg(i,k)*sigmaw(i)*d_th1(i, &
     1032            k)/(ph(i,k)-ph(i,k+1))))*ppi(i, k)
     1033
     1034          d_qe(i, k) = dtimesub*((rre1(i)*omg(i,k)*sigmaw(i)*d_q1(i, &
     1035            k)/(ph(i,k)-ph(i,k+1))))
     1036
     1037        END IF
     1038        ! cc
     1039      END DO
     1040    END DO
     1041    ! ------------------------------------------------------------------
     1042
     1043    ! Increment state variables
     1044
     1045    DO k = 1, klev
     1046      DO i = 1, klon
     1047        ! cc nrlmd       IF( wk_adv(i) .AND. k .LE. kupper(i)-1) THEN
     1048        IF (wk_adv(i) .AND. k<=kupper(i)) THEN
     1049          ! cc
     1050
     1051
     1052
     1053          ! Coefficient de répartition
     1054
     1055          crep(i, k) = crep_sol*(ph(i,kupper(i))-ph(i,k))/ &
     1056            (ph(i,kupper(i))-ph(i,1))
     1057          crep(i, k) = crep(i, k) + crep_upper*(ph(i,1)-ph(i,k))/(p(i,1)-ph(i &
     1058            ,kupper(i)))
     1059
     1060
     1061          ! Reintroduce compensating subsidence term.
     1062
     1063          ! dtKE(k)=(dtdwn(k)*Crep(k))/sigmaw
     1064          ! dtKE(k)=dtKE(k)-(dtdwn(k)*(1-Crep(k))+dta(k))
     1065          ! .                   /(1-sigmaw)
     1066          ! dqKE(k)=(dqdwn(k)*Crep(k))/sigmaw
     1067          ! dqKE(k)=dqKE(k)-(dqdwn(k)*(1-Crep(k))+dqa(k))
     1068          ! .                   /(1-sigmaw)
     1069
     1070          ! dtKE(k)=(dtdwn(k)*Crep(k)+(1-Crep(k))*dta(k))/sigmaw
     1071          ! dtKE(k)=dtKE(k)-(dtdwn(k)*(1-Crep(k))+dta(k)*Crep(k))
     1072          ! .                   /(1-sigmaw)
     1073          ! dqKE(k)=(dqdwn(k)*Crep(k)+(1-Crep(k))*dqa(k))/sigmaw
     1074          ! dqKE(k)=dqKE(k)-(dqdwn(k)*(1-Crep(k))+dqa(k)*Crep(k))
     1075          ! .                   /(1-sigmaw)
     1076
     1077          dtke(i, k) = (dtdwn(i,k)/sigmaw(i)-dta(i,k)/(1.-sigmaw(i)))
     1078          dqke(i, k) = (dqdwn(i,k)/sigmaw(i)-dqa(i,k)/(1.-sigmaw(i)))
     1079          ! print*,'dtKE= ',dtKE(i,k),' dqKE= ',dqKE(i,k)
     1080
     1081          dtpbl(i, k) = (wdtpbl(i,k)/sigmaw(i)-udtpbl(i,k)/(1.-sigmaw(i)))
     1082          dqpbl(i, k) = (wdqpbl(i,k)/sigmaw(i)-udqpbl(i,k)/(1.-sigmaw(i)))
     1083          ! print*,'dtPBL= ',dtPBL(i,k),' dqPBL= ',dqPBL(i,k)
     1084
     1085          ! cc nrlmd          Prise en compte du taux de mortalité
     1086          ! cc               Définitions de entr, detr
     1087          detr(i, k) = 0.
     1088
     1089          entr(i, k) = detr(i, k) + gfl(i)*cstar(i) + &
     1090            sigmaw(i)*(1.-sigmaw(i))*dp_deltomg(i, k)
     1091
     1092          spread(i, k) = (entr(i,k)-detr(i,k))/sigmaw(i)
     1093          ! cc        spread(i,k) =
     1094          ! (1.-sigmaw(i))*dp_deltomg(i,k)+gfl(i)*Cstar(i)/
     1095          ! cc     $  sigmaw(i)
     1096
     1097
     1098          ! ajout d'un effet onde de gravité -Tgw(k)*deltatw(k) 03/02/06 YU
     1099          ! Jingmei
     1100
     1101          ! write(lunout,*)'wake.F ',i,k, dtimesub,d_deltat_gw(i,k),
     1102          ! &  Tgw(i,k),deltatw(i,k)
     1103          d_deltat_gw(i, k) = d_deltat_gw(i, k) - tgw(i, k)*deltatw(i, k)* &
     1104            dtimesub
     1105          ! write(lunout,*)'wake.F ',i,k, dtimesub,d_deltatw(i,k)
     1106          ff(i) = d_deltatw(i, k)/dtimesub
     1107
     1108          ! Sans GW
     1109
     1110          ! deltatw(k)=deltatw(k)+dtimesub*(ff+dtKE(k)-spread(k)*deltatw(k))
     1111
     1112          ! GW formule 1
     1113
     1114          ! deltatw(k) = deltatw(k)+dtimesub*
     1115          ! $         (ff+dtKE(k) - spread(k)*deltatw(k)-Tgw(k)*deltatw(k))
     1116
     1117          ! GW formule 2
     1118
     1119          IF (dtimesub*tgw(i,k)<1.E-10) THEN
     1120            d_deltatw(i, k) = dtimesub*(ff(i)+dtke(i,k)+dtpbl(i,k) & ! cc
     1121                                                                     ! $
     1122                                                                     ! -spread(i,k)*deltatw(i,k)
     1123              -entr(i,k)*deltatw(i,k)/sigmaw(i)-(death_rate(i)*sigmaw( &
     1124              i)+detr(i,k))*deltatw(i,k)/(1.-sigmaw(i)) & ! cc
     1125              -tgw(i,k)*deltatw(i,k))
     1126          ELSE
     1127            d_deltatw(i, k) = 1/tgw(i, k)*(1-exp(-dtimesub*tgw(i, &
     1128              k)))*(ff(i)+dtke(i,k)+dtpbl(i,k) & ! cc     $
     1129                                                 ! -spread(i,k)*deltatw(i,k)
     1130              -entr(i,k)*deltatw(i,k)/sigmaw(i)-(death_rate(i)*sigmaw( &
     1131              i)+detr(i,k))*deltatw(i,k)/(1.-sigmaw(i)) & ! cc
     1132              -tgw(i,k)*deltatw(i,k))
     1133          END IF
     1134
     1135          dth(i, k) = deltatw(i, k)/ppi(i, k)
     1136
     1137          gg(i) = d_deltaqw(i, k)/dtimesub
     1138
     1139          d_deltaqw(i, k) = dtimesub*(gg(i)+dqke(i,k)+dqpbl(i,k) & ! cc     $
     1140                                                                   ! -spread(i,k)*deltaqw(i,k))
     1141            -entr(i,k)*deltaqw(i,k)/sigmaw(i)-(death_rate(i)*sigmaw(i)+detr( &
     1142            i,k))*deltaqw(i,k)/(1.-sigmaw(i)))
     1143          ! cc
     1144
     1145          ! cc nrlmd
     1146          ! cc       d_deltatw2(i,k)=d_deltatw2(i,k)+d_deltatw(i,k)
     1147          ! cc       d_deltaqw2(i,k)=d_deltaqw2(i,k)+d_deltaqw(i,k)
     1148          ! cc
     1149        END IF
     1150      END DO
     1151    END DO
     1152
     1153
     1154    ! Scale tendencies so that water vapour remains positive in w and x.
     1155
     1156    CALL wake_vec_modulation(klon, klev, wk_adv, epsilon, qe, d_qe, deltaqw, &
     1157      d_deltaqw, sigmaw, d_sigmaw, alpha)
     1158
     1159    ! cc nrlmd
     1160    ! c      print*,'alpha'
     1161    ! c      do i=1,klon
     1162    ! c         print*,alpha(i)
     1163    ! c      end do
     1164    ! cc
     1165    DO k = 1, klev
     1166      DO i = 1, klon
     1167        IF (wk_adv(i) .AND. k<=kupper(i)) THEN
     1168          d_te(i, k) = alpha(i)*d_te(i, k)
     1169          d_qe(i, k) = alpha(i)*d_qe(i, k)
     1170          d_deltatw(i, k) = alpha(i)*d_deltatw(i, k)
     1171          d_deltaqw(i, k) = alpha(i)*d_deltaqw(i, k)
     1172          d_deltat_gw(i, k) = alpha(i)*d_deltat_gw(i, k)
     1173        END IF
     1174      END DO
     1175    END DO
     1176    DO i = 1, klon
     1177      IF (wk_adv(i)) THEN
     1178        d_sigmaw(i) = alpha(i)*d_sigmaw(i)
     1179      END IF
     1180    END DO
     1181
     1182    ! Update large scale variables and wake variables
     1183    ! IM 060208 manque DO i + remplace DO k=1,kupper(i)
     1184    ! IM 060208     DO k = 1,kupper(i)
     1185    DO k = 1, klev
     1186      DO i = 1, klon
     1187        IF (wk_adv(i) .AND. k<=kupper(i)) THEN
     1188          dtls(i, k) = dtls(i, k) + d_te(i, k)
     1189          dqls(i, k) = dqls(i, k) + d_qe(i, k)
     1190          ! cc nrlmd
     1191          d_deltatw2(i, k) = d_deltatw2(i, k) + d_deltatw(i, k)
     1192          d_deltaqw2(i, k) = d_deltaqw2(i, k) + d_deltaqw(i, k)
     1193          ! cc
     1194        END IF
     1195      END DO
     1196    END DO
     1197    DO k = 1, klev
     1198      DO i = 1, klon
     1199        IF (wk_adv(i) .AND. k<=kupper(i)) THEN
     1200          te(i, k) = te0(i, k) + dtls(i, k)
     1201          qe(i, k) = qe0(i, k) + dqls(i, k)
     1202          the(i, k) = te(i, k)/ppi(i, k)
     1203          deltatw(i, k) = deltatw(i, k) + d_deltatw(i, k)
     1204          deltaqw(i, k) = deltaqw(i, k) + d_deltaqw(i, k)
     1205          dth(i, k) = deltatw(i, k)/ppi(i, k)
     1206          ! c      print*,'k,qx,qw',k,qe(i,k)-sigmaw(i)*deltaqw(i,k)
     1207          ! c     $        ,qe(i,k)+(1-sigmaw(i))*deltaqw(i,k)
     1208        END IF
     1209      END DO
     1210    END DO
     1211    DO i = 1, klon
     1212      IF (wk_adv(i)) THEN
     1213        sigmaw(i) = sigmaw(i) + d_sigmaw(i)
     1214      END IF
     1215    END DO
     1216
     1217
     1218    ! Determine Ptop from buoyancy integral
     1219    ! ---------------------------------------
     1220
     1221    ! -     1/ Pressure of the level where dth changes sign.
     1222
     1223    DO i = 1, klon
     1224      IF (wk_adv(i)) THEN
     1225        ptop_provis(i) = ph(i, 1)
     1226      END IF
     1227    END DO
     1228
     1229    DO k = 2, klev
     1230      DO i = 1, klon
     1231        IF (wk_adv(i) .AND. ptop_provis(i)==ph(i,1) .AND. &
     1232            dth(i,k)>-delta_t_min .AND. dth(i,k-1)<-delta_t_min) THEN
     1233          ptop_provis(i) = ((dth(i,k)+delta_t_min)*p(i,k-1)-(dth(i, &
     1234            k-1)+delta_t_min)*p(i,k))/(dth(i,k)-dth(i,k-1))
     1235        END IF
     1236      END DO
     1237    END DO
     1238
     1239    ! -     2/ dth integral
     1240
     1241    DO i = 1, klon
     1242      IF (wk_adv(i)) THEN !!! nrlmd
     1243        sum_dth(i) = 0.
     1244        dthmin(i) = -delta_t_min
     1245        z(i) = 0.
     1246      END IF
     1247    END DO
     1248
     1249    DO k = 1, klev
     1250      DO i = 1, klon
     1251        IF (wk_adv(i)) THEN
     1252          dz(i) = -(amax1(ph(i,k+1),ptop_provis(i))-ph(i,k))/(rho(i,k)*rg)
     1253          IF (dz(i)>0) THEN
     1254            z(i) = z(i) + dz(i)
     1255            sum_dth(i) = sum_dth(i) + dth(i, k)*dz(i)
     1256            dthmin(i) = amin1(dthmin(i), dth(i,k))
     1257          END IF
     1258        END IF
     1259      END DO
     1260    END DO
     1261
     1262    ! -     3/ height of triangle with area= sum_dth and base = dthmin
     1263
     1264    DO i = 1, klon
     1265      IF (wk_adv(i)) THEN
     1266        hw(i) = 2.*sum_dth(i)/amin1(dthmin(i), -0.5)
     1267        hw(i) = amax1(hwmin, hw(i))
     1268      END IF
     1269    END DO
     1270
     1271    ! -     4/ now, get Ptop
     1272
     1273    DO i = 1, klon
     1274      IF (wk_adv(i)) THEN !!! nrlmd
     1275        ktop(i) = 0
     1276        z(i) = 0.
     1277      END IF
     1278    END DO
     1279
     1280    DO k = 1, klev
     1281      DO i = 1, klon
     1282        IF (wk_adv(i)) THEN
     1283          dz(i) = amin1(-(ph(i,k+1)-ph(i,k))/(rho(i,k)*rg), hw(i)-z(i))
     1284          IF (dz(i)>0) THEN
     1285            z(i) = z(i) + dz(i)
     1286            ptop(i) = ph(i, k) - rho(i, k)*rg*dz(i)
     1287            ktop(i) = k
     1288          END IF
     1289        END IF
     1290      END DO
     1291    END DO
     1292
     1293    ! 4.5/Correct ktop and ptop
     1294
     1295    DO i = 1, klon
     1296      IF (wk_adv(i)) THEN
     1297        ptop_new(i) = ptop(i)
     1298      END IF
     1299    END DO
     1300
     1301    DO k = klev, 2, -1
     1302      DO i = 1, klon
     1303        ! IM v3JYG; IF (k .GE. ktop(i)
     1304        IF (wk_adv(i) .AND. k<=ktop(i) .AND. ptop_new(i)==ptop(i) .AND. &
     1305            dth(i,k)>-delta_t_min .AND. dth(i,k-1)<-delta_t_min) THEN
     1306          ptop_new(i) = ((dth(i,k)+delta_t_min)*p(i,k-1)-(dth(i, &
     1307            k-1)+delta_t_min)*p(i,k))/(dth(i,k)-dth(i,k-1))
     1308        END IF
     1309      END DO
     1310    END DO
     1311
     1312
     1313    DO i = 1, klon
     1314      IF (wk_adv(i)) THEN
     1315        ptop(i) = ptop_new(i)
     1316      END IF
     1317    END DO
     1318
     1319    DO k = klev, 1, -1
     1320      DO i = 1, klon
     1321        IF (wk_adv(i)) THEN !!! nrlmd
     1322          IF (ph(i,k+1)<ptop(i)) ktop(i) = k
     1323        END IF
     1324      END DO
     1325    END DO
     1326
     1327    ! 5/ Set deltatw & deltaqw to 0 above kupper
     1328
     1329    DO k = 1, klev
     1330      DO i = 1, klon
     1331        IF (wk_adv(i) .AND. k>=kupper(i)) THEN
     1332          deltatw(i, k) = 0.
     1333          deltaqw(i, k) = 0.
     1334        END IF
     1335      END DO
     1336    END DO
     1337
     1338
     1339    ! -------------Cstar computation---------------------------------
     1340    DO i = 1, klon
     1341      IF (wk_adv(i)) THEN !!! nrlmd
     1342        sum_thu(i) = 0.
     1343        sum_tu(i) = 0.
     1344        sum_qu(i) = 0.
     1345        sum_thvu(i) = 0.
     1346        sum_dth(i) = 0.
     1347        sum_dq(i) = 0.
     1348        sum_rho(i) = 0.
     1349        sum_dtdwn(i) = 0.
     1350        sum_dqdwn(i) = 0.
     1351
     1352        av_thu(i) = 0.
     1353        av_tu(i) = 0.
     1354        av_qu(i) = 0.
     1355        av_thvu(i) = 0.
     1356        av_dth(i) = 0.
     1357        av_dq(i) = 0.
     1358        av_rho(i) = 0.
     1359        av_dtdwn(i) = 0.
     1360        av_dqdwn(i) = 0.
     1361      END IF
     1362    END DO
     1363
     1364    ! Integrals (and wake top level number)
     1365    ! --------------------------------------
     1366
     1367    ! Initialize sum_thvu to 1st level virt. pot. temp.
     1368
     1369    DO i = 1, klon
     1370      IF (wk_adv(i)) THEN !!! nrlmd
     1371        z(i) = 1.
     1372        dz(i) = 1.
     1373        sum_thvu(i) = thu(i, 1)*(1.+eps*qu(i,1))*dz(i)
     1374        sum_dth(i) = 0.
     1375      END IF
     1376    END DO
     1377
     1378    DO k = 1, klev
     1379      DO i = 1, klon
     1380        IF (wk_adv(i)) THEN !!! nrlmd
     1381          dz(i) = -(max(ph(i,k+1),ptop(i))-ph(i,k))/(rho(i,k)*rg)
     1382          IF (dz(i)>0) THEN
     1383            z(i) = z(i) + dz(i)
     1384            sum_thu(i) = sum_thu(i) + thu(i, k)*dz(i)
     1385            sum_tu(i) = sum_tu(i) + tu(i, k)*dz(i)
     1386            sum_qu(i) = sum_qu(i) + qu(i, k)*dz(i)
     1387            sum_thvu(i) = sum_thvu(i) + thu(i, k)*(1.+eps*qu(i,k))*dz(i)
     1388            sum_dth(i) = sum_dth(i) + dth(i, k)*dz(i)
     1389            sum_dq(i) = sum_dq(i) + deltaqw(i, k)*dz(i)
     1390            sum_rho(i) = sum_rho(i) + rhow(i, k)*dz(i)
     1391            sum_dtdwn(i) = sum_dtdwn(i) + dtdwn(i, k)*dz(i)
     1392            sum_dqdwn(i) = sum_dqdwn(i) + dqdwn(i, k)*dz(i)
     1393          END IF
     1394        END IF
     1395      END DO
     1396    END DO
     1397
     1398    DO i = 1, klon
     1399      IF (wk_adv(i)) THEN !!! nrlmd
     1400        hw0(i) = z(i)
     1401      END IF
     1402    END DO
     1403
     1404
     1405    ! - WAPE and mean forcing computation
     1406    ! ---------------------------------------
     1407
     1408    ! ---------------------------------------
     1409
     1410    ! Means
     1411
     1412    DO i = 1, klon
     1413      IF (wk_adv(i)) THEN !!! nrlmd
     1414        av_thu(i) = sum_thu(i)/hw0(i)
     1415        av_tu(i) = sum_tu(i)/hw0(i)
     1416        av_qu(i) = sum_qu(i)/hw0(i)
     1417        av_thvu(i) = sum_thvu(i)/hw0(i)
     1418        av_dth(i) = sum_dth(i)/hw0(i)
     1419        av_dq(i) = sum_dq(i)/hw0(i)
     1420        av_rho(i) = sum_rho(i)/hw0(i)
     1421        av_dtdwn(i) = sum_dtdwn(i)/hw0(i)
     1422        av_dqdwn(i) = sum_dqdwn(i)/hw0(i)
     1423
     1424        wape(i) = -rg*hw0(i)*(av_dth(i)+eps*(av_thu(i)*av_dq(i)+av_dth(i)* &
     1425          av_qu(i)+av_dth(i)*av_dq(i)))/av_thvu(i)
     1426      END IF
     1427    END DO
     1428
     1429    ! Filter out bad wakes
     1430
     1431    DO k = 1, klev
     1432      DO i = 1, klon
     1433        IF (wk_adv(i)) THEN !!! nrlmd
     1434          IF (wape(i)<0.) THEN
     1435            deltatw(i, k) = 0.
     1436            deltaqw(i, k) = 0.
     1437            dth(i, k) = 0.
     1438          END IF
     1439        END IF
     1440      END DO
     1441    END DO
     1442
     1443    DO i = 1, klon
     1444      IF (wk_adv(i)) THEN !!! nrlmd
     1445        IF (wape(i)<0.) THEN
     1446          wape(i) = 0.
     1447          cstar(i) = 0.
     1448          hw(i) = hwmin
     1449          sigmaw(i) = max(sigmad, sigd_con(i))
     1450          fip(i) = 0.
     1451          gwake(i) = .FALSE.
     1452        ELSE
     1453          cstar(i) = stark*sqrt(2.*wape(i))
     1454          gwake(i) = .TRUE.
     1455        END IF
     1456      END IF
     1457    END DO
     1458
     1459  END DO ! end sub-timestep loop
     1460
     1461  ! -----------------------------------------------------------------
     1462  ! Get back to tendencies per second
     1463
     1464  DO k = 1, klev
     1465    DO i = 1, klon
     1466
     1467      ! cc nrlmd        IF ( wk_adv(i) .AND. k .LE. kupper(i)) THEN
     1468      IF (ok_qx_qw(i) .AND. k<=kupper(i)) THEN
     1469        ! cc
     1470        dtls(i, k) = dtls(i, k)/dtime
     1471        dqls(i, k) = dqls(i, k)/dtime
     1472        d_deltatw2(i, k) = d_deltatw2(i, k)/dtime
     1473        d_deltaqw2(i, k) = d_deltaqw2(i, k)/dtime
     1474        d_deltat_gw(i, k) = d_deltat_gw(i, k)/dtime
     1475        ! c      print*,'k,dqls,omg,entr,detr',k,dqls(i,k),omg(i,k),entr(i,k)
     1476        ! c     $         ,death_rate(i)*sigmaw(i)
     1477      END IF
     1478    END DO
     1479  END DO
     1480
     1481
     1482  ! ----------------------------------------------------------
     1483  ! Determine wake final state; recompute wape, cstar, ktop;
     1484  ! filter out bad wakes.
     1485  ! ----------------------------------------------------------
     1486
     1487  ! 2.1 - Undisturbed area and Wake integrals
     1488  ! ---------------------------------------------------------
     1489
     1490  DO i = 1, klon
     1491    ! cc nrlmd       if (wk_adv(i)) then !!! nrlmd
     1492    IF (ok_qx_qw(i)) THEN
     1493      ! cc
    3691494      z(i) = 0.
    370       ktop(i)=0
    371       kupper(i) = 0
    3721495      sum_thu(i) = 0.
    3731496      sum_tu(i) = 0.
     
    3811504
    3821505      av_thu(i) = 0.
    383       av_tu(i) =0.
    384       av_qu(i) =0.
     1506      av_tu(i) = 0.
     1507      av_qu(i) = 0.
    3851508      av_thvu(i) = 0.
    3861509      av_dth(i) = 0.
    3871510      av_dq(i) = 0.
    388       av_rho(i) =0.
    389       av_dtdwn(i) =0.
     1511      av_rho(i) = 0.
     1512      av_dtdwn(i) = 0.
    3901513      av_dqdwn(i) = 0.
    391       ENDDO
    392 c
    393 c Distance between wakes
    394        DO i = 1,klon
    395         LL(i) = (1-sqrt(sigmaw(i)))/sqrt(wdens(i))
    396        ENDDO
    397 C Potential temperatures and humidity
    398 c----------------------------------------------------------
    399       DO k =1,klev
    400        DO i=1, klon
    401 !        write(*,*)'wake 1',i,k,rd,te(i,k)
    402         rho(i,k) = p(i,k)/(rd*te(i,k))
    403 !        write(*,*)'wake 2',rho(i,k)
    404         IF(k .eq. 1) THEN
    405 !        write(*,*)'wake 3',i,k,rd,te(i,k)
    406           rhoh(i,k) = ph(i,k)/(rd*te(i,k))
    407 !        write(*,*)'wake 4',i,k,rd,te(i,k)
    408           zhh(i,k)=0
     1514    END IF
     1515  END DO
     1516  ! Potential temperatures and humidity
     1517  ! ----------------------------------------------------------
     1518
     1519  DO k = 1, klev
     1520    DO i = 1, klon
     1521      ! cc nrlmd       IF ( wk_adv(i)) THEN
     1522      IF (ok_qx_qw(i)) THEN
     1523        ! cc
     1524        rho(i, k) = p(i, k)/(rd*te(i,k))
     1525        IF (k==1) THEN
     1526          rhoh(i, k) = ph(i, k)/(rd*te(i,k))
     1527          zhh(i, k) = 0
    4091528        ELSE
    410 !          write(*,*)'wake 5',rd,(te(i,k)+te(i,k-1))
    411           rhoh(i,k) = ph(i,k)*2./(rd*(te(i,k)+te(i,k-1)))
    412 !          write(*,*)'wake 6',(-rhoh(i,k)*RG)+zhh(i,k-1)
    413           zhh(i,k)=(ph(i,k)-ph(i,k-1))/(-rhoh(i,k)*RG)+zhh(i,k-1)
    414         ENDIF
    415 !          write(*,*)'wake 7',ppi(i,k)
    416         the(i,k) = te(i,k)/ppi(i,k)
    417         thu(i,k) = (te(i,k) - deltatw(i,k)*sigmaw(i))/ppi(i,k)
    418         tu(i,k) = te(i,k) - deltatw(i,k)*sigmaw(i)
    419         qu(i,k)  =  qe(i,k) - deltaqw(i,k)*sigmaw(i)
    420 !          write(*,*)'wake 8',(rd*(te(i,k)+deltatw(i,k)))
    421         rhow(i,k) = p(i,k)/(rd*(te(i,k)+deltatw(i,k)))
    422         dth(i,k) = deltatw(i,k)/ppi(i,k)
    423        ENDDO
    424       ENDDO
    425        
    426       DO k = 1, klev-1
    427       DO i=1, klon
    428         IF(k.eq.1) THEN
    429           N2(i,k)=0
    430         ELSE
    431           N2(i,k)=amax1(0.,-RG**2/the(i,k)*rho(i,k)*(the(i,k+1)-
    432      $            the(i,k-1))/(p(i,k+1)-p(i,k-1)))
    433         ENDIF
    434         ZH(i,k)=(zhh(i,k)+zhh(i,k+1))/2
    435 
    436         Cgw(i,k)=sqrt(N2(i,k))*ZH(i,k)
    437         Tgw(i,k)=coefgw*Cgw(i,k)/LL(i)
    438       ENDDO
    439       ENDDO
    440 
    441       DO i=1, klon
    442       N2(i,klev)=0
    443       ZH(i,klev)=0
    444       Cgw(i,klev)=0
    445       Tgw(i,klev)=0
    446       ENDDO
    447 
    448 c  Calcul de la masse volumique moyenne de la colonne   (bdlmd)
    449 c-----------------------------------------------------------------
    450 
    451       DO k=1,klev
    452        DO i=1, klon
    453         epaisseur1(i,k)=0.
    454         epaisseur2(i,k)=0.
    455        ENDDO
    456       ENDDO
    457 
    458       DO i=1, klon
    459       epaisseur1(i,1)= -(ph(i,2)-ph(i,1))/(rho(i,1)*rg)+1.
    460       epaisseur2(i,1)= -(ph(i,2)-ph(i,1))/(rho(i,1)*rg)+1.
    461       rhow_moyen(i,1) = rhow(i,1)
    462       ENDDO
    463 
    464       DO k = 2, klev
    465       DO i=1, klon
    466         epaisseur1(i,k)= -(ph(i,k+1)-ph(i,k))/(rho(i,k)*rg) +1.
    467         epaisseur2(i,k)=epaisseur2(i,k-1)+epaisseur1(i,k)
    468         rhow_moyen(i,k) = (rhow_moyen(i,k-1)*epaisseur2(i,k-1)+
    469      $                 rhow(i,k)*epaisseur1(i,k))/epaisseur2(i,k)
    470       ENDDO
    471       ENDDO
    472 
    473 C
    474 C Choose an integration bound well above wake top
    475 c-----------------------------------------------------------------
    476 c
    477 C       Pupper = 50000.  ! melting level
    478 c       Pupper = 60000.
    479 c       Pupper = 80000.  ! essais pour case_e
    480        DO i = 1,klon
    481         Pupper(i) = 0.6*ph(i,1)
    482         Pupper(i) = max(Pupper(i), 45000.)
    483 ccc        Pupper(i) = 60000.
    484        ENDDO
    485 
    486 C
    487 C    Determine Wake top pressure (Ptop) from buoyancy integral
    488 C    --------------------------------------------------------
    489 c
    490 c-1/ Pressure of the level where dth becomes less than delta_t_min.
    491 
    492       DO i=1,klon
    493       ptop_provis(i)=ph(i,1)
    494       ENDDO
    495       DO k= 2,klev
    496       DO i=1,klon
    497 c
    498 cIM v3JYG; ptop_provis(i).LT. ph(i,1)
    499 c
    500         IF (dth(i,k) .GT. -delta_t_min .and.
    501      $      dth(i,k-1).LT. -delta_t_min .and.
    502      $      ptop_provis(i).EQ. ph(i,1)) THEN
    503           ptop_provis(i) = ((dth(i,k)+delta_t_min)*p(i,k-1)
    504      $          - (dth(i,k-1)+delta_t_min)*p(i,k)) /
    505      $          (dth(i,k) - dth(i,k-1))
    506         ENDIF
    507       ENDDO
    508       ENDDO
    509 
    510 c-2/ dth integral
    511 
    512       DO i=1,klon
    513       sum_dth(i) = 0.
    514       dthmin(i) = -delta_t_min
    515       z(i) = 0.
    516       ENDDO
    517 
    518       DO k = 1,klev
    519       DO i=1,klon
    520         dz(i) = -(amax1(ph(i,k+1),ptop_provis(i))-Ph(i,k))/(rho(i,k)*rg)
    521         IF (dz(i) .gt. 0) THEN
    522           z(i) = z(i)+dz(i)
    523           sum_dth(i) = sum_dth(i) + dth(i,k)*dz(i)
    524           dthmin(i) = amin1(dthmin(i),dth(i,k))
    525         ENDIF
    526       ENDDO
    527       ENDDO
    528 
    529 c-3/ height of triangle with area= sum_dth and base = dthmin
    530 
    531       DO i=1,klon
    532       hw0(i) = 2.*sum_dth(i)/amin1(dthmin(i),-0.5)
    533       hw0(i) = amax1(hwmin,hw0(i))
    534       ENDDO
    535 
    536 c-4/ now, get Ptop
    537 
    538       DO i=1,klon
    539       z(i) = 0.
    540       ptop(i) = ph(i,1)
    541       ENDDO
    542 
    543       DO k = 1,klev
    544       DO i=1,klon
    545         dz(i) = amin1(-(ph(i,k+1)-ph(i,k))/(rho(i,k)*rg),hw0(i)-z(i))
    546         IF (dz(i) .gt. 0) THEN
    547          z(i) = z(i)+dz(i)
    548          ptop(i) = ph(i,k)-rho(i,k)*rg*dz(i)
    549         ENDIF
    550       ENDDO
    551       ENDDO
    552 
    553 
    554 C-5/ Determination de ktop et kupper
    555 
    556       DO k=klev,1,-1
    557       DO i=1,klon
    558         IF (ph(i,k+1) .lt. ptop(i)) ktop(i)=k
    559         IF (ph(i,k+1) .lt. pupper(i)) kupper(i)=k
    560       ENDDO
    561       ENDDO
    562 
    563 c      On evite kupper = 1 et kupper = klev
    564       DO i=1,klon
    565         kupper(i) = max(kupper(i),2)
    566         kupper(i) = min(kupper(i),klev-1)
    567       ENDDO
    568 
    569 
    570 c-6/ Correct ktop and ptop
    571 
    572       DO i = 1,klon
    573         ptop_new(i)=ptop(i)
    574       ENDDO
    575       DO k= klev,2,-1
    576       DO i=1,klon
    577         IF (k .LE. ktop(i) .and.
    578      $      ptop_new(i) .EQ. ptop(i) .and.
    579      $      dth(i,k) .GT. -delta_t_min .and.
    580      $      dth(i,k-1).LT. -delta_t_min) THEN
    581           ptop_new(i) = ((dth(i,k)+delta_t_min)*p(i,k-1)
    582      $          - (dth(i,k-1)+delta_t_min)*p(i,k)) /
    583      $          (dth(i,k) - dth(i,k-1))
    584         ENDIF
    585       ENDDO
    586       ENDDO
    587 
    588       DO i=1,klon
    589         ptop(i) = ptop_new(i)
    590       ENDDO
    591 
    592       DO k=klev,1,-1
    593       DO i=1,klon
    594         IF (ph(i,k+1) .lt. ptop(i)) ktop(i)=k
    595       ENDDO
    596       ENDDO
    597 c
    598 c-5/ Set deltatw & deltaqw to 0 above kupper
    599 c
    600       DO k = 1,klev
    601       DO i=1,klon
    602        IF (k.GE. kupper(i)) THEN
    603         deltatw(i,k) = 0.
    604         deltaqw(i,k) = 0.
    605        ENDIF
    606       ENDDO
    607       ENDDO
    608 c
    609 C
    610 C Vertical gradient of LS omega
    611 C
    612       DO k = 1,klev
    613       DO i=1,klon
    614        IF (k.LE. kupper(i)) THEN
    615         dp_omgb(i,k) = (omgb(i,k+1) - omgb(i,k))/(ph(i,k+1)-ph(i,k))
    616        ENDIF
    617       ENDDO
    618       ENDDO
    619 C
    620 C Integrals (and wake top level number)
    621 C --------------------------------------
    622 C
    623 C Initialize sum_thvu to 1st level virt. pot. temp.
    624 
    625       DO i=1,klon
     1529          rhoh(i, k) = ph(i, k)*2./(rd*(te(i,k)+te(i,k-1)))
     1530          zhh(i, k) = (ph(i,k)-ph(i,k-1))/(-rhoh(i,k)*rg) + zhh(i, k-1)
     1531        END IF
     1532        the(i, k) = te(i, k)/ppi(i, k)
     1533        thu(i, k) = (te(i,k)-deltatw(i,k)*sigmaw(i))/ppi(i, k)
     1534        tu(i, k) = te(i, k) - deltatw(i, k)*sigmaw(i)
     1535        qu(i, k) = qe(i, k) - deltaqw(i, k)*sigmaw(i)
     1536        rhow(i, k) = p(i, k)/(rd*(te(i,k)+deltatw(i,k)))
     1537        dth(i, k) = deltatw(i, k)/ppi(i, k)
     1538      END IF
     1539    END DO
     1540  END DO
     1541
     1542  ! Integrals (and wake top level number)
     1543  ! -----------------------------------------------------------
     1544
     1545  ! Initialize sum_thvu to 1st level virt. pot. temp.
     1546
     1547  DO i = 1, klon
     1548    ! cc nrlmd       IF ( wk_adv(i)) THEN
     1549    IF (ok_qx_qw(i)) THEN
     1550      ! cc
    6261551      z(i) = 1.
    6271552      dz(i) = 1.
    628       sum_thvu(i) =  thu(i,1)*(1.+eps*qu(i,1))*dz(i)
     1553      sum_thvu(i) = thu(i, 1)*(1.+eps*qu(i,1))*dz(i)
    6291554      sum_dth(i) = 0.
    630       ENDDO
    631 
    632       DO k = 1,klev
    633       DO i=1,klon
     1555    END IF
     1556  END DO
     1557
     1558  DO k = 1, klev
     1559    DO i = 1, klon
     1560      ! cc nrlmd       IF ( wk_adv(i)) THEN
     1561      IF (ok_qx_qw(i)) THEN
     1562        ! cc
    6341563        dz(i) = -(amax1(ph(i,k+1),ptop(i))-ph(i,k))/(rho(i,k)*rg)
    635         IF (dz(i) .GT. 0) THEN
    636          z(i) = z(i)+dz(i)
    637          sum_thu(i) = sum_thu(i) + thu(i,k)*dz(i)
    638          sum_tu(i) = sum_tu(i) + tu(i,k)*dz(i)
    639          sum_qu(i) = sum_qu(i) + qu(i,k)*dz(i)
    640          sum_thvu(i) = sum_thvu(i) + thu(i,k)*(1.+eps*qu(i,k))*dz(i)
    641          sum_dth(i) = sum_dth(i) + dth(i,k)*dz(i)
    642          sum_dq(i) = sum_dq(i) + deltaqw(i,k)*dz(i)
    643          sum_rho(i) = sum_rho(i) + rhow(i,k)*dz(i)
    644          sum_dtdwn(i) = sum_dtdwn(i) + dtdwn(i,k)*dz(i)
    645          sum_dqdwn(i) = sum_dqdwn(i) + dqdwn(i,k)*dz(i)
    646         ENDIF
    647       ENDDO
    648       ENDDO
    649 c
    650       DO i=1,klon
    651         hw0(i) = z(i)
    652       ENDDO
    653 c
    654 C
    655 C 2.1 - WAPE and mean forcing computation
    656 C ---------------------------------------
    657 C
    658 C ---------------------------------------
    659 C
    660 C Means
    661 
    662       DO i=1,klon
     1564        IF (dz(i)>0) THEN
     1565          z(i) = z(i) + dz(i)
     1566          sum_thu(i) = sum_thu(i) + thu(i, k)*dz(i)
     1567          sum_tu(i) = sum_tu(i) + tu(i, k)*dz(i)
     1568          sum_qu(i) = sum_qu(i) + qu(i, k)*dz(i)
     1569          sum_thvu(i) = sum_thvu(i) + thu(i, k)*(1.+eps*qu(i,k))*dz(i)
     1570          sum_dth(i) = sum_dth(i) + dth(i, k)*dz(i)
     1571          sum_dq(i) = sum_dq(i) + deltaqw(i, k)*dz(i)
     1572          sum_rho(i) = sum_rho(i) + rhow(i, k)*dz(i)
     1573          sum_dtdwn(i) = sum_dtdwn(i) + dtdwn(i, k)*dz(i)
     1574          sum_dqdwn(i) = sum_dqdwn(i) + dqdwn(i, k)*dz(i)
     1575        END IF
     1576      END IF
     1577    END DO
     1578  END DO
     1579
     1580  DO i = 1, klon
     1581    ! cc nrlmd       IF ( wk_adv(i)) THEN
     1582    IF (ok_qx_qw(i)) THEN
     1583      ! cc
     1584      hw0(i) = z(i)
     1585    END IF
     1586  END DO
     1587
     1588  ! - WAPE and mean forcing computation
     1589  ! -------------------------------------------------------------
     1590
     1591  ! Means
     1592
     1593  DO i = 1, klon
     1594    ! cc nrlmd       IF ( wk_adv(i)) THEN
     1595    IF (ok_qx_qw(i)) THEN
     1596      ! cc
    6631597      av_thu(i) = sum_thu(i)/hw0(i)
    6641598      av_tu(i) = sum_tu(i)/hw0(i)
    6651599      av_qu(i) = sum_qu(i)/hw0(i)
    6661600      av_thvu(i) = sum_thvu(i)/hw0(i)
    667 c      av_thve = sum_thve/hw0
    6681601      av_dth(i) = sum_dth(i)/hw0(i)
    6691602      av_dq(i) = sum_dq(i)/hw0(i)
     
    6721605      av_dqdwn(i) = sum_dqdwn(i)/hw0(i)
    6731606
    674       wape(i) = - rg*hw0(i)*(av_dth(i)
    675      $     + eps*(av_thu(i)*av_dq(i)+av_dth(i)*av_qu(i)+av_dth(i)*
    676      $     av_dq(i) ))/av_thvu(i)
    677       ENDDO
    678 C
    679 C 2.2 Prognostic variable update
    680 C ------------------------------
    681 C
    682 C Filter out bad wakes
    683 
    684       DO k = 1,klev
    685        DO i=1,klon
    686         IF ( wape(i) .LT. 0.) THEN
    687           deltatw(i,k) = 0.
    688           deltaqw(i,k) = 0.
    689           dth(i,k) = 0.
    690         ENDIF
    691        ENDDO
    692       ENDDO
    693 c
    694       DO i=1,klon
    695       IF ( wape(i) .LT. 0.) THEN
    696         wape(i) = 0.
    697         Cstar(i) = 0.
     1607      wape2(i) = -rg*hw0(i)*(av_dth(i)+eps*(av_thu(i)*av_dq(i)+av_dth(i)* &
     1608        av_qu(i)+av_dth(i)*av_dq(i)))/av_thvu(i)
     1609    END IF
     1610  END DO
     1611
     1612  ! Prognostic variable update
     1613  ! ------------------------------------------------------------
     1614
     1615  ! Filter out bad wakes
     1616
     1617  DO k = 1, klev
     1618    DO i = 1, klon
     1619      ! cc nrlmd        IF ( wk_adv(i) .AND. wape2(i) .LT. 0.) THEN
     1620      IF (ok_qx_qw(i) .AND. wape2(i)<0.) THEN
     1621        ! cc
     1622        deltatw(i, k) = 0.
     1623        deltaqw(i, k) = 0.
     1624        dth(i, k) = 0.
     1625      END IF
     1626    END DO
     1627  END DO
     1628
     1629
     1630  DO i = 1, klon
     1631    ! cc nrlmd       IF ( wk_adv(i)) THEN
     1632    IF (ok_qx_qw(i)) THEN
     1633      ! cc
     1634      IF (wape2(i)<0.) THEN
     1635        wape2(i) = 0.
     1636        cstar2(i) = 0.
    6981637        hw(i) = hwmin
    699         sigmaw(i) = amax1(sigmad,sigd_con(i))
     1638        sigmaw(i) = amax1(sigmad, sigd_con(i))
    7001639        fip(i) = 0.
    7011640        gwake(i) = .FALSE.
    7021641      ELSE
    703         Cstar(i) = stark*sqrt(2.*wape(i))
     1642        IF (prt_level>=10) PRINT *, 'wape2>0'
     1643        cstar2(i) = stark*sqrt(2.*wape2(i))
    7041644        gwake(i) = .TRUE.
    705       ENDIF
    706       ENDDO
    707 
    708 c
    709 c Check qx and qw positivity
    710 c --------------------------
    711       DO i = 1,klon
    712        q0_min(i)=min(  (qe(i,1)-sigmaw(i)*deltaqw(i,1)),
    713      $              (qe(i,1)+(1.-sigmaw(i))*deltaqw(i,1))  )
    714       ENDDO
    715       DO k = 2,klev
    716       DO i = 1,klon
    717         q1_min(i)=min(  (qe(i,k)-sigmaw(i)*deltaqw(i,k)),
    718      $              (qe(i,k)+(1.-sigmaw(i))*deltaqw(i,k))  )
    719         IF (q1_min(i).le.q0_min(i)) THEN
    720           q0_min(i)=q1_min(i)
    721         ENDIF
    722       ENDDO
    723       ENDDO
    724 c
    725       DO i = 1,klon
    726        OK_qx_qw(i) = q0_min(i) .GE. 0.
    727        alpha(i) = 1.
    728       ENDDO
    729 c
    730 CC -----------------------------------------------------------------
    731 C    Sub-time-stepping
    732 C    -----------------
    733 C
    734       nsub=10
    735       dtimesub=dtime/nsub
    736 c
    737 c------------------------------------------------------------
    738       DO isubstep = 1,nsub
    739 c------------------------------------------------------------
    740 c
    741 c wk_adv is the logical flag enabling wake evolution in the time advance loop
    742       DO i = 1,klon
    743        wk_adv(i) = OK_qx_qw(i) .AND. alpha(i) .GE. 1.
    744       ENDDO
    745 c
    746 ccc nrlmd   Ajout d'un recalcul de wdens dans le cas d'un entrainement négatif de ktop à kupper --------
    747 ccc           On calcule pour cela une densité wdens0 pour laquelle on aurait un entrainement nul ---
    748       DO i=1,klon
    749 cc       print *,' isubstep,wk_adv(i),cstar(i),wape(i) ',
    750 cc     $           isubstep,wk_adv(i),cstar(i),wape(i)
    751         IF (wk_adv(i) .AND. cstar(i).GT.0.01) THEN
    752            omg(i,kupper(i)+1) = - Rg*amdwn(i,kupper(i)+1)/sigmaw(i)
    753      $                + Rg*amup(i,kupper(i)+1)/(1.-sigmaw(i))
    754            wdens0 = ( sigmaw(i) / (4.*3.14) ) *
    755      $     ( (1.-sigmaw(i)) * omg(i,kupper(i)+1) /
    756      $     ( (ph(i,1)-pupper(i)) * cstar(i) )  ) **(2)
    757          IF ( wdens(i) .LE. wdens0*1.1 ) THEN
    758             wdens(i) = wdens0
    759          ENDIF
    760 cc         print*,'omg(i,kupper(i)+1),wdens0,wdens(i),cstar(i)
    761 cc     $     ,ph(i,1)-pupper(i)',
    762 cc     $             omg(i,kupper(i)+1),wdens0,wdens(i),cstar(i)
    763 cc     $     ,ph(i,1)-pupper(i)
    764         ENDIF
    765       ENDDO
    766 
    767 ccc nrlmd
    768 
    769       DO i=1,klon
    770        IF (wk_adv(i)) THEN
    771         gfl(i) = 2.*sqrt(3.14*wdens(i)*sigmaw(i))
    772         sigmaw(i)=amin1(sigmaw(i),sigmaw_max)
    773        ENDIF
    774       ENDDO
    775       DO i=1,klon
    776         IF (wk_adv(i)) THEN
    777 ccc nrlmd          Introduction du taux de mortalité des poches et test sur sigmaw_max=0.4
    778 ccc         d_sigmaw(i) = gfl(i)*Cstar(i)*dtimesub
    779            IF (sigmaw(i).ge.sigmaw_max) THEN
    780            death_rate(i)=gfl(i)*Cstar(i)/sigmaw(i)
    781            ELSE
    782              death_rate(i)=0.
    783            END IF
    784         d_sigmaw(i) = gfl(i)*Cstar(i)*dtimesub
    785      $               - death_rate(i)*sigmaw(i)*dtimesub
    786 c     $              - nat_rate(i)*sigmaw(i)*dtimesub
    787 cc        print*, 'd_sigmaw(i),sigmaw(i),gfl(i),Cstar(i),wape(i),
    788 cc     $  death_rate(i),ktop(i),kupper(i)',
    789 cc     $                 d_sigmaw(i),sigmaw(i),gfl(i),Cstar(i),wape(i),
    790 cc     $  death_rate(i),ktop(i),kupper(i)
    791 
    792 c        sigmaw(i) =sigmaw(i) + gfl(i)*Cstar(i)*dtimesub
    793 c        sigmaw(i) =min(sigmaw(i),0.99)     !!!!!!!!
    794 c        wdens = wdens0/(10.*sigmaw)
    795 c        sigmaw =max(sigmaw,sigd_con)
    796 c        sigmaw =max(sigmaw,sigmad)
    797         ENDIF
    798       ENDDO
    799 C
    800 C
    801 c calcul de la difference de vitesse verticale poche - zone non perturbee
    802 cIM 060208 differences par rapport au code initial; init. a 0 dp_deltomg
    803 cIM 060208 et omg sur les niveaux de 1 a klev+1, alors que avant l'on definit
    804 cIM 060208 au niveau k=1..?
    805       DO k= 1,klev
    806       DO i = 1,klon
    807       if (wk_adv(i)) THEN !!! nrlmd
    808         dp_deltomg(i,k)=0.
    809       end if
    810       ENDDO
    811       ENDDO
    812       DO k= 1,klev+1
    813       DO i = 1,klon
    814       if (wk_adv(i)) THEN !!! nrlmd
    815         omg(i,k)=0.
    816       end if
    817       ENDDO
    818       ENDDO
    819 c
    820       DO i=1,klon
    821         IF (wk_adv(i)) THEN
    822         z(i)= 0.
    823         omg(i,1) = 0.
    824         dp_deltomg(i,1) = -(gfl(i)*Cstar(i))/(sigmaw(i) * (1-sigmaw(i)))
    825         ENDIF
    826       ENDDO
    827 c
    828       DO k= 2,klev
    829       DO i = 1,klon
    830        IF( wk_adv(i) .AND. k .LE. ktop(i)) THEN
    831           dz(i) = -(ph(i,k)-ph(i,k-1))/(rho(i,k-1)*rg)
    832           z(i) = z(i)+dz(i)
    833           dp_deltomg(i,k)= dp_deltomg(i,1)
    834           omg(i,k)= dp_deltomg(i,1)*z(i)
    835        ENDIF
    836       ENDDO
    837       ENDDO
    838 c
    839       DO i = 1,klon
    840         IF (wk_adv(i)) THEN
    841         dztop(i)=-(ptop(i)-ph(i,ktop(i)))/(rho(i,ktop(i))*rg)
    842         ztop(i) = z(i)+dztop(i)
    843         omgtop(i)=dp_deltomg(i,1)*ztop(i)
    844         ENDIF
    845       ENDDO
    846 c
    847 c        -----------------
    848 c        From m/s to Pa/s
    849 c        -----------------
    850 c
    851        DO i=1,klon
    852         IF (wk_adv(i)) THEN
    853         omgtop(i) = -rho(i,ktop(i))*rg*omgtop(i)
    854         dp_deltomg(i,1) = omgtop(i)/(ptop(i)-ph(i,1))
    855         ENDIF
    856        ENDDO
    857 c
    858       DO k= 1,klev
    859       DO i = 1,klon
    860        IF( wk_adv(i) .AND. k .LE. ktop(i)) THEN
    861           omg(i,k) = - rho(i,k)*rg*omg(i,k)
    862           dp_deltomg(i,k) = dp_deltomg(i,1)
    863        ENDIF
    864       ENDDO
    865       ENDDO
    866 c
    867 c   raccordement lineaire de omg de ptop a pupper
    868 
    869       DO i=1,klon
    870       IF ( wk_adv(i) .AND. kupper(i) .GT. ktop(i)) THEN
    871         omg(i,kupper(i)+1) = - Rg*amdwn(i,kupper(i)+1)/sigmaw(i)
    872      $                + Rg*amup(i,kupper(i)+1)/(1.-sigmaw(i))
    873         dp_deltomg(i,kupper(i)) = (omgtop(i)-omg(i,kupper(i)+1))/
    874      $                     (ptop(i)-pupper(i))
    875       ENDIF
    876       ENDDO
    877 c
    878 cc      DO i=1,klon
    879 cc        print*,'Pente entre 0 et kupper (référence)'
    880 cc     $        ,omg(i,kupper(i)+1)/(pupper(i)-ph(i,1))
    881 cc        print*,'Pente entre ktop et kupper'
    882 cc     $        ,(omg(i,kupper(i)+1)-omgtop(i))/(pupper(i)-ptop(i))
    883 cc      ENDDO
    884 cc
    885       DO k= 1,klev
    886       DO i = 1,klon
    887        IF( wk_adv(i) .AND. k .GT. ktop(i) .AND. k .LE. kupper(i)) THEN
    888           dp_deltomg(i,k) = dp_deltomg(i,kupper(i))
    889           omg(i,k) = omgtop(i)+(ph(i,k)-ptop(i))*dp_deltomg(i,kupper(i))
    890        ENDIF
    891       ENDDO
    892       ENDDO
    893 ccc nrlmd
    894 cc      DO i=1,klon
    895 cc      print*,'deltaw_ktop,deltaw_conv',omgtop(i),omg(i,kupper(i)+1)
    896 cc      END DO
    897 ccc
    898 c
    899 c
    900 c--    Compute wake average vertical velocity omgbw
    901 c
    902 c
    903       DO k = 1,klev+1
    904       DO i=1,klon
    905         IF ( wk_adv(i)) THEN
    906         omgbw(i,k) = omgb(i,k)+(1.-sigmaw(i))*omg(i,k)
    907         ENDIF
    908       ENDDO
    909       ENDDO
    910 c--    and its vertical gradient dp_omgbw
    911 c
    912       DO k = 1,klev
    913       DO i=1,klon
    914         IF ( wk_adv(i)) THEN
    915         dp_omgbw(i,k) = (omgbw(i,k+1)-omgbw(i,k))/(ph(i,k+1)-ph(i,k))
    916         ENDIF
    917       ENDDO
    918       ENDDO
    919 C
    920 c--    Upstream coefficients for omgb velocity
    921 c--    (alpha_up(k) is the coefficient of the value at level k)
    922 c--    (1-alpha_up(k) is the coefficient of the value at level k-1)
    923       DO k = 1,klev
    924       DO i=1,klon
    925         IF ( wk_adv(i)) THEN
    926          alpha_up(i,k) = 0.
    927          IF (omgb(i,k) .GT. 0.) alpha_up(i,k) = 1.
    928         ENDIF
    929       ENDDO
    930       ENDDO
    931 
    932 c  Matrix expressing [The,deltatw] from  [Th1,Th2]
    933 
    934       DO i=1,klon
    935         IF ( wk_adv(i)) THEN
    936          RRe1(i) = 1.-sigmaw(i)
    937          RRe2(i) = sigmaw(i)
    938         ENDIF
    939       ENDDO
    940       RRd1 = -1.
    941       RRd2 = 1.
    942 c
    943 c--    Get [Th1,Th2], dth and [q1,q2]
    944 c
    945       DO k= 1,klev
    946       DO i = 1,klon
    947        IF( wk_adv(i) .AND. k .LE. kupper(i)+1) THEN
    948         dth(i,k) = deltatw(i,k)/ppi(i,k)
    949         Th1(i,k) = the(i,k) - sigmaw(i)     *dth(i,k)   ! undisturbed area
    950         Th2(i,k) = the(i,k) + (1.-sigmaw(i))*dth(i,k)   ! wake
    951         q1(i,k) = qe(i,k) - sigmaw(i)     *deltaqw(i,k) ! undisturbed area
    952         q2(i,k) = qe(i,k) + (1.-sigmaw(i))*deltaqw(i,k) ! wake
    953        ENDIF
    954       ENDDO
    955       ENDDO
    956 
    957       DO i=1,klon
    958        if (wk_adv(i)) then !!! nrlmd
    959        D_Th1(i,1) = 0.
    960        D_Th2(i,1) = 0.
    961        D_dth(i,1) = 0.
    962        D_q1(i,1) = 0.
    963        D_q2(i,1) = 0.
    964        D_dq(i,1) = 0.
    965        end if
    966       ENDDO
    967 
    968       DO k= 2,klev
    969       DO i = 1,klon
    970        IF( wk_adv(i) .AND. k .LE. kupper(i)+1) THEN
    971         D_Th1(i,k) = Th1(i,k-1)-Th1(i,k)
    972         D_Th2(i,k) = Th2(i,k-1)-Th2(i,k)
    973         D_dth(i,k) = dth(i,k-1)-dth(i,k)
    974         D_q1(i,k) = q1(i,k-1)-q1(i,k)
    975         D_q2(i,k) = q2(i,k-1)-q2(i,k)
    976         D_dq(i,k) = deltaqw(i,k-1)-deltaqw(i,k)
    977        ENDIF
    978       ENDDO
    979       ENDDO
    980 
    981       DO i=1,klon
    982         IF( wk_adv(i)) THEN
    983          omgbdth(i,1) = 0.
    984          omgbdq(i,1) = 0.
    985         ENDIF
    986       ENDDO
    987 
    988       DO k= 2,klev
    989       DO i = 1,klon
    990        IF( wk_adv(i) .AND. k .LE. kupper(i)+1) THEN  !   loop on interfaces
    991         omgbdth(i,k) = omgb(i,k)*(    dth(i,k-1) -     dth(i,k))
    992         omgbdq(i,k)  = omgb(i,k)*(deltaqw(i,k-1) - deltaqw(i,k))
    993        ENDIF
    994       ENDDO
    995       ENDDO
    996 c
    997 c-----------------------------------------------------------------
    998       DO k= 1,klev
    999       DO i = 1,klon
    1000        IF( wk_adv(i) .AND. k .LE. kupper(i)-1) THEN
    1001 c-----------------------------------------------------------------
    1002 c
    1003 c   Compute redistribution (advective) term
    1004 c
    1005          d_deltatw(i,k) =
    1006      $             dtimesub/(Ph(i,k)-Ph(i,k+1))*(
    1007      $       RRd1*omg(i,k  )*sigmaw(i)     *D_Th1(i,k)
    1008      $      -RRd2*omg(i,k+1)*(1.-sigmaw(i))*D_Th2(i,k+1)
    1009      $      -(1.-alpha_up(i,k))*omgbdth(i,k) - alpha_up(i,k+1)*
    1010      $      omgbdth(i,k+1))*ppi(i,k)
    1011 c         print*,'d_deltatw=',d_deltatw(i,k)
    1012 c
    1013          d_deltaqw(i,k) =
    1014      $             dtimesub/(Ph(i,k)-Ph(i,k+1))*(
    1015      $       RRd1*omg(i,k  )*sigmaw(i)     *D_q1(i,k)
    1016      $      -RRd2*omg(i,k+1)*(1.-sigmaw(i))*D_q2(i,k+1)
    1017      $      -(1.-alpha_up(i,k))*omgbdq(i,k) - alpha_up(i,k+1)*
    1018      $      omgbdq(i,k+1))
    1019 c         print*,'d_deltaqw=',d_deltaqw(i,k)
    1020 c
    1021 c   and increment large scale tendencies
    1022 c
    1023 
    1024 c
    1025 C
    1026 CC -----------------------------------------------------------------
    1027          d_te(i,k) =  dtimesub*(
    1028      $        ( RRe1(i)*omg(i,k  )*sigmaw(i)     *D_Th1(i,k)
    1029      $         -RRe2(i)*omg(i,k+1)*(1.-sigmaw(i))*D_Th2(i,k+1) )
    1030      $               /(Ph(i,k)-Ph(i,k+1))
    1031 ccc nrlmd     $         -sigmaw(i)*(1.-sigmaw(i))*dth(i,k)*dp_deltomg(i,k)
    1032      $         -sigmaw(i)*(1.-sigmaw(i))*dth(i,k)
    1033      $         *(omg(i,k)-omg(i,k+1))/(Ph(i,k)-Ph(i,k+1))
    1034 ccc
    1035      $                      )*ppi(i,k)
    1036 c
    1037          d_qe(i,k) =  dtimesub*(
    1038      $        ( RRe1(i)*omg(i,k  )*sigmaw(i)     *D_q1(i,k)
    1039      $         -RRe2(i)*omg(i,k+1)*(1.-sigmaw(i))*D_q2(i,k+1) )
    1040      $               /(Ph(i,k)-Ph(i,k+1))
    1041 ccc nrlmd     $         -sigmaw(i)*(1.-sigmaw(i))*deltaqw(i,k)*dp_deltomg(i,k)
    1042      $         -sigmaw(i)*(1.-sigmaw(i))*deltaqw(i,k)
    1043      $         *(omg(i,k)-omg(i,k+1))/(Ph(i,k)-Ph(i,k+1))
    1044 ccc
    1045      $                      )
    1046 ccc nrlmd
    1047        ELSE IF(wk_adv(i) .AND. k .EQ. kupper(i)) THEN
    1048          d_te(i,k) =  dtimesub*(
    1049      $       ( RRe1(i)*omg(i,k  )*sigmaw(i)     *D_Th1(i,k)
    1050      $        /(Ph(i,k)-Ph(i,k+1)))
    1051      $                       )*ppi(i,k)
    1052 
    1053          d_qe(i,k) =  dtimesub*(
    1054      $       ( RRe1(i)*omg(i,k  )*sigmaw(i)     *D_q1(i,k)       
    1055      $        /(Ph(i,k)-Ph(i,k+1)))
    1056      $                       )
    1057 
    1058        ENDIF
    1059 ccc
    1060       ENDDO
    1061       ENDDO
    1062 c------------------------------------------------------------------
    1063 C
    1064 C   Increment state variables
    1065 
    1066       DO k= 1,klev
    1067       DO i = 1,klon
    1068 ccc nrlmd       IF( wk_adv(i) .AND. k .LE. kupper(i)-1) THEN
    1069         IF( wk_adv(i) .AND. k .LE. kupper(i)) THEN
    1070 ccc
    1071 
    1072 
    1073 c
    1074 c Coefficient de répartition
    1075 
    1076         Crep(i,k)=Crep_sol*(ph(i,kupper(i))-ph(i,k))/(ph(i,kupper(i))
    1077      $          -ph(i,1))
    1078         Crep(i,k)=Crep(i,k)+Crep_upper*(ph(i,1)-ph(i,k))/(p(i,1)-
    1079      $          ph(i,kupper(i)))
    1080        
    1081 
    1082 c Reintroduce compensating subsidence term.
    1083 
    1084 c        dtKE(k)=(dtdwn(k)*Crep(k))/sigmaw
    1085 c        dtKE(k)=dtKE(k)-(dtdwn(k)*(1-Crep(k))+dta(k))
    1086 c     .                   /(1-sigmaw)
    1087 c        dqKE(k)=(dqdwn(k)*Crep(k))/sigmaw
    1088 c        dqKE(k)=dqKE(k)-(dqdwn(k)*(1-Crep(k))+dqa(k))
    1089 c     .                   /(1-sigmaw)
    1090 c
    1091 c        dtKE(k)=(dtdwn(k)*Crep(k)+(1-Crep(k))*dta(k))/sigmaw
    1092 c        dtKE(k)=dtKE(k)-(dtdwn(k)*(1-Crep(k))+dta(k)*Crep(k))
    1093 c     .                   /(1-sigmaw)
    1094 c        dqKE(k)=(dqdwn(k)*Crep(k)+(1-Crep(k))*dqa(k))/sigmaw
    1095 c        dqKE(k)=dqKE(k)-(dqdwn(k)*(1-Crep(k))+dqa(k)*Crep(k))
    1096 c     .                   /(1-sigmaw)
    1097 
    1098         dtKE(i,k)=(dtdwn(i,k)/sigmaw(i) - dta(i,k)/(1.-sigmaw(i)))
    1099         dqKE(i,k)=(dqdwn(i,k)/sigmaw(i) - dqa(i,k)/(1.-sigmaw(i)))
    1100 c        print*,'dtKE= ',dtKE(i,k),' dqKE= ',dqKE(i,k)
    1101 c
    1102         dtPBL(i,k)=(wdtPBL(i,k)/sigmaw(i) - udtPBL(i,k)/(1.-sigmaw(i)))
    1103         dqPBL(i,k)=(wdqPBL(i,k)/sigmaw(i) - udqPBL(i,k)/(1.-sigmaw(i)))
    1104 c        print*,'dtPBL= ',dtPBL(i,k),' dqPBL= ',dqPBL(i,k)
    1105 c
    1106 ccc nrlmd          Prise en compte du taux de mortalité
    1107 ccc               Définitions de entr, detr
    1108         detr(i,k)=0.
    1109 
    1110         entr(i,k)=detr(i,k)+gfl(i)*cstar(i)+
    1111      $          sigmaw(i)*(1.-sigmaw(i))*dp_deltomg(i,k)
    1112 
    1113         spread(i,k) = (entr(i,k)-detr(i,k))/sigmaw(i)
    1114 ccc        spread(i,k) = (1.-sigmaw(i))*dp_deltomg(i,k)+gfl(i)*Cstar(i)/
    1115 ccc     $  sigmaw(i)
    1116 
    1117 
    1118 c ajout d'un effet onde de gravité -Tgw(k)*deltatw(k) 03/02/06 YU Jingmei
    1119 
    1120 !      write(lunout,*)'wake.F ',i,k, dtimesub,d_deltat_gw(i,k),
    1121 !     &  Tgw(i,k),deltatw(i,k)
    1122         d_deltat_gw(i,k)=d_deltat_gw(i,k)-Tgw(i,k)*deltatw(i,k)*
    1123      $  dtimesub
    1124 !      write(lunout,*)'wake.F ',i,k, dtimesub,d_deltatw(i,k)
    1125         ff(i)=d_deltatw(i,k)/dtimesub
    1126 
    1127 c Sans GW
    1128 c
    1129 c        deltatw(k)=deltatw(k)+dtimesub*(ff+dtKE(k)-spread(k)*deltatw(k))
    1130 c
    1131 c GW formule 1
    1132 c
    1133 c        deltatw(k) = deltatw(k)+dtimesub*
    1134 c     $         (ff+dtKE(k) - spread(k)*deltatw(k)-Tgw(k)*deltatw(k))
    1135 c
    1136 c GW formule 2
    1137 
    1138         IF (dtimesub*Tgw(i,k).lt.1.e-10) THEN
    1139           d_deltatw(i,k) = dtimesub*
    1140      $       (ff(i)+dtKE(i,k)+dtPBL(i,k)
    1141 ccc     $       -spread(i,k)*deltatw(i,k)
    1142      $       - entr(i,k)*deltatw(i,k)/sigmaw(i)
    1143      $       - (death_rate(i)*sigmaw(i)+detr(i,k))*deltatw(i,k)
    1144      $       / (1.-sigmaw(i))
    1145 ccc
    1146      $       -Tgw(i,k)*deltatw(i,k))
     1645      END IF
     1646    END IF
     1647  END DO
     1648
     1649  DO i = 1, klon
     1650    ! cc nrlmd       IF ( wk_adv(i)) THEN
     1651    IF (ok_qx_qw(i)) THEN
     1652      ! cc
     1653      ktopw(i) = ktop(i)
     1654    END IF
     1655  END DO
     1656
     1657  DO i = 1, klon
     1658    ! cc nrlmd       IF ( wk_adv(i)) THEN
     1659    IF (ok_qx_qw(i)) THEN
     1660      ! cc
     1661      IF (ktopw(i)>0 .AND. gwake(i)) THEN
     1662
     1663        ! jyg1     Utilisation d'un h_efficace constant ( ~ feeding layer)
     1664        ! cc       heff = 600.
     1665        ! Utilisation de la hauteur hw
     1666        ! c       heff = 0.7*hw
     1667        heff(i) = hw(i)
     1668
     1669        fip(i) = 0.5*rho(i, ktopw(i))*cstar2(i)**3*heff(i)*2* &
     1670          sqrt(sigmaw(i)*wdens(i)*3.14)
     1671        fip(i) = alpk*fip(i)
     1672        ! jyg2
     1673      ELSE
     1674        fip(i) = 0.
     1675      END IF
     1676    END IF
     1677  END DO
     1678
     1679  ! Limitation de sigmaw
     1680
     1681  ! cc nrlmd
     1682  ! DO i=1,klon
     1683  ! IF (OK_qx_qw(i)) THEN
     1684  ! IF (sigmaw(i).GE.sigmaw_max) sigmaw(i)=sigmaw_max
     1685  ! ENDIF
     1686  ! ENDDO
     1687  ! cc
     1688  DO k = 1, klev
     1689    DO i = 1, klon
     1690
     1691      ! cc nrlmd      On maintient désormais constant sigmaw en régime
     1692      ! permanent
     1693      ! cc      IF ((sigmaw(i).GT.sigmaw_max).or.
     1694      IF (((wape(i)>=wape2(i)) .AND. (wape2(i)<=1.0)) .OR. (ktopw(i)<=2) .OR. &
     1695          .NOT. ok_qx_qw(i)) THEN
     1696        ! cc
     1697        dtls(i, k) = 0.
     1698        dqls(i, k) = 0.
     1699        deltatw(i, k) = 0.
     1700        deltaqw(i, k) = 0.
     1701      END IF
     1702    END DO
     1703  END DO
     1704
     1705  ! cc nrlmd      On maintient désormais constant sigmaw en régime permanent
     1706  DO i = 1, klon
     1707    IF (((wape(i)>=wape2(i)) .AND. (wape2(i)<=1.0)) .OR. (ktopw(i)<=2) .OR. &
     1708        .NOT. ok_qx_qw(i)) THEN
     1709      wape(i) = 0.
     1710      cstar(i) = 0.
     1711      hw(i) = hwmin
     1712      sigmaw(i) = sigmad
     1713      fip(i) = 0.
     1714    ELSE
     1715      wape(i) = wape2(i)
     1716      cstar(i) = cstar2(i)
     1717    END IF
     1718    ! c        print*,'wape wape2 ktopw OK_qx_qw =',
     1719    ! c     $          wape(i),wape2(i),ktopw(i),OK_qx_qw(i)
     1720  END DO
     1721
     1722
     1723  RETURN
     1724END SUBROUTINE wake
     1725
     1726SUBROUTINE wake_vec_modulation(nlon, nl, wk_adv, epsilon, qe, d_qe, deltaqw, &
     1727    d_deltaqw, sigmaw, d_sigmaw, alpha)
     1728  ! ------------------------------------------------------
     1729  ! Dtermination du coefficient alpha tel que les tendances
     1730  ! corriges alpha*d_G, pour toutes les grandeurs G, correspondent
     1731  ! a une humidite positive dans la zone (x) et dans la zone (w).
     1732  ! ------------------------------------------------------
     1733
     1734
     1735  ! Input
     1736  REAL qe(nlon, nl), d_qe(nlon, nl)
     1737  REAL deltaqw(nlon, nl), d_deltaqw(nlon, nl)
     1738  REAL sigmaw(nlon), d_sigmaw(nlon)
     1739  LOGICAL wk_adv(nlon)
     1740  INTEGER nl, nlon
     1741  ! Output
     1742  REAL alpha(nlon)
     1743  ! Internal variables
     1744  REAL zeta(nlon, nl)
     1745  REAL alpha1(nlon)
     1746  REAL x, a, b, c, discrim
     1747  REAL epsilon
     1748  ! DATA epsilon/1.e-15/
     1749
     1750  DO k = 1, nl
     1751    DO i = 1, nlon
     1752      IF (wk_adv(i)) THEN
     1753        IF ((deltaqw(i,k)+d_deltaqw(i,k))>=0.) THEN
     1754          zeta(i, k) = 0.
    11471755        ELSE
    1148            d_deltatw(i,k) = 1/Tgw(i,k)*(1-exp(-dtimesub*
    1149      $       Tgw(i,k)))*
    1150      $       (ff(i)+dtKE(i,k)+dtPBL(i,k)
    1151 ccc     $       -spread(i,k)*deltatw(i,k)
    1152      $       - entr(i,k)*deltatw(i,k)/sigmaw(i)
    1153      $       - (death_rate(i)*sigmaw(i)+detr(i,k))*deltatw(i,k)
    1154      $       / (1.-sigmaw(i))
    1155 ccc
    1156      $       -Tgw(i,k)*deltatw(i,k))
    1157         ENDIF
    1158 
    1159         dth(i,k) = deltatw(i,k)/ppi(i,k)
    1160 
    1161         gg(i)=d_deltaqw(i,k)/dtimesub
    1162 
    1163        d_deltaqw(i,k) = dtimesub*(gg(i)+ dqKE(i,k)+dqPBL(i,k)
    1164 ccc     $     -spread(i,k)*deltaqw(i,k))
    1165      $        - entr(i,k)*deltaqw(i,k)/sigmaw(i)
    1166      $        - (death_rate(i)*sigmaw(i)+detr(i,k))*deltaqw(i,k)
    1167      $        /(1.-sigmaw(i)))
    1168 ccc
    1169 
    1170 ccc nrlmd
    1171 ccc       d_deltatw2(i,k)=d_deltatw2(i,k)+d_deltatw(i,k)
    1172 ccc       d_deltaqw2(i,k)=d_deltaqw2(i,k)+d_deltaqw(i,k)
    1173 ccc
    1174        ENDIF
    1175       ENDDO
    1176       ENDDO
    1177 
    1178 C
    1179 C   Scale tendencies so that water vapour remains positive in w and x.
    1180 C
    1181       call wake_vec_modulation(klon,klev,wk_adv,epsilon,qe,d_qe,deltaqw,
    1182      $                d_deltaqw,sigmaw,d_sigmaw,alpha)
    1183 c
    1184 ccc nrlmd
    1185 cc      print*,'alpha'
    1186 cc      do i=1,klon
    1187 cc         print*,alpha(i)
    1188 cc      end do
    1189 ccc
    1190       DO k = 1,klev
    1191       DO i = 1,klon
    1192        IF( wk_adv(i) .AND. k .LE. kupper(i)) THEN
    1193         d_te(i,k)=alpha(i)*d_te(i,k)
    1194         d_qe(i,k)=alpha(i)*d_qe(i,k)
    1195         d_deltatw(i,k)=alpha(i)*d_deltatw(i,k)
    1196         d_deltaqw(i,k)=alpha(i)*d_deltaqw(i,k)
    1197         d_deltat_gw(i,k)=alpha(i)*d_deltat_gw(i,k)
    1198        ENDIF
    1199       ENDDO
    1200       ENDDO
    1201       DO i = 1,klon
    1202        IF( wk_adv(i)) THEN
    1203         d_sigmaw(i)=alpha(i)*d_sigmaw(i)
    1204        ENDIF
    1205       ENDDO
    1206 
    1207 C   Update large scale variables and wake variables
    1208 cIM 060208 manque DO i + remplace DO k=1,kupper(i)
    1209 cIM 060208     DO k = 1,kupper(i)
    1210       DO k= 1,klev
    1211       DO i = 1,klon
    1212        IF( wk_adv(i) .AND. k .LE. kupper(i)) THEN
    1213         dtls(i,k)=dtls(i,k)+d_te(i,k)
    1214         dqls(i,k)=dqls(i,k)+d_qe(i,k)
    1215 ccc nrlmd
    1216         d_deltatw2(i,k)=d_deltatw2(i,k)+d_deltatw(i,k)
    1217         d_deltaqw2(i,k)=d_deltaqw2(i,k)+d_deltaqw(i,k)
    1218 ccc
    1219        ENDIF
    1220       ENDDO
    1221       ENDDO
    1222       DO k= 1,klev
    1223       DO i = 1,klon
    1224        IF( wk_adv(i) .AND. k .LE. kupper(i)) THEN
    1225         te(i,k) = te0(i,k) + dtls(i,k)
    1226         qe(i,k) = qe0(i,k) + dqls(i,k)
    1227         the(i,k) = te(i,k)/ppi(i,k)
    1228         deltatw(i,k) = deltatw(i,k)+d_deltatw(i,k)
    1229         deltaqw(i,k) = deltaqw(i,k)+d_deltaqw(i,k)
    1230         dth(i,k) = deltatw(i,k)/ppi(i,k)
    1231 cc      print*,'k,qx,qw',k,qe(i,k)-sigmaw(i)*deltaqw(i,k)
    1232 cc     $        ,qe(i,k)+(1-sigmaw(i))*deltaqw(i,k)
    1233        ENDIF
    1234       ENDDO
    1235       ENDDO
    1236       DO i = 1,klon
    1237        IF( wk_adv(i)) THEN
    1238         sigmaw(i) = sigmaw(i)+d_sigmaw(i)
    1239        ENDIF
    1240       ENDDO
    1241 c
    1242 C
    1243 c     Determine Ptop from buoyancy integral
    1244 c     ---------------------------------------
    1245 c
    1246 c-     1/ Pressure of the level where dth changes sign.
    1247 c
    1248       DO i=1,klon
    1249        IF ( wk_adv(i)) THEN
    1250         Ptop_provis(i)=ph(i,1)
    1251        ENDIF
    1252       ENDDO
    1253 c
    1254       DO k= 2,klev
    1255       DO i=1,klon
    1256         IF ( wk_adv(i) .AND.
    1257      $       Ptop_provis(i) .EQ. ph(i,1) .AND.
    1258      $      dth(i,k) .GT. -delta_t_min .and.
    1259      $      dth(i,k-1).LT. -delta_t_min) THEN
    1260           Ptop_provis(i) = ((dth(i,k)+delta_t_min)*p(i,k-1)
    1261      $          - (dth(i,k-1)+delta_t_min)*p(i,k)) /(dth(i,k)
    1262      $          - dth(i,k-1))
    1263         ENDIF
    1264       ENDDO
    1265       ENDDO
    1266 c
    1267 c-     2/ dth integral
    1268 c
    1269       DO i=1,klon
    1270        if (wk_adv(i)) then !!! nrlmd
    1271        sum_dth(i) = 0.
    1272        dthmin(i) = -delta_t_min
    1273        z(i) = 0.
    1274        end if
    1275       ENDDO
    1276 
    1277       DO k = 1,klev
    1278       DO i=1,klon
    1279        IF ( wk_adv(i)) THEN
    1280         dz(i) = -(amax1(ph(i,k+1),Ptop_provis(i))-Ph(i,k))/(rho(i,k)*rg)
    1281         IF (dz(i) .gt. 0) THEN
    1282          z(i) = z(i)+dz(i)
    1283          sum_dth(i) = sum_dth(i) + dth(i,k)*dz(i)
    1284          dthmin(i) = amin1(dthmin(i),dth(i,k))
    1285         ENDIF
    1286        ENDIF
    1287       ENDDO
    1288       ENDDO
    1289 c
    1290 c-     3/ height of triangle with area= sum_dth and base = dthmin
    1291 
    1292       DO i=1,klon
    1293        IF ( wk_adv(i)) THEN
    1294          hw(i) = 2.*sum_dth(i)/amin1(dthmin(i),-0.5)
    1295          hw(i) = amax1(hwmin,hw(i))
    1296        ENDIF
    1297       ENDDO
    1298 c
    1299 c-     4/ now, get Ptop
    1300 c
    1301       DO i=1,klon
    1302        if (wk_adv(i)) then !!! nrlmd
    1303        ktop(i) = 0
    1304        z(i)=0.
    1305        end if
    1306       ENDDO
    1307 c
    1308       DO k = 1,klev
    1309       DO i=1,klon
    1310        IF ( wk_adv(i)) THEN
    1311         dz(i) = amin1(-(ph(i,k+1)-Ph(i,k))/(rho(i,k)*rg),hw(i)-z(i))
    1312         IF (dz(i) .gt. 0) THEN
    1313          z(i) = z(i)+dz(i)
    1314          Ptop(i) = Ph(i,k)-rho(i,k)*rg*dz(i)
    1315          ktop(i) = k
    1316         ENDIF
    1317        ENDIF
    1318       ENDDO
    1319       ENDDO
    1320 c
    1321 c      4.5/Correct ktop and ptop
    1322 c
    1323       DO i=1,klon
    1324        IF ( wk_adv(i)) THEN
    1325         Ptop_new(i)=ptop(i)
    1326        ENDIF
    1327       ENDDO
    1328 c
    1329       DO k= klev,2,-1
    1330       DO i=1,klon
    1331 cIM v3JYG; IF (k .GE. ktop(i)
    1332        IF ( wk_adv(i) .AND.
    1333      $      k .LE. ktop(i) .AND.
    1334      $      ptop_new(i) .EQ. ptop(i) .AND.
    1335      $      dth(i,k) .GT. -delta_t_min .and.
    1336      $      dth(i,k-1).LT. -delta_t_min) THEN
    1337           Ptop_new(i) = ((dth(i,k)+delta_t_min)*p(i,k-1)
    1338      $          - (dth(i,k-1)+delta_t_min)*p(i,k)) /(dth(i,k)
    1339      $          - dth(i,k-1))
    1340         ENDIF
    1341       ENDDO
    1342       ENDDO
    1343 c
    1344 c
    1345       DO i=1,klon
    1346        IF ( wk_adv(i)) THEN
    1347         ptop(i) = ptop_new(i)
    1348        ENDIF
    1349       ENDDO
    1350 
    1351       DO k=klev,1,-1
    1352       DO i=1,klon
    1353       if (wk_adv(i)) then !!! nrlmd
    1354         IF (ph(i,k+1) .LT. ptop(i)) ktop(i)=k
    1355       end if
    1356       ENDDO
    1357       ENDDO
    1358 c
    1359 c      5/ Set deltatw & deltaqw to 0 above kupper
    1360 c
    1361       DO k = 1,klev
    1362       DO i=1,klon
    1363         IF ( wk_adv(i) .AND. k .GE. kupper(i)) THEN
    1364          deltatw(i,k) = 0.
    1365          deltaqw(i,k) = 0.
    1366         ENDIF
    1367       ENDDO
    1368       ENDDO
    1369 c
    1370 C
    1371 c-------------Cstar computation---------------------------------
    1372       DO i=1, klon
    1373        if (wk_adv(i)) then !!! nrlmd
    1374       sum_thu(i) = 0.
    1375       sum_tu(i) = 0.
    1376       sum_qu(i) = 0.
    1377       sum_thvu(i) = 0.
    1378       sum_dth(i) = 0.
    1379       sum_dq(i) = 0.
    1380       sum_rho(i) = 0.
    1381       sum_dtdwn(i) = 0.
    1382       sum_dqdwn(i) = 0.
    1383 
    1384       av_thu(i) = 0.
    1385       av_tu(i) =0.
    1386       av_qu(i) =0.
    1387       av_thvu(i) = 0.
    1388       av_dth(i) = 0.
    1389       av_dq(i) = 0.
    1390       av_rho(i) =0.
    1391       av_dtdwn(i) =0.
    1392       av_dqdwn(i) = 0.
    1393        end if
    1394       ENDDO
    1395 C
    1396 C Integrals (and wake top level number)
    1397 C --------------------------------------
    1398 C
    1399 C Initialize sum_thvu to 1st level virt. pot. temp.
    1400 
    1401       DO i=1,klon
    1402        if (wk_adv(i)) then !!! nrlmd
    1403       z(i) = 1.
    1404       dz(i) = 1.
    1405       sum_thvu(i) =  thu(i,1)*(1.+eps*qu(i,1))*dz(i)
    1406       sum_dth(i) = 0.
    1407        end if
    1408       ENDDO
    1409 
    1410       DO k = 1,klev
    1411       DO i=1,klon
    1412        if (wk_adv(i)) then !!! nrlmd
    1413         dz(i) = -(max(ph(i,k+1),ptop(i))-ph(i,k))/(rho(i,k)*rg)
    1414         IF (dz(i) .GT. 0) THEN
    1415          z(i) = z(i)+dz(i)
    1416          sum_thu(i) = sum_thu(i) + thu(i,k)*dz(i)
    1417          sum_tu(i) = sum_tu(i) + tu(i,k)*dz(i)
    1418          sum_qu(i) = sum_qu(i) + qu(i,k)*dz(i)
    1419          sum_thvu(i) = sum_thvu(i) + thu(i,k)*(1.+eps*qu(i,k))*dz(i)
    1420          sum_dth(i) = sum_dth(i) + dth(i,k)*dz(i)
    1421          sum_dq(i) = sum_dq(i) + deltaqw(i,k)*dz(i)
    1422          sum_rho(i) = sum_rho(i) + rhow(i,k)*dz(i)
    1423          sum_dtdwn(i) = sum_dtdwn(i) + dtdwn(i,k)*dz(i)
    1424          sum_dqdwn(i) = sum_dqdwn(i) + dqdwn(i,k)*dz(i)
    1425         ENDIF
    1426        end if
    1427       ENDDO
    1428       ENDDO
    1429 c
    1430       DO i=1,klon
    1431        if (wk_adv(i)) then !!! nrlmd
    1432         hw0(i) = z(i)
    1433        end if
    1434       ENDDO
    1435 c
    1436 C
    1437 C - WAPE and mean forcing computation
    1438 C ---------------------------------------
    1439 C
    1440 C ---------------------------------------
    1441 C
    1442 C Means
    1443 
    1444       DO i=1,klon
    1445        if (wk_adv(i)) then !!! nrlmd
    1446        av_thu(i) = sum_thu(i)/hw0(i)
    1447        av_tu(i) = sum_tu(i)/hw0(i)
    1448        av_qu(i) = sum_qu(i)/hw0(i)
    1449        av_thvu(i) = sum_thvu(i)/hw0(i)
    1450        av_dth(i) = sum_dth(i)/hw0(i)
    1451        av_dq(i) = sum_dq(i)/hw0(i)
    1452        av_rho(i) = sum_rho(i)/hw0(i)
    1453        av_dtdwn(i) = sum_dtdwn(i)/hw0(i)
    1454        av_dqdwn(i) = sum_dqdwn(i)/hw0(i)
    1455 c
    1456        wape(i) = - rg*hw0(i)*(av_dth(i)
    1457      $     + eps*(av_thu(i)*av_dq(i)+av_dth(i)*av_qu(i)+av_dth(i)*
    1458      $     av_dq(i) ))/av_thvu(i)
    1459        end if
    1460       ENDDO
    1461 C
    1462 C Filter out bad wakes
    1463 
    1464       DO k = 1,klev
    1465        DO i=1,klon
    1466         if (wk_adv(i)) then !!! nrlmd
    1467         IF ( wape(i) .LT. 0.) THEN
    1468           deltatw(i,k) = 0.
    1469           deltaqw(i,k) = 0.
    1470           dth(i,k) = 0.
    1471         ENDIF
    1472         end if
    1473        ENDDO
    1474       ENDDO
    1475 c
    1476       DO i=1,klon
    1477       if (wk_adv(i)) then !!! nrlmd
    1478       IF ( wape(i) .LT. 0.) THEN
    1479         wape(i) = 0.
    1480         Cstar(i) = 0.
    1481         hw(i) = hwmin
    1482         sigmaw(i) = max(sigmad,sigd_con(i))
    1483         fip(i) = 0.
    1484         gwake(i) = .FALSE.
     1756          zeta(i, k) = 1.
     1757        END IF
     1758      END IF
     1759    END DO
     1760    DO i = 1, nlon
     1761      IF (wk_adv(i)) THEN
     1762        x = qe(i, k) + (zeta(i,k)-sigmaw(i))*deltaqw(i, k) + d_qe(i, k) + &
     1763          (zeta(i,k)-sigmaw(i))*d_deltaqw(i, k) - d_sigmaw(i)*(deltaqw(i,k)+ &
     1764          d_deltaqw(i,k))
     1765        a = -d_sigmaw(i)*d_deltaqw(i, k)
     1766        b = d_qe(i, k) + (zeta(i,k)-sigmaw(i))*d_deltaqw(i, k) - &
     1767          deltaqw(i, k)*d_sigmaw(i)
     1768        c = qe(i, k) + (zeta(i,k)-sigmaw(i))*deltaqw(i, k) + epsilon
     1769        discrim = b*b - 4.*a*c
     1770        ! print*, 'x, a, b, c, discrim', x, a, b, c, discrim
     1771        IF (a+b>=0.) THEN !! Condition suffisante pour la positivité de ovap
     1772          alpha1(i) = 1.
     1773        ELSE
     1774          IF (x>=0.) THEN
     1775            alpha1(i) = 1.
     1776          ELSE
     1777            IF (a>0.) THEN
     1778              alpha1(i) = 0.9*min((2.*c)/(-b+sqrt(discrim)), (-b+sqrt(discrim &
     1779                ))/(2.*a))
     1780            ELSE IF (a==0.) THEN
     1781              alpha1(i) = 0.9*(-c/b)
     1782            ELSE
     1783              ! print*,'a,b,c discrim',a,b,c discrim
     1784              alpha1(i) = 0.9*max((2.*c)/(-b+sqrt(discrim)), (-b+sqrt(discrim &
     1785                ))/(2.*a))
     1786            END IF
     1787          END IF
     1788        END IF
     1789        alpha(i) = min(alpha(i), alpha1(i))
     1790      END IF
     1791    END DO
     1792  END DO
     1793
     1794  RETURN
     1795END SUBROUTINE wake_vec_modulation
     1796
     1797SUBROUTINE wake_scal(p, ph, ppi, dtime, sigd_con, te0, qe0, omgb, dtdwn, &
     1798    dqdwn, amdwn, amup, dta, dqa, wdtpbl, wdqpbl, udtpbl, udqpbl, deltatw, &
     1799    deltaqw, dth, hw, sigmaw, wape, fip, gfl, dtls, dqls, ktopw, omgbdth, &
     1800    dp_omgb, wdens, tu, qu, dtke, dqke, dtpbl, dqpbl, omg, dp_deltomg, &
     1801    spread, cstar, d_deltat_gw, d_deltatw2, d_deltaqw2)
     1802
     1803  ! **************************************************************
     1804  ! *
     1805  ! WAKE                                                        *
     1806  ! retour a un Pupper fixe                                *
     1807  ! *
     1808  ! written by   :  GRANDPEIX Jean-Yves   09/03/2000            *
     1809  ! modified by :   ROEHRIG Romain        01/29/2007            *
     1810  ! **************************************************************
     1811
     1812  USE dimphy
     1813  IMPLICIT NONE
     1814  ! ============================================================================
     1815
     1816
     1817  ! But : Decrire le comportement des poches froides apparaissant dans les
     1818  ! grands systemes convectifs, et fournir l'energie disponible pour
     1819  ! le declenchement de nouvelles colonnes convectives.
     1820
     1821  ! Variables d'etat : deltatw    : ecart de temperature wake-undisturbed
     1822  ! area
     1823  ! deltaqw    : ecart d'humidite wake-undisturbed area
     1824  ! sigmaw     : fraction d'aire occupee par la poche.
     1825
     1826  ! Variable de sortie :
     1827
     1828  ! wape : WAke Potential Energy
     1829  ! fip  : Front Incident Power (W/m2) - ALP
     1830  ! gfl  : Gust Front Length per unit area (m-1)
     1831  ! dtls : large scale temperature tendency due to wake
     1832  ! dqls : large scale humidity tendency due to wake
     1833  ! hw   : hauteur de la poche
     1834  ! dp_omgb : vertical gradient of large scale omega
     1835  ! omgbdth: flux of Delta_Theta transported by LS omega
     1836  ! dtKE   : differential heating (wake - unpertubed)
     1837  ! dqKE   : differential moistening (wake - unpertubed)
     1838  ! omg    : Delta_omg =vertical velocity diff. wake-undist. (Pa/s)
     1839  ! dp_deltomg  : vertical gradient of omg (s-1)
     1840  ! spread  : spreading term in dt_wake and dq_wake
     1841  ! deltatw     : updated temperature difference (T_w-T_u).
     1842  ! deltaqw     : updated humidity difference (q_w-q_u).
     1843  ! sigmaw      : updated wake fractional area.
     1844  ! d_deltat_gw : delta T tendency due to GW
     1845
     1846  ! Variables d'entree :
     1847
     1848  ! aire : aire de la maille
     1849  ! te0  : temperature dans l'environnement  (K)
     1850  ! qe0  : humidite dans l'environnement     (kg/kg)
     1851  ! omgb : vitesse verticale moyenne sur la maille (Pa/s)
     1852  ! dtdwn: source de chaleur due aux descentes (K/s)
     1853  ! dqdwn: source d'humidite due aux descentes (kg/kg/s)
     1854  ! dta  : source de chaleur due courants satures et detrain  (K/s)
     1855  ! dqa  : source d'humidite due aux courants satures et detra (kg/kg/s)
     1856  ! amdwn: flux de masse total des descentes, par unite de
     1857  ! surface de la maille (kg/m2/s)
     1858  ! amup : flux de masse total des ascendances, par unite de
     1859  ! surface de la maille (kg/m2/s)
     1860  ! p    : pressions aux milieux des couches (Pa)
     1861  ! ph   : pressions aux interfaces (Pa)
     1862  ! ppi  : (p/p_0)**kapa (adim)
     1863  ! dtime: increment temporel (s)
     1864
     1865  ! Variables internes :
     1866
     1867  ! rhow : masse volumique de la poche froide
     1868  ! rho  : environment density at P levels
     1869  ! rhoh : environment density at Ph levels
     1870  ! te   : environment temperature | may change within
     1871  ! qe   : environment humidity    | sub-time-stepping
     1872  ! the  : environment potential temperature
     1873  ! thu  : potential temperature in undisturbed area
     1874  ! tu   :  temperature  in undisturbed area
     1875  ! qu   : humidity in undisturbed area
     1876  ! dp_omgb: vertical gradient og LS omega
     1877  ! omgbw  : wake average vertical omega
     1878  ! dp_omgbw: vertical gradient of omgbw
     1879  ! omgbdq : flux of Delta_q transported by LS omega
     1880  ! dth  : potential temperature diff. wake-undist.
     1881  ! th1  : first pot. temp. for vertical advection (=thu)
     1882  ! th2  : second pot. temp. for vertical advection (=thw)
     1883  ! q1   : first humidity for vertical advection
     1884  ! q2   : second humidity for vertical advection
     1885  ! d_deltatw   : terme de redistribution pour deltatw
     1886  ! d_deltaqw   : terme de redistribution pour deltaqw
     1887  ! deltatw0   : deltatw initial
     1888  ! deltaqw0   : deltaqw initial
     1889  ! hw0    : hw initial
     1890  ! sigmaw0: sigmaw initial
     1891  ! amflux : horizontal mass flux through wake boundary
     1892  ! wdens  : number of wakes per unit area (3D) or per
     1893  ! unit length (2D)
     1894  ! Tgw    : 1 sur la période de onde de gravité
     1895  ! Cgw    : vitesse de propagation de onde de gravité
     1896  ! LL     : distance entre 2 poches
     1897
     1898  ! -------------------------------------------------------------------------
     1899  ! Déclaration de variables
     1900  ! -------------------------------------------------------------------------
     1901
     1902  include "dimensions.h"
     1903  ! ccc      include "dimphy.h"
     1904  include "YOMCST.h"
     1905  include "cvthermo.h"
     1906  include "iniprint.h"
     1907
     1908  ! Arguments en entree
     1909  ! --------------------
     1910
     1911  REAL p(klev), ph(klev+1), ppi(klev)
     1912  REAL dtime
     1913  REAL te0(klev), qe0(klev)
     1914  REAL omgb(klev+1)
     1915  REAL dtdwn(klev), dqdwn(klev)
     1916  REAL wdtpbl(klev), wdqpbl(klev)
     1917  REAL udtpbl(klev), udqpbl(klev)
     1918  REAL amdwn(klev), amup(klev)
     1919  REAL dta(klev), dqa(klev)
     1920  REAL sigd_con
     1921
     1922  ! Sorties
     1923  ! --------
     1924
     1925  REAL deltatw(klev), deltaqw(klev), dth(klev)
     1926  REAL tu(klev), qu(klev)
     1927  REAL dtls(klev), dqls(klev)
     1928  REAL dtke(klev), dqke(klev)
     1929  REAL dtpbl(klev), dqpbl(klev)
     1930  REAL spread(klev)
     1931  REAL d_deltatgw(klev)
     1932  REAL d_deltatw2(klev), d_deltaqw2(klev)
     1933  REAL omgbdth(klev+1), omg(klev+1)
     1934  REAL dp_omgb(klev), dp_deltomg(klev)
     1935  REAL d_deltat_gw(klev)
     1936  REAL hw, sigmaw, wape, fip, gfl, cstar
     1937  INTEGER ktopw
     1938
     1939  ! Variables internes
     1940  ! -------------------
     1941
     1942  ! Variables à fixer
     1943  REAL alon
     1944  REAL coefgw
     1945  REAL wdens0, wdens
     1946  REAL stark
     1947  REAL alpk
     1948  REAL delta_t_min
     1949  REAL pupper
     1950  INTEGER nsub
     1951  REAL dtimesub
     1952  REAL sigmad, hwmin
     1953
     1954  ! Variables de sauvegarde
     1955  REAL deltatw0(klev)
     1956  REAL deltaqw0(klev)
     1957  REAL te(klev), qe(klev)
     1958  REAL sigmaw0, sigmaw1
     1959
     1960  ! Variables pour les GW
     1961  REAL ll
     1962  REAL n2(klev)
     1963  REAL cgw(klev)
     1964  REAL tgw(klev)
     1965
     1966  ! Variables liées au calcul de hw
     1967  REAL ptop_provis, ptop, ptop_new
     1968  REAL sum_dth
     1969  REAL dthmin
     1970  REAL z, dz, hw0
     1971  INTEGER ktop, kupper
     1972
     1973  ! Autres variables internes
     1974  INTEGER isubstep, k
     1975
     1976  REAL sum_thu, sum_tu, sum_qu, sum_thvu
     1977  REAL sum_dq, sum_rho
     1978  REAL sum_dtdwn, sum_dqdwn
     1979  REAL av_thu, av_tu, av_qu, av_thvu
     1980  REAL av_dth, av_dq, av_rho
     1981  REAL av_dtdwn, av_dqdwn
     1982
     1983  REAL rho(klev), rhoh(klev+1), rhow(klev)
     1984  REAL rhow_moyen(klev)
     1985  REAL zh(klev), zhh(klev+1)
     1986  REAL epaisseur1(klev), epaisseur2(klev)
     1987
     1988  REAL the(klev), thu(klev)
     1989
     1990  REAL d_deltatw(klev), d_deltaqw(klev)
     1991
     1992  REAL omgbw(klev+1), omgtop
     1993  REAL dp_omgbw(klev)
     1994  REAL ztop, dztop
     1995  REAL alpha_up(klev)
     1996
     1997  REAL rre1, rre2, rrd1, rrd2
     1998  REAL th1(klev), th2(klev), q1(klev), q2(klev)
     1999  REAL d_th1(klev), d_th2(klev), d_dth(klev)
     2000  REAL d_q1(klev), d_q2(klev), d_dq(klev)
     2001  REAL omgbdq(klev)
     2002
     2003  REAL ff, gg
     2004  REAL wape2, cstar2, heff
     2005
     2006  REAL crep(klev)
     2007  REAL crep_upper, crep_sol
     2008
     2009  ! -------------------------------------------------------------------------
     2010  ! Initialisations
     2011  ! -------------------------------------------------------------------------
     2012
     2013  ! print*, 'wake initialisations'
     2014
     2015  ! Essais d'initialisation avec sigmaw = 0.02 et hw = 10.
     2016  ! -------------------------------------------------------------------------
     2017
     2018  DATA sigmad, hwmin/.02, 10./
     2019
     2020  ! Longueur de maille (en m)
     2021  ! -------------------------------------------------------------------------
     2022
     2023  ! ALON = 3.e5
     2024  alon = 1.E6
     2025
     2026
     2027  ! Configuration de coefgw,stark,wdens (22/02/06 by YU Jingmei)
     2028
     2029  ! coefgw : Coefficient pour les ondes de gravité
     2030  ! stark : Coefficient k dans Cstar=k*sqrt(2*WAPE)
     2031  ! wdens : Densité de poche froide par maille
     2032  ! -------------------------------------------------------------------------
     2033
     2034  coefgw = 10
     2035  ! coefgw=1
     2036  ! wdens0 = 1.0/(alon**2)
     2037  wdens = 1.0/(alon**2)
     2038  stark = 0.50
     2039  ! CRtest
     2040  alpk = 0.1
     2041  ! alpk = 1.0
     2042  ! alpk = 0.5
     2043  ! alpk = 0.05
     2044  crep_upper = 0.9
     2045  crep_sol = 1.0
     2046
     2047
     2048  ! Minimum value for |T_wake - T_undist|. Used for wake top definition
     2049  ! -------------------------------------------------------------------------
     2050
     2051  delta_t_min = 0.2
     2052
     2053
     2054  ! 1. - Save initial values and initialize tendencies
     2055  ! --------------------------------------------------
     2056
     2057  DO k = 1, klev
     2058    deltatw0(k) = deltatw(k)
     2059    deltaqw0(k) = deltaqw(k)
     2060    te(k) = te0(k)
     2061    qe(k) = qe0(k)
     2062    dtls(k) = 0.
     2063    dqls(k) = 0.
     2064    d_deltat_gw(k) = 0.
     2065    d_deltatw2(k) = 0.
     2066    d_deltaqw2(k) = 0.
     2067  END DO
     2068  ! sigmaw1=sigmaw
     2069  ! IF (sigd_con.GT.sigmaw1) THEN
     2070  ! print*, 'sigmaw,sigd_con', sigmaw, sigd_con
     2071  ! ENDIF
     2072  sigmaw = max(sigmaw, sigd_con)
     2073  sigmaw = max(sigmaw, sigmad)
     2074  sigmaw = min(sigmaw, 0.99)
     2075  sigmaw0 = sigmaw
     2076  ! wdens=wdens0/(10.*sigmaw)
     2077  ! IF (sigd_con.GT.sigmaw1) THEN
     2078  ! print*, 'sigmaw1,sigd1', sigmaw, sigd_con
     2079  ! ENDIF
     2080
     2081  ! 2. - Prognostic part
     2082  ! =========================================================
     2083
     2084  ! print *, 'prognostic wake computation'
     2085
     2086
     2087  ! 2.1 - Undisturbed area and Wake integrals
     2088  ! ---------------------------------------------------------
     2089
     2090  z = 0.
     2091  ktop = 0
     2092  kupper = 0
     2093  sum_thu = 0.
     2094  sum_tu = 0.
     2095  sum_qu = 0.
     2096  sum_thvu = 0.
     2097  sum_dth = 0.
     2098  sum_dq = 0.
     2099  sum_rho = 0.
     2100  sum_dtdwn = 0.
     2101  sum_dqdwn = 0.
     2102
     2103  av_thu = 0.
     2104  av_tu = 0.
     2105  av_qu = 0.
     2106  av_thvu = 0.
     2107  av_dth = 0.
     2108  av_dq = 0.
     2109  av_rho = 0.
     2110  av_dtdwn = 0.
     2111  av_dqdwn = 0.
     2112
     2113  ! Potential temperatures and humidity
     2114  ! ----------------------------------------------------------
     2115
     2116  DO k = 1, klev
     2117    rho(k) = p(k)/(rd*te(k))
     2118    IF (k==1) THEN
     2119      rhoh(k) = ph(k)/(rd*te(k))
     2120      zhh(k) = 0
     2121    ELSE
     2122      rhoh(k) = ph(k)*2./(rd*(te(k)+te(k-1)))
     2123      zhh(k) = (ph(k)-ph(k-1))/(-rhoh(k)*rg) + zhh(k-1)
     2124    END IF
     2125    the(k) = te(k)/ppi(k)
     2126    thu(k) = (te(k)-deltatw(k)*sigmaw)/ppi(k)
     2127    tu(k) = te(k) - deltatw(k)*sigmaw
     2128    qu(k) = qe(k) - deltaqw(k)*sigmaw
     2129    rhow(k) = p(k)/(rd*(te(k)+deltatw(k)))
     2130    dth(k) = deltatw(k)/ppi(k)
     2131    ll = (1-sqrt(sigmaw))/sqrt(wdens)
     2132  END DO
     2133
     2134  DO k = 1, klev - 1
     2135    IF (k==1) THEN
     2136      n2(k) = 0
     2137    ELSE
     2138      n2(k) = max(0., -rg**2/the(k)*rho(k)*(the(k+1)-the(k-1))/(p(k+ &
     2139        1)-p(k-1)))
     2140    END IF
     2141    zh(k) = (zhh(k)+zhh(k+1))/2
     2142
     2143    cgw(k) = sqrt(n2(k))*zh(k)
     2144    tgw(k) = coefgw*cgw(k)/ll
     2145  END DO
     2146
     2147  n2(klev) = 0
     2148  zh(klev) = 0
     2149  cgw(klev) = 0
     2150  tgw(klev) = 0
     2151
     2152  ! Calcul de la masse volumique moyenne de la colonne
     2153  ! -----------------------------------------------------------------
     2154
     2155  DO k = 1, klev
     2156    epaisseur1(k) = 0.
     2157    epaisseur2(k) = 0.
     2158  END DO
     2159
     2160  epaisseur1(1) = -(ph(2)-ph(1))/(rho(1)*rg) + 1.
     2161  epaisseur2(1) = -(ph(2)-ph(1))/(rho(1)*rg) + 1.
     2162  rhow_moyen(1) = rhow(1)
     2163
     2164  DO k = 2, klev
     2165    epaisseur1(k) = -(ph(k+1)-ph(k))/(rho(k)*rg) + 1.
     2166    epaisseur2(k) = epaisseur2(k-1) + epaisseur1(k)
     2167    rhow_moyen(k) = (rhow_moyen(k-1)*epaisseur2(k-1)+rhow(k)*epaisseur1(k))/ &
     2168      epaisseur2(k)
     2169  END DO
     2170
     2171
     2172  ! Choose an integration bound well above wake top
     2173  ! -----------------------------------------------------------------
     2174
     2175  ! Pupper = 50000.  ! melting level
     2176  pupper = 60000.
     2177  ! Pupper = 70000.
     2178
     2179
     2180  ! Determine Wake top pressure (Ptop) from buoyancy integral
     2181  ! -----------------------------------------------------------------
     2182
     2183  ! -1/ Pressure of the level where dth becomes less than delta_t_min.
     2184
     2185  ptop_provis = ph(1)
     2186  DO k = 2, klev
     2187    IF (dth(k)>-delta_t_min .AND. dth(k-1)<-delta_t_min) THEN
     2188      ptop_provis = ((dth(k)+delta_t_min)*p(k-1)-(dth(k- &
     2189        1)+delta_t_min)*p(k))/(dth(k)-dth(k-1))
     2190      GO TO 25
     2191    END IF
     2192  END DO
     219325 CONTINUE
     2194
     2195  ! -2/ dth integral
     2196
     2197  sum_dth = 0.
     2198  dthmin = -delta_t_min
     2199  z = 0.
     2200
     2201  DO k = 1, klev
     2202    dz = -(max(ph(k+1),ptop_provis)-ph(k))/(rho(k)*rg)
     2203    IF (dz<=0) GO TO 40
     2204    z = z + dz
     2205    sum_dth = sum_dth + dth(k)*dz
     2206    dthmin = min(dthmin, dth(k))
     2207  END DO
     220840 CONTINUE
     2209
     2210  ! -3/ height of triangle with area= sum_dth and base = dthmin
     2211
     2212  hw0 = 2.*sum_dth/min(dthmin, -0.5)
     2213  hw0 = max(hwmin, hw0)
     2214
     2215  ! -4/ now, get Ptop
     2216
     2217  z = 0.
     2218  ptop = ph(1)
     2219
     2220  DO k = 1, klev
     2221    dz = min(-(ph(k+1)-ph(k))/(rho(k)*rg), hw0-z)
     2222    IF (dz<=0) GO TO 45
     2223    z = z + dz
     2224    ptop = ph(k) - rho(k)*rg*dz
     2225  END DO
     222645 CONTINUE
     2227
     2228
     2229  ! -5/ Determination de ktop et kupper
     2230
     2231  DO k = klev, 1, -1
     2232    IF (ph(k+1)<ptop) ktop = k
     2233    IF (ph(k+1)<pupper) kupper = k
     2234  END DO
     2235
     2236  ! -6/ Correct ktop and ptop
     2237
     2238  ptop_new = ptop
     2239  DO k = ktop, 2, -1
     2240    IF (dth(k)>-delta_t_min .AND. dth(k-1)<-delta_t_min) THEN
     2241      ptop_new = ((dth(k)+delta_t_min)*p(k-1)-(dth(k-1)+delta_t_min)*p(k))/ &
     2242        (dth(k)-dth(k-1))
     2243      GO TO 225
     2244    END IF
     2245  END DO
     2246225 CONTINUE
     2247
     2248  ptop = ptop_new
     2249
     2250  DO k = klev, 1, -1
     2251    IF (ph(k+1)<ptop) ktop = k
     2252  END DO
     2253
     2254  ! Set deltatw & deltaqw to 0 above kupper
     2255  ! -----------------------------------------------------------
     2256
     2257  DO k = kupper, klev
     2258    deltatw(k) = 0.
     2259    deltaqw(k) = 0.
     2260  END DO
     2261
     2262
     2263  ! Vertical gradient of LS omega
     2264  ! ------------------------------------------------------------
     2265
     2266  DO k = 1, kupper
     2267    dp_omgb(k) = (omgb(k+1)-omgb(k))/(ph(k+1)-ph(k))
     2268  END DO
     2269
     2270
     2271  ! Integrals (and wake top level number)
     2272  ! -----------------------------------------------------------
     2273
     2274  ! Initialize sum_thvu to 1st level virt. pot. temp.
     2275
     2276  z = 1.
     2277  dz = 1.
     2278  sum_thvu = thu(1)*(1.+eps*qu(1))*dz
     2279  sum_dth = 0.
     2280
     2281  DO k = 1, klev
     2282    dz = -(max(ph(k+1),ptop)-ph(k))/(rho(k)*rg)
     2283    IF (dz<=0) GO TO 50
     2284    z = z + dz
     2285    sum_thu = sum_thu + thu(k)*dz
     2286    sum_tu = sum_tu + tu(k)*dz
     2287    sum_qu = sum_qu + qu(k)*dz
     2288    sum_thvu = sum_thvu + thu(k)*(1.+eps*qu(k))*dz
     2289    sum_dth = sum_dth + dth(k)*dz
     2290    sum_dq = sum_dq + deltaqw(k)*dz
     2291    sum_rho = sum_rho + rhow(k)*dz
     2292    sum_dtdwn = sum_dtdwn + dtdwn(k)*dz
     2293    sum_dqdwn = sum_dqdwn + dqdwn(k)*dz
     2294  END DO
     229550 CONTINUE
     2296
     2297  hw0 = z
     2298
     2299  ! 2.1 - WAPE and mean forcing computation
     2300  ! -------------------------------------------------------------
     2301
     2302  ! Means
     2303
     2304  av_thu = sum_thu/hw0
     2305  av_tu = sum_tu/hw0
     2306  av_qu = sum_qu/hw0
     2307  av_thvu = sum_thvu/hw0
     2308  ! av_thve = sum_thve/hw0
     2309  av_dth = sum_dth/hw0
     2310  av_dq = sum_dq/hw0
     2311  av_rho = sum_rho/hw0
     2312  av_dtdwn = sum_dtdwn/hw0
     2313  av_dqdwn = sum_dqdwn/hw0
     2314
     2315  wape = -rg*hw0*(av_dth+eps*(av_thu*av_dq+av_dth*av_qu+av_dth*av_dq))/ &
     2316    av_thvu
     2317
     2318  ! 2.2 Prognostic variable update
     2319  ! ------------------------------------------------------------
     2320
     2321  ! Filter out bad wakes
     2322
     2323  IF (wape<0.) THEN
     2324    IF (prt_level>=10) PRINT *, 'wape<0'
     2325    wape = 0.
     2326    hw = hwmin
     2327    sigmaw = max(sigmad, sigd_con)
     2328    fip = 0.
     2329    DO k = 1, klev
     2330      deltatw(k) = 0.
     2331      deltaqw(k) = 0.
     2332      dth(k) = 0.
     2333    END DO
     2334  ELSE
     2335    IF (prt_level>=10) PRINT *, 'wape>0'
     2336    cstar = stark*sqrt(2.*wape)
     2337  END IF
     2338
     2339  ! ------------------------------------------------------------------
     2340  ! Sub-time-stepping
     2341  ! ------------------------------------------------------------------
     2342
     2343  ! nsub=36
     2344  nsub = 10
     2345  dtimesub = dtime/nsub
     2346
     2347  ! ------------------------------------------------------------
     2348  DO isubstep = 1, nsub
     2349    ! ------------------------------------------------------------
     2350
     2351    ! print*,'---------------','substep=',isubstep,'-------------'
     2352
     2353    ! Evolution of sigmaw
     2354
     2355
     2356    gfl = 2.*sqrt(3.14*wdens*sigmaw)
     2357
     2358    sigmaw = sigmaw + gfl*cstar*dtimesub
     2359    sigmaw = min(sigmaw, 0.99) !!!!!!!!
     2360    ! wdens = wdens0/(10.*sigmaw)
     2361    ! sigmaw =max(sigmaw,sigd_con)
     2362    ! sigmaw =max(sigmaw,sigmad)
     2363
     2364    ! calcul de la difference de vitesse verticale poche - zone non perturbee
     2365
     2366    z = 0.
     2367    dp_deltomg(1:klev) = 0.
     2368    omg(1:klev+1) = 0.
     2369
     2370    omg(1) = 0.
     2371    dp_deltomg(1) = -(gfl*cstar)/(sigmaw*(1-sigmaw))
     2372
     2373    DO k = 2, ktop
     2374      dz = -(ph(k)-ph(k-1))/(rho(k-1)*rg)
     2375      z = z + dz
     2376      dp_deltomg(k) = dp_deltomg(1)
     2377      omg(k) = dp_deltomg(1)*z
     2378    END DO
     2379
     2380    dztop = -(ptop-ph(ktop))/(rho(ktop)*rg)
     2381    ztop = z + dztop
     2382    omgtop = dp_deltomg(1)*ztop
     2383
     2384
     2385    ! Conversion de la vitesse verticale de m/s a Pa/s
     2386
     2387    omgtop = -rho(ktop)*rg*omgtop
     2388    dp_deltomg(1) = omgtop/(ptop-ph(1))
     2389
     2390    DO k = 1, ktop
     2391      omg(k) = -rho(k)*rg*omg(k)
     2392      dp_deltomg(k) = dp_deltomg(1)
     2393    END DO
     2394
     2395    ! raccordement lineaire de omg de ptop a pupper
     2396
     2397    IF (kupper>ktop) THEN
     2398      omg(kupper+1) = -rg*amdwn(kupper+1)/sigmaw + rg*amup(kupper+1)/(1.- &
     2399        sigmaw)
     2400      dp_deltomg(kupper) = (omgtop-omg(kupper+1))/(ptop-pupper)
     2401      DO k = ktop + 1, kupper
     2402        dp_deltomg(k) = dp_deltomg(kupper)
     2403        omg(k) = omgtop + (ph(k)-ptop)*dp_deltomg(kupper)
     2404      END DO
     2405    END IF
     2406
     2407    ! Compute wake average vertical velocity omgbw
     2408
     2409    DO k = 1, klev + 1
     2410      omgbw(k) = omgb(k) + (1.-sigmaw)*omg(k)
     2411    END DO
     2412
     2413    ! and its vertical gradient dp_omgbw
     2414
     2415    DO k = 1, klev
     2416      dp_omgbw(k) = (omgbw(k+1)-omgbw(k))/(ph(k+1)-ph(k))
     2417    END DO
     2418
     2419
     2420    ! Upstream coefficients for omgb velocity
     2421    ! --    (alpha_up(k) is the coefficient of the value at level k)
     2422    ! --    (1-alpha_up(k) is the coefficient of the value at level k-1)
     2423
     2424    DO k = 1, klev
     2425      alpha_up(k) = 0.
     2426      IF (omgb(k)>0.) alpha_up(k) = 1.
     2427    END DO
     2428
     2429    ! Matrix expressing [The,deltatw] from  [Th1,Th2]
     2430
     2431    rre1 = 1. - sigmaw
     2432    rre2 = sigmaw
     2433    rrd1 = -1.
     2434    rrd2 = 1.
     2435
     2436    ! Get [Th1,Th2], dth and [q1,q2]
     2437
     2438    DO k = 1, kupper + 1
     2439      dth(k) = deltatw(k)/ppi(k)
     2440      th1(k) = the(k) - sigmaw*dth(k) ! undisturbed area
     2441      th2(k) = the(k) + (1.-sigmaw)*dth(k) ! wake
     2442      q1(k) = qe(k) - sigmaw*deltaqw(k) ! undisturbed area
     2443      q2(k) = qe(k) + (1.-sigmaw)*deltaqw(k) ! wake
     2444    END DO
     2445
     2446    d_th1(1) = 0.
     2447    d_th2(1) = 0.
     2448    d_dth(1) = 0.
     2449    d_q1(1) = 0.
     2450    d_q2(1) = 0.
     2451    d_dq(1) = 0.
     2452
     2453    DO k = 2, kupper + 1 !   loop on interfaces
     2454      d_th1(k) = th1(k-1) - th1(k)
     2455      d_th2(k) = th2(k-1) - th2(k)
     2456      d_dth(k) = dth(k-1) - dth(k)
     2457      d_q1(k) = q1(k-1) - q1(k)
     2458      d_q2(k) = q2(k-1) - q2(k)
     2459      d_dq(k) = deltaqw(k-1) - deltaqw(k)
     2460    END DO
     2461
     2462    omgbdth(1) = 0.
     2463    omgbdq(1) = 0.
     2464
     2465    DO k = 2, kupper + 1 !   loop on interfaces
     2466      omgbdth(k) = omgb(k)*(dth(k-1)-dth(k))
     2467      omgbdq(k) = omgb(k)*(deltaqw(k-1)-deltaqw(k))
     2468    END DO
     2469
     2470
     2471    ! -----------------------------------------------------------------
     2472    DO k = 1, kupper - 1
     2473      ! -----------------------------------------------------------------
     2474
     2475      ! Compute redistribution (advective) term
     2476
     2477      d_deltatw(k) = dtimesub/(ph(k)-ph(k+1))*(rrd1*omg(k)*sigmaw*d_th1(k)- &
     2478        rrd2*omg(k+1)*(1.-sigmaw)*d_th2(k+1)-(1.-alpha_up( &
     2479        k))*omgbdth(k)-alpha_up(k+1)*omgbdth(k+1))*ppi(k)
     2480      ! print*,'d_deltatw=',d_deltatw(k)
     2481
     2482      d_deltaqw(k) = dtimesub/(ph(k)-ph(k+1))*(rrd1*omg(k)*sigmaw*d_q1(k)- &
     2483        rrd2*omg(k+1)*(1.-sigmaw)*d_q2(k+1)-(1.-alpha_up( &
     2484        k))*omgbdq(k)-alpha_up(k+1)*omgbdq(k+1))
     2485      ! print*,'d_deltaqw=',d_deltaqw(k)
     2486
     2487      ! and increment large scale tendencies
     2488
     2489      dtls(k) = dtls(k) + dtimesub*((rre1*omg(k)*sigmaw*d_th1(k)-rre2*omg(k+ &
     2490        1)*(1.-sigmaw)*d_th2(k+1))/(ph(k)-ph(k+1))-sigmaw*(1.-sigmaw)*dth(k)* &
     2491        dp_deltomg(k))*ppi(k)
     2492      ! print*,'dtls=',dtls(k)
     2493
     2494      dqls(k) = dqls(k) + dtimesub*((rre1*omg(k)*sigmaw*d_q1(k)-rre2*omg(k+ &
     2495        1)*(1.-sigmaw)*d_q2(k+1))/(ph(k)-ph(k+1))-sigmaw*(1.-sigmaw)*deltaqw( &
     2496        k)*dp_deltomg(k))
     2497      ! print*,'dqls=',dqls(k)
     2498
     2499      ! -------------------------------------------------------------------
     2500    END DO
     2501    ! ------------------------------------------------------------------
     2502
     2503    ! Increment state variables
     2504
     2505    DO k = 1, kupper - 1
     2506
     2507      ! Coefficient de répartition
     2508
     2509      crep(k) = crep_sol*(ph(kupper)-ph(k))/(ph(kupper)-ph(1))
     2510      crep(k) = crep(k) + crep_upper*(ph(1)-ph(k))/(p(1)-ph(kupper))
     2511
     2512
     2513      ! Reintroduce compensating subsidence term.
     2514
     2515      ! dtKE(k)=(dtdwn(k)*Crep(k))/sigmaw
     2516      ! dtKE(k)=dtKE(k)-(dtdwn(k)*(1-Crep(k))+dta(k))
     2517      ! .                   /(1-sigmaw)
     2518      ! dqKE(k)=(dqdwn(k)*Crep(k))/sigmaw
     2519      ! dqKE(k)=dqKE(k)-(dqdwn(k)*(1-Crep(k))+dqa(k))
     2520      ! .                   /(1-sigmaw)
     2521
     2522      ! dtKE(k)=(dtdwn(k)*Crep(k)+(1-Crep(k))*dta(k))/sigmaw
     2523      ! dtKE(k)=dtKE(k)-(dtdwn(k)*(1-Crep(k))+dta(k)*Crep(k))
     2524      ! .                   /(1-sigmaw)
     2525      ! dqKE(k)=(dqdwn(k)*Crep(k)+(1-Crep(k))*dqa(k))/sigmaw
     2526      ! dqKE(k)=dqKE(k)-(dqdwn(k)*(1-Crep(k))+dqa(k)*Crep(k))
     2527      ! .                   /(1-sigmaw)
     2528
     2529      dtke(k) = (dtdwn(k)/sigmaw-dta(k)/(1.-sigmaw))
     2530      dqke(k) = (dqdwn(k)/sigmaw-dqa(k)/(1.-sigmaw))
     2531      ! print*,'dtKE=',dtKE(k)
     2532      ! print*,'dqKE=',dqKE(k)
     2533
     2534      dtpbl(k) = (wdtpbl(k)/sigmaw-udtpbl(k)/(1.-sigmaw))
     2535      dqpbl(k) = (wdqpbl(k)/sigmaw-udqpbl(k)/(1.-sigmaw))
     2536
     2537      spread(k) = (1.-sigmaw)*dp_deltomg(k) + gfl*cstar/sigmaw
     2538      ! print*,'spread=',spread(k)
     2539
     2540
     2541      ! ajout d'un effet onde de gravité -Tgw(k)*deltatw(k) 03/02/06 YU
     2542      ! Jingmei
     2543
     2544      d_deltat_gw(k) = d_deltat_gw(k) - tgw(k)*deltatw(k)*dtimesub
     2545      ! print*,'d_delta_gw=',d_deltat_gw(k)
     2546      ff = d_deltatw(k)/dtimesub
     2547
     2548      ! Sans GW
     2549
     2550      ! deltatw(k)=deltatw(k)+dtimesub*(ff+dtKE(k)-spread(k)*deltatw(k))
     2551
     2552      ! GW formule 1
     2553
     2554      ! deltatw(k) = deltatw(k)+dtimesub*
     2555      ! $         (ff+dtKE(k) - spread(k)*deltatw(k)-Tgw(k)*deltatw(k))
     2556
     2557      ! GW formule 2
     2558
     2559      IF (dtimesub*tgw(k)<1.E-10) THEN
     2560        deltatw(k) = deltatw(k) + dtimesub*(ff+dtke(k)+dtpbl(k)-spread(k)* &
     2561          deltatw(k)-tgw(k)*deltatw(k))
    14852562      ELSE
    1486         Cstar(i) = stark*sqrt(2.*wape(i))
    1487         gwake(i) = .TRUE.
    1488       ENDIF
    1489       end if
    1490       ENDDO
    1491 
    1492        ENDDO      ! end sub-timestep loop
    1493 C
    1494 C -----------------------------------------------------------------
    1495 c   Get back to tendencies per second
    1496 c
    1497       DO k = 1,klev
    1498       DO i=1,klon
    1499 
    1500 ccc nrlmd        IF ( wk_adv(i) .AND. k .LE. kupper(i)) THEN
    1501         IF ( OK_qx_qw(i) .AND. k .LE. kupper(i)) THEN
    1502 ccc
    1503          dtls(i,k) = dtls(i,k)/dtime
    1504          dqls(i,k) = dqls(i,k)/dtime
    1505          d_deltatw2(i,k)=d_deltatw2(i,k)/dtime
    1506          d_deltaqw2(i,k)=d_deltaqw2(i,k)/dtime
    1507          d_deltat_gw(i,k) = d_deltat_gw(i,k)/dtime
    1508 cc      print*,'k,dqls,omg,entr,detr',k,dqls(i,k),omg(i,k),entr(i,k)
    1509 cc     $         ,death_rate(i)*sigmaw(i)
    1510         ENDIF
    1511       ENDDO
    1512       ENDDO
    1513 
    1514 c
    1515 c----------------------------------------------------------
    1516 c   Determine wake final state; recompute wape, cstar, ktop;
    1517 c   filter out bad wakes.
    1518 c----------------------------------------------------------
    1519 c
    1520 C 2.1 - Undisturbed area and Wake integrals
    1521 C ---------------------------------------------------------
    1522 
    1523       DO i=1,klon
    1524 ccc nrlmd       if (wk_adv(i)) then !!! nrlmd
    1525       if (OK_qx_qw(i)) then
    1526 ccc
    1527         z(i) = 0.
    1528         sum_thu(i) = 0.
    1529         sum_tu(i) = 0.
    1530         sum_qu(i) = 0.
    1531         sum_thvu(i) = 0.
    1532         sum_dth(i) = 0.
    1533         sum_dq(i) = 0.
    1534         sum_rho(i) = 0.
    1535         sum_dtdwn(i) = 0.
    1536         sum_dqdwn(i) = 0.
    1537 
    1538         av_thu(i) = 0.
    1539         av_tu(i) =0.
    1540         av_qu(i) =0.
    1541         av_thvu(i) = 0.
    1542         av_dth(i) = 0.
    1543         av_dq(i) = 0.
    1544         av_rho(i) =0.
    1545         av_dtdwn(i) =0.
    1546         av_dqdwn(i) = 0.
    1547        end if   
    1548       ENDDO
    1549 C Potential temperatures and humidity
    1550 c----------------------------------------------------------
    1551 
    1552       DO k =1,klev
    1553       DO i=1,klon
    1554 ccc nrlmd       IF ( wk_adv(i)) THEN
    1555        if (OK_qx_qw(i)) then
    1556 ccc
    1557         rho(i,k) = p(i,k)/(rd*te(i,k))
    1558         IF(k .eq. 1) THEN
    1559           rhoh(i,k) = ph(i,k)/(rd*te(i,k))
    1560           zhh(i,k)=0
    1561         ELSE
    1562           rhoh(i,k) = ph(i,k)*2./(rd*(te(i,k)+te(i,k-1)))
    1563           zhh(i,k)=(ph(i,k)-ph(i,k-1))/(-rhoh(i,k)*RG)+zhh(i,k-1)
    1564         ENDIF
    1565         the(i,k) = te(i,k)/ppi(i,k)
    1566         thu(i,k) = (te(i,k) - deltatw(i,k)*sigmaw(i))/ppi(i,k)
    1567         tu(i,k) = te(i,k) - deltatw(i,k)*sigmaw(i)
    1568         qu(i,k)  =  qe(i,k) - deltaqw(i,k)*sigmaw(i)
    1569         rhow(i,k) = p(i,k)/(rd*(te(i,k)+deltatw(i,k)))
    1570         dth(i,k) = deltatw(i,k)/ppi(i,k)
    1571        ENDIF
    1572       ENDDO
    1573       ENDDO
    1574 
    1575 C Integrals (and wake top level number)
    1576 C -----------------------------------------------------------
    1577 
    1578 C Initialize sum_thvu to 1st level virt. pot. temp.
    1579 
    1580       DO i=1,klon
    1581 ccc nrlmd       IF ( wk_adv(i)) THEN
    1582       if (OK_qx_qw(i)) then
    1583 ccc
    1584         z(i) = 1.
    1585         dz(i) = 1.
    1586         sum_thvu(i) =  thu(i,1)*(1.+eps*qu(i,1))*dz(i)
    1587         sum_dth(i) = 0.
    1588       ENDIF
    1589       ENDDO
    1590 
    1591       DO k = 1,klev
    1592       DO i=1,klon
    1593 ccc nrlmd       IF ( wk_adv(i)) THEN
    1594        if (OK_qx_qw(i)) then
    1595 ccc
    1596         dz(i) = -(amax1(ph(i,k+1),ptop(i))-ph(i,k))/(rho(i,k)*rg)
    1597         IF (dz(i) .GT. 0) THEN
    1598          z(i) = z(i)+dz(i)
    1599          sum_thu(i) = sum_thu(i) + thu(i,k)*dz(i)
    1600          sum_tu(i) = sum_tu(i) + tu(i,k)*dz(i)
    1601          sum_qu(i) = sum_qu(i) + qu(i,k)*dz(i)
    1602          sum_thvu(i) = sum_thvu(i) + thu(i,k)*(1.+eps*qu(i,k))*dz(i)
    1603          sum_dth(i) = sum_dth(i) + dth(i,k)*dz(i)
    1604          sum_dq(i) = sum_dq(i) + deltaqw(i,k)*dz(i)
    1605          sum_rho(i) = sum_rho(i) + rhow(i,k)*dz(i)
    1606          sum_dtdwn(i) = sum_dtdwn(i) + dtdwn(i,k)*dz(i)
    1607          sum_dqdwn(i) = sum_dqdwn(i) + dqdwn(i,k)*dz(i)
    1608         ENDIF
    1609        ENDIF
    1610       ENDDO
    1611       ENDDO
    1612 c
    1613       DO i=1,klon
    1614 ccc nrlmd       IF ( wk_adv(i)) THEN
    1615        if (OK_qx_qw(i)) then
    1616 ccc
    1617         hw0(i) = z(i)
    1618        ENDIF
    1619       ENDDO
    1620 c
    1621 C - WAPE and mean forcing computation
    1622 C-------------------------------------------------------------
    1623 
    1624 C Means
    1625 
    1626       DO i=1, klon
    1627 ccc nrlmd       IF ( wk_adv(i)) THEN
    1628       if (OK_qx_qw(i)) then
    1629 ccc
    1630         av_thu(i) = sum_thu(i)/hw0(i)
    1631         av_tu(i) = sum_tu(i)/hw0(i)
    1632         av_qu(i) = sum_qu(i)/hw0(i)
    1633         av_thvu(i) = sum_thvu(i)/hw0(i)
    1634         av_dth(i) = sum_dth(i)/hw0(i)
    1635         av_dq(i) = sum_dq(i)/hw0(i)
    1636         av_rho(i) = sum_rho(i)/hw0(i)
    1637         av_dtdwn(i) = sum_dtdwn(i)/hw0(i)
    1638         av_dqdwn(i) = sum_dqdwn(i)/hw0(i)
    1639 
    1640         wape2(i) = - rg*hw0(i)*(av_dth(i)
    1641      $     + eps*(av_thu(i)*av_dq(i)+av_dth(i)*av_qu(i)
    1642      $     + av_dth(i)*av_dq(i) ))/av_thvu(i)
    1643        ENDIF
    1644       ENDDO
    1645 
    1646 C Prognostic variable update
    1647 C ------------------------------------------------------------
    1648 
    1649 C Filter out bad wakes
    1650 c
    1651       DO k = 1,klev
    1652       DO i=1,klon
    1653 ccc nrlmd        IF ( wk_adv(i) .AND. wape2(i) .LT. 0.) THEN
    1654       if (OK_qx_qw(i) .AND. wape2(i) .LT. 0.) then
    1655 ccc
    1656           deltatw(i,k) = 0.
    1657           deltaqw(i,k) = 0.
    1658           dth(i,k) = 0.
    1659         ENDIF
    1660       ENDDO
    1661       ENDDO
    1662 c
    1663 
    1664       DO i=1, klon
    1665 ccc nrlmd       IF ( wk_adv(i)) THEN
    1666       if (OK_qx_qw(i)) then
    1667 ccc
    1668        IF ( wape2(i) .LT. 0.) THEN
    1669         wape2(i) = 0.
    1670         Cstar2(i) = 0.
    1671         hw(i) = hwmin
    1672         sigmaw(i) = amax1(sigmad,sigd_con(i))
    1673         fip(i) = 0.
    1674         gwake(i) = .FALSE.
    1675       ELSE
    1676         if(prt_level.ge.10) print*,'wape2>0'
    1677         Cstar2(i) = stark*sqrt(2.*wape2(i))
    1678         gwake(i) = .TRUE.
    1679       ENDIF
    1680       ENDIF
    1681       ENDDO
    1682 c
    1683       DO i=1, klon
    1684 ccc nrlmd       IF ( wk_adv(i)) THEN
    1685        if (OK_qx_qw(i)) then
    1686 ccc
    1687         ktopw(i) = ktop(i)
    1688        ENDIF
    1689       ENDDO
    1690 c
    1691       DO i=1, klon
    1692 ccc nrlmd       IF ( wk_adv(i)) THEN
    1693        if (OK_qx_qw(i)) then
    1694 ccc
    1695        IF (ktopw(i) .gt. 0 .and. gwake(i)) then
    1696 
    1697 Cjyg1     Utilisation d'un h_efficace constant ( ~ feeding layer)
    1698 ccc       heff = 600.
    1699 C      Utilisation de la hauteur hw
    1700 cc       heff = 0.7*hw
    1701        heff(i) = hw(i)
    1702 
    1703        FIP(i) = 0.5*rho(i,ktopw(i))*Cstar2(i)**3*heff(i)*2*
    1704      $      sqrt(sigmaw(i)*wdens(i)*3.14)
    1705        FIP(i) = alpk * FIP(i)
    1706 Cjyg2
    1707        ELSE
    1708          FIP(i) = 0.
    1709        ENDIF
    1710        ENDIF
    1711       ENDDO
    1712 c
    1713 C   Limitation de sigmaw
    1714 
    1715 ccc nrlmd
    1716 c       DO i=1,klon
    1717 c         IF (OK_qx_qw(i)) THEN
    1718 c          IF (sigmaw(i).GE.sigmaw_max) sigmaw(i)=sigmaw_max
    1719 c        ENDIF
    1720 c       ENDDO
    1721 ccc
    1722       DO k = 1,klev
    1723        DO i=1, klon
    1724 
    1725 ccc nrlmd      On maintient désormais constant sigmaw en régime permanent
    1726 ccc      IF ((sigmaw(i).GT.sigmaw_max).or.
    1727         IF     ( ((wape(i).ge.wape2(i)).and.(wape2(i).le.1.0)).or.
    1728      $         (ktopw(i).le.2) .OR.
    1729      $         .not. OK_qx_qw(i) ) THEN
    1730 ccc
    1731           dtls(i,k) = 0.
    1732           dqls(i,k) = 0.
    1733           deltatw(i,k) = 0.
    1734           deltaqw(i,k) = 0.
    1735         ENDIF
    1736        ENDDO
    1737       ENDDO
    1738 c
    1739 ccc nrlmd      On maintient désormais constant sigmaw en régime permanent
    1740       DO i=1, klon
    1741         IF  ( ((wape(i).ge.wape2(i)).and.(wape2(i).le.1.0)).or.
    1742      $        (ktopw(i).le.2) .OR.
    1743      $        .not. OK_qx_qw(i)   ) THEN
    1744          wape(i) = 0.
    1745          cstar(i)=0.
    1746          hw(i) = hwmin
    1747          sigmaw(i) = sigmad
    1748          fip(i) = 0.
    1749         ELSE
    1750          wape(i) = wape2(i)
    1751          cstar(i)=cstar2(i)
    1752         ENDIF
    1753 cc        print*,'wape wape2 ktopw OK_qx_qw =',
    1754 cc     $          wape(i),wape2(i),ktopw(i),OK_qx_qw(i)
    1755       ENDDO
    1756 c
    1757 c
    1758       RETURN
    1759       END
    1760 
    1761       SUBROUTINE wake_vec_modulation(nlon,nl,wk_adv,epsilon,qe,d_qe,
    1762      $           deltaqw,d_deltaqw,sigmaw,d_sigmaw,alpha)
    1763 c------------------------------------------------------
    1764 cDtermination du coefficient alpha tel que les tendances
    1765 c corriges alpha*d_G, pour toutes les grandeurs G, correspondent
    1766 c a une humidite positive dans la zone (x) et dans la zone (w).
    1767 c------------------------------------------------------
    1768 c
    1769  
    1770 c  Input
    1771       REAL qe(nlon,nl),d_qe(nlon,nl)
    1772       REAL deltaqw(nlon,nl),d_deltaqw(nlon,nl)
    1773       REAL sigmaw(nlon),d_sigmaw(nlon)
    1774       LOGICAL wk_adv(nlon)
    1775       INTEGER nl,nlon
    1776 c  Output
    1777       REAL alpha(nlon)
    1778 c  Internal variables
    1779       REAL zeta(nlon,nl)
    1780       REAL alpha1(nlon)
    1781       REAL x,a,b,c,discrim
    1782       REAL epsilon
    1783 !      DATA epsilon/1.e-15/
    1784 c
    1785       DO k=1,nl
    1786       DO i = 1,nlon
    1787        IF (wk_adv(i)) THEN
    1788         IF ((deltaqw(i,k)+d_deltaqw(i,k)).ge.0.) then
    1789          zeta(i,k)=0.
    1790         ELSE
    1791          zeta(i,k)=1.
    1792         END IF
    1793        ENDIF
    1794       ENDDO
    1795       DO i = 1,nlon
    1796        IF (wk_adv(i)) THEN
    1797         x = qe(i,k)+(zeta(i,k)-sigmaw(i))*deltaqw(i,k)
    1798      $    + d_qe(i,k)+(zeta(i,k)-sigmaw(i))*d_deltaqw(i,k)
    1799      $    - d_sigmaw(i)*(deltaqw(i,k)+d_deltaqw(i,k))
    1800         a = -d_sigmaw(i)*d_deltaqw(i,k)
    1801         b = d_qe(i,k)+(zeta(i,k)-sigmaw(i))*d_deltaqw(i,k)
    1802      $    - deltaqw(i,k)*d_sigmaw(i)
    1803         c = qe(i,k)+(zeta(i,k)-sigmaw(i))*deltaqw(i,k)+epsilon
    1804         discrim = b*b-4.*a*c
    1805 c      print*, 'x, a, b, c, discrim', x, a, b, c, discrim
    1806         IF (a+b .GE. 0.) THEN !! Condition suffisante pour la positivité de ovap
    1807          alpha1(i)=1.
    1808         ELSE
    1809          IF (x .GE. 0.) THEN
    1810             alpha1(i)=1.
    1811          ELSE
    1812               IF (a .GT. 0.) THEN
    1813                  alpha1(i)=0.9*min(   (2.*c)/(-b+sqrt(discrim)),
    1814      $                        (-b+sqrt(discrim))/(2.*a)   )
    1815               ELSE IF (a .eq. 0.) then
    1816                  alpha1(i)=0.9*(-c/b)
    1817               ELSE
    1818 c         print*,'a,b,c discrim',a,b,c discrim
    1819                  alpha1(i)=0.9*max(   (2.*c)/(-b+sqrt(discrim)),
    1820      $                        (-b+sqrt(discrim))/(2.*a)   )
    1821               ENDIF
    1822          ENDIF
    1823         ENDIF
    1824        alpha(i) = min(alpha(i),alpha1(i))
    1825        ENDIF
    1826       ENDDO
    1827       ENDDO
    1828 !
    1829       return
    1830       end
    1831 
    1832       Subroutine WAKE_scal (p,ph,ppi,dtime,sigd_con
    1833      :                ,te0,qe0,omgb
    1834      :                ,dtdwn,dqdwn,amdwn,amup,dta,dqa
    1835      :                ,wdtPBL,wdqPBL,udtPBL,udqPBL
    1836      o                ,deltatw,deltaqw,dth,hw,sigmaw,wape,fip,gfl
    1837      o                ,dtls,dqls
    1838      o                ,ktopw,omgbdth,dp_omgb,wdens
    1839      o                ,tu,qu
    1840      o                ,dtKE,dqKE
    1841      o                ,dtPBL,dqPBL
    1842      o                ,omg,dp_deltomg,spread
    1843      o                ,Cstar,d_deltat_gw
    1844      o                ,d_deltatw2,d_deltaqw2)
    1845 
    1846 ***************************************************************
    1847 *                                                             *
    1848 * WAKE                                                        *
    1849 *      retour a un Pupper fixe                                *
    1850 *                                                             *
    1851 * written by   :  GRANDPEIX Jean-Yves   09/03/2000            *
    1852 * modified by :   ROEHRIG Romain        01/29/2007            *
    1853 ***************************************************************
    1854 c
    1855       USE dimphy
    1856       IMPLICIT none
    1857 c============================================================================
    1858 C
    1859 C
    1860 C   But : Decrire le comportement des poches froides apparaissant dans les
    1861 C        grands systemes convectifs, et fournir l'energie disponible pour
    1862 C        le declenchement de nouvelles colonnes convectives.
    1863 C
    1864 C   Variables d'etat : deltatw    : ecart de temperature wake-undisturbed area
    1865 C                      deltaqw    : ecart d'humidite wake-undisturbed area
    1866 C                      sigmaw     : fraction d'aire occupee par la poche.
    1867 C
    1868 C   Variable de sortie :
    1869 c
    1870 c                        wape : WAke Potential Energy
    1871 c                        fip  : Front Incident Power (W/m2) - ALP
    1872 c                        gfl  : Gust Front Length per unit area (m-1)
    1873 C                        dtls : large scale temperature tendency due to wake
    1874 C                        dqls : large scale humidity tendency due to wake
    1875 C                        hw   : hauteur de la poche
    1876 C                     dp_omgb : vertical gradient of large scale omega
    1877 C                      omgbdth: flux of Delta_Theta transported by LS omega
    1878 C                      dtKE   : differential heating (wake - unpertubed)
    1879 C                      dqKE   : differential moistening (wake - unpertubed)
    1880 C                      omg    : Delta_omg =vertical velocity diff. wake-undist. (Pa/s)
    1881 C                 dp_deltomg  : vertical gradient of omg (s-1)
    1882 C                     spread  : spreading term in dt_wake and dq_wake
    1883 C                 deltatw     : updated temperature difference (T_w-T_u).
    1884 C                 deltaqw     : updated humidity difference (q_w-q_u).
    1885 C                 sigmaw      : updated wake fractional area.
    1886 C                 d_deltat_gw : delta T tendency due to GW
    1887 c
    1888 C   Variables d'entree :
    1889 c
    1890 c                        aire : aire de la maille
    1891 c                        te0  : temperature dans l'environnement  (K)
    1892 C                        qe0  : humidite dans l'environnement     (kg/kg)
    1893 C                        omgb : vitesse verticale moyenne sur la maille (Pa/s)
    1894 C                        dtdwn: source de chaleur due aux descentes (K/s)
    1895 C                        dqdwn: source d'humidite due aux descentes (kg/kg/s)
    1896 C                        dta  : source de chaleur due courants satures et detrain  (K/s)
    1897 C                        dqa  : source d'humidite due aux courants satures et detra (kg/kg/s)
    1898 C                        amdwn: flux de masse total des descentes, par unite de
    1899 C                                surface de la maille (kg/m2/s)
    1900 C                        amup : flux de masse total des ascendances, par unite de
    1901 C                                surface de la maille (kg/m2/s)
    1902 C                        p    : pressions aux milieux des couches (Pa)
    1903 C                        ph   : pressions aux interfaces (Pa)
    1904 C                        ppi  : (p/p_0)**kapa (adim)
    1905 C                        dtime: increment temporel (s)
    1906 c
    1907 C   Variables internes :
    1908 c
    1909 c                        rhow : masse volumique de la poche froide
    1910 C                        rho  : environment density at P levels
    1911 C                        rhoh : environment density at Ph levels
    1912 C                        te   : environment temperature | may change within
    1913 C                        qe   : environment humidity    | sub-time-stepping
    1914 C                        the  : environment potential temperature
    1915 C                        thu  : potential temperature in undisturbed area
    1916 C                        tu   :  temperature  in undisturbed area
    1917 C                        qu   : humidity in undisturbed area
    1918 C                      dp_omgb: vertical gradient og LS omega
    1919 C                      omgbw  : wake average vertical omega
    1920 C                     dp_omgbw: vertical gradient of omgbw
    1921 C                      omgbdq : flux of Delta_q transported by LS omega
    1922 C                        dth  : potential temperature diff. wake-undist.
    1923 C                        th1  : first pot. temp. for vertical advection (=thu)
    1924 C                        th2  : second pot. temp. for vertical advection (=thw)
    1925 C                        q1   : first humidity for vertical advection
    1926 C                        q2   : second humidity for vertical advection
    1927 C                     d_deltatw   : terme de redistribution pour deltatw
    1928 C                     d_deltaqw   : terme de redistribution pour deltaqw
    1929 C                      deltatw0   : deltatw initial
    1930 C                      deltaqw0   : deltaqw initial
    1931 C                      hw0    : hw initial
    1932 C                      sigmaw0: sigmaw initial
    1933 C                      amflux : horizontal mass flux through wake boundary
    1934 C                      wdens  : number of wakes per unit area (3D) or per
    1935 C                               unit length (2D)
    1936 C                      Tgw    : 1 sur la période de onde de gravité
    1937 c                      Cgw    : vitesse de propagation de onde de gravité
    1938 c                      LL     : distance entre 2 poches
    1939 
    1940 c-------------------------------------------------------------------------
    1941 c          Déclaration de variables
    1942 c-------------------------------------------------------------------------
    1943 
    1944       include "dimensions.h"
    1945 cccc      include "dimphy.h"
    1946       include "YOMCST.h"
    1947       include "cvthermo.h"
    1948       include "iniprint.h"
    1949 
    1950 c Arguments en entree
    1951 c--------------------
    1952 
    1953       REAL p(klev),ph(klev+1),ppi(klev)
    1954       REAL dtime
    1955       REAL te0(klev),qe0(klev)
    1956       REAL omgb(klev+1)
    1957       REAL dtdwn(klev), dqdwn(klev)
    1958       REAL wdtPBL(klev),wdqPBL(klev)
    1959       REAL udtPBL(klev),udqPBL(klev)
    1960       REAL amdwn(klev), amup(klev)
    1961       REAL dta(klev), dqa(klev)
    1962       REAL sigd_con
    1963 
    1964 c Sorties
    1965 c--------
    1966 
    1967       REAL deltatw(klev), deltaqw(klev), dth(klev)
    1968       REAL tu(klev), qu(klev)
    1969       REAL dtls(klev), dqls(klev)
    1970       REAL dtKE(klev), dqKE(klev)
    1971       REAL dtPBL(klev), dqPBL(klev)
    1972       REAL spread(klev)
    1973       REAL d_deltatgw(klev)
    1974       REAL d_deltatw2(klev), d_deltaqw2(klev)
    1975       REAL omgbdth(klev+1), omg(klev+1)
    1976       REAL dp_omgb(klev), dp_deltomg(klev)
    1977       REAL d_deltat_gw(klev)
    1978       REAL hw, sigmaw, wape, fip, gfl, Cstar
    1979       INTEGER ktopw
    1980 
    1981 c Variables internes
    1982 c-------------------
    1983 
    1984 c Variables à fixer
    1985       REAL ALON
    1986       REAL coefgw
    1987       REAL wdens0, wdens
    1988       REAL stark
    1989       REAL alpk
    1990       REAL delta_t_min
    1991       REAL Pupper
    1992       INTEGER nsub
    1993       REAL dtimesub
    1994       REAL sigmad, hwmin
    1995 
    1996 c Variables de sauvegarde
    1997       REAL deltatw0(klev)
    1998       REAL deltaqw0(klev)
    1999       REAL te(klev), qe(klev)
    2000       REAL sigmaw0, sigmaw1
    2001 
    2002 c Variables pour les GW
    2003       REAL LL
    2004       REAL N2(klev)
    2005       REAL Cgw(klev)
    2006       REAL Tgw(klev)
    2007 
    2008 c Variables liées au calcul de hw
    2009       REAL ptop_provis, ptop, ptop_new
    2010       REAL sum_dth
    2011       REAL dthmin
    2012       REAL z, dz, hw0
    2013       INTEGER ktop, kupper
    2014 
    2015 c Autres variables internes
    2016       INTEGER isubstep, k
    2017 
    2018       REAL sum_thu, sum_tu, sum_qu,sum_thvu
    2019       REAL sum_dq, sum_rho
    2020       REAL sum_dtdwn, sum_dqdwn
    2021       REAL av_thu, av_tu, av_qu, av_thvu
    2022       REAL av_dth, av_dq, av_rho
    2023       REAL av_dtdwn, av_dqdwn
    2024 
    2025       REAL rho(klev), rhoh(klev+1), rhow(klev)
    2026       REAL rhow_moyen(klev)
    2027       REAL zh(klev), zhh(klev+1)
    2028       REAL epaisseur1(klev), epaisseur2(klev)
    2029 
    2030       REAL the(klev), thu(klev)
    2031 
    2032       REAL d_deltatw(klev), d_deltaqw(klev)
    2033 
    2034       REAL omgbw(klev+1), omgtop
    2035       REAL dp_omgbw(klev)
    2036       REAL ztop, dztop
    2037       REAL alpha_up(klev)
    2038      
    2039       REAL RRe1, RRe2, RRd1, RRd2
    2040       REAL Th1(klev), Th2(klev), q1(klev), q2(klev)
    2041       REAL D_Th1(klev), D_Th2(klev), D_dth(klev)
    2042       REAL D_q1(klev), D_q2(klev), D_dq(klev)
    2043       REAL omgbdq(klev)
    2044 
    2045       REAL ff, gg
    2046       REAL wape2, Cstar2, heff
    2047 
    2048       REAL Crep(klev)
    2049       REAL Crep_upper, Crep_sol
    2050 
    2051 C-------------------------------------------------------------------------
    2052 c         Initialisations
    2053 c-------------------------------------------------------------------------
    2054 
    2055 c      print*, 'wake initialisations'
    2056 
    2057 c   Essais d'initialisation avec sigmaw = 0.02 et hw = 10.
    2058 c-------------------------------------------------------------------------
    2059 
    2060       DATA sigmad, hwmin /.02,10./
    2061 
    2062 C Longueur de maille (en m)
    2063 c-------------------------------------------------------------------------
    2064 
    2065 c      ALON = 3.e5
    2066       ALON = 1.e6
    2067 
    2068 
    2069 C Configuration de coefgw,stark,wdens (22/02/06 by YU Jingmei)
    2070 c
    2071 c      coefgw : Coefficient pour les ondes de gravité
    2072 c       stark : Coefficient k dans Cstar=k*sqrt(2*WAPE)
    2073 c       wdens : Densité de poche froide par maille
    2074 c-------------------------------------------------------------------------
    2075 
    2076       coefgw=10
    2077 c      coefgw=1
    2078 c      wdens0 = 1.0/(alon**2)   
    2079       wdens = 1.0/(alon**2)       
    2080       stark = 0.50
    2081 cCRtest
    2082       alpk=0.1
    2083 c      alpk = 1.0
    2084 c      alpk = 0.5
    2085 c      alpk = 0.05
    2086       Crep_upper=0.9
    2087       Crep_sol=1.0
    2088 
    2089 
    2090 C Minimum value for |T_wake - T_undist|. Used for wake top definition
    2091 c-------------------------------------------------------------------------
    2092 
    2093       delta_t_min = 0.2
    2094 
    2095 
    2096 C 1. - Save initial values and initialize tendencies
    2097 C --------------------------------------------------
    2098 
    2099       DO k=1,klev
    2100         deltatw0(k) = deltatw(k)
    2101         deltaqw0(k)= deltaqw(k)
    2102         te(k) = te0(k)
    2103         qe(k) = qe0(k)
    2104         dtls(k) = 0.
    2105         dqls(k) = 0.
    2106         d_deltat_gw(k)=0.
    2107         d_deltatw2(k)=0.
    2108         d_deltaqw2(k)=0.
    2109       ENDDO
    2110 c      sigmaw1=sigmaw
    2111 c      IF (sigd_con.GT.sigmaw1) THEN
    2112 c      print*, 'sigmaw,sigd_con', sigmaw, sigd_con
    2113 c      ENDIF
    2114       sigmaw = max(sigmaw,sigd_con)
    2115       sigmaw = max(sigmaw,sigmad)
    2116       sigmaw = min(sigmaw,0.99)
    2117       sigmaw0 = sigmaw
    2118 c      wdens=wdens0/(10.*sigmaw)
    2119 c      IF (sigd_con.GT.sigmaw1) THEN
    2120 c      print*, 'sigmaw1,sigd1', sigmaw, sigd_con
    2121 c      ENDIF
    2122 
    2123 C 2. - Prognostic part
    2124 C =========================================================
    2125 
    2126 c      print *, 'prognostic wake computation'
    2127 
    2128 
    2129 C 2.1 - Undisturbed area and Wake integrals
    2130 C ---------------------------------------------------------
    2131 
    2132       z = 0.
    2133       ktop=0
    2134       kupper = 0
    2135       sum_thu = 0.
    2136       sum_tu = 0.
    2137       sum_qu = 0.
    2138       sum_thvu = 0.
    2139       sum_dth = 0.
    2140       sum_dq = 0.
    2141       sum_rho = 0.
    2142       sum_dtdwn = 0.
    2143       sum_dqdwn = 0.
    2144 
    2145       av_thu = 0.
    2146       av_tu =0.
    2147       av_qu =0.
    2148       av_thvu = 0.
    2149       av_dth = 0.
    2150       av_dq = 0.
    2151       av_rho =0.
    2152       av_dtdwn =0.
    2153       av_dqdwn = 0.
    2154 
    2155 C Potential temperatures and humidity
    2156 c----------------------------------------------------------
    2157 
    2158       DO k =1,klev
    2159         rho(k) = p(k)/(rd*te(k))
    2160         IF(k .eq. 1) THEN
    2161           rhoh(k) = ph(k)/(rd*te(k))
    2162           zhh(k)=0
    2163         ELSE
    2164           rhoh(k) = ph(k)*2./(rd*(te(k)+te(k-1)))
    2165           zhh(k)=(ph(k)-ph(k-1))/(-rhoh(k)*RG)+zhh(k-1)
    2166         ENDIF
    2167         the(k) = te(k)/ppi(k)
    2168         thu(k) = (te(k) - deltatw(k)*sigmaw)/ppi(k)
    2169         tu(k) = te(k) - deltatw(k)*sigmaw
    2170         qu(k)  =  qe(k) - deltaqw(k)*sigmaw
    2171         rhow(k) = p(k)/(rd*(te(k)+deltatw(k)))
    2172         dth(k) = deltatw(k)/ppi(k)
    2173         LL = (1-sqrt(sigmaw))/sqrt(wdens)       
    2174       ENDDO
    2175        
    2176       DO k = 1, klev-1
    2177         IF(k.eq.1) THEN
    2178           N2(k)=0
    2179         ELSE
    2180           N2(k)=max(0.,-RG**2/the(k)*rho(k)*(the(k+1)-the(k-1))
    2181      $           /(p(k+1)-p(k-1)))
    2182         ENDIF
    2183         ZH(k)=(zhh(k)+zhh(k+1))/2
    2184 
    2185         Cgw(k)=sqrt(N2(k))*ZH(k)
    2186         Tgw(k)=coefgw*Cgw(k)/LL
    2187       ENDDO
    2188          
    2189       N2(klev)=0
    2190       ZH(klev)=0
    2191       Cgw(klev)=0
    2192       Tgw(klev)=0
    2193 
    2194 c  Calcul de la masse volumique moyenne de la colonne
    2195 c-----------------------------------------------------------------
    2196 
    2197       DO k=1,klev
    2198         epaisseur1(k)=0.
    2199         epaisseur2(k)=0.
    2200       ENDDO
    2201 
    2202       epaisseur1(1)= -(Ph(2)-Ph(1))/(rho(1)*rg)+1.
    2203       epaisseur2(1)= -(Ph(2)-Ph(1))/(rho(1)*rg)+1.
    2204       rhow_moyen(1) = rhow(1)
    2205 
    2206       DO k = 2, klev
    2207         epaisseur1(k)= -(Ph(k+1)-Ph(k))/(rho(k)*rg) +1.
    2208         epaisseur2(k)=epaisseur2(k-1)+epaisseur1(k)
    2209         rhow_moyen(k) = (rhow_moyen(k-1)*epaisseur2(k-1)+
    2210      $                 rhow(k)*epaisseur1(k))/epaisseur2(k)
    2211       ENDDO
    2212 
    2213 
    2214 C Choose an integration bound well above wake top
    2215 c-----------------------------------------------------------------
    2216 
    2217 c       Pupper = 50000.  ! melting level
    2218        Pupper = 60000.
    2219 c       Pupper = 70000.
    2220 
    2221 
    2222 C    Determine Wake top pressure (Ptop) from buoyancy integral
    2223 C-----------------------------------------------------------------
    2224 
    2225 c-1/ Pressure of the level where dth becomes less than delta_t_min.
    2226 
    2227       Ptop_provis=ph(1)
    2228       DO k= 2,klev
    2229         IF (dth(k) .GT. -delta_t_min .and.
    2230      $      dth(k-1).LT. -delta_t_min) THEN
    2231           Ptop_provis = ((dth(k)+delta_t_min)*p(k-1)
    2232      $          - (dth(k-1)+delta_t_min)*p(k)) /(dth(k) - dth(k-1))
    2233           GO TO 25
    2234         ENDIF
    2235       ENDDO
    2236 25    CONTINUE
    2237 
    2238 c-2/ dth integral
    2239 
    2240       sum_dth = 0.
    2241       dthmin = -delta_t_min
    2242       z = 0.
    2243 
    2244       DO k = 1,klev
    2245         dz = -(max(ph(k+1),Ptop_provis)-Ph(k))/(rho(k)*rg)
    2246         IF (dz .le. 0) GO TO 40
    2247         z = z+dz
    2248         sum_dth = sum_dth + dth(k)*dz
    2249         dthmin = min(dthmin,dth(k))
    2250       ENDDO
    2251 40    CONTINUE
    2252 
    2253 c-3/ height of triangle with area= sum_dth and base = dthmin
    2254 
    2255       hw0 = 2.*sum_dth/min(dthmin,-0.5)
    2256       hw0 = max(hwmin,hw0)
    2257 
    2258 c-4/ now, get Ptop
    2259 
    2260       z = 0.
    2261       ptop = ph(1)
    2262 
    2263       DO k = 1,klev
    2264         dz = min(-(ph(k+1)-Ph(k))/(rho(k)*rg),hw0-z)
    2265         IF (dz .le. 0) GO TO 45
    2266         z = z+dz
    2267         Ptop = Ph(k)-rho(k)*rg*dz
    2268       ENDDO
    2269 45    CONTINUE
    2270 
    2271 
    2272 C-5/ Determination de ktop et kupper
    2273 
    2274       DO k=klev,1,-1
    2275         IF (ph(k+1) .lt. ptop) ktop=k
    2276         IF (ph(k+1) .lt. pupper) kupper=k
    2277       ENDDO
    2278 
    2279 c-6/ Correct ktop and ptop
    2280 
    2281       Ptop_new=ptop
    2282       DO k= ktop,2,-1
    2283         IF (dth(k) .GT. -delta_t_min .and.
    2284      $      dth(k-1).LT. -delta_t_min) THEN
    2285           Ptop_new = ((dth(k)+delta_t_min)*p(k-1)
    2286      $          - (dth(k-1)+delta_t_min)*p(k)) /(dth(k) - dth(k-1))
    2287           GO TO 225
    2288         ENDIF
    2289       ENDDO
    2290 225   CONTINUE
    2291 
    2292       ptop = ptop_new
    2293 
    2294       DO k=klev,1,-1
    2295         IF (ph(k+1) .lt. ptop) ktop=k
    2296       ENDDO
    2297 
    2298 c Set deltatw & deltaqw to 0 above kupper
    2299 c-----------------------------------------------------------
    2300 
    2301       DO k = kupper,klev
    2302         deltatw(k) = 0.
    2303         deltaqw(k) = 0.
    2304       ENDDO
    2305 
    2306 
    2307 C Vertical gradient of LS omega
    2308 C------------------------------------------------------------
    2309 
    2310       DO k = 1,kupper
    2311         dp_omgb(k) = (omgb(k+1) - omgb(k))/(ph(k+1)-ph(k))
    2312       ENDDO
    2313 
    2314 
    2315 C Integrals (and wake top level number)
    2316 C -----------------------------------------------------------
    2317 
    2318 C Initialize sum_thvu to 1st level virt. pot. temp.
    2319 
    2320       z = 1.
    2321       dz = 1.
    2322       sum_thvu =  thu(1)*(1.+eps*qu(1))*dz
    2323       sum_dth = 0.
    2324 
    2325       DO k = 1,klev
    2326         dz = -(max(ph(k+1),Ptop)-Ph(k))/(rho(k)*rg)
    2327         IF (dz .LE. 0) GO TO 50
    2328         z = z+dz
    2329         sum_thu = sum_thu + thu(k)*dz
    2330         sum_tu = sum_tu + tu(k)*dz
    2331         sum_qu = sum_qu + qu(k)*dz
    2332         sum_thvu = sum_thvu + thu(k)*(1.+eps*qu(k))*dz
    2333         sum_dth = sum_dth + dth(k)*dz
    2334         sum_dq = sum_dq + deltaqw(k)*dz
    2335         sum_rho = sum_rho + rhow(k)*dz
    2336         sum_dtdwn = sum_dtdwn + dtdwn(k)*dz
    2337         sum_dqdwn = sum_dqdwn + dqdwn(k)*dz
    2338       ENDDO
    2339 50    CONTINUE
    2340 
    2341       hw0 = z
    2342 
    2343 C 2.1 - WAPE and mean forcing computation
    2344 C-------------------------------------------------------------
    2345 
    2346 C Means
    2347 
    2348       av_thu = sum_thu/hw0
    2349       av_tu = sum_tu/hw0
    2350       av_qu = sum_qu/hw0
    2351       av_thvu = sum_thvu/hw0
    2352 c      av_thve = sum_thve/hw0
    2353       av_dth = sum_dth/hw0
    2354       av_dq = sum_dq/hw0
    2355       av_rho = sum_rho/hw0
    2356       av_dtdwn = sum_dtdwn/hw0
    2357       av_dqdwn = sum_dqdwn/hw0
    2358 
    2359       wape = - rg*hw0*(av_dth
    2360      $     + eps*(av_thu*av_dq+av_dth*av_qu+av_dth*av_dq ))/av_thvu
    2361 
    2362 C 2.2 Prognostic variable update
    2363 C ------------------------------------------------------------
    2364 
    2365 C Filter out bad wakes
    2366 
    2367       IF ( wape .LT. 0.) THEN
    2368         if(prt_level.ge.10) print*,'wape<0'
    2369         wape = 0.
    2370         hw = hwmin
    2371         sigmaw = max(sigmad,sigd_con)
    2372         fip = 0.
    2373         DO k = 1,klev
    2374           deltatw(k) = 0.
    2375           deltaqw(k) = 0.
    2376           dth(k) = 0.
    2377         ENDDO
    2378       ELSE
    2379         if(prt_level.ge.10) print*,'wape>0'
    2380         Cstar = stark*sqrt(2.*wape)
    2381       ENDIF
    2382 
    2383 C------------------------------------------------------------------
    2384 C    Sub-time-stepping
    2385 C------------------------------------------------------------------
    2386 
    2387 c      nsub=36
    2388       nsub=10
    2389       dtimesub=dtime/nsub
    2390 
    2391 c------------------------------------------------------------
    2392       DO isubstep = 1,nsub
    2393 c------------------------------------------------------------
    2394 
    2395 c        print*,'---------------','substep=',isubstep,'-------------'
    2396 
    2397 c  Evolution of sigmaw
    2398 
    2399 
    2400         gfl = 2.*sqrt(3.14*wdens*sigmaw)           
    2401 
    2402         sigmaw =sigmaw + gfl*Cstar*dtimesub
    2403         sigmaw =min(sigmaw,0.99)     !!!!!!!!
    2404 c        wdens = wdens0/(10.*sigmaw)
    2405 c        sigmaw =max(sigmaw,sigd_con)
    2406 c        sigmaw =max(sigmaw,sigmad)
    2407 
    2408 c calcul de la difference de vitesse verticale poche - zone non perturbee
    2409 
    2410         z= 0.
    2411         dp_deltomg(1:klev)=0.
    2412         omg(1:klev+1)=0.
    2413 
    2414         omg(1) = 0.
    2415         dp_deltomg(1) = -(gfl*Cstar)/(sigmaw * (1-sigmaw))
    2416 
    2417         DO k=2,ktop
    2418           dz = -(Ph(k)-Ph(k-1))/(rho(k-1)*rg)
    2419           z = z+dz
    2420           dp_deltomg(k)= dp_deltomg(1)
    2421           omg(k)= dp_deltomg(1)*z
    2422         ENDDO
    2423 
    2424         dztop=-(Ptop-Ph(ktop))/(rho(ktop)*rg)
    2425         ztop = z+dztop
    2426         omgtop=dp_deltomg(1)*ztop
    2427 
    2428 
    2429 c Conversion de la vitesse verticale de m/s a Pa/s
    2430 
    2431         omgtop = -rho(ktop)*rg*omgtop
    2432         dp_deltomg(1) = omgtop/(ptop-ph(1))
    2433 
    2434         DO k = 1,ktop
    2435           omg(k) = - rho(k)*rg*omg(k)
    2436           dp_deltomg(k) = dp_deltomg(1)
    2437         ENDDO
    2438 
    2439 c   raccordement lineaire de omg de ptop a pupper
    2440 
    2441       IF (kupper .GT. ktop) THEN
    2442         omg(kupper+1) = - Rg*amdwn(kupper+1)/sigmaw
    2443      $                + Rg*amup(kupper+1)/(1.-sigmaw)
    2444         dp_deltomg(kupper) = (omgtop-omg(kupper+1))/(Ptop-Pupper)
    2445         DO k=ktop+1,kupper
    2446           dp_deltomg(k) = dp_deltomg(kupper)
    2447           omg(k) = omgtop+(ph(k)-Ptop)*dp_deltomg(kupper)
    2448         ENDDO
    2449       ENDIF
    2450 
    2451 c   Compute wake average vertical velocity omgbw
    2452 
    2453       DO k = 1,klev+1
    2454         omgbw(k) = omgb(k)+(1.-sigmaw)*omg(k)
    2455       ENDDO
    2456 
    2457 c  and its vertical gradient dp_omgbw
    2458 
    2459       DO k = 1,klev
    2460         dp_omgbw(k) = (omgbw(k+1)-omgbw(k))/(ph(k+1)-ph(k))
    2461       ENDDO
    2462 
    2463 
    2464 c  Upstream coefficients for omgb velocity
    2465 c--    (alpha_up(k) is the coefficient of the value at level k)
    2466 c--    (1-alpha_up(k) is the coefficient of the value at level k-1)
    2467 
    2468       DO k = 1,klev
    2469        alpha_up(k) = 0.
    2470        IF (omgb(k) .GT. 0.) alpha_up(k) = 1.
    2471       ENDDO
    2472 
    2473 c  Matrix expressing [The,deltatw] from  [Th1,Th2]
    2474 
    2475       RRe1 = 1.-sigmaw
    2476       RRe2 = sigmaw
    2477       RRd1 = -1.
    2478       RRd2 = 1.
    2479 
    2480 c Get [Th1,Th2], dth and [q1,q2]
    2481 
    2482       DO k = 1,kupper+1
    2483         dth(k) = deltatw(k)/ppi(k)
    2484         Th1(k) = the(k) - sigmaw     *dth(k)   ! undisturbed area
    2485         Th2(k) = the(k) + (1.-sigmaw)*dth(k)   ! wake
    2486         q1(k) = qe(k) - sigmaw     *deltaqw(k) ! undisturbed area
    2487         q2(k) = qe(k) + (1.-sigmaw)*deltaqw(k) ! wake
    2488       ENDDO
    2489 
    2490       D_Th1(1) = 0.
    2491       D_Th2(1) = 0.
    2492       D_dth(1) = 0.
    2493       D_q1(1) = 0.
    2494       D_q2(1) = 0.
    2495       D_dq(1) = 0.
    2496 
    2497       DO k = 2,kupper+1 !   loop on interfaces
    2498         D_Th1(k) = Th1(k-1)-Th1(k)
    2499         D_Th2(k) = Th2(k-1)-Th2(k)
    2500         D_dth(k) = dth(k-1)-dth(k)
    2501         D_q1(k) = q1(k-1)-q1(k)
    2502         D_q2(k) = q2(k-1)-q2(k)
    2503         D_dq(k) = deltaqw(k-1)-deltaqw(k)
    2504       ENDDO
    2505 
    2506       omgbdth(1) = 0.
    2507       omgbdq(1) = 0.
    2508 
    2509       DO k = 2,kupper+1  !   loop on interfaces
    2510         omgbdth(k) = omgb(k)*(    dth(k-1) -     dth(k))
    2511         omgbdq(k)  = omgb(k)*(deltaqw(k-1) - deltaqw(k))
    2512       ENDDO
    2513 
    2514 
    2515 c-----------------------------------------------------------------
    2516       DO k=1,kupper-1
    2517 c-----------------------------------------------------------------
    2518 c
    2519 c   Compute redistribution (advective) term
    2520 c
    2521          d_deltatw(k) =
    2522      $             dtimesub/(Ph(k)-Ph(k+1))*(
    2523      $       RRd1*omg(k  )*sigmaw     *D_Th1(k)
    2524      $      -RRd2*omg(k+1)*(1.-sigmaw)*D_Th2(k+1)
    2525      $      -(1.-alpha_up(k))*omgbdth(k) - alpha_up(k+1)*omgbdth(k+1)
    2526      $                      )*ppi(k)
    2527 c         print*,'d_deltatw=',d_deltatw(k)
    2528 c
    2529          d_deltaqw(k) =
    2530      $             dtimesub/(Ph(k)-Ph(k+1))*(
    2531      $       RRd1*omg(k  )*sigmaw     *D_q1(k)
    2532      $      -RRd2*omg(k+1)*(1.-sigmaw)*D_q2(k+1)
    2533      $      -(1.-alpha_up(k))*omgbdq(k) - alpha_up(k+1)*omgbdq(k+1)
    2534      $                      )
    2535 c         print*,'d_deltaqw=',d_deltaqw(k)
    2536 c
    2537 c   and increment large scale tendencies
    2538 c
    2539          dtls(k) = dtls(k) +
    2540      $               dtimesub*(
    2541      $        ( RRe1*omg(k  )*sigmaw     *D_Th1(k)
    2542      $         -RRe2*omg(k+1)*(1.-sigmaw)*D_Th2(k+1) )
    2543      $               /(Ph(k)-Ph(k+1))
    2544      $         -sigmaw*(1.-sigmaw)*dth(k)*dp_deltomg(k)
    2545      $                      )*ppi(k)
    2546 c         print*,'dtls=',dtls(k)
    2547 c
    2548          dqls(k) = dqls(k) +
    2549      $               dtimesub*(
    2550      $        ( RRe1*omg(k  )*sigmaw     *D_q1(k)
    2551      $         -RRe2*omg(k+1)*(1.-sigmaw)*D_q2(k+1) )
    2552      $               /(Ph(k)-Ph(k+1))
    2553      $         -sigmaw*(1.-sigmaw)*deltaqw(k)*dp_deltomg(k)
    2554      $                      )
    2555 c         print*,'dqls=',dqls(k)
    2556 
    2557 c-------------------------------------------------------------------
    2558       ENDDO
    2559 c------------------------------------------------------------------
    2560 
    2561 C   Increment state variables
    2562 
    2563       DO k = 1,kupper-1
    2564 
    2565 c Coefficient de répartition
    2566 
    2567         Crep(k)=Crep_sol*(ph(kupper)-ph(k))/(ph(kupper)-ph(1))
    2568         Crep(k)=Crep(k)+Crep_upper*(ph(1)-ph(k))/(p(1)-ph(kupper))
    2569        
    2570 
    2571 c Reintroduce compensating subsidence term.
    2572 
    2573 c        dtKE(k)=(dtdwn(k)*Crep(k))/sigmaw
    2574 c        dtKE(k)=dtKE(k)-(dtdwn(k)*(1-Crep(k))+dta(k))
    2575 c     .                   /(1-sigmaw)
    2576 c        dqKE(k)=(dqdwn(k)*Crep(k))/sigmaw
    2577 c        dqKE(k)=dqKE(k)-(dqdwn(k)*(1-Crep(k))+dqa(k))
    2578 c     .                   /(1-sigmaw)
    2579 c
    2580 c        dtKE(k)=(dtdwn(k)*Crep(k)+(1-Crep(k))*dta(k))/sigmaw
    2581 c        dtKE(k)=dtKE(k)-(dtdwn(k)*(1-Crep(k))+dta(k)*Crep(k))
    2582 c     .                   /(1-sigmaw)
    2583 c        dqKE(k)=(dqdwn(k)*Crep(k)+(1-Crep(k))*dqa(k))/sigmaw
    2584 c        dqKE(k)=dqKE(k)-(dqdwn(k)*(1-Crep(k))+dqa(k)*Crep(k))
    2585 c     .                   /(1-sigmaw)
    2586 
    2587         dtKE(k)=(dtdwn(k)/sigmaw - dta(k)/(1.-sigmaw))
    2588         dqKE(k)=(dqdwn(k)/sigmaw - dqa(k)/(1.-sigmaw))
    2589 c        print*,'dtKE=',dtKE(k)
    2590 c        print*,'dqKE=',dqKE(k)
    2591 c
    2592         dtPBL(k)=(wdtPBL(k)/sigmaw - udtPBL(k)/(1.-sigmaw))
    2593         dqPBL(k)=(wdqPBL(k)/sigmaw - udqPBL(k)/(1.-sigmaw))
    2594 c
    2595         spread(k) = (1.-sigmaw)*dp_deltomg(k)+gfl*Cstar/sigmaw
    2596 c        print*,'spread=',spread(k)
    2597 
    2598 
    2599 c ajout d'un effet onde de gravité -Tgw(k)*deltatw(k) 03/02/06 YU Jingmei
    2600 
    2601         d_deltat_gw(k)=d_deltat_gw(k)-Tgw(k)*deltatw(k)* dtimesub
    2602 c        print*,'d_delta_gw=',d_deltat_gw(k)
    2603         ff=d_deltatw(k)/dtimesub
    2604 
    2605 c Sans GW
    2606 c
    2607 c        deltatw(k)=deltatw(k)+dtimesub*(ff+dtKE(k)-spread(k)*deltatw(k))
    2608 c
    2609 c GW formule 1
    2610 c
    2611 c        deltatw(k) = deltatw(k)+dtimesub*
    2612 c     $         (ff+dtKE(k) - spread(k)*deltatw(k)-Tgw(k)*deltatw(k))
    2613 c
    2614 c GW formule 2
    2615 
    2616         IF (dtimesub*Tgw(k).lt.1.e-10) THEN
    2617           deltatw(k) = deltatw(k)+dtimesub*
    2618      $          (ff+dtKE(k)+dtPBL(k)
    2619      $          - spread(k)*deltatw(k)-Tgw(k)*deltatw(k))
    2620         ELSE
    2621            deltatw(k) = deltatw(k)+1/Tgw(k)*(1-exp(-dtimesub*Tgw(k)))*
    2622      $          (ff+dtKE(k)+dtPBL(k)
    2623      $          - spread(k)*deltatw(k)-Tgw(k)*deltatw(k))
    2624         ENDIF
    2625    
    2626         dth(k) = deltatw(k)/ppi(k)
    2627 
    2628         gg=d_deltaqw(k)/dtimesub
    2629 
    2630        deltaqw(k) = deltaqw(k) +
    2631      $         dtimesub*(gg+ dqKE(k)+dqPBL(k) - spread(k)*deltaqw(k))
    2632 
    2633        d_deltatw2(k)=d_deltatw2(k)+d_deltatw(k)
    2634        d_deltaqw2(k)=d_deltaqw2(k)+d_deltaqw(k)
    2635       ENDDO
    2636 
    2637 C   And update large scale variables
    2638 
    2639       DO k = 1,kupper
    2640         te(k) = te0(k) + dtls(k)
    2641         qe(k) = qe0(k) + dqls(k)
    2642         the(k) = te(k)/ppi(k)
    2643       ENDDO
    2644 
    2645 c     Determine Ptop from buoyancy integral
    2646 c----------------------------------------------------------------------
    2647 
    2648 c-1/ Pressure of the level where dth changes sign.
    2649 
    2650       Ptop_provis=ph(1)
    2651 
    2652       DO k= 2,klev
    2653         IF (dth(k) .GT. -delta_t_min .and.
    2654      $      dth(k-1).LT. -delta_t_min) THEN
    2655           Ptop_provis = ((dth(k)+delta_t_min)*p(k-1)
    2656      $          - (dth(k-1)+delta_t_min)*p(k)) /(dth(k) - dth(k-1))
     2563        deltatw(k) = deltatw(k) + 1/tgw(k)*(1-exp(-dtimesub*tgw(k)))*(ff+dtke &
     2564          (k)+dtpbl(k)-spread(k)*deltatw(k)-tgw(k)*deltatw(k))
     2565      END IF
     2566
     2567      dth(k) = deltatw(k)/ppi(k)
     2568
     2569      gg = d_deltaqw(k)/dtimesub
     2570
     2571      deltaqw(k) = deltaqw(k) + dtimesub*(gg+dqke(k)+dqpbl(k)-spread(k)* &
     2572        deltaqw(k))
     2573
     2574      d_deltatw2(k) = d_deltatw2(k) + d_deltatw(k)
     2575      d_deltaqw2(k) = d_deltaqw2(k) + d_deltaqw(k)
     2576    END DO
     2577
     2578    ! And update large scale variables
     2579
     2580    DO k = 1, kupper
     2581      te(k) = te0(k) + dtls(k)
     2582      qe(k) = qe0(k) + dqls(k)
     2583      the(k) = te(k)/ppi(k)
     2584    END DO
     2585
     2586    ! Determine Ptop from buoyancy integral
     2587    ! ----------------------------------------------------------------------
     2588
     2589    ! -1/ Pressure of the level where dth changes sign.
     2590
     2591    ptop_provis = ph(1)
     2592
     2593    DO k = 2, klev
     2594      IF (dth(k)>-delta_t_min .AND. dth(k-1)<-delta_t_min) THEN
     2595        ptop_provis = ((dth(k)+delta_t_min)*p(k-1)-(dth(k- &
     2596          1)+delta_t_min)*p(k))/(dth(k)-dth(k-1))
    26572597        GO TO 65
    2658         ENDIF
    2659       ENDDO
    2660 65    CONTINUE
    2661 
    2662 c-2/ dth integral
    2663 
    2664       sum_dth = 0.
    2665       dthmin = -delta_t_min
    2666       z = 0.
    2667 
    2668       DO k = 1,klev
    2669         dz = -(max(ph(k+1),Ptop_provis)-Ph(k))/(rho(k)*rg)
    2670         IF (dz .le. 0) GO TO 70
    2671         z = z+dz
    2672         sum_dth = sum_dth + dth(k)*dz
    2673         dthmin = min(dthmin,dth(k))
    2674       ENDDO
    2675 70    CONTINUE
    2676 
    2677 c-3/ height of triangle with area= sum_dth and base = dthmin
    2678 
    2679       hw = 2.*sum_dth/min(dthmin,-0.5)
    2680       hw = max(hwmin,hw)
    2681 
    2682 c-4/ now, get Ptop
    2683 
    2684       ktop = 0
    2685       z=0.
    2686 
    2687       DO k = 1,klev
    2688         dz = min(-(ph(k+1)-Ph(k))/(rho(k)*rg),hw-z)
    2689         IF (dz .le. 0) GO TO 75
    2690         z = z+dz
    2691         Ptop = Ph(k)-rho(k)*rg*dz
    2692         ktop = k
    2693       ENDDO
    2694 75    CONTINUE
    2695 
    2696 c-5/Correct ktop and ptop
    2697 
    2698       Ptop_new=ptop
    2699 
    2700       DO k= ktop,2,-1
    2701         IF (dth(k) .GT. -delta_t_min .and.
    2702      $      dth(k-1).LT. -delta_t_min) THEN
    2703           Ptop_new = ((dth(k)+delta_t_min)*p(k-1)
    2704      $          - (dth(k-1)+delta_t_min)*p(k)) /(dth(k) - dth(k-1))
    2705           GO TO 275
    2706         ENDIF
    2707       ENDDO
    2708 275   CONTINUE
    2709 
    2710       ptop = ptop_new
    2711 
    2712       DO k=klev,1,-1
    2713         IF (ph(k+1) .LT. ptop) ktop=k
    2714       ENDDO
    2715 
    2716 c-6/ Set deltatw & deltaqw to 0 above kupper
    2717 
    2718       DO k = kupper,klev
    2719         deltatw(k) = 0.
    2720         deltaqw(k) = 0.
    2721       ENDDO
    2722 
    2723 c------------------------------------------------------------------
    2724       ENDDO      ! end sub-timestep loop
    2725 C -----------------------------------------------------------------
    2726 
    2727 c   Get back to tendencies per second
    2728 
    2729       DO k = 1,kupper-1
    2730         dtls(k) = dtls(k)/dtime
    2731         dqls(k) = dqls(k)/dtime
    2732         d_deltatw2(k)=d_deltatw2(k)/dtime
    2733         d_deltaqw2(k)=d_deltaqw2(k)/dtime
    2734         d_deltat_gw(k) = d_deltat_gw(k)/dtime
    2735       ENDDO
    2736 
    2737 C 2.1 - Undisturbed area and Wake integrals
    2738 C ---------------------------------------------------------
    2739 
    2740       z = 0.
    2741       sum_thu = 0.
    2742       sum_tu = 0.
    2743       sum_qu = 0.
    2744       sum_thvu = 0.
    2745       sum_dth = 0.
    2746       sum_dq = 0.
    2747       sum_rho = 0.
    2748       sum_dtdwn = 0.
    2749       sum_dqdwn = 0.
    2750 
    2751       av_thu = 0.
    2752       av_tu =0.
    2753       av_qu =0.
    2754       av_thvu = 0.
    2755       av_dth = 0.
    2756       av_dq = 0.
    2757       av_rho =0.
    2758       av_dtdwn =0.
    2759       av_dqdwn = 0.
    2760 
    2761 C Potential temperatures and humidity
    2762 c----------------------------------------------------------
    2763 
    2764       DO k =1,klev
    2765         rho(k) = p(k)/(rd*te(k))
    2766         IF(k .eq. 1) THEN
    2767           rhoh(k) = ph(k)/(rd*te(k))
    2768           zhh(k)=0
    2769         ELSE
    2770           rhoh(k) = ph(k)*2./(rd*(te(k)+te(k-1)))
    2771           zhh(k)=(ph(k)-ph(k-1))/(-rhoh(k)*RG)+zhh(k-1)
    2772         ENDIF
    2773         the(k) = te(k)/ppi(k)
    2774         thu(k) = (te(k) - deltatw(k)*sigmaw)/ppi(k)
    2775         tu(k) = te(k) - deltatw(k)*sigmaw
    2776         qu(k)  =  qe(k) - deltaqw(k)*sigmaw
    2777         rhow(k) = p(k)/(rd*(te(k)+deltatw(k)))
    2778         dth(k) = deltatw(k)/ppi(k)
    2779        
    2780       ENDDO
    2781 
    2782 C Integrals (and wake top level number)
    2783 C -----------------------------------------------------------
    2784 
    2785 C Initialize sum_thvu to 1st level virt. pot. temp.
    2786 
    2787       z = 1.
    2788       dz = 1.
    2789       sum_thvu =  thu(1)*(1.+eps*qu(1))*dz
    2790       sum_dth = 0.
    2791 
    2792       DO k = 1,klev
    2793         dz = -(max(ph(k+1),Ptop)-Ph(k))/(rho(k)*rg)
    2794 
    2795         IF (dz .LE. 0) GO TO 51
    2796         z = z+dz
    2797         sum_thu = sum_thu + thu(k)*dz
    2798         sum_tu = sum_tu + tu(k)*dz
    2799         sum_qu = sum_qu + qu(k)*dz
    2800         sum_thvu = sum_thvu + thu(k)*(1.+eps*qu(k))*dz
    2801         sum_dth = sum_dth + dth(k)*dz
    2802         sum_dq = sum_dq + deltaqw(k)*dz
    2803         sum_rho = sum_rho + rhow(k)*dz
    2804         sum_dtdwn = sum_dtdwn + dtdwn(k)*dz
    2805         sum_dqdwn = sum_dqdwn + dqdwn(k)*dz
    2806       ENDDO
    2807  51   CONTINUE
    2808 
    2809       hw0 = z
    2810 
    2811 C 2.1 - WAPE and mean forcing computation
    2812 C-------------------------------------------------------------
    2813 
    2814 C Means
    2815 
    2816       av_thu = sum_thu/hw0
    2817       av_tu = sum_tu/hw0
    2818       av_qu = sum_qu/hw0
    2819       av_thvu = sum_thvu/hw0
    2820       av_dth = sum_dth/hw0
    2821       av_dq = sum_dq/hw0
    2822       av_rho = sum_rho/hw0
    2823       av_dtdwn = sum_dtdwn/hw0
    2824       av_dqdwn = sum_dqdwn/hw0
    2825 
    2826       wape2 = - rg*hw0*(av_dth
    2827      $     + eps*(av_thu*av_dq+av_dth*av_qu+av_dth*av_dq ))/av_thvu
    2828 
    2829 
    2830 C 2.2 Prognostic variable update
    2831 C ------------------------------------------------------------
    2832 
    2833 C Filter out bad wakes
    2834 
    2835       IF ( wape2 .LT. 0.) THEN
    2836         if(prt_level.ge.10) print*,'wape2<0'
    2837         wape2 = 0.
    2838         hw = hwmin
    2839         sigmaw = max(sigmad,sigd_con)
    2840         fip = 0.
    2841         DO k = 1,klev
    2842           deltatw(k) = 0.
    2843           deltaqw(k) = 0.
    2844           dth(k) = 0.
    2845         ENDDO
    2846       ELSE
    2847         if(prt_level.ge.10) print*,'wape2>0'
    2848         Cstar2 = stark*sqrt(2.*wape2)
    2849 
    2850       ENDIF
    2851 
    2852       ktopw = ktop
    2853 
    2854       IF (ktopw .gt. 0) then
    2855 
    2856 Cjyg1     Utilisation d'un h_efficace constant ( ~ feeding layer)
    2857 ccc       heff = 600.
    2858 C      Utilisation de la hauteur hw
    2859 cc       heff = 0.7*hw
    2860        heff = hw
    2861 
    2862        FIP = 0.5*rho(ktopw)*Cstar2**3*heff*2*sqrt(sigmaw*wdens*3.14)
    2863        FIP = alpk * FIP
    2864 Cjyg2
    2865        ELSE
    2866          FIP = 0.
    2867        ENDIF
    2868 
    2869 
    2870 C   Limitation de sigmaw
    2871 c
    2872 C   sécurité : si le wake occuppe plus de 90 % de la surface de la maille,
    2873 C              alors il disparait en se mélangeant à la partie undisturbed
    2874 
    2875 ! correction NICOLAS     .     ((wape.ge.wape2).and.(wape2.le.1.0))) THEN
    2876       IF ((sigmaw.GT.0.9).or.
    2877      .     ((wape.ge.wape2).and.(wape2.le.1.0)).or.(ktopw.le.2)) THEN
    2878 cIM cf NR/JYG 251108    .     ((wape.ge.wape2).and.(wape2.le.1.0))) THEN
    2879 c      IF (sigmaw.GT.0.9) THEN
    2880         DO k = 1,klev
    2881           dtls(k) = 0.
    2882           dqls(k) = 0.
    2883           deltatw(k) = 0.
    2884           deltaqw(k) = 0.
    2885         ENDDO
    2886         wape = 0.
    2887         hw = hwmin
    2888         sigmaw = sigmad
    2889         fip = 0.
    2890       ENDIF
    2891 
    2892       RETURN
    2893       END
    2894 
    2895 
    2896 
     2598      END IF
     2599    END DO
     260065  CONTINUE
     2601
     2602    ! -2/ dth integral
     2603
     2604    sum_dth = 0.
     2605    dthmin = -delta_t_min
     2606    z = 0.
     2607
     2608    DO k = 1, klev
     2609      dz = -(max(ph(k+1),ptop_provis)-ph(k))/(rho(k)*rg)
     2610      IF (dz<=0) GO TO 70
     2611      z = z + dz
     2612      sum_dth = sum_dth + dth(k)*dz
     2613      dthmin = min(dthmin, dth(k))
     2614    END DO
     261570  CONTINUE
     2616
     2617    ! -3/ height of triangle with area= sum_dth and base = dthmin
     2618
     2619    hw = 2.*sum_dth/min(dthmin, -0.5)
     2620    hw = max(hwmin, hw)
     2621
     2622    ! -4/ now, get Ptop
     2623
     2624    ktop = 0
     2625    z = 0.
     2626
     2627    DO k = 1, klev
     2628      dz = min(-(ph(k+1)-ph(k))/(rho(k)*rg), hw-z)
     2629      IF (dz<=0) GO TO 75
     2630      z = z + dz
     2631      ptop = ph(k) - rho(k)*rg*dz
     2632      ktop = k
     2633    END DO
     263475  CONTINUE
     2635
     2636    ! -5/Correct ktop and ptop
     2637
     2638    ptop_new = ptop
     2639
     2640    DO k = ktop, 2, -1
     2641      IF (dth(k)>-delta_t_min .AND. dth(k-1)<-delta_t_min) THEN
     2642        ptop_new = ((dth(k)+delta_t_min)*p(k-1)-(dth(k-1)+delta_t_min)*p(k))/ &
     2643          (dth(k)-dth(k-1))
     2644        GO TO 275
     2645      END IF
     2646    END DO
     2647275 CONTINUE
     2648
     2649    ptop = ptop_new
     2650
     2651    DO k = klev, 1, -1
     2652      IF (ph(k+1)<ptop) ktop = k
     2653    END DO
     2654
     2655    ! -6/ Set deltatw & deltaqw to 0 above kupper
     2656
     2657    DO k = kupper, klev
     2658      deltatw(k) = 0.
     2659      deltaqw(k) = 0.
     2660    END DO
     2661
     2662    ! ------------------------------------------------------------------
     2663  END DO ! end sub-timestep loop
     2664  ! -----------------------------------------------------------------
     2665
     2666  ! Get back to tendencies per second
     2667
     2668  DO k = 1, kupper - 1
     2669    dtls(k) = dtls(k)/dtime
     2670    dqls(k) = dqls(k)/dtime
     2671    d_deltatw2(k) = d_deltatw2(k)/dtime
     2672    d_deltaqw2(k) = d_deltaqw2(k)/dtime
     2673    d_deltat_gw(k) = d_deltat_gw(k)/dtime
     2674  END DO
     2675
     2676  ! 2.1 - Undisturbed area and Wake integrals
     2677  ! ---------------------------------------------------------
     2678
     2679  z = 0.
     2680  sum_thu = 0.
     2681  sum_tu = 0.
     2682  sum_qu = 0.
     2683  sum_thvu = 0.
     2684  sum_dth = 0.
     2685  sum_dq = 0.
     2686  sum_rho = 0.
     2687  sum_dtdwn = 0.
     2688  sum_dqdwn = 0.
     2689
     2690  av_thu = 0.
     2691  av_tu = 0.
     2692  av_qu = 0.
     2693  av_thvu = 0.
     2694  av_dth = 0.
     2695  av_dq = 0.
     2696  av_rho = 0.
     2697  av_dtdwn = 0.
     2698  av_dqdwn = 0.
     2699
     2700  ! Potential temperatures and humidity
     2701  ! ----------------------------------------------------------
     2702
     2703  DO k = 1, klev
     2704    rho(k) = p(k)/(rd*te(k))
     2705    IF (k==1) THEN
     2706      rhoh(k) = ph(k)/(rd*te(k))
     2707      zhh(k) = 0
     2708    ELSE
     2709      rhoh(k) = ph(k)*2./(rd*(te(k)+te(k-1)))
     2710      zhh(k) = (ph(k)-ph(k-1))/(-rhoh(k)*rg) + zhh(k-1)
     2711    END IF
     2712    the(k) = te(k)/ppi(k)
     2713    thu(k) = (te(k)-deltatw(k)*sigmaw)/ppi(k)
     2714    tu(k) = te(k) - deltatw(k)*sigmaw
     2715    qu(k) = qe(k) - deltaqw(k)*sigmaw
     2716    rhow(k) = p(k)/(rd*(te(k)+deltatw(k)))
     2717    dth(k) = deltatw(k)/ppi(k)
     2718
     2719  END DO
     2720
     2721  ! Integrals (and wake top level number)
     2722  ! -----------------------------------------------------------
     2723
     2724  ! Initialize sum_thvu to 1st level virt. pot. temp.
     2725
     2726  z = 1.
     2727  dz = 1.
     2728  sum_thvu = thu(1)*(1.+eps*qu(1))*dz
     2729  sum_dth = 0.
     2730
     2731  DO k = 1, klev
     2732    dz = -(max(ph(k+1),ptop)-ph(k))/(rho(k)*rg)
     2733
     2734    IF (dz<=0) GO TO 51
     2735    z = z + dz
     2736    sum_thu = sum_thu + thu(k)*dz
     2737    sum_tu = sum_tu + tu(k)*dz
     2738    sum_qu = sum_qu + qu(k)*dz
     2739    sum_thvu = sum_thvu + thu(k)*(1.+eps*qu(k))*dz
     2740    sum_dth = sum_dth + dth(k)*dz
     2741    sum_dq = sum_dq + deltaqw(k)*dz
     2742    sum_rho = sum_rho + rhow(k)*dz
     2743    sum_dtdwn = sum_dtdwn + dtdwn(k)*dz
     2744    sum_dqdwn = sum_dqdwn + dqdwn(k)*dz
     2745  END DO
     274651 CONTINUE
     2747
     2748  hw0 = z
     2749
     2750  ! 2.1 - WAPE and mean forcing computation
     2751  ! -------------------------------------------------------------
     2752
     2753  ! Means
     2754
     2755  av_thu = sum_thu/hw0
     2756  av_tu = sum_tu/hw0
     2757  av_qu = sum_qu/hw0
     2758  av_thvu = sum_thvu/hw0
     2759  av_dth = sum_dth/hw0
     2760  av_dq = sum_dq/hw0
     2761  av_rho = sum_rho/hw0
     2762  av_dtdwn = sum_dtdwn/hw0
     2763  av_dqdwn = sum_dqdwn/hw0
     2764
     2765  wape2 = -rg*hw0*(av_dth+eps*(av_thu*av_dq+av_dth*av_qu+av_dth*av_dq))/ &
     2766    av_thvu
     2767
     2768
     2769  ! 2.2 Prognostic variable update
     2770  ! ------------------------------------------------------------
     2771
     2772  ! Filter out bad wakes
     2773
     2774  IF (wape2<0.) THEN
     2775    IF (prt_level>=10) PRINT *, 'wape2<0'
     2776    wape2 = 0.
     2777    hw = hwmin
     2778    sigmaw = max(sigmad, sigd_con)
     2779    fip = 0.
     2780    DO k = 1, klev
     2781      deltatw(k) = 0.
     2782      deltaqw(k) = 0.
     2783      dth(k) = 0.
     2784    END DO
     2785  ELSE
     2786    IF (prt_level>=10) PRINT *, 'wape2>0'
     2787    cstar2 = stark*sqrt(2.*wape2)
     2788
     2789  END IF
     2790
     2791  ktopw = ktop
     2792
     2793  IF (ktopw>0) THEN
     2794
     2795    ! jyg1     Utilisation d'un h_efficace constant ( ~ feeding layer)
     2796    ! cc       heff = 600.
     2797    ! Utilisation de la hauteur hw
     2798    ! c       heff = 0.7*hw
     2799    heff = hw
     2800
     2801    fip = 0.5*rho(ktopw)*cstar2**3*heff*2*sqrt(sigmaw*wdens*3.14)
     2802    fip = alpk*fip
     2803    ! jyg2
     2804  ELSE
     2805    fip = 0.
     2806  END IF
     2807
     2808
     2809  ! Limitation de sigmaw
     2810
     2811  ! sécurité : si le wake occuppe plus de 90 % de la surface de la maille,
     2812  ! alors il disparait en se mélangeant à la partie undisturbed
     2813
     2814  ! correction NICOLAS     .     ((wape.ge.wape2).and.(wape2.le.1.0))) THEN
     2815  IF ((sigmaw>0.9) .OR. ((wape>=wape2) .AND. (wape2<= &
     2816      1.0)) .OR. (ktopw<=2)) THEN
     2817    ! IM cf NR/JYG 251108    .     ((wape.ge.wape2).and.(wape2.le.1.0))) THEN
     2818    ! IF (sigmaw.GT.0.9) THEN
     2819    DO k = 1, klev
     2820      dtls(k) = 0.
     2821      dqls(k) = 0.
     2822      deltatw(k) = 0.
     2823      deltaqw(k) = 0.
     2824    END DO
     2825    wape = 0.
     2826    hw = hwmin
     2827    sigmaw = sigmad
     2828    fip = 0.
     2829  END IF
     2830
     2831  RETURN
     2832END SUBROUTINE wake_scal
     2833
     2834
     2835
Note: See TracChangeset for help on using the changeset viewer.