Changeset 3208


Ignore:
Timestamp:
Feb 16, 2018, 12:42:18 PM (7 years ago)
Author:
jyg
Message:

Implementation of a first crude model of the
dynamic of wake population.

Location:
LMDZ6/trunk/libf/phylmd
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/trunk/libf/phylmd/add_wake_tend.F90

    r2635 r3208  
    1 SUBROUTINE add_wake_tend(zddeltat, zddeltaq, zds, zddens, zoccur, text, abortphy)
     1SUBROUTINE add_wake_tend(zddeltat, zddeltaq, zds, zddensaw, zddensw, zoccur, text, abortphy)
    22!===================================================================
    33! Ajoute les tendances liées aux diverses parametrisations physiques aux
     
    99
    1010USE dimphy, ONLY: klon, klev
    11 USE phys_state_var_mod, ONLY: wake_deltat, wake_deltaq, wake_s, wake_dens
     11USE phys_state_var_mod, ONLY: wake_deltat, wake_deltaq, wake_s,  &
     12                              awake_dens, wake_dens
    1213
    1314USE print_control_mod, ONLY: prt_level
     
    1718!------------
    1819  REAL, DIMENSION(klon, klev),   INTENT (IN)         :: zddeltat, zddeltaq
    19   REAL, DIMENSION(klon),         INTENT (IN)         :: zds, zddens
     20  REAL, DIMENSION(klon),         INTENT (IN)         :: zds, zddensaw, zddensw
    2021  INTEGER, DIMENSION(klon),      INTENT (IN)         :: zoccur
    2122  CHARACTER*(*),                 INTENT (IN)         :: text
     
    5354         DO i = 1, klon
    5455           IF (zoccur(i) .GE. 1) THEN
    55              wake_s(i)    = wake_s(i)    + zds(i)
    56              wake_dens(i) = wake_dens(i) + zddens(i)
     56             wake_s(i)     = wake_s(i)    + zds(i)
     57             awake_dens(i) = awake_dens(i) + zddensaw(i)
     58             wake_dens(i)  = wake_dens(i) + zddensw(i)
    5759           ELSE
    58              wake_s(i)    = 0.
    59              wake_dens(i) = 0.
     60             wake_s(i)     = 0.
     61             awake_dens(i) = 0.
     62             wake_dens(i)  = 0.
    6063           ENDIF   ! (zoccur(i) .GE. 1)
    6164         END DO
  • LMDZ6/trunk/libf/phylmd/alpale_th.F90

    r3073 r3208  
    33                       ale_bl_trig, ale_bl_stat, ale_bl,  &
    44                       alp_bl, alp_bl_stat, &
    5                        proba_notrig, random_notrig)
     5                       proba_notrig, random_notrig, birth_rate,  &
     6                       q_alp)
    67
    78! **************************************************************
     
    4243  REAL, DIMENSION(klon), INTENT(OUT)                         :: random_notrig
    4344
     45  REAL, DIMENSION(klon), INTENT(OUT)                         :: birth_rate
     46  REAL, DIMENSION(klon), INTENT(OUT)                         :: q_alp
     47
    4448  include "thermcell.h"
    4549
     
    5357  REAL, DIMENSION(klon)                                      :: ale_bl_ref
    5458  REAL, DIMENSION(klon)                                      :: tau_trig
    55   REAL, DIMENSION(klon)                                      :: birth_rate
    5659!
    5760    !$OMP THREADPRIVATE(random_notrig_max)
     
    103106             !
    104107             IF (prt_level .GE. 10) THEN
    105                 print *,'cin, ale_bl_stat, alp_bl_stat ', &
    106                      cin, ale_bl_stat, alp_bl_stat
     108                print *,'cin, ale_bl_stat, alp_bl, alp_bl_stat ', &
     109                     cin, ale_bl_stat, alp_bl, alp_bl_stat
    107110             ENDIF
    108111
     
    141144                         ale_bl_trig(i)=0.
    142145                      endif
     146                      birth_rate(i) = n2(i)*exp(-s_trig/s2(i))/(tau_trig(i)*cell_area(i))
     147!!!                      birth_rate(i) = max(birth_rate(i),1.e-18)
     148                      q_alp(i) = alp_bl(i)/max(birth_rate(i),1.e-18)
    143149                   else
    144150!!jyg                      proba_notrig(i)=1.
     151                      birth_rate(i) = 0.
    145152                      random_notrig(i)=0.
    146153                      ale_bl_trig(i)=0.
     154                      q_alp(i) = 0.
    147155                   endif
    148156                enddo
     
    160168                         ale_bl_trig(i)=0.
    161169                      endif
     170                      birth_rate(i) = n2(i)*exp(-s_trig/s2(i))/(tau_trig(i)*cell_area(i))
     171!!!                      birth_rate(i) = max(birth_rate(i),1.e-18)
     172                      q_alp(i) = alp_bl(i)/max(birth_rate(i),1.e-18)
    162173                   else
    163174!!jyg                      proba_notrig(i)=1.
     175                      birth_rate(i) = 0.
    164176                      random_notrig(i)=0.
    165177                      ale_bl_trig(i)=0.
     178                      q_alp(i) = 0.
    166179                   endif
    167180                enddo
     
    257270              birth_number = n2(i)*exp(-s_trig/s2(i))
    258271              birth_rate(i) = birth_number/(tau_trig(i)*cell_area(i))
     272!!!              birth_rate(i) = max(birth_rate(i),1.e-18)
    259273              proba_notrig(i)=proba_notrig(i)*exp(-birth_number*dtime/tau_trig(i))
     274              q_alp(i) = alp_bl(i)/max(birth_rate(i),1.e-18)
    260275              Alp_bl(i) = Alp_bl(i)* &
    261276                          umexp(-birth_number*cv_feed_area/cell_area(i))/ &
     
    264279          else
    265280!!jyg              proba_notrig(i)=1.
     281              birth_rate(i)=0.
    266282              random_notrig(i)=0.
    267283              alp_bl(i)=0.
     284              q_alp(i) = 0.
    268285           endif
    269286        enddo
     
    291308
    292309          IF (prt_level .GE. 10) THEN
    293              print *,'ale_bl_trig, alp_bl_stat ',ale_bl_trig, alp_bl_stat
     310             print *,'alpale_th: ale_bl_trig, alp_bl_stat, birth_rate, q_alp ', &
     311                      ale_bl_trig(1), alp_bl_stat(1), birth_rate(1), q_alp(1)
    294312          ENDIF
    295313
  • LMDZ6/trunk/libf/phylmd/calwake.F90

    r3000 r3208  
    44SUBROUTINE calwake(iflag_wake_tend, paprs, pplay, dtime, &
    55    t, q, omgb, &
    6     dt_dwn, dq_dwn, m_dwn, m_up, dt_a, dq_a, &
    7     sigd, &
    8     wake_deltat, wake_deltaq, wake_s, wake_dens, &
     6    dt_dwn, dq_dwn, m_dwn, m_up, dt_a, dq_a, wgen, &
     7    sigd, Cin, &
     8    wake_deltat, wake_deltaq, wake_s, awake_dens, wake_dens, &
    99    wake_dth, wake_h, &
    1010    wake_pe, wake_fip, wake_gfl, &
     
    1414    wake_omg, wake_dp_deltomg, &
    1515    wake_spread, wake_cstar, wake_d_deltat_gw, &
    16     wake_ddeltat, wake_ddeltaq, wake_ds, wake_ddens)
     16    wake_ddeltat, wake_ddeltaq, wake_ds, awake_ddens, wake_ddens)
    1717  ! **************************************************************
    1818  ! *
     
    4545  REAL, DIMENSION(klon, klev),   INTENT (IN)         :: m_up, m_dwn
    4646  REAL, DIMENSION(klon, klev),   INTENT (IN)         :: dt_a, dq_a
     47  REAL, DIMENSION(klon),         INTENT (IN)         :: wgen
    4748  REAL, DIMENSION(klon),         INTENT (IN)         :: sigd
     49  REAL, DIMENSION(klon),         INTENT (IN)         :: Cin
    4850  ! Input/Output
    4951  ! ------------
    5052  REAL, DIMENSION(klon, klev),   INTENT (INOUT)      :: wake_deltat, wake_deltaq
    5153  REAL, DIMENSION(klon),         INTENT (INOUT)      :: wake_s
    52   REAL, DIMENSION(klon),         INTENT (INOUT)      :: wake_dens
     54  REAL, DIMENSION(klon),         INTENT (INOUT)      :: awake_dens, wake_dens
    5355  ! Output
    5456  ! ------
     
    6769  REAL, DIMENSION(klon),         INTENT (OUT)        :: wake_cstar
    6870  REAL, DIMENSION(klon, klev),   INTENT (OUT)        :: wake_ddeltat, wake_ddeltaq
    69   REAL, DIMENSION(klon),         INTENT (OUT)        :: wake_ds, wake_ddens
     71  REAL, DIMENSION(klon),         INTENT (OUT)        :: wake_ds, awake_ddens, wake_ddens
    7072
    7173
     
    8890  REAL, DIMENSION(klon, klev)                        :: tx, qx
    8991  REAL, DIMENSION(klon)                              :: hw, wape, fip, gfl
    90   REAL, DIMENSION(klon)                              :: sigmaw, wdens
     92  REAL, DIMENSION(klon)                              :: sigmaw, awdens, wdens
    9193  REAL, DIMENSION(klon, klev)                        :: omgbdth
    9294  REAL, DIMENSION(klon, klev)                        :: dp_omgb
     
    99101  REAL, DIMENSION(klon, klev)                        :: d_deltat_gw
    100102  REAL, DIMENSION(klon, klev)                        :: d_deltatw, d_deltaqw
    101   REAL, DIMENSION(klon)                              :: d_sigmaw, d_wdens
     103  REAL, DIMENSION(klon)                              :: d_sigmaw, d_awdens, d_wdens
    102104
    103105  REAL                                               :: rdcp
     
    105107
    106108  IF (prt_level >= 10) THEN
    107     print *, '-> calwake, wake_s input ', wake_s(1)
     109    print *, '-> calwake, wake_s, wgen input ', wake_s(1), wgen(1)
    108110  ENDIF
    109111
     
    147149d_deltaqw(:,:) = 0.
    148150d_sigmaw(:) = 0.
     151d_awdens(:) = 0.
    149152d_wdens(:) = 0.
    150153!
     
    179182
    180183  DO i = 1, klon
     184    awdens(i) = max(0., awake_dens(i))
    181185    wdens(i) = max(0., wake_dens(i))
    182186  END DO
     
    206210  CALL wake(znatsurf, p, ph, pi, dtime, &
    207211    te, qe, omgbe, &
    208     dtdwn, dqdwn, amdwn, amup, dta, dqa, &
    209     sigd0, &
    210     dtw, dqw, sigmaw, wdens, &                                   ! state variables
     212    dtdwn, dqdwn, amdwn, amup, dta, dqa, wgen, &
     213    sigd0, Cin, &
     214    dtw, dqw, sigmaw, awdens, wdens, &                                   ! state variables
    211215    dth, hw, wape, fip, gfl, &
    212216    dtls, dqls, ktopw, omgbdth, dp_omgb, tx, qx, &
    213217    dtke, dqke, omg, dp_deltomg, spread, cstar, &
    214218    d_deltat_gw, &
    215     d_deltatw, d_deltaqw, d_sigmaw, d_wdens)                     ! tendencies
     219    d_deltatw, d_deltaqw, d_sigmaw, d_awdens, d_wdens)                     ! tendencies
    216220
    217221!
     
    274278    IF (ktopw(i)>0) THEN
    275279      wake_ds(i) = d_sigmaw(i)*dtime
     280      awake_ddens(i) = d_awdens(i)*dtime
    276281      wake_ddens(i) = d_wdens(i)*dtime
    277282    ELSE
     
    298303    DO i = 1, klon
    299304      wake_s(i) = sigmaw(i)
     305      awake_dens(i) = awdens(i)
    300306      wake_dens(i) = wdens(i)
    301307    END DO
  • LMDZ6/trunk/libf/phylmd/phys_local_var_mod.F90

    r3179 r3208  
    277277    REAL, SAVE, ALLOCATABLE,DIMENSION(:,:)          :: d_deltat_wk, d_deltaq_wk
    278278!$OMP THREADPRIVATE(d_deltat_wk, d_deltaq_wk)
    279       REAL,ALLOCATABLE,SAVE,DIMENSION(:)            :: d_s_wk, d_dens_wk
    280 !$OMP THREADPRIVATE(d_s_wk, d_dens_wk)
     279      REAL,ALLOCATABLE,SAVE,DIMENSION(:)            :: d_s_wk, d_dens_a_wk, d_dens_wk
     280!$OMP THREADPRIVATE(d_s_wk, d_dens_a_wk, d_dens_wk)
    281281    REAL, SAVE, ALLOCATABLE,DIMENSION(:,:)          :: d_deltat_wk_gw, d_deltaq_wk_gw
    282282!$OMP THREADPRIVATE(d_deltat_wk_gw, d_deltaq_wk_gw)
     
    383383      REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: proba_notrig, random_notrig
    384384!$OMP THREADPRIVATE(proba_notrig, random_notrig)
     385      REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: cv_gen
     386!$OMP THREADPRIVATE(cv_gen)
    385387      REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: fsolsw, wfbils, wfbilo
    386388!$OMP THREADPRIVATE(fsolsw, wfbils, wfbilo)
     
    677679      ALLOCATE(wake_omg(klon, klev))
    678680      ALLOCATE(d_deltat_wk(klon, klev), d_deltaq_wk(klon, klev))
    679       ALLOCATE(d_s_wk(klon), d_dens_wk(klon))
     681      ALLOCATE(d_s_wk(klon), d_dens_a_wk(klon), d_dens_wk(klon))
    680682      ALLOCATE(d_deltat_wk_gw(klon, klev), d_deltaq_wk_gw(klon, klev))
    681683      ALLOCATE(d_deltat_vdf(klon, klev), d_deltaq_vdf(klon, klev))
     
    735737      ALLOCATE(alp_bl_stat(klon), n2(klon), s2(klon))
    736738      ALLOCATE(proba_notrig(klon), random_notrig(klon))
     739      ALLOCATE(cv_gen(klon))
    737740
    738741      ALLOCATE(dnwd0(klon, klev))
     
    968971      DEALLOCATE(wake_omg)
    969972      DEALLOCATE(d_deltat_wk, d_deltaq_wk)
    970       DEALLOCATE(d_s_wk, d_dens_wk)
     973      DEALLOCATE(d_s_wk, d_dens_a_wk, d_dens_wk)
    971974      DEALLOCATE(d_deltat_wk_gw, d_deltaq_wk_gw)
    972975      DEALLOCATE(d_deltat_vdf, d_deltaq_vdf)
     
    10231026      DEALLOCATE(alp_bl_stat, n2, s2)
    10241027      DEALLOCATE(proba_notrig, random_notrig)
     1028      DEALLOCATE(cv_gen)
    10251029
    10261030      DEALLOCATE(dnwd0)
  • LMDZ6/trunk/libf/phylmd/phys_output_ctrlout_mod.F90

    r3171 r3208  
    15461546  TYPE(ctrl_out), SAVE :: o_dqwak2d = ctrl_out((/ 4, 5, 10, 10, 10, 10, 11, 11, 11, 11/), &
    15471547    'dqwak2d', 'Wake dQ', '(kg/m2)/s', (/ ('', i=1, 10) /))
     1548  TYPE(ctrl_out), SAVE :: o_cv_gen = ctrl_out((/ 4, 5, 10, 10, 10, 10, 11, 11, 11, 11/), &
     1549    'cv_gen', 'Cumulonimbus genesis', '1/(m2 s)', (/ ('', i=1, 10) /))
    15481550  TYPE(ctrl_out), SAVE :: o_wake_h = ctrl_out((/ 4, 5, 10, 10, 10, 10, 11, 11, 11, 11/), &
    15491551    'wake_h', 'wake_h', '-', (/ ('', i=1, 10) /))
     1552  TYPE(ctrl_out), SAVE :: o_wake_dens = ctrl_out((/ 4, 5, 10, 10, 10, 10, 11, 11, 11, 11/), &
     1553    'wake_dens', 'number of wakes per m2', '1/m2', (/ ('', i=1, 10) /))
    15501554  TYPE(ctrl_out), SAVE :: o_wake_s = ctrl_out((/ 4, 5, 10, 10, 10, 10, 11, 11, 11, 11/), &
    15511555    'wake_s', 'wake_s', '-', (/ ('', i=1, 10) /))
     
    15551559    'wake_deltaq', 'wake_deltaq', ' ', (/ ('', i=1, 10) /))
    15561560  TYPE(ctrl_out), SAVE :: o_wake_omg = ctrl_out((/ 4, 5, 10, 10, 10, 10, 11, 11, 11, 11/), &
    1557     'wake_omg', 'wake_omg', ' ', (/ ('', i=1, 10) /))
     1561    'wake_omg', 'wake_omg', 'Pa/s', (/ ('', i=1, 10) /))
    15581562  TYPE(ctrl_out), SAVE :: o_wdtrainA = ctrl_out((/ 4, 5, 10,  4, 10, 10, 11, 11, 11, 11 /), &
    15591563    'wdtrainA', 'precipitation from AA', '-', (/ ('', i=1, 10) /))
  • LMDZ6/trunk/libf/phylmd/phys_output_write_mod.F90

    r3179 r3208  
    8383         o_cdragh_x   , o_cdragh_w   , o_cdragm_x   , o_cdragm_w   , &
    8484         o_kh         , o_kh_x       , o_kh_w       , &
    85          o_ale, o_alp, o_cin, o_WAPE, o_wake_h, &
     85         o_ale, o_alp, o_cin, o_WAPE, o_wake_h, o_cv_gen, o_wake_dens, &
    8686         o_wake_s, o_wake_deltat, o_wake_deltaq, &
    8787         o_wake_omg, o_dtwak, o_dqwak, o_dqwak2d, o_Vprecip, &
     
    226226         wstar, cape, ema_pcb, ema_pct, &
    227227         ema_cbmf, Ma, fm_therm, ale_bl, alp_bl, ale, &
    228          alp, cin, wake_pe, wake_s, wake_deltat, &
     228         alp, cin, wake_pe, wake_dens, wake_s, wake_deltat, &
    229229         wake_deltaq, ftd, fqd, ale_bl_trig, albsol1, &
    230230         ale_wake, ale_bl_stat, &
     
    263263         cdragh_x   ,cdragh_w   ,cdragm_x   ,cdragm_w   , &
    264264         kh         ,kh_x       ,kh_w       , &
    265          wake_h, &
     265         cv_gen, wake_h, &
    266266         wake_omg, d_t_wake, d_q_wake, Vprecip, &
    267267         wdtrainA, wdtrainM, n2, s2, proba_notrig, &
     
    11371137             CALL histwrite_phy(o_cin, cin)
    11381138             CALL histwrite_phy(o_WAPE, wake_pe)
     1139             CALL histwrite_phy(o_cv_gen, cv_gen)
    11391140             CALL histwrite_phy(o_wake_h, wake_h)
     1141             CALL histwrite_phy(o_wake_dens, wake_dens)
    11401142             CALL histwrite_phy(o_wake_s, wake_s)
    11411143             CALL histwrite_phy(o_wake_deltat, wake_deltat)
  • LMDZ6/trunk/libf/phylmd/phys_state_var_mod.F90

    r3150 r3208  
    247247! wake_deltaq : ecart d'humidite avec la zone non perturbee
    248248! wake_s      : fraction surfacique occupee par la poche froide
     249! awake_dens  : number of active wakes per unit area
    249250! wake_dens   : number of wakes per unit area
    250251! wake_occ    : occurence of wakes (= 1 if wakes occur, =0 otherwise)
     
    258259      REAL,ALLOCATABLE,SAVE :: wake_s(:)
    259260!$OMP THREADPRIVATE(wake_s)
    260       REAL,ALLOCATABLE,SAVE :: wake_dens(:)
    261 !$OMP THREADPRIVATE(wake_dens)
     261      REAL,ALLOCATABLE,SAVE :: awake_dens(:), wake_dens(:)
     262!$OMP THREADPRIVATE(awake_dens, wake_dens)
    262263      REAL,ALLOCATABLE,SAVE :: wake_Cstar(:)
    263264!$OMP THREADPRIVATE(wake_Cstar)
     
    539540      ALLOCATE(wght_th(klon,klev))
    540541      ALLOCATE(wake_deltat(klon,klev), wake_deltaq(klon,klev))
    541       ALLOCATE(wake_s(klon), wake_dens(klon))
     542      ALLOCATE(wake_s(klon), awake_dens(klon), wake_dens(klon))
    542543      ALLOCATE(wake_Cstar(klon))
    543544      ALLOCATE(wake_pe(klon), wake_fip(klon))
     
    682683      deallocate(lalim_conv, wght_th)
    683684      deallocate(wake_deltat, wake_deltaq)
    684       deallocate(wake_s, wake_dens)
     685      deallocate(wake_s, awake_dens, wake_dens)
    685686      deallocate(wake_Cstar, wake_pe, wake_fip)
    686687!jyg<
  • LMDZ6/trunk/libf/phylmd/physiq_mod.F90

    r3199 r3208  
    151151       d_deltat_ajs_cv, d_deltaq_ajs_cv, & ! due to dry adjustment of (w) before convection
    152152                       ! tendencies of wake fractional area and wake number per unit area:
    153        d_s_wk,  d_dens_wk, &             ! due to wakes
    154 !!!       d_s_vdf, d_dens_vdf, &            ! due to vertical diffusion
    155 !!!       d_s_the, d_dens_the, &            ! due to thermals
     153       d_s_wk,  d_dens_a_wk,  d_dens_wk, &  ! due to wakes
     154!!!       d_s_vdf, d_dens_a_vdf, d_dens_vdf, & ! due to vertical diffusion
     155!!!       d_s_the, d_dens_a_the, d_dens_the, & ! due to thermals
    156156       !                                 
    157157       ptconv, ratqsc, &
     
    162162       alp_bl_stat, n2, s2,  &
    163163       proba_notrig, random_notrig,  &
     164       cv_gen,  &
    164165       !
    165166       dnwd0,  &
     
    23632364          d_deltaq_vdf(:,:) = d_q_vdf_w(:,:)-d_q_vdf_x(:,:)
    23642365          CALL add_wake_tend &
    2365              (d_deltat_vdf, d_deltaq_vdf, dsig0, ddens0, wkoccur1, 'vdf', abortphy)
     2366             (d_deltat_vdf, d_deltaq_vdf, dsig0, ddens0, ddens0, wkoccur1, 'vdf', abortphy)
    23662367       ELSE
    23672368          d_deltat_vdf(:,:) = 0.
     
    26062607             IF (iflag_adjwk == 2) THEN
    26072608               CALL add_wake_tend &
    2608                  (d_deltat_ajs_cv, d_deltaq_ajs_cv, dsig0, ddens0, wkoccur1, 'ajs_cv', abortphy)
     2609                 (d_deltat_ajs_cv, d_deltaq_ajs_cv, dsig0, ddens0, ddens0, wkoccur1, 'ajs_cv', abortphy)
    26092610             ENDIF  ! (iflag_adjwk == 2)
    26102611          ENDIF  ! (iflag_adjwk >= 1)
     
    29602961               t_seri, q_seri, omega,  &
    29612962               dt_dwn, dq_dwn, M_dwn, M_up,  &
    2962                dt_a, dq_a, &
    2963                sigd, &
    2964                wake_deltat, wake_deltaq, wake_s, wake_dens,  &
     2963               dt_a, dq_a, cv_gen, &
     2964               sigd, cin, &
     2965               wake_deltat, wake_deltaq, wake_s, awake_dens, wake_dens,  &
    29652966               wake_dth, wake_h,  &
    29662967!!               wake_pe, wake_fip, wake_gfl,  &
     
    29722973               wake_omg, wake_dp_deltomg,  &
    29732974               wake_spread, wake_Cstar, d_deltat_wk_gw,  &
    2974                d_deltat_wk, d_deltaq_wk, d_s_wk, d_dens_wk)
     2975               d_deltat_wk, d_deltaq_wk, d_s_wk, d_dens_a_wk, d_dens_wk)
    29752976          !
    29762977          !jyg    Reinitialize itapwk when wakes have been called
     
    29912992
    29922993         CALL add_wake_tend &
    2993             (d_deltat_wk, d_deltaq_wk, d_s_wk, d_dens_wk, wake_k, &
     2994            (d_deltat_wk, d_deltaq_wk, d_s_wk, d_dens_a_wk, d_dens_wk, wake_k, &
    29942995             'wake', abortphy)
    29952996          call prt_enerbil('wake',itap)
     
    31303131             IF (ok_bug_split_th) THEN
    31313132               CALL add_wake_tend &
    3132                    (d_deltat_the, d_deltaq_the, dsig0, ddens0, wkoccur1, 'the', abortphy)
     3133                   (d_deltat_the, d_deltaq_the, dsig0, ddens0, ddens0, wkoccur1, 'the', abortphy)
    31333134             ELSE
    31343135               CALL add_wake_tend &
    3135                    (d_deltat_the, d_deltaq_the, dsig0, ddens0, wake_k, 'the', abortphy)
     3136                   (d_deltat_the, d_deltaq_the, dsig0, ddens0, ddens0, wake_k, 'the', abortphy)
    31363137             ENDIF
    31373138             call prt_enerbil('the',itap)
     
    31483149                          ale_bl_trig, ale_bl_stat, ale_bl,  &
    31493150                          alp_bl, alp_bl_stat, &
    3150                           proba_notrig, random_notrig)
     3151                          proba_notrig, random_notrig, cv_gen)
    31513152          !>jyg
    31523153
  • LMDZ6/trunk/libf/phylmd/tend_to_tke.F90

    r3198 r3208  
    120120
    121121
    122  DO isrf=1,nsrf
     122 DO isrf=1,nbsrf
    123123    DO k=1,klev
    124124       DO i=1,klon
  • LMDZ6/trunk/libf/phylmd/wake.F90

    r2922 r3208  
    44SUBROUTINE wake(znatsurf, p, ph, pi, dtime, &
    55                te0, qe0, omgb, &
    6                 dtdwn, dqdwn, amdwn, amup, dta, dqa, &
    7                 sigd_con, &
    8                 deltatw, deltaqw, sigmaw, wdens, &                          ! state variables
     6                dtdwn, dqdwn, amdwn, amup, dta, dqa, wgen, &
     7                sigd_con, Cin, &
     8                deltatw, deltaqw, sigmaw, awdens, wdens, &                  ! state variables
    99                dth, hw, wape, fip, gfl, &
    1010                dtls, dqls, ktopw, omgbdth, dp_omgb, tu, qu, &
    1111                dtke, dqke, omg, dp_deltomg, spread, cstar, &
    1212                d_deltat_gw, &
    13                 d_deltatw2, d_deltaqw2, d_sigmaw2, d_wdens2)                ! tendencies
     13                d_deltatw2, d_deltaqw2, d_sigmaw2, d_awdens2, d_wdens2)     ! tendencies
    1414
    1515
     
    4848  ! dtls : large scale temperature tendency due to wake
    4949  ! dqls : large scale humidity tendency due to wake
    50   ! hw   : hauteur de la poche
     50  ! hw   : wake top hight (given by hw*deltatw(1)/2=wape)
    5151  ! dp_omgb : vertical gradient of large scale omega
     52  ! awdens  : densite de poches actives
    5253  ! wdens   : densite de poches
    5354  ! omgbdth: flux of Delta_Theta transported by LS omega
     
    7273  ! dta  : source de chaleur due courants satures et detrain  (K/s)
    7374  ! dqa  : source d'humidite due aux courants satures et detra (kg/kg/s)
     75  ! wgen : number of wakes generated per unit area and per sec (/m^2/s)
    7476  ! amdwn: flux de masse total des descentes, par unite de
    75   ! surface de la maille (kg/m2/s)
     77  !        surface de la maille (kg/m2/s)
    7678  ! amup : flux de masse total des ascendances, par unite de
    77   ! surface de la maille (kg/m2/s)
     79  !        surface de la maille (kg/m2/s)
     80  ! sigd_con:
     81  ! Cin  : convective inhibition
    7882  ! p    : pressions aux milieux des couches (Pa)
    7983  ! ph   : pressions aux interfaces (Pa)
     
    105109  ! deltatw0   : deltatw initial
    106110  ! deltaqw0   : deltaqw initial
    107   ! hw0    : hw initial
    108   ! sigmaw0: sigmaw initial
     111  ! hw0    : wake top hight (defined as the altitude at which deltatw=0)
    109112  ! amflux : horizontal mass flux through wake boundary
    110113  ! wdens_ref: initial number of wakes per unit area (3D) or per
     
    133136  REAL, DIMENSION (klon, klev),     INTENT(IN)          :: amdwn, amup
    134137  REAL, DIMENSION (klon, klev),     INTENT(IN)          :: dta, dqa
     138  REAL, DIMENSION (klon),           INTENT(IN)          :: wgen
    135139  REAL, DIMENSION (klon),           INTENT(IN)          :: sigd_con
     140  REAL, DIMENSION (klon),           INTENT(IN)          :: Cin
    136141
    137142  !
     
    140145  REAL, DIMENSION (klon, klev),     INTENT(INOUT)       :: deltatw, deltaqw
    141146  REAL, DIMENSION (klon),           INTENT(INOUT)       :: sigmaw
     147  REAL, DIMENSION (klon),           INTENT(INOUT)       :: awdens
    142148  REAL, DIMENSION (klon),           INTENT(INOUT)       :: wdens
    143149
     
    149155  REAL, DIMENSION (klon, klev),     INTENT(OUT)         :: dtls, dqls
    150156  REAL, DIMENSION (klon, klev),     INTENT(OUT)         :: dtke, dqke
    151   REAL, DIMENSION (klon, klev),     INTENT(OUT)         :: spread
     157  REAL, DIMENSION (klon, klev),     INTENT(OUT)         :: spread    !  unused (jyg)
    152158  REAL, DIMENSION (klon, klev),     INTENT(OUT)         :: omgbdth, omg
    153159  REAL, DIMENSION (klon, klev),     INTENT(OUT)         :: dp_omgb, dp_deltomg
     
    157163  ! Tendencies of state variables
    158164  REAL, DIMENSION (klon, klev),     INTENT(OUT)         :: d_deltatw2, d_deltaqw2
    159   REAL, DIMENSION (klon),           INTENT(OUT)         :: d_sigmaw2, d_wdens2
     165  REAL, DIMENSION (klon),           INTENT(OUT)         :: d_sigmaw2, d_awdens2, d_wdens2
    160166
    161167  ! Variables internes
     
    165171  INTEGER, SAVE                                         :: igout
    166172  !$OMP THREADPRIVATE(igout)
    167   REAL                                                  :: alon
    168173  LOGICAL, SAVE                                         :: first = .TRUE.
    169174  !$OMP THREADPRIVATE(first)
     
    176181  !$OMP THREADPRIVATE(stark, wdens_ref, coefgw, alpk, crep_upper, crep_sol)
    177182
     183  REAL, SAVE                                            :: tau_cv
     184  !$OMP THREADPRIVATE(tau_cv)
     185  REAL, SAVE                                            :: rzero, aa0 ! minimal wake radius and area
     186  !$OMP THREADPRIVATE(rzero, aa0)
     187
    178188  LOGICAL, SAVE                                         :: flag_wk_check_trgl
    179189  !$OMP THREADPRIVATE(flag_wk_check_trgl)
    180190  INTEGER, SAVE                                         :: iflag_wk_check_trgl
    181191  !$OMP THREADPRIVATE(iflag_wk_check_trgl)
     192  INTEGER, SAVE                                         :: iflag_wk_pop_dyn
     193  !$OMP THREADPRIVATE(iflag_wk_pop_dyn)
    182194
    183195  REAL                                                  :: delta_t_min
    184196  INTEGER                                               :: nsub
    185197  REAL                                                  :: dtimesub
    186   REAL                                                  :: sigmad, hwmin, wapecut
     198  REAL                                                  :: wdensmin
     199  REAL, SAVE                                            :: sigmad, hwmin, wapecut, cstart
     200  !$OMP THREADPRIVATE(sigmad, hwmin, wapecut, cstart)
    187201  REAL                                                  :: sigmaw_max
    188202  REAL                                                  :: dens_rate
     
    195209  REAL, DIMENSION (klon, klev)                          :: deltaqw0
    196210  REAL, DIMENSION (klon, klev)                          :: te, qe
    197   REAL, DIMENSION (klon)                                :: sigmaw0
    198211!!  REAL, DIMENSION (klon)                                :: sigmaw1
     212
     213  ! Variables liees a la dynamique de population
     214  REAL, DIMENSION(klon)                                 :: act
     215  REAL, DIMENSION(klon)                                 :: rad_wk, tau_wk_inv
     216  REAL, DIMENSION(klon)                                 :: f_shear
     217  REAL, DIMENSION(klon)                                 :: drdt
     218  REAL, DIMENSION(klon)                                 :: d_sig_gen, d_sig_death, d_sig_col
     219  REAL, DIMENSION(klon)                                 :: wape1_act, wape2_act
     220  LOGICAL, DIMENSION (klon)                             :: kill_wake
     221  INTEGER, SAVE                                         :: iflag_wk_act
     222  !$OMP THREADPRIVATE(iflag_wk_act)
     223  REAL                                                  :: drdt_pos
     224  REAL                                                  :: tau_wk_inv_min
    199225
    200226  ! Variables pour les GW
     
    204230  REAL, DIMENSION (klon, klev)                          :: tgw
    205231
    206   ! Variables liées au calcul de hw
     232  ! Variables liees au calcul de hw
    207233  REAL, DIMENSION (klon)                                :: ptop_provis, ptop, ptop_new
    208234  REAL, DIMENSION (klon)                                :: sum_dth
     
    211237  INTEGER, DIMENSION (klon)                             :: ktop, kupper
    212238
    213   ! Variables liées au test de la forme triangulaire du profil de Delta_theta
     239  ! Variables liees au test de la forme triangulaire du profil de Delta_theta
    214240  REAL, DIMENSION (klon)                                :: sum_half_dth
    215241  REAL, DIMENSION (klon)                                :: dz_half
     
    218244  REAL, DIMENSION (klon, klev)                          :: d_deltatw, d_deltaqw
    219245  REAL, DIMENSION (klon, klev)                          :: d_te, d_qe
     246  REAL, DIMENSION (klon)                                :: d_awdens, d_wdens
    220247  REAL, DIMENSION (klon)                                :: d_sigmaw, alpha
    221248  REAL, DIMENSION (klon)                                :: q0_min, q1_min
     
    228255  INTEGER                                               ::isubstep, k, i
    229256
     257  REAL                                                  :: wdens_targ
    230258  REAL                                                  :: sigmaw_targ
    231259
     
    273301  REAL, DIMENSION (klon, klev)                          :: detr
    274302
    275   REAL, DIMENSION(klon)                                 :: sigmaw_in   ! pour les prints
     303  REAL, DIMENSION(klon)                                 :: sigmaw_in             ! pour les prints
     304  REAL, DIMENSION(klon)                                 :: awdens_in, wdens_in   ! pour les prints
    276305
    277306  ! -------------------------------------------------------------------------
     
    284313  ! -------------------------------------------------------------------------
    285314
    286   DATA wapecut, sigmad, hwmin/5., .02, 10./
     315!!  DATA wapecut, sigmad, hwmin/5., .02, 10./
     316  DATA wapecut, sigmad, hwmin/1., .02, 10./
     317  DATA wdensmin/1.e-12/
    287318  ! cc nrlmd
    288319  DATA sigmaw_max/0.4/
    289320  DATA dens_rate/0.1/
     321  DATA rzero /5000./
    290322  ! cc
    291323  ! Longueur de maille (en m)
     
    293325
    294326  ! ALON = 3.e5
    295   alon = 1.E6
     327  ! alon = 1.E6
     328
     329  !  Provisionnal; to be suppressed when f_shear is parameterized
     330  f_shear(:) = 1.       ! 0. for strong shear, 1. for weak shear
    296331
    297332
     
    300335  ! coefgw : Coefficient pour les ondes de gravité
    301336  ! stark : Coefficient k dans Cstar=k*sqrt(2*WAPE)
    302   ! wdens : Densité de poche froide par maille
     337  ! wdens : Densité surfacique de poche froide
    303338  ! -------------------------------------------------------------------------
    304339
     
    321356  crep_sol = 1.0
    322357
     358  aa0 = 3.14*rzero*rzero
     359
     360  tau_cv = 4000.
     361
    323362  ! cc nrlmd Lecture du fichier wake_param.data
    324363  stark=0.33
    325364  CALL getin_p('stark',stark)
     365  cstart = stark*sqrt(2.*wapecut)
     366
    326367  alpk=0.25
    327368  CALL getin_p('alpk',alpk)
     
    334375  CALL getin_p('wdens_ref_l',wdens_ref(2))    !wake number per unit area ; land
    335376!>jyg
     377  iflag_wk_pop_dyn = 0
     378  CALL getin_p('iflag_wk_pop_dyn',iflag_wk_pop_dyn) ! switch between wdens prescribed
     379                                                    ! and wdens prognostic
     380  iflag_wk_act = 0
     381  CALL getin_p('iflag_wk_act',iflag_wk_act) ! 0: act(:)=0.
     382                                            ! 1: act(:)=1.
     383                                            ! 2: act(:)=f(Wape)
    336384  coefgw=4.
    337385  CALL getin_p('coefgw',coefgw)
     
    344392  WRITE(*,*) 'wdens_ref_l=', wdens_ref(2)
    345393!>jyg
     394  WRITE(*,*) 'iflag_wk_pop_dyn=',iflag_wk_pop_dyn
     395  WRITE(*,*) 'iflag_wk_act',iflag_wk_act
    346396  WRITE(*,*) 'coefgw=', coefgw
    347397
     
    357407 endif
    358408
     409 IF (iflag_wk_pop_dyn == 0) THEN
    359410  ! Initialisation de toutes des densites a wdens_ref.
    360411  ! Les densites peuvent evoluer si les poches debordent
    361412  ! (voir au tout debut de la boucle sur les substeps)
    362 !jyg<
    363 !!  wdens(:) = wdens_ref
    364   DO i = 1,klon
    365     wdens(i) = wdens_ref(znatsurf(i)+1)
    366   ENDDO
    367 !>jyg
     413  !jyg<
     414  !!  wdens(:) = wdens_ref
     415   DO i = 1,klon
     416     wdens(i) = wdens_ref(znatsurf(i)+1)
     417   ENDDO
     418  !>jyg
     419 ENDIF  ! (iflag_wk_pop_dyn == 0)
    368420
    369421  ! print*,'stark',stark
     
    415467      d_deltatw2(:,:) = 0.
    416468      d_deltaqw2(:,:) = 0.
     469
     470      IF (iflag_wk_act == 0) THEN
     471        act(:) = 0.
     472      ELSEIF (iflag_wk_act == 1) THEN
     473        act(:) = 1.
     474      ENDIF
     475
    417476!!  DO i = 1, klon
    418477!!   sigmaw_in(i) = sigmaw(i)
     
    425484  ! print*, 'sigmaw,sigd_con', sigmaw, sigd_con
    426485  ! ENDIF
     486  IF (iflag_wk_pop_dyn >=1) THEN
     487    DO i = 1, klon
     488      wdens_targ = max(wdens(i),wdensmin)
     489      d_wdens2(i) = wdens_targ - wdens(i)
     490      wdens(i) = wdens_targ
     491    END DO
     492  ELSE
     493    DO i = 1, klon
     494      d_awdens2(i) = 0.
     495      d_wdens2(i) = 0.
     496    END DO
     497  ENDIF  ! (iflag_wk_pop_dyn >=1)
     498!
    427499  DO i = 1, klon
    428500    ! c      sigmaw(i) = amax1(sigmaw(i),sigd_con(i))
     
    434506    sigmaw(i) = sigmaw_targ
    435507!>jyg
    436     sigmaw0(i) = sigmaw(i)
    437     wape(i) = 0.
    438     wape2(i) = 0.
    439     d_sigmaw(i) = 0.
    440     d_wdens2(i) = 0.
    441     ktopw(i) = 0
    442   END DO
     508  END DO
     509
     510!
     511  IF (iflag_wk_pop_dyn >= 1) THEN
     512    awdens_in(:) = awdens(:)
     513    wdens_in(:) = wdens(:)
     514!!    wdens(:) = wdens(:) + wgen(:)*dtime
     515!!    d_wdens2(:) = wgen(:)*dtime
     516!!  ELSE
     517  ENDIF  ! (iflag_wk_pop_dyn >= 1)
     518
     519  wape(:) = 0.
     520  wape2(:) = 0.
     521  d_sigmaw(:) = 0.
     522  ktopw(:) = 0
    443523!
    444524!<jyg
     
    833913      gwake(i) = .FALSE.
    834914    ELSE
     915      hw(i) = hw0(i)
    835916      cstar(i) = stark*sqrt(2.*wape(i))
    836917      gwake(i) = .TRUE.
     
    891972    ! cc           On calcule pour cela une densité wdens0 pour laquelle on
    892973    ! aurait un entrainement nul ---
     974    !jyg<
     975    ! Dans la configuration avec wdens prognostique, il s'agit d'un cas ou
     976    ! les poches sont insuffisantes pour accueillir tout le flux de masse
     977    ! des descentes unsaturees. Nous faisons alors l'hypothese que la
     978    ! convection profonde cree directement de nouvelles poches, sans passer
     979    ! par les thermiques. La nouvelle valeur de wdens est alors imposée.
     980
    893981    DO i = 1, klon
    894982      ! c       print *,' isubstep,wk_adv(i),cstar(i),wape(i) ',
     
    900988          ((1.-sigmaw(i))*omg(i,kupper(i)+1)/((ph(i,1)-pupper(i))*cstar(i)))**(2)
    901989        IF (wdens(i)<=wdens0*1.1) THEN
     990          IF (iflag_wk_pop_dyn >= 1) THEN
     991             d_wdens2(i) = d_wdens2(i) + wdens0 - wdens(i)
     992          ENDIF
    902993          wdens(i) = wdens0
    903994        END IF
     
    9091000    END DO
    9101001
    911     ! cc nrlmd
    912 
    9131002    DO i = 1, klon
    9141003      IF (wk_adv(i)) THEN
    9151004        gfl(i) = 2.*sqrt(3.14*wdens(i)*sigmaw(i))
     1005        rad_wk(i) = sqrt(sigmaw(i)/(3.14*wdens(i)))
    9161006!jyg<
    9171007!!        sigmaw(i) = amin1(sigmaw(i), sigmaw_max)
     
    9231013    END DO
    9241014
    925     DO i = 1, klon
    926       IF (wk_adv(i)) THEN
    927         ! cc nrlmd          Introduction du taux de mortalité des poches et
    928         ! test sur sigmaw_max=0.4
    929         ! cc         d_sigmaw(i) = gfl(i)*Cstar(i)*dtimesub
    930         IF (sigmaw(i)>=sigmaw_max) THEN
    931           death_rate(i) = gfl(i)*cstar(i)/sigmaw(i)
    932         ELSE
    933           death_rate(i) = 0.
    934         END IF
    935 
    936         d_sigmaw(i) = gfl(i)*cstar(i)*dtimesub - death_rate(i)*sigmaw(i)* &
    937           dtimesub
    938         ! $              - nat_rate(i)*sigmaw(i)*dtimesub
    939         ! c        print*, 'd_sigmaw(i),sigmaw(i),gfl(i),Cstar(i),wape(i),
    940         ! c     $  death_rate(i),ktop(i),kupper(i)',
    941         ! c     $                d_sigmaw(i),sigmaw(i),gfl(i),Cstar(i),wape(i),
    942         ! c     $  death_rate(i),ktop(i),kupper(i)
    943 
    944         ! sigmaw(i) =sigmaw(i) + gfl(i)*Cstar(i)*dtimesub
    945         ! sigmaw(i) =min(sigmaw(i),0.99)     !!!!!!!!
    946         ! wdens = wdens0/(10.*sigmaw)
    947         ! sigmaw =max(sigmaw,sigd_con)
    948         ! sigmaw =max(sigmaw,sigmad)
    949       END IF
    950     END DO
     1015    IF (iflag_wk_pop_dyn >= 1) THEN
     1016
     1017      IF (iflag_wk_act ==2) THEN
     1018      DO i = 1, klon
     1019        IF (wk_adv(i)) THEN
     1020          wape1_act(i) = abs(cin(i))
     1021          wape2_act(i) = 2.*wape1_act(i) + 1.
     1022          act(i) = min(1., max(0., (wape(i)-wape1_act(i)) / (wape2_act(i)-wape1_act(i)) ))
     1023        ENDIF  ! (wk_adv(i))
     1024      ENDDO
     1025      ENDIF  ! (iflag_wk_act ==2)
     1026
     1027
     1028      DO i = 1, klon
     1029        IF (wk_adv(i)) THEN
     1030!!          tau_wk(i) = max(rad_wk(i)/(3.*cstar(i))*((cstar(i)/cstart)**1.5 - 1), 100.)
     1031          tau_wk_inv(i) = max( (3.*cstar(i))/(rad_wk(i)*((cstar(i)/cstart)**1.5 - 1)), 0.)
     1032          tau_wk_inv_min = min(tau_wk_inv(i), 1./dtimesub)
     1033          drdt(i) = (cstar(i) - wgen(i)*(sigmaw(i)/wdens(i)-aa0)/gfl(i)) / &
     1034                    (1 - 2*sigmaw(i)*(1.-f_shear(i)))
     1035          drdt_pos=max(drdt(i),0.)
     1036
     1037!!          d_wdens(i) = ( wgen(i)*(1.+2.*(sigmaw(i)-sigmad)) &
     1038!!                     - wdens(i)*tau_wk_inv_min &
     1039!!                     - 2.*gfl(i)*wdens(i)*Cstar(i) )*dtimesub
     1040          d_awdens(i) = ( wgen(i) - (1./tau_cv)*(awdens(i) - act(i)*wdens(i)) )*dtimesub
     1041          d_wdens(i) = ( wgen(i) - (wdens(i)-awdens(i))*tau_wk_inv_min -  &
     1042                         2.*wdens(i)*gfl(i)*drdt_pos )*dtimesub
     1043          d_wdens(i) = max(d_wdens(i), wdensmin-wdens(i))
     1044
     1045!!          d_sigmaw(i) = ( (1.-2*f_shear(i)*sigmaw(i))*(gfl(i)*Cstar(i)+wgen(i)*sigmad/wdens(i)) &
     1046!!                      + 2.*f_shear(i)*wgen(i)*sigmaw(i)**2/wdens(i) &
     1047!!                      - sigmaw(i)*tau_wk_inv_min )*dtimesub
     1048          d_sig_gen(i) = wgen(i)*aa0
     1049          d_sig_death(i) = - sigmaw(i)*(1.-awdens(i)/wdens(i))*tau_wk_inv_min
     1050!!          d_sig_col(i) = - 2*f_shear(i)*sigmaw(i)*gfl(i)*drdt_pos
     1051          d_sig_col(i) = - 2*f_shear(i)*(2.*sigmaw(i)-wdens(i)*aa0)*gfl(i)*drdt_pos
     1052          d_sigmaw(i) = ( d_sig_gen(i) + d_sig_death(i) + d_sig_col(i) + gfl(i)*cstar(i) )*dtimesub
     1053          d_sigmaw(i) = max(d_sigmaw(i), sigmad-sigmaw(i))
     1054        ENDIF
     1055      ENDDO
     1056
     1057      IF (prt_level >= 10) THEN
     1058        print *,'wake, cstar(1), cstar(1)/cstart, rad_wk(1), tau_wk_inv(1), drdt(1) ', &
     1059                       cstar(1), cstar(1)/cstart, rad_wk(1), tau_wk_inv(1), drdt(1)
     1060        print *,'wake, wdens(1), awdens(1), act(1), d_awdens(1) ', &
     1061                       wdens(1), awdens(1), act(1), d_awdens(1)
     1062        print *,'wake, wgen, -(wdens-awdens)*tau_wk_inv, -2.*wdens*gfl*drdt_pos, d_wdens ', &
     1063                       wgen(1), -(wdens(1)-awdens(1))*tau_wk_inv(1), -2.*wdens(1)*gfl(1)*drdt_pos, d_wdens(1)
     1064        print *,'wake, d_sig_gen(1), d_sig_death(1), d_sig_col(1), d_sigmaw(1) ', &
     1065                       d_sig_gen(1), d_sig_death(1), d_sig_col(1), d_sigmaw(1)
     1066      ENDIF
     1067   
     1068    ELSE  !  (iflag_wk_pop_dyn >= 1)
     1069
     1070    ! cc nrlmd
     1071
     1072      DO i = 1, klon
     1073        IF (wk_adv(i)) THEN
     1074          ! cc nrlmd          Introduction du taux de mortalité des poches et
     1075          ! test sur sigmaw_max=0.4
     1076          ! cc         d_sigmaw(i) = gfl(i)*Cstar(i)*dtimesub
     1077          IF (sigmaw(i)>=sigmaw_max) THEN
     1078            death_rate(i) = gfl(i)*cstar(i)/sigmaw(i)
     1079          ELSE
     1080            death_rate(i) = 0.
     1081          END IF
     1082   
     1083          d_sigmaw(i) = gfl(i)*cstar(i)*dtimesub - death_rate(i)*sigmaw(i)* &
     1084            dtimesub
     1085          ! $              - nat_rate(i)*sigmaw(i)*dtimesub
     1086          ! c        print*, 'd_sigmaw(i),sigmaw(i),gfl(i),Cstar(i),wape(i),
     1087          ! c     $  death_rate(i),ktop(i),kupper(i)',
     1088          ! c     $              d_sigmaw(i),sigmaw(i),gfl(i),Cstar(i),wape(i),
     1089          ! c     $  death_rate(i),ktop(i),kupper(i)
     1090   
     1091          ! sigmaw(i) =sigmaw(i) + gfl(i)*Cstar(i)*dtimesub
     1092          ! sigmaw(i) =min(sigmaw(i),0.99)     !!!!!!!!
     1093          ! wdens = wdens0/(10.*sigmaw)
     1094          ! sigmaw =max(sigmaw,sigd_con)
     1095          ! sigmaw =max(sigmaw,sigmad)
     1096        END IF
     1097      END DO
     1098
     1099    ENDIF   !  (iflag_wk_pop_dyn >= 1)
     1100
    9511101
    9521102    ! calcul de la difference de vitesse verticale poche - zone non perturbee
     
    12231373
    12241374    ! Increment state variables
     1375!jyg<
     1376    IF (iflag_wk_pop_dyn >= 1) THEN
     1377      DO k = 1, klev
     1378        DO i = 1, klon
     1379          IF (wk_adv(i) .AND. k<=kupper(i)) THEN
     1380            detr(i,k) = - d_sig_death(i) - d_sig_col(i)     
     1381            entr(i,k) = d_sig_gen(i)
     1382          ENDIF
     1383        ENDDO
     1384      ENDDO
     1385      ELSE  ! (iflag_wk_pop_dyn >= 1)
     1386      DO k = 1, klev
     1387        DO i = 1, klon
     1388          IF (wk_adv(i) .AND. k<=kupper(i)) THEN
     1389            detr(i, k) = 0.
     1390   
     1391            entr(i, k) = 0.
     1392          ENDIF
     1393        ENDDO
     1394      ENDDO
     1395    ENDIF  ! (iflag_wk_pop_dyn >= 1)
     1396
     1397   
    12251398
    12261399    DO k = 1, klev
     
    12641437          ! cc nrlmd          Prise en compte du taux de mortalité
    12651438          ! cc               Définitions de entr, detr
    1266           detr(i, k) = 0.
    1267 
    1268           entr(i, k) = detr(i, k) + gfl(i)*cstar(i) + &
    1269             sigmaw(i)*(1.-sigmaw(i))*dp_deltomg(i, k)
    1270 
    1271           spread(i, k) = (entr(i,k)-detr(i,k))/sigmaw(i)
     1439!jyg<
     1440!!            detr(i, k) = 0.
     1441!!   
     1442!!            entr(i, k) = detr(i, k) + gfl(i)*cstar(i) + &
     1443!!              sigmaw(i)*(1.-sigmaw(i))*dp_deltomg(i, k)
     1444!!
     1445            entr(i, k) = entr(i,k) + gfl(i)*cstar(i) + &
     1446                         sigmaw(i)*(1.-sigmaw(i))*dp_deltomg(i, k)   
     1447!>jyg
     1448            spread(i, k) = (entr(i,k)-detr(i,k))/sigmaw(i)
     1449
    12721450          ! cc        spread(i,k) =
    12731451          ! (1.-sigmaw(i))*dp_deltomg(i,k)+gfl(i)*Cstar(i)/
     
    13841562      END DO
    13851563    END DO
     1564!
    13861565    DO i = 1, klon
    13871566      IF (wk_adv(i)) THEN
    13881567        sigmaw(i) = sigmaw(i) + d_sigmaw(i)
     1568        d_sigmaw2(i) = d_sigmaw2(i) + d_sigmaw(i)
     1569      END IF
     1570    END DO
    13891571!jyg<
    1390         d_sigmaw2(i) = d_sigmaw2(i) + d_sigmaw(i)
     1572    IF (iflag_wk_pop_dyn >= 1) THEN
     1573      DO i = 1, klon
     1574        IF (wk_adv(i)) THEN
     1575          awdens(i) = awdens(i) + d_awdens(i)
     1576          wdens(i) = wdens(i) + d_wdens(i)
     1577          d_awdens2(i) = d_awdens2(i) + d_awdens(i)
     1578          d_wdens2(i) = d_wdens2(i) + d_wdens(i)
     1579        END IF
     1580      END DO
     1581      DO i = 1, klon
     1582        IF (wk_adv(i)) THEN
     1583          wdens_targ = max(wdens(i),wdensmin)
     1584          d_wdens2(i) = d_wdens2(i) + wdens_targ - wdens(i)
     1585          wdens(i) = wdens_targ
     1586!
     1587          wdens_targ = min( max(awdens(i),0.), wdens(i) )
     1588          d_awdens2(i) = d_awdens2(i) + wdens_targ - awdens(i)
     1589          awdens(i) = wdens_targ
     1590        END IF
     1591      END DO
     1592      DO i = 1, klon
     1593        IF (wk_adv(i)) THEN
     1594          sigmaw_targ = max(sigmaw(i),sigmad)
     1595          d_sigmaw2(i) = d_sigmaw2(i) + sigmaw_targ - sigmaw(i)
     1596          sigmaw(i) = sigmaw_targ
     1597        END IF
     1598      END DO
     1599    ENDIF  ! (iflag_wk_pop_dyn >= 1)
    13911600!>jyg
    1392       END IF
    1393     END DO
    13941601
    13951602
     
    19012108  ! ENDDO
    19022109  ! cc
     2110
     2111  !jyg<
     2112  IF (iflag_wk_pop_dyn >= 1) THEN
     2113    DO i = 1, klon
     2114      kill_wake(i) = ((wape(i)>=wape2(i)) .AND. (wape2(i)<=wapecut)) .OR. (ktopw(i)<=2) .OR. &
     2115          .NOT. ok_qx_qw(i) .OR. (wdens(i) < 2.*wdensmin)
     2116    ENDDO
     2117  ELSE  ! (iflag_wk_pop_dyn >= 1)
     2118    DO i = 1, klon
     2119      kill_wake(i) = ((wape(i)>=wape2(i)) .AND. (wape2(i)<=wapecut)) .OR. (ktopw(i)<=2) .OR. &
     2120          .NOT. ok_qx_qw(i)
     2121    ENDDO
     2122  ENDIF  ! (iflag_wk_pop_dyn >= 1)
     2123  !>jyg
     2124
    19032125  DO k = 1, klev
    19042126    DO i = 1, klon
    1905 
    1906       ! cc nrlmd      On maintient désormais constant sigmaw en régime
    1907       ! permanent
    1908       ! cc      IF ((sigmaw(i).GT.sigmaw_max).or.
    1909       IF (((wape(i)>=wape2(i)) .AND. (wape2(i)<=1.0)) .OR. (ktopw(i)<=2) .OR. &
    1910           .NOT. ok_qx_qw(i)) THEN
     2127!!jyg      IF (((wape(i)>=wape2(i)) .AND. (wape2(i)<=wapecut)) .OR. (ktopw(i)<=2) .OR. &
     2128!!jyg          .NOT. ok_qx_qw(i)) THEN
     2129      IF (kill_wake(i)) THEN
    19112130        ! cc
    19122131        dtls(i, k) = 0.
     
    19162135        d_deltatw2(i,k) = -deltatw0(i,k)
    19172136        d_deltaqw2(i,k) = -deltaqw0(i,k)
    1918       END IF
    1919     END DO
    1920   END DO
    1921 
    1922   ! cc nrlmd      On maintient désormais constant sigmaw en régime permanent
    1923   DO i = 1, klon
    1924     IF (((wape(i)>=wape2(i)) .AND. (wape2(i)<=1.0)) .OR. (ktopw(i)<=2) .OR. &
    1925         .NOT. ok_qx_qw(i)) THEN
     2137      END IF  ! (kill_wake(i))
     2138    END DO
     2139  END DO
     2140
     2141  DO i = 1, klon
     2142!!jyg    IF (((wape(i)>=wape2(i)) .AND. (wape2(i)<=wapecut)) .OR. (ktopw(i)<=2) .OR. &
     2143!!jyg        .NOT. ok_qx_qw(i)) THEN
     2144      IF (kill_wake(i)) THEN
    19262145      ktopw(i) = 0
    19272146      wape(i) = 0.
    19282147      cstar(i) = 0.
    1929 !!jyg   Outside subroutine "Wake" hw and sigmaw are zero when there are no wakes
     2148!!jyg   Outside subroutine "Wake" hw, wdens and sigmaw are zero when there are no wakes
    19302149!!      hw(i) = hwmin                       !jyg
    19312150!!      sigmaw(i) = sigmad                  !jyg
    19322151      hw(i) = 0.                            !jyg
    1933       sigmaw(i) = 0.                        !jyg
    19342152      fip(i) = 0.
    1935     ELSE
     2153!!      sigmaw(i) = 0.                        !jyg
     2154      sigmaw_targ = 0.
     2155      d_sigmaw2(i) = d_sigmaw2(i) + sigmaw_targ - sigmaw(i)
     2156      sigmaw(i) = sigmaw_targ
     2157      IF (iflag_wk_pop_dyn >= 1) THEN
     2158!!        awdens(i) = 0.
     2159!!        wdens(i) = 0.
     2160        wdens_targ = 0.
     2161        d_wdens2(i) = wdens_targ - wdens(i)
     2162        wdens(i) = wdens_targ
     2163        wdens_targ = 0.
     2164        d_awdens2(i) = wdens_targ - awdens(i)
     2165        awdens(i) = wdens_targ
     2166      ENDIF  ! (iflag_wk_pop_dyn >= 1)
     2167    ELSE  ! (kill_wake(i))
    19362168      wape(i) = wape2(i)
    19372169      cstar(i) = cstar2(i)
    1938     END IF
     2170    END IF  ! (kill_wake(i))
    19392171    ! c        print*,'wape wape2 ktopw OK_qx_qw =',
    19402172    ! c     $          wape(i),wape2(i),ktopw(i),OK_qx_qw(i)
     
    19722204  DO i = 1, klon
    19732205    d_sigmaw2(i) = d_sigmaw2(i)/dtime
     2206    d_awdens2(i) = d_awdens2(i)/dtime
    19742207    d_wdens2(i) = d_wdens2(i)/dtime
    19752208  ENDDO
Note: See TracChangeset for help on using the changeset viewer.