Changeset 2007


Ignore:
Timestamp:
Apr 6, 2014, 2:20:38 PM (10 years ago)
Author:
fhourdin
Message:

Modification pour garantir la conservation des espèces traces.

Modification for tracer conservation

Jean-Yves Grandpeix

Location:
LMDZ5/trunk/libf/phylmd
Files:
1 added
10 edited

Legend:

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

    r1998 r2007  
    1818use phys_state_var_mod
    1919IMPLICIT none
    20 #include "iniprint.h"
    21 #include "YOMCST.h"
     20  include "iniprint.h"
     21  include "YOMCST.h"
     22  include "clesphys.h"
    2223
    2324! Arguments :
     
    117118      DO j = 1, jqbad
    118119        i=jqadrs(j)
    119         IF (.NOT.done(i)) THEN                  !jyg
    120120          if(prt_level.ge.debug_level) THEN
    121121           print*,'WARNING  : EAU POUR LE POINT i rlon rlat =',i,rlon(i),rlat(i),text
     
    125125           ENDDO
    126126          endif
     127          IF (ok_conserv_q) THEN
    127128!jyg<20140228 Corrections pour conservation de l'eau
    128           DO k = 1, klev
    129             zqp(k) = max(q_seri(i,k),1.e-15)
    130           ENDDO
    131           zq_int  = 0.
    132           zqp_int = 0.
    133           DO k = 1, klev
    134             zq_int  = zq_int  + q_seri(i,k)*(paprs(i,k)-paprs(i,k+1))/Rg
    135             zqp_int = zqp_int + zqp(k)     *(paprs(i,k)-paprs(i,k+1))/Rg
    136           ENDDO
    137           if(prt_level.ge.debug_level) THEN
    138            print*,' cas q_seri<1.e-15 i k zq_int zqp_int zq_int/zqp_int :', &
    139                                 i, kqadrs(j), zq_int, zqp_int, zq_int/zqp_int
    140           endif
    141           DO k = 1, klev
    142             zq_new = zqp(k)*zq_int/zqp_int
    143             zdq(i,k) = zdq(i,k) + zq_new - q_seri(i,k)
    144             q_seri(i,k) = zq_new
    145           ENDDO
    146           done(i) = .true.
    147         ENDIF !(.NOT.done(i))
    148 
    149 !         DO k = 1, klev
    150 !           zq=q_seri(i,k)+zdq(i,k)
    151 !           if (zq.lt.1.e-15) then
    152 !              if (q_seri(i,k).lt.1.e-15) then
    153 !               if(prt_level.ge.debug_level) THEN
    154 !                print*,' cas q_seri<1.e-15 i k q_seri zq zdq :',i,k,q_seri(i,k),zq,zdq(i,k)
    155 !               endif
    156 !               q_seri(i,k)=1.e-15
    157 !               zdq(i,k)=(1.e-15-q_seri(i,k))
     129            IF (.NOT.done(i)) THEN                  !jyg
     130              DO k = 1, klev
     131                zqp(k) = max(q_seri(i,k),1.e-15)
     132              ENDDO
     133              zq_int  = 0.
     134              zqp_int = 0.
     135              DO k = 1, klev
     136                zq_int  = zq_int  + q_seri(i,k)*(paprs(i,k)-paprs(i,k+1))/Rg
     137                zqp_int = zqp_int + zqp(k)     *(paprs(i,k)-paprs(i,k+1))/Rg
     138              ENDDO
     139              if(prt_level.ge.debug_level) THEN
     140               print*,' cas q_seri<1.e-15 i k zq_int zqp_int zq_int/zqp_int :', &
     141                                    i, kqadrs(j), zq_int, zqp_int, zq_int/zqp_int
     142              endif
     143              DO k = 1, klev
     144                zq_new = zqp(k)*zq_int/zqp_int
     145                zdq(i,k) = zdq(i,k) + zq_new - q_seri(i,k)
     146                q_seri(i,k) = zq_new
     147              ENDDO
     148              done(i) = .true.
     149            ENDIF !(.NOT.done(i))
     150          ELSE
     151!jyg>
     152            DO k = 1, klev
     153              zq=q_seri(i,k)+zdq(i,k)
     154              if (zq.lt.1.e-15) then
     155                 if (q_seri(i,k).lt.1.e-15) then
     156                  if(prt_level.ge.debug_level) THEN
     157                   print*,' cas q_seri<1.e-15 i k q_seri zq zdq :',i,k,q_seri(i,k),zq,zdq(i,k)
     158                  endif
     159                  q_seri(i,k)=1.e-15
     160                  zdq(i,k)=(1.e-15-q_seri(i,k))
     161                 endif
     162              endif
     163!              zq=q_seri(i,k)+zdq(i,k)
     164!              if (zq.lt.1.e-15) then
     165!                 zdq(i,k)=(1.e-15-q_seri(i,k))
    158166!              endif
    159 !           endif
    160 !!           zq=q_seri(i,k)+zdq(i,k)
    161 !!           if (zq.lt.1.e-15) then
    162 !!              zdq(i,k)=(1.e-15-q_seri(i,k))
    163 !!           endif
    164 !         ENDDO
     167            ENDDO
     168!jyg<20140228
     169          ENDIF   !  (ok_conserv_q)
    165170!jyg>
    166       ENDDO
     171      ENDDO ! j = 1, jqbad
    167172ENDIF
    168173!
  • LMDZ5/trunk/libf/phylmd/clesphys.h

    r2003 r2007  
    1818       REAL(kind=8) CH4_ppb, N2O_ppb, CFC11_ppt, CFC12_ppt
    1919!IM ajout CFMIP2/CMIP5
    20        REAL co2_ppm_per
    2120       LOGICAL ok_4xCO2atm
    2221       REAL(kind=8) RCO2_per,RCH4_per,RN2O_per,RCFC11_per,RCFC12_per
     
    7776       LOGICAL :: ok_strato
    7877       LOGICAL :: ok_hines, ok_gwd_rando
     78       LOGICAL :: ok_conserv_q
    7979
    8080       COMMON/clesphys/                                                 &
    8181! REAL FIRST
    82      &       co2_ppm, co2_ppm_per, solaire                              &
     82     &       co2_ppm, solaire                                           &
    8383     &     , RCO2, RCH4, RN2O, RCFC11, RCFC12                           &
    8484     &     , RCO2_act, RCH4_act, RN2O_act, RCFC11_act, RCFC12_act       &
     
    114114     &     , ok_lic_melt,           aer_type                            &
    115115     &     , iflag_rrtm, ok_strato,ok_hines                             &
    116      &     , iflag_ice_thermo, ok_gwd_rando, NSW
     116     &     , iflag_ice_thermo, ok_gwd_rando, NSW                        &
     117     &     , ok_conserv_q
    117118     
    118119       save /clesphys/
  • LMDZ5/trunk/libf/phylmd/concvl.F90

    r1992 r2007  
    1 SUBROUTINE concvl(iflag_clos, dtime, paprs, pplay, t, q, t_wake, q_wake, &
    2     s_wake, u, v, tra, ntra, ale, alp, sig1, w01, d_t, d_q, d_u, d_v, d_tra, &
    3     rain, snow, kbas, ktop, sigd, cbmf, plcl, plfc, wbeff, upwd, dnwd, &
    4     dnwdbis, ma, mip, vprecip, cape, cin, tvp, tconv, iflag, pbase, bbase, &
    5     dtvpdt1, dtvpdq1, dplcldt, dplcldr, qcondc, wd, pmflxr, pmflxs, & ! RomP
    6                                                                       ! >>>
    7   ! !     .             da,phi,mp,dd_t,dd_q,lalim_conv,wght_th)
    8     da, phi, mp, phi2, d1a, dam, sij, clw, elij, & ! RomP
    9     dd_t, dd_q, lalim_conv, wght_th, & ! RomP
    10     evap, ep, epmlmmm, eplamm, &   ! RomP
    11     wdtraina, wdtrainm) ! RomP
    12   ! RomP <<<
    13   ! **************************************************************
    14   ! *
    15   ! CONCVL                                                      *
    16   ! *
    17   ! *
    18   ! written by   : Sandrine Bony-Lena, 17/05/2003, 11.16.04    *
    19   ! modified by :                                               *
    20   ! **************************************************************
     1SUBROUTINE concvl(iflag_clos, &
     2                  dtime, paprs, pplay, &
     3                  t, q, t_wake, q_wake, s_wake, u, v, tra, ntra, &
     4                  Ale, Alp, sig1, w01, &
     5                  d_t, d_q, d_u, d_v, d_tra, &
     6                  rain, snow, kbas, ktop, sigd, &
     7                  cbmf, plcl, plfc, wbeff, upwd, dnwd, dnwdbis, &
     8                  Ma, mip, Vprecip, &
     9                  cape, cin, tvp, Tconv, iflag, &
     10                  pbase, bbase, dtvpdt1, dtvpdq1, dplcldt, dplcldr, &
     11                  qcondc, wd, pmflxr, pmflxs, &
     12!RomP >>>
     13!!     .             da,phi,mp,dd_t,dd_q,lalim_conv,wght_th)
     14                  da, phi, mp, phi2, d1a, dam, sij, clw, elij, &     ! RomP
     15                  dd_t, dd_q, lalim_conv, wght_th, &                 ! RomP
     16                  evap, ep, epmlmMm, eplaMm, &                       ! RomP
     17                  wdtrainA, wdtrainM, wght)                          ! RomP+RL
     18!RomP <<<
     19! **************************************************************
     20! *
     21! CONCVL                                                      *
     22! *
     23! *
     24! written by   : Sandrine Bony-Lena, 17/05/2003, 11.16.04    *
     25! modified by :                                               *
     26! **************************************************************
    2127
    2228
     
    2430  USE infotrac, ONLY: nbtr
    2531  IMPLICIT NONE
    26   ! ======================================================================
    27   ! Auteur(s): S. Bony-Lena (LMD/CNRS) date: ???
    28   ! Objet: schema de convection de Emanuel (1991) interface
    29   ! ======================================================================
    30   ! Arguments:
    31   ! dtime--input-R-pas d'integration (s)
    32   ! s-------input-R-la valeur "s" pour chaque couche
    33   ! sigs----input-R-la valeur "sigma" de chaque couche
    34   ! sig-----input-R-la valeur de "sigma" pour chaque niveau
    35   ! psolpa--input-R-la pression au sol (en Pa)
    36   ! pskapa--input-R-exponentiel kappa de psolpa
    37   ! h-------input-R-enthalpie potentielle (Cp*T/P**kappa)
    38   ! q-------input-R-vapeur d'eau (en kg/kg)
    39 
    40   ! work*: input et output: deux variables de travail,
    41   ! on peut les mettre a 0 au debut
    42   ! ALE-----input-R-energie disponible pour soulevement
    43   ! ALP-----input-R-puissance disponible pour soulevement
    44 
    45   ! d_h-----output-R-increment de l'enthalpie potentielle (h)
    46   ! d_q-----output-R-increment de la vapeur d'eau
    47   ! rain----output-R-la pluie (mm/s)
    48   ! snow----output-R-la neige (mm/s)
    49   ! upwd----output-R-saturated updraft mass flux (kg/m**2/s)
    50   ! dnwd----output-R-saturated downdraft mass flux (kg/m**2/s)
    51   ! dnwd0---output-R-unsaturated downdraft mass flux (kg/m**2/s)
    52   ! Ma------output-R-adiabatic ascent mass flux (kg/m2/s)
    53   ! mip-----output-R-mass flux shed by adiabatic ascent (kg/m2/s)
    54   ! Vprecip-output-R-vertical profile of precipitations (kg/m2/s)
    55   ! Tconv---output-R-environment temperature seen by convective scheme (K)
    56   ! Cape----output-R-CAPE (J/kg)
    57   ! Cin ----output-R-CIN  (J/kg)
    58   ! Tvp-----output-R-Temperature virtuelle d'une parcelle soulevee
    59   ! adiabatiquement a partir du niveau 1 (K)
    60   ! deltapb-output-R-distance entre LCL et base de la colonne (<0 ; Pa)
    61   ! Ice_flag-input-L-TRUE->prise en compte de la thermodynamique de la glace
    62   ! dd_t-----output-R-increment de la temperature du aux descentes
    63   ! precipitantes
    64   ! dd_q-----output-R-increment de la vapeur d'eau du aux desc precip
    65   ! ======================================================================
     32! ======================================================================
     33! Auteur(s): S. Bony-Lena (LMD/CNRS) date: ???
     34! Objet: schema de convection de Emanuel (1991) interface
     35! ======================================================================
     36! Arguments:
     37! dtime--input-R-pas d'integration (s)
     38! s-------input-R-la vAleur "s" pour chaque couche
     39! sigs----input-R-la vAleur "sigma" de chaque couche
     40! sig-----input-R-la vAleur de "sigma" pour chaque niveau
     41! psolpa--input-R-la pression au sol (en Pa)
     42! pskapa--input-R-exponentiel kappa de psolpa
     43! h-------input-R-enthAlpie potentielle (Cp*T/P**kappa)
     44! q-------input-R-vapeur d'eau (en kg/kg)
     45
     46! work*: input et output: deux variables de travail,
     47! on peut les mettre a 0 au debut
     48! ALE--------input-R-energie disponible pour soulevement
     49! ALP--------input-R-puissance disponible pour soulevement
     50
     51! d_h--------output-R-increment de l'enthAlpie potentielle (h)
     52! d_q--------output-R-increment de la vapeur d'eau
     53! rain-------output-R-la pluie (mm/s)
     54! snow-------output-R-la neige (mm/s)
     55! upwd-------output-R-saturated updraft mass flux (kg/m**2/s)
     56! dnwd-------output-R-saturated downdraft mass flux (kg/m**2/s)
     57! dnwd0------output-R-unsaturated downdraft mass flux (kg/m**2/s)
     58! Ma---------output-R-adiabatic ascent mass flux (kg/m2/s)
     59! mip--------output-R-mass flux shed by adiabatic ascent (kg/m2/s)
     60! Vprecip----output-R-vertical profile of precipitations (kg/m2/s)
     61! Tconv------output-R-environment temperature seen by convective scheme (K)
     62! Cape-------output-R-CAPE (J/kg)
     63! Cin -------output-R-CIN  (J/kg)
     64! Tvp--------output-R-Temperature virtuelle d'une parcelle soulevee
     65! adiabatiquement a partir du niveau 1 (K)
     66! deltapb----output-R-distance entre LCL et base de la colonne (<0 ; Pa)
     67! Ice_flag---input-L-TRUE->prise en compte de la thermodynamique de la glace
     68! dd_t-------output-R-increment de la temperature du aux descentes precipitantes
     69! dd_q-------output-R-increment de la vapeur d'eau du aux desc precip
     70! lalim_conv-
     71! wght_th----
     72! evap-------output-R
     73! ep---------output-R
     74! epmlmMm----output-R
     75! eplaMm-----output-R
     76! wdtrainA---output-R
     77! wdtrainM---output-R
     78! wght-------output-R
     79! ======================================================================
    6680
    6781
     
    7993  REAL sig1(klon, klev), w01(klon, klev), ptop2(klon)
    8094  REAL pmflxr(klon, klev+1), pmflxs(klon, klev+1)
    81   REAL ale(klon), alp(klon)
     95  REAL Ale(klon), Alp(klon)
    8296
    8397  REAL d_t(klon, klev), d_q(klon, klev), d_u(klon, klev), d_v(klon, klev)
     
    90104  REAL upwd(klon, klev), dnwd(klon, klev), dnwdbis(klon, klev)
    91105
    92   ! !       REAL Ma(klon,klev), mip(klon,klev),Vprecip(klon,klev)     !jyg
    93   REAL ma(klon, klev), mip(klon, klev), vprecip(klon, klev+1) !jyg
     106!!       REAL Ma(klon,klev), mip(klon,klev),Vprecip(klon,klev)     !jyg
     107  REAL Ma(klon, klev), mip(klon, klev), Vprecip(klon, klev+1)      !jyg
     108  REAL wght(klon, klev)                                            !RL
    94109
    95110  REAL da(klon, klev), phi(klon, klev, klev), mp(klon, klev)
    96   ! RomP >>>
     111! RomP >>>
    97112  REAL phi2(klon, klev, klev)
    98113  REAL d1a(klon, klev), dam(klon, klev)
    99114  REAL sij(klon, klev, klev), clw(klon, klev), elij(klon, klev, klev)
    100   REAL wdtraina(klon, klev), wdtrainm(klon, klev)
     115  REAL wdtrainA(klon, klev), wdtrainM(klon, klev)
    101116  REAL evap(klon, klev), ep(klon, klev)
    102   REAL epmlmmm(klon, klev, klev), eplamm(klon, klev)
    103   ! RomP <<<
     117  REAL epmlmMm(klon, klev, klev), eplaMm(klon, klev)
     118! RomP <<<
    104119  REAL cape(klon), cin(klon), tvp(klon, klev)
    105   REAL tconv(klon, klev)
    106 
    107   ! CR:test: on passe lentr et alim_star des thermiques
     120  REAL Tconv(klon, klev)
     121
     122!CR:test: on passe lentr et alim_star des thermiques
    108123  INTEGER lalim_conv(klon)
    109124  REAL wght_th(klon, klev)
     
    111126  REAL em_sig2feed ! sigma at upper bound of feeding layer
    112127  REAL em_wght(klev) ! weight density determining the feeding mixture
    113   ! on enleve le save
    114   ! SAVE em_sig1feed,em_sig2feed,em_wght
     128!on enleve le save
     129! SAVE em_sig1feed,em_sig2feed,em_wght
    115130
    116131  INTEGER iflag(klon)
     
    127142  REAL zx_t, zdelta, zx_qs, zcor
    128143
    129   ! INTEGER iflag_mix
    130   ! SAVE iflag_mix
     144 INTEGER iflag_mix
     145 SAVE iflag_mix
    131146  INTEGER noff, minorig
    132147  INTEGER i, k, itra
    133148  REAL qs(klon, klev), qs_wake(klon, klev)
    134149  REAL cbmf(klon), plcl(klon), plfc(klon), wbeff(klon)
    135   ! LF       SAVE cbmf
    136   ! IM/JYG      REAL, SAVE, ALLOCATABLE :: cbmf(:)
    137   ! cc$OMP THREADPRIVATE(cbmf)!
     150!LF          SAVE cbmf
     151!IM/JYG      REAL, SAVE, ALLOCATABLE :: cbmf(:)
     152!!!$OMP THREADPRIVATE(cbmf)!
    138153  REAL cbmflast(klon)
    139154  INTEGER ifrst
    140155  SAVE ifrst
    141156  DATA ifrst/0/
    142   !$OMP THREADPRIVATE(ifrst)
    143 
    144 
    145   ! Variables supplementaires liees au bilan d'energie
    146   ! Real paire(klon)
    147   ! LF      Real ql(klon,klev)
    148   ! Save paire
    149   ! LF      Save ql
    150   ! LF      Real t1(klon,klev),q1(klon,klev)
    151   ! LF      Save t1,q1
    152   ! Data paire /1./
     157!$OMP THREADPRIVATE(ifrst)
     158
     159
     160! Variables supplementaires liees au bilan d'energie
     161! Real paire(klon)
     162!LF      Real ql(klon,klev)
     163! Save paire
     164!LF      Save ql
     165!LF      Real t1(klon,klev),q1(klon,klev)
     166!LF      Save t1,q1
     167! Data paire /1./
    153168  REAL, SAVE, ALLOCATABLE :: ql(:, :), q1(:, :), t1(:, :)
    154   !$OMP THREADPRIVATE(ql, q1, t1)
    155 
    156   ! Variables liees au bilan d'energie et d'enthalpi
     169!$OMP THREADPRIVATE(ql, q1, t1)
     170
     171! Variables liees au bilan d'energie et d'enthAlpi
    157172  REAL ztsol(klon)
    158   REAL h_vcol_tot, h_dair_tot, h_qw_tot, h_ql_tot, h_qs_tot, qw_tot, ql_tot, &
    159     qs_tot, ec_tot
    160   SAVE h_vcol_tot, h_dair_tot, h_qw_tot, h_ql_tot, h_qs_tot, qw_tot, ql_tot, &
    161     qs_tot, ec_tot
    162   !$OMP THREADPRIVATE(h_vcol_tot, h_dair_tot, h_qw_tot, h_ql_tot)
    163   !$OMP THREADPRIVATE(h_qs_tot, qw_tot, ql_tot, qs_tot , ec_tot)
    164   REAL d_h_vcol, d_h_dair, d_qt, d_qw, d_ql, d_qs, d_ec
    165   REAL d_h_vcol_phy
    166   REAL fs_bound, fq_bound
    167   SAVE d_h_vcol_phy
    168   !$OMP THREADPRIVATE(d_h_vcol_phy)
    169   REAL zero_v(klon)
     173  REAL        h_vcol_tot, h_dair_tot, h_qw_tot, h_ql_tot, &
     174              h_qs_tot, qw_tot, ql_tot, qs_tot, ec_tot
     175  SAVE        h_vcol_tot, h_dair_tot, h_qw_tot, h_ql_tot, &
     176              h_qs_tot, qw_tot, ql_tot, qs_tot, ec_tot
     177!$OMP THREADPRIVATE(h_vcol_tot, h_dair_tot, h_qw_tot, h_ql_tot)
     178!$OMP THREADPRIVATE(h_qs_tot, qw_tot, ql_tot, qs_tot , ec_tot)
     179  REAL        d_h_vcol, d_h_dair, d_qt, d_qw, d_ql, d_qs, d_ec
     180  REAL        d_h_vcol_phy
     181  REAL        fs_bound, fq_bound
     182  SAVE        d_h_vcol_phy
     183!$OMP THREADPRIVATE(d_h_vcol_phy)
     184  REAL        zero_v(klon)
    170185  CHARACTER *15 ztit
    171   INTEGER ip_ebil ! PRINT level for energy conserv. diag.
    172   SAVE ip_ebil
    173   DATA ip_ebil/2/
    174   !$OMP THREADPRIVATE(ip_ebil)
    175   INTEGER if_ebil ! level for energy conserv. dignostics
    176   SAVE if_ebil
    177   DATA if_ebil/2/
    178   !$OMP THREADPRIVATE(if_ebil)
    179   ! +jld ec_conser
     186  INTEGER     ip_ebil ! PRINT level for energy conserv. diag.
     187  SAVE        ip_ebil
     188  DATA        ip_ebil/2/
     189!$OMP THREADPRIVATE(ip_ebil)
     190  INTEGER     if_ebil ! level for energy conserv. dignostics
     191  SAVE        if_ebil
     192  DATA        if_ebil/2/
     193!$OMP THREADPRIVATE(if_ebil)
     194!+jld ec_conser
    180195  REAL d_t_ec(klon, klev) ! tendance du a la conersion Ec -> E thermique
    181196  REAL zrcpd
    182   ! -jld ec_conser
    183   ! LF
     197!-jld ec_conser
     198!LF
    184199  INTEGER nloc
    185   LOGICAL, SAVE :: first = .TRUE.
    186   !$OMP THREADPRIVATE(first)
    187   INTEGER, SAVE :: itap, igout
    188   !$OMP THREADPRIVATE(itap, igout)
     200  LOGICAL, SAVE            :: first = .TRUE.
     201!$OMP THREADPRIVATE(first)
     202  INTEGER, SAVE            :: itap, igout
     203!$OMP THREADPRIVATE(itap, igout)
    189204
    190205  include "YOMCST.h"
     
    195210
    196211  IF (first) THEN
    197     ! Allocate some variables LF 04/2008
    198 
    199     ! IM/JYG allocate(cbmf(klon))
     212! Allocate some variables LF 04/2008
     213
     214!IM/JYG allocate(cbmf(klon))
    200215    ALLOCATE (ql(klon,klev))
    201216    ALLOCATE (t1(klon,klev))
     
    204219    igout = klon/2 + 1/klon
    205220  END IF
    206   ! Incrementer le compteur de la physique
     221! Incrementer le compteur de la physique
    207222  itap = itap + 1
    208223
    209   ! Copy T into Tconv
     224! Copy T into Tconv
    210225  DO k = 1, klev
    211226    DO i = 1, klon
    212       tconv(i, k) = t(i, k)
     227      Tconv(i, k) = t(i, k)
    213228    END DO
    214229  END DO
     
    224239  END IF
    225240
    226   ! ym
     241! ym
    227242  snow(:) = 0
    228243
    229   ! IF (ifrst .EQ. 0) THEN
    230   ! ifrst = 1
     244! IF (ifrst .EQ. 0) THEN
     245! ifrst = 1
    231246  IF (first) THEN
    232247    first = .FALSE.
    233248
    234     ! ===========================================================================
    235     ! READ IN PARAMETERS FOR THE CLOSURE AND THE MIXING DISTRIBUTION
    236     ! ===========================================================================
     249! ===========================================================================
     250! READ IN PARAMETERS FOR THE CLOSURE AND THE MIXING DISTRIBUTION
     251! ===========================================================================
    237252
    238253    IF (iflag_con==3) THEN
    239       ! CALL cv3_inicp()
     254!      CALL cv3_inicp()
    240255      CALL cv3_inip()
    241256    END IF
    242257
    243     ! ===========================================================================
    244     ! READ IN PARAMETERS FOR CONVECTIVE INHIBITION BY TROPOS. DRYNESS
    245     ! ===========================================================================
    246 
    247     ! c$$$         open (56,file='supcrit.data')
    248     ! c$$$         read (56,*) Supcrit1, Supcrit2
    249     ! c$$$         close (56)
    250 
    251     IF (prt_level>=10) WRITE (lunout, *) 'supcrit1, supcrit2', supcrit1, &
    252       supcrit2
    253 
    254     ! ===========================================================================
    255     ! Initialisation pour les bilans d'eau et d'energie
    256     ! ===========================================================================
     258! ===========================================================================
     259! READ IN PARAMETERS FOR CONVECTIVE INHIBITION BY TROPOS. DRYNESS
     260! ===========================================================================
     261
     262! c$$$         open (56,file='supcrit.data')
     263! c$$$         read (56,*) Supcrit1, Supcrit2
     264! c$$$         close (56)
     265
     266    IF (prt_level>=10) WRITE (lunout, *) 'supcrit1, supcrit2', supcrit1, supcrit2
     267
     268! ===========================================================================
     269! Initialisation pour les bilans d'eau et d'energie
     270! ===========================================================================
    257271    IF (if_ebil>=1) d_h_vcol_phy = 0.
    258272
    259273    DO i = 1, klon
    260274      cbmf(i) = 0.
    261       ! !          plcl(i) = 0.
     275!!          plcl(i) = 0.
    262276      sigd(i) = 0.
    263277    END DO
    264278  END IF !(ifrst .EQ. 0)
    265279
    266   ! Initialisation a chaque pas de temps
     280! Initialisation a chaque pas de temps
    267281  plfc(:) = 0.
    268282  wbeff(:) = 100.
     
    284298
    285299
    286   ! Feeding layer
     300! Feeding layer
    287301
    288302  em_sig1feed = 1.
    289303  em_sig2feed = 0.97
    290   ! em_sig2feed = 0.8
    291   ! Relative Weight densities
     304! em_sig2feed = 0.8
     305! Relative Weight densities
    292306  DO k = 1, klev
    293307    em_wght(k) = 1.
    294308  END DO
    295   ! CRtest: couche alim des tehrmiques ponderee par a*
    296   ! DO i = 1, klon
    297   ! do k=1,lalim_conv(i)
    298   ! em_wght(k)=wght_th(i,k)
    299   ! print*,'em_wght=',em_wght(k),wght_th(i,k)
    300   ! end do
    301   ! END DO
     309!CRtest: couche alim des tehrmiques ponderee par a*
     310! DO i = 1, klon
     311! do k=1,lalim_conv(i)
     312! em_wght(k)=wght_th(i,k)
     313! print*,'em_wght=',em_wght(k),wght_th(i,k)
     314! end do
     315! END DO
    302316
    303317  IF (iflag_con==4) THEN
     
    318332      END DO
    319333    END DO
    320   ELSE ! iflag_con=3 (modif de puristes qui fait la diffce pour la
    321     ! convergence numerique)
     334  ELSE ! iflag_con=3 (modif de puristes qui fait la diffce pour la convergence numerique)
    322335    DO k = 1, klev
    323336      DO i = 1, klon
     
    342355  END IF ! iflag_con
    343356
    344   ! ------------------------------------------------------------------
    345 
    346   ! Main driver for convection:
    347   ! iflag_con=3 -> nvlle version de KE (JYG)
    348   ! iflag_con = 30  -> equivalent to convect3
    349   ! iflag_con = 4  -> equivalent to convect1/2
     357! ------------------------------------------------------------------
     358
     359! Main driver for convection:
     360!                  iflag_con=3 -> nvlle version de KE (JYG)
     361!                   iflag_con = 30  -> equivAlent to convect3
     362!                   iflag_con = 4  -> equivAlent to convect1/2
    350363
    351364
    352365  IF (iflag_con==30) THEN
    353366
    354     ! print *, '-> cv_driver'      !jyg
    355     CALL cv_driver(klon, klev, klevp1, ntra, iflag_con, t, q, qs, u, v, tra, &
    356       em_p, em_ph, iflag, d_t, d_q, d_u, d_v, d_tra, rain, vprecip, cbmf, &
    357       sig1, w01, &                 !jyg
    358       kbas, ktop, dtime, ma, upwd, dnwd, dnwdbis, qcondc, wd, cape, da, phi, &
    359       mp, phi2, d1a, dam, sij, clw, elij, & !RomP
    360       evap, ep, epmlmmm, eplamm, & !RomP
    361       wdtraina, wdtrainm) !RomP
    362     ! print *, 'cv_driver ->'      !jyg
    363 
    364     DO i = 1, klon
    365       cbmf(i) = ma(i, kbas(i))
    366     END DO
     367! print *, '-> cv_driver'      !jyg
     368    CALL cv_driver(klon, klev, klevp1, ntra, iflag_con, &
     369                   t, q, qs, u, v, tra, &
     370                   em_p, em_ph, iflag, &
     371                   d_t, d_q, d_u, d_v, d_tra, rain, &
     372                   Vprecip, cbmf, sig1, w01, & !jyg
     373                   kbas, ktop, &
     374                   dtime, Ma, upwd, dnwd, dnwdbis, qcondc, wd, cape, &
     375                   da, phi, mp, phi2, d1a, dam, sij, clw, elij, &       !RomP
     376                   evap, ep, epmlmMm, eplaMm, &                         !RomP
     377                   wdtrainA, wdtrainM)                                  !RomP
     378!           print *, 'cv_driver ->'      !jyg
     379
     380    DO i = 1, klon
     381      cbmf(i) = Ma(i, kbas(i))
     382    END DO
     383
     384!RL
     385    wght(:, :) = 0.
     386    DO i = 1, klon
     387      wght(i, 1) = 1.
     388    END DO
     389!RL
    367390
    368391  ELSE
    369392
    370     ! LF   necessary for gathered fields
     393!LF   necessary for gathered fields
    371394    nloc = klon
    372     CALL cva_driver(klon, klev, klev+1, ntra, nloc, iflag_con, iflag_mix, &
    373       iflag_ice_thermo, iflag_clos, dtime, t, q, qs, t_wake, q_wake, qs_wake, &
    374       s_wake, u, v, tra, em_p, em_ph, ale, alp, em_sig1feed, em_sig2feed, &
    375       em_wght, iflag, d_t, d_q, d_u, d_v, d_tra, rain, kbas, ktop, cbmf, &
    376       plcl, plfc, wbeff, sig1, w01, ptop2, sigd, ma, mip, vprecip, upwd, &
    377       dnwd, dnwdbis, qcondc, wd, cape, cin, tvp, dd_t, dd_q, plim1, plim2, &
    378       asupmax, supmax0, asupmaxmin, lalim_conv, & ! AC!+!RomP+jyg
    379       da, phi, mp, phi2, d1a, dam, sij, clw, elij, & ! RomP
    380       evap, ep, epmlmmm, eplamm, & ! RomP
    381       wdtraina, wdtrainm) ! RomP
    382     ! AC!+!RomP+jyg
     395    CALL cva_driver(klon, klev, klev+1, ntra, nloc, &
     396                    iflag_con, iflag_mix, iflag_ice_thermo, &
     397                    iflag_clos, ok_conserv_q, dtime, &
     398                    t, q, qs, t_wake, q_wake, qs_wake, s_wake, u, v, tra, &
     399                    em_p, em_ph, &
     400                    Ale, Alp, &
     401                    em_sig1feed, em_sig2feed, em_wght, &
     402                    iflag, d_t, d_q, d_u, d_v, d_tra, rain, kbas, ktop, &
     403                    cbmf, plcl, plfc, wbeff, sig1, w01, ptop2, sigd, &
     404                    Ma, mip, Vprecip, upwd, dnwd, dnwdbis, qcondc, wd, &
     405                    cape, cin, tvp, &
     406                    dd_t, dd_q, plim1, plim2, asupmax, supmax0, &
     407                    asupmaxmin, lalim_conv, &
     408!AC!+!RomP+jyg
     409!!                   da,phi,mp,phi2,d1a,dam,sij,clw,elij, &               ! RomP
     410!!                   evap,ep,epmlmMm,eplaMm,                              ! RomP
     411                    da, phi, mp, phi2, d1a, dam, sij, wght, &           ! RomP+RL
     412                    clw, elij, evap, ep, epmlmMm, eplaMm, &             ! RomP+RL
     413                    wdtrainA, wdtrainM)                                 ! RomP
     414!AC!+!RomP+jyg
    383415  END IF
    384   ! ------------------------------------------------------------------
    385   IF (prt_level>=10) WRITE (lunout, *) ' cva_driver -> cbmf,plcl,plfc,wbeff ' &
    386     , cbmf(1), plcl(1), plfc(1), wbeff(1)
     416! ------------------------------------------------------------------
     417  IF (prt_level>=10) WRITE (lunout, *) ' cva_driver -> cbmf,plcl,plfc,wbeff ', &
     418                                        cbmf(1), plcl(1), plfc(1), wbeff(1)
    387419
    388420  DO i = 1, klon
     
    404436      DO k = 1, klev
    405437        DO i = 1, klon
    406           d_tra(i, k, itra) = dtime*d_tra(i, k, itra)
     438!RL!            d_tra(i,k,itra) =dtime*d_tra(i,k,itra)
     439          d_tra(i, k, itra) = 0.
    407440        END DO
    408441      END DO
     
    410443  END IF
    411444
    412   ! !AC!
     445!!AC!
    413446  IF (iflag_con==3) THEN
    414447    DO itra = 1, ntra
    415448      DO k = 1, klev
    416449        DO i = 1, klon
    417           d_tra(i, k, itra) = dtime*d_tra(i, k, itra)
     450!RL!            d_tra(i,k,itra) =dtime*d_tra(i,k,itra)
     451          d_tra(i, k, itra) = 0.
    418452        END DO
    419453      END DO
    420454    END DO
    421455  END IF
    422   ! !AC!
     456!!AC!
    423457
    424458  DO k = 1, klev
     
    428462    END DO
    429463  END DO
    430   ! !jyg
    431   ! --Separation neige/pluie (pour diagnostics)       !jyg
    432   DO k = 1, klev !jyg
    433     DO i = 1, klon !jyg
    434       IF (t1(i,k)<rtt) THEN !jyg
    435         pmflxs(i, k) = vprecip(i, k) !jyg
    436       ELSE !jyg
    437         pmflxr(i, k) = vprecip(i, k) !jyg
    438       END IF !jyg
    439     END DO !jyg
    440   END DO !jyg
    441 
    442   ! c      IF (if_ebil.ge.2) THEN
    443   ! c        ztit='after convect'
    444   ! c        CALL diagetpq(paire,ztit,ip_ebil,2,2,dtime
    445   ! c     e      , t1,q1,ql,qs,u,v,paprs,pplay
    446   ! c     s      , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
    447   ! c         call diagphy(paire,ztit,ip_ebil
    448   ! c     e      , zero_v, zero_v, zero_v, zero_v, zero_v
    449   ! c     e      , zero_v, rain, zero_v, ztsol
    450   ! c     e      , d_h_vcol, d_qt, d_ec
    451   ! c     s      , fs_bound, fq_bound )
    452   ! c      END IF
    453 
    454 
    455   ! les traceurs ne sont pas mis dans cette version de convect4:
     464!                                                  !jyg
     465! --Separation neige/pluie (pour diagnostics)       !jyg
     466  DO k = 1, klev                                    !jyg
     467    DO i = 1, klon                                  !jyg
     468      IF (t1(i,k)<rtt) THEN                         !jyg
     469        pmflxs(i, k) = Vprecip(i, k)                !jyg
     470      ELSE                                          !jyg
     471        pmflxr(i, k) = Vprecip(i, k)                !jyg
     472      END IF                                        !jyg
     473    END DO                                          !jyg
     474  END DO                                            !jyg
     475
     476! c      IF (if_ebil.ge.2) THEN
     477! c        ztit='after convect'
     478! c        CALL diagetpq(paire,ztit,ip_ebil,2,2,dtime
     479! c     e      , t1,q1,ql,qs,u,v,paprs,pplay
     480! c     s      , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
     481! c         call diagphy(paire,ztit,ip_ebil
     482! c     e      , zero_v, zero_v, zero_v, zero_v, zero_v
     483! c     e      , zero_v, rain, zero_v, ztsol
     484! c     e      , d_h_vcol, d_qt, d_ec
     485! c     s      , fs_bound, fq_bound )
     486! c      END IF
     487
     488
     489! les traceurs ne sont pas mis dans cette version de convect4:
    456490  IF (iflag_con==4) THEN
    457491    DO itra = 1, ntra
     
    463497    END DO
    464498  END IF
    465   ! print*, 'concvl->: dd_t,dd_q ',dd_t(1,1),dd_q(1,1)
     499! print*, 'concvl->: dd_t,dd_q ',dd_t(1,1),dd_q(1,1)
    466500
    467501  DO k = 1, klev
     
    478512  IF (prt_level>=20) THEN
    479513    DO k = 1, klev
    480       ! print*,'physiq apres_add_con i k it d_u d_v d_t d_q qdl0',igout
    481       ! .,k,itap,d_u_con(igout,k) ,d_v_con(igout,k), d_t_con(igout,k),
    482       ! .d_q_con(igout,k),dql0(igout,k)
    483       ! print*,'phys apres_add_con itap Ma cin ALE ALP wak t q undi t q'
    484       ! .,itap,Ma(igout,k),cin(igout),ALE(igout), ALP(igout),
    485       ! . t_wake(igout,k),q_wake(igout,k),t_undi(igout,k),q_undi(igout,k)
    486       ! print*,'phy apres_add_con itap CON rain snow EMA wk1 wk2 Vpp mip'
    487       ! .,itap,rain_con(igout),snow_con(igout),ema_work1(igout,k),
    488       ! .ema_work2(igout,k),Vprecip(igout,k), mip(igout,k)
    489       ! print*,'phy apres_add_con itap upwd dnwd dnwd0 cape tvp Tconv '
    490       ! .,itap,upwd(igout,k),dnwd(igout,k),dnwd0(igout,k),cape(igout),
    491       ! .tvp(igout,k),Tconv(igout,k)
    492       ! print*,'phy apres_add_con itap dtvpdt dtvdq dplcl dplcldr qcondc'
    493       ! .,itap,dtvpdt1(igout,k),dtvpdq1(igout,k),dplcldt(igout),
    494       ! .dplcldr(igout),qcondc(igout,k)
    495       ! print*,'phy apres_add_con itap wd pmflxr Kpmflxr Kp1 Kpmflxs Kp1'
    496       ! .,itap,wd(igout),pmflxr(igout,k),pmflxr(igout,k+1),pmflxs(igout,k)
    497       ! .,pmflxs(igout,k+1)
    498       ! print*,'phy apres_add_con itap da phi mp ftd fqd lalim wgth',
    499       ! .itap,da(igout,k),phi(igout,k,k),mp(igout,k),ftd(igout,k),
    500       ! . fqd(igout,k),lalim_conv(igout),wght_th(igout,k)
     514! print*,'physiq apres_add_con i k it d_u d_v d_t d_q qdl0',igout, &
     515!         k,itap,d_u_con(igout,k) ,d_v_con(igout,k), d_t_con(igout,k), &
     516!         d_q_con(igout,k),dql0(igout,k)
     517! print*,'phys apres_add_con itap Ma cin ALE ALP wak t q undi t q', &
     518!         itap,Ma(igout,k),cin(igout),ALE(igout), ALP(igout), &
     519!        t_wake(igout,k),q_wake(igout,k),t_undi(igout,k),q_undi(igout,k)
     520! print*,'phy apres_add_con itap CON rain snow EMA wk1 wk2 Vpp mip', &
     521!         itap,rain_con(igout),snow_con(igout),ema_work1(igout,k), &
     522!         ema_work2(igout,k),Vprecip(igout,k), mip(igout,k)
     523! print*,'phy apres_add_con itap upwd dnwd dnwd0 cape tvp Tconv ', &
     524!         itap,upwd(igout,k),dnwd(igout,k),dnwd0(igout,k),cape(igout), &
     525!         tvp(igout,k),Tconv(igout,k)
     526! print*,'phy apres_add_con itap dtvpdt dtvdq dplcl dplcldr qcondc', &
     527!         itap,dtvpdt1(igout,k),dtvpdq1(igout,k),dplcldt(igout), &
     528!         dplcldr(igout),qcondc(igout,k)
     529! print*,'phy apres_add_con itap wd pmflxr Kpmflxr Kp1 Kpmflxs Kp1', &
     530!         itap,wd(igout),pmflxr(igout,k),pmflxr(igout,k+1),pmflxs(igout,k), &
     531!         pmflxs(igout,k+1)
     532! print*,'phy apres_add_con itap da phi mp ftd fqd lalim wgth', &
     533!         itap,da(igout,k),phi(igout,k,k),mp(igout,k),ftd(igout,k), &
     534!        fqd(igout,k),lalim_conv(igout),wght_th(igout,k)
    501535    END DO
    502536  END IF !(prt_level.EQ.20) THEN
  • LMDZ5/trunk/libf/phylmd/conf_phys_m.F90

    r2006 r2007  
    182182    INTEGER, SAVE :: nbapp_rad_omp, iflag_con_omp
    183183    INTEGER, SAVE :: iflag_ener_conserv_omp
     184    LOGICAL, SAVE :: ok_conserv_q_omp
    184185    INTEGER, SAVE :: iflag_fisrtilp_qsat_omp
    185186    LOGICAL,SAVE :: ok_strato_omp
     
    696697    iflag_ener_conserv_omp = -1
    697698    CALL getin('iflag_ener_conserv',iflag_ener_conserv_omp)
     699
     700    !Config  Key  = ok_conserv_q
     701    !Config  Desc = Switch des corrections de conservation de l'eau
     702    !Config  Def  = y
     703    !Config  Help = Switch des corrections de conservation de l'eau
     704    !Config         y -> corrections activees
     705    !Config         n -> conformite avec versions anterieures au 1/4/2014
     706    ok_conserv_q_omp = .TRUE.
     707    CALL getin('ok_conserv_q',ok_conserv_q_omp)
    698708
    699709    !Config  Key  = iflag_fisrtilp_qsat
     
    17581768    iflag_con = iflag_con_omp
    17591769    iflag_ener_conserv = iflag_ener_conserv_omp
     1770    ok_conserv_q = ok_conserv_q_omp
    17601771    iflag_fisrtilp_qsat = iflag_fisrtilp_qsat_omp
    17611772
     
    19841995    write(lunout,*)'iflag_con=',iflag_con
    19851996    write(lunout,*)'iflag_ener_conserv=',iflag_ener_conserv
     1997    write(lunout,*)'ok_conserv_q=',ok_conserv_q
    19861998    write(lunout,*)'iflag_fisrtilp_qsat=',iflag_fisrtilp_qsat
    19871999    write(lunout,*)' epmax = ', epmax
  • LMDZ5/trunk/libf/phylmd/cv3_routines.F90

    r1992 r2007  
    77  IMPLICIT NONE
    88
    9   ! ------------------------------------------------------------
    10   ! Set parameters for convectL for iflag_con = 3
    11   ! ------------------------------------------------------------
    12 
    13 
    14   ! ***  PBCRIT IS THE CRITICAL CLOUD DEPTH (MB) BENEATH WHICH THE ***
    15   ! ***      PRECIPITATION EFFICIENCY IS ASSUMED TO BE ZERO     ***
    16   ! ***  PTCRIT IS THE CLOUD DEPTH (MB) ABOVE WHICH THE PRECIP. ***
    17   ! ***            EFFICIENCY IS ASSUMED TO BE UNITY            ***
    18   ! ***  SIGD IS THE FRACTIONAL AREA COVERED BY UNSATURATED DNDRAFT  ***
    19   ! ***  SPFAC IS THE FRACTION OF PRECIPITATION FALLING OUTSIDE ***
    20   ! ***                        OF CLOUD                         ***
    21 
    22   ! [TAU: CHARACTERISTIC TIMESCALE USED TO COMPUTE ALPHA & BETA]
    23   ! ***    ALPHA AND BETA ARE PARAMETERS THAT CONTROL THE RATE OF ***
    24   ! ***                 APPROACH TO QUASI-EQUILIBRIUM           ***
    25   ! ***    (THEIR STANDARD VALUES ARE 1.0 AND 0.96, RESPECTIVELY) ***
    26   ! ***           (BETA MUST BE LESS THAN OR EQUAL TO 1)        ***
    27 
    28   ! ***    DTCRIT IS THE CRITICAL BUOYANCY (K) USED TO ADJUST THE ***
    29   ! ***                 APPROACH TO QUASI-EQUILIBRIUM           ***
    30   ! ***                     IT MUST BE LESS THAN 0              ***
     9!------------------------------------------------------------
     10!Set parameters for convectL for iflag_con = 3
     11!------------------------------------------------------------
     12
     13
     14!***  PBCRIT IS THE CRITICAL CLOUD DEPTH (MB) BENEATH WHICH THE ***
     15!***      PRECIPITATION EFFICIENCY IS ASSUMED TO BE ZERO     ***
     16!***  PTCRIT IS THE CLOUD DEPTH (MB) ABOVE WHICH THE PRECIP. ***
     17!***            EFFICIENCY IS ASSUMED TO BE UNITY            ***
     18!***  SIGD IS THE FRACTIONAL AREA COVERED BY UNSATURATED DNDRAFT  ***
     19!***  SPFAC IS THE FRACTION OF PRECIPITATION FALLING OUTSIDE ***
     20!***                        OF CLOUD                         ***
     21
     22![TAU: CHARACTERISTIC TIMESCALE USED TO COMPUTE ALPHA & BETA]
     23!***    ALPHA AND BETA ARE PARAMETERS THAT CONTROL THE RATE OF ***
     24!***                 APPROACH TO QUASI-EQUILIBRIUM           ***
     25!***    (THEIR STANDARD VALUES ARE 1.0 AND 0.96, RESPECTIVELY) ***
     26!***           (BETA MUST BE LESS THAN OR EQUAL TO 1)        ***
     27
     28!***    DTCRIT IS THE CRITICAL BUOYANCY (K) USED TO ADJUST THE ***
     29!***                 APPROACH TO QUASI-EQUILIBRIUM           ***
     30!***                     IT MUST BE LESS THAN 0              ***
    3131
    3232  include "cv3param.h"
     
    4141
    4242  LOGICAL, SAVE :: first = .TRUE.
    43   !$OMP THREADPRIVATE(first)
    44 
    45   ! noff: integer limit for convection (nd-noff)
    46   ! minorig: First level of convection
    47 
    48   ! -- limit levels for convection:
     43!$OMP THREADPRIVATE(first)
     44
     45!glb noff: integer limit for convection (nd-noff)
     46! minorig: First level of convection
     47
     48! -- limit levels for convection:
    4949
    5050  noff = 1
     
    5656  IF (first) THEN
    5757
    58     ! -- "microphysical" parameters:
     58!$OMP MASTER
     59! -- "microphysical" parameters:
    5960    sigdz = 0.01
    6061    spfac = 0.15
    6162    pbcrit = 150.0
    6263    ptcrit = 500.0
    63     ! IM beg: ajout fis. reglage ep
     64! IM beg: ajout fis. reglage ep
    6465    flag_epkeorig = 1
    6566    elcrit = 0.0003
    6667    tlcrit = -55.0
    67     ! IM lu dans physiq.def via conf_phys.F90     epmax  = 0.993
     68! IM lu dans physiq.def via conf_phys.F90     epmax  = 0.993
    6869
    6970    omtrain = 45.0 ! used also for snow (no disctinction rain/snow)
    7071
    71     ! -- misc:
     72! -- misc:
    7273
    7374    dtovsh = -0.2 ! dT for overshoot
    7475    dpbase = -40. ! definition cloud base (400m above LCL)
    75     ! cc      dttrig = 5.   ! (loose) condition for triggering
     76! cc      dttrig = 5.   ! (loose) condition for triggering
    7677    dttrig = 10. ! (loose) condition for triggering
    7778    flag_wb = 1
    7879    wbmax = 6. ! (m/s) adiab updraught speed at LFC (used in cv3p1_closure)
    7980
    80     ! -- rate of approach to quasi-equilibrium:
     81! -- rate of approach to quasi-equilibrium:
    8182
    8283    dtcrit = -2.0
    8384    tau = 8000.
    8485
    85     ! -- interface cloud parameterization:
     86! -- interface cloud parameterization:
    8687
    8788    delta = 0.01 ! cld
    8889
    89     ! -- interface with boundary-layer (gust factor): (sb)
     90! -- interface with boundary-layer (gust factor): (sb)
    9091
    9192    betad = 10.0 ! original value (from convect 4.3)
    9293
    93     OPEN (99, FILE='conv_param.data', STATUS='old', FORM='formatted', &
    94       ERR=9999)
     94    OPEN (99, FILE='conv_param.data', STATUS='old', FORM='formatted', ERR=9999)
    9595    READ (99, *, END=9998) dpbase
    9696    READ (99, *, END=9998) pbcrit
     
    113113    WRITE (*, *) 'wbmax =', wbmax
    114114
    115     ! IM Lecture du fichier ep_param.data
     115! IM Lecture du fichier ep_param.data
    116116    OPEN (79, FILE='ep_param.data', STATUS='old', FORM='formatted', ERR=7999)
    117117    READ (79, *, END=7998) flag_epkeorig
     
    124124    WRITE (*, *) 'elcrit=', elcrit
    125125    WRITE (*, *) 'tlcrit=', tlcrit
    126     ! IM end: ajout fis. reglage ep
     126! IM end: ajout fis. reglage ep
    127127
    128128    first = .FALSE.
    129   END IF
     129!$OMP END MASTER
     130
     131  END IF ! (first)
    130132
    131133  beta = 1.0 - delt/tau
    132134  alpha1 = 1.5E-3
    133   ! jyg    Correction bug alpha
     135!JYG    Correction bug alpha
    134136  alpha1 = alpha1*1.5
    135137  alpha = alpha1*delt/tau
    136   ! jyg    Bug
    137   ! cc increase alpha to compensate W decrease:
    138   ! c      alpha  = alpha*1.5
     138!JYG    Bug
     139! cc increase alpha to compensate W decrease:
     140! c      alpha  = alpha*1.5
    139141
    140142  RETURN
    141143END SUBROUTINE cv3_param
    142144
    143 SUBROUTINE cv3_prelim(len, nd, ndp1, t, q, p, ph, lv, lf, cpn, tv, gz, h, hm, &
    144     th)
     145SUBROUTINE cv3_prelim(len, nd, ndp1, t, q, p, ph, &
     146                      lv, lf, cpn, tv, gz, h, hm, th)
    145147  IMPLICIT NONE
    146148
    147   ! =====================================================================
    148   ! --- CALCULATE ARRAYS OF GEOPOTENTIAL, HEAT CAPACITY & STATIC ENERGY
    149   ! "ori": from convect4.3 (vectorized)
    150   ! "convect3": to be exactly consistent with convect3
    151   ! =====================================================================
    152 
    153   ! inputs:
     149! =====================================================================
     150! --- CALCULATE ARRAYS OF GEOPOTENTIAL, HEAT CAPACITY & STATIC ENERGY
     151! "ori": from convect4.3 (vectorized)
     152! "convect3": to be exactly consistent with convect3
     153! =====================================================================
     154
     155! inputs:
    154156  INTEGER len, nd, ndp1
    155157  REAL t(len, nd), q(len, nd), p(len, nd), ph(len, ndp1)
    156158
    157   ! outputs:
     159! outputs:
    158160  REAL lv(len, nd), lf(len, nd), cpn(len, nd), tv(len, nd)
    159161  REAL gz(len, nd), h(len, nd), hm(len, nd)
    160162  REAL th(len, nd)
    161163
    162   ! local variables:
     164! local variables:
    163165  INTEGER k, i
    164166  REAL rdcp
     
    170172
    171173
    172   ! ori      do 110 k=1,nlp
    173   ! abderr     do 110 k=1,nl ! convect3
     174! ori      do 110 k=1,nlp
     175! abderr     do 110 k=1,nl ! convect3
    174176  DO k = 1, nlp
    175177
    176178    DO i = 1, len
    177       ! debug          lv(i,k)= lv0-clmcpv*(t(i,k)-t0)
     179! debug          lv(i,k)= lv0-clmcpv*(t(i,k)-t0)
    178180      lv(i, k) = lv0 - clmcpv*(t(i,k)-273.15)
    179181      lf(i, k) = lf0 - clmci*(t(i,k)-273.15)
    180182      cpn(i, k) = cpd*(1.0-q(i,k)) + cpv*q(i, k)
    181183      cpx(i, k) = cpd*(1.0-q(i,k)) + cl*q(i, k)
    182       ! ori          tv(i,k)=t(i,k)*(1.0+q(i,k)*epsim1)
     184! ori          tv(i,k)=t(i,k)*(1.0+q(i,k)*epsim1)
    183185      tv(i, k) = t(i, k)*(1.0+q(i,k)/eps-q(i,k))
    184186      rdcp = (rrd*(1.-q(i,k))+q(i,k)*rrv)/cpn(i, k)
     
    187189  END DO
    188190
    189   ! gz = phi at the full levels (same as p).
     191! gz = phi at the full levels (same as p).
    190192
    191193  DO i = 1, len
    192194    gz(i, 1) = 0.0
    193195  END DO
    194   ! ori      do 140 k=2,nlp
     196! ori      do 140 k=2,nlp
    195197  DO k = 2, nl ! convect3
    196198    DO i = 1, len
    197       tvx = t(i, k)*(1.+q(i,k)/eps-q(i,k)) !convect3
    198       tvy = t(i, k-1)*(1.+q(i,k-1)/eps-q(i,k-1)) !convect3
    199       gz(i, k) = gz(i, k-1) + 0.5*rrd*(tvx+tvy) & !convect3
    200         *(p(i,k-1)-p(i,k))/ph(i, k) !convect3
    201 
    202       ! c        print *,' gz(',k,')',gz(i,k),' tvx',tvx,' tvy ',tvy
    203 
    204       ! ori         gz(i,k)=gz(i,k-1)+hrd*(tv(i,k-1)+tv(i,k))
    205       ! ori    &         *(p(i,k-1)-p(i,k))/ph(i,k)
    206     END DO
    207   END DO
    208 
    209   ! h  = phi + cpT (dry static energy).
    210   ! hm = phi + cp(T-Tbase)+Lq
    211 
    212   ! ori      do 170 k=1,nlp
     199      tvx = t(i, k)*(1.+q(i,k)/eps-q(i,k))         !convect3
     200      tvy = t(i, k-1)*(1.+q(i,k-1)/eps-q(i,k-1))   !convect3
     201      gz(i, k) = gz(i, k-1) + 0.5*rrd*(tvx+tvy)* & !convect3
     202                 (p(i,k-1)-p(i,k))/ph(i, k)        !convect3
     203
     204! c        print *,' gz(',k,')',gz(i,k),' tvx',tvx,' tvy ',tvy
     205
     206! ori         gz(i,k)=gz(i,k-1)+hrd*(tv(i,k-1)+tv(i,k))
     207! ori    &         *(p(i,k-1)-p(i,k))/ph(i,k)
     208    END DO
     209  END DO
     210
     211! h  = phi + cpT (dry static energy).
     212! hm = phi + cp(T-Tbase)+Lq
     213
     214! ori      do 170 k=1,nlp
    213215  DO k = 1, nl ! convect3
    214216    DO i = 1, len
     
    221223END SUBROUTINE cv3_prelim
    222224
    223 SUBROUTINE cv3_feed(len, nd, t, q, u, v, p, ph, hm, gz, p1feed, p2feed, wght, &
    224     wghti, tnk, thnk, qnk, qsnk, unk, vnk, cpnk, hnk, nk, icb, icbmax, iflag, &
    225     gznk, plcl)
     225SUBROUTINE cv3_feed(len, nd, ok_conserv_q, &
     226                    t, q, u, v, p, ph, hm, gz, &
     227                    p1feed, p2feed, wght, &
     228                    wghti, tnk, thnk, qnk, qsnk, unk, vnk, &
     229                    cpnk, hnk, nk, icb, icbmax, iflag, gznk, plcl)
    226230  IMPLICIT NONE
    227231
    228   ! ================================================================
    229   ! Purpose: CONVECTIVE FEED
    230 
    231   ! Main differences with cv_feed:
    232   ! - ph added in input
    233   ! - here, nk(i)=minorig
    234   ! - icb defined differently (plcl compared with ph instead of p)
    235 
    236   ! Main differences with convect3:
    237   ! - we do not compute dplcldt and dplcldr of CLIFT anymore
    238   ! - values iflag different (but tests identical)
    239   ! - A,B explicitely defined (!...)
    240   ! ================================================================
     232! ================================================================
     233! Purpose: CONVECTIVE FEED
     234
     235! Main differences with cv_feed:
     236! - ph added in input
     237! - here, nk(i)=minorig
     238! - icb defined differently (plcl compared with ph instead of p)
     239
     240! Main differences with convect3:
     241! - we do not compute dplcldt and dplcldr of CLIFT anymore
     242! - values iflag different (but tests identical)
     243! - A,B explicitely defined (!...)
     244! ================================================================
    241245
    242246  include "cv3param.h"
    243247  include "cvthermo.h"
    244248
    245   ! inputs:
     249!inputs:
    246250  INTEGER len, nd
     251  LOGICAL ok_conserv_q
    247252  REAL t(len, nd), q(len, nd), p(len, nd)
    248253  REAL u(len, nd), v(len, nd)
     
    250255  REAL ph(len, nd+1)
    251256  REAL p1feed(len)
    252   ! ,  wght(len)
     257! ,  wght(len)
    253258  REAL wght(nd)
    254   ! input-output
     259!input-output
    255260  REAL p2feed(len)
    256   ! outputs:
     261!outputs:
    257262  INTEGER iflag(len), nk(len), icb(len), icbmax
    258   ! real   wghti(len)
     263 real   wghti(len)
    259264  REAL wghti(len, nd)
    260265  REAL tnk(len), thnk(len), qnk(len), qsnk(len)
     
    263268  REAL plcl(len)
    264269
    265   ! local variables:
     270!local variables:
    266271  INTEGER i, k, iter, niter
    267272  INTEGER ihmin(len)
     
    269274  REAL pup(len), plo(len), pfeed(len)
    270275  REAL plclup(len), plcllo(len), plclfeed(len)
     276  REAL pfeedmin(len)
    271277  REAL posit(len)
    272278  LOGICAL nocond(len)
    273279
    274   ! -------------------------------------------------------------------
    275   ! --- Origin level of ascending parcels for convect3:
    276   ! -------------------------------------------------------------------
     280!jyg20140217<
     281  INTEGER iostat
     282  LOGICAL, SAVE :: first
     283  LOGICAL, SAVE :: ok_new_feed
     284  REAL, SAVE :: dp_lcl_feed
     285!$OMP THREADPRIVATE (first,ok_new_feed,dp_lcl_feed)
     286  DATA first/.TRUE./
     287  DATA dp_lcl_feed/2./
     288
     289  IF (first) THEN
     290!$OMP MASTER
     291    ok_new_feed = ok_conserv_q
     292    OPEN (98, FILE='cv3feed_param.data', STATUS='old', FORM='formatted', IOSTAT=iostat)
     293    IF (iostat==0) THEN
     294      READ (98, *, END=998) ok_new_feed
     295998   CONTINUE
     296      CLOSE (98)
     297    END IF
     298    PRINT *, ' ok_new_feed: ', ok_new_feed
     299    first = .FALSE.
     300!$OMP END MASTER
     301  END IF
     302!jyg>
     303! -------------------------------------------------------------------
     304! --- Origin level of ascending parcels for convect3:
     305! -------------------------------------------------------------------
    277306
    278307  DO i = 1, len
     
    281310  END DO
    282311
    283   ! -------------------------------------------------------------------
    284   ! --- Adjust feeding layer thickness so that lifting up to the top of
    285   ! --- the feeding layer does not induce condensation (i.e. so that
    286   ! --- plcl < p2feed).
    287   ! --- Method : iterative secant method.
    288   ! -------------------------------------------------------------------
    289 
    290   ! 1- First bracketing of the solution : ph(nk+1), p2feed
    291 
    292   ! 1.a- LCL associated to p2feed
     312! -------------------------------------------------------------------
     313! --- Adjust feeding layer thickness so that lifting up to the top of
     314! --- the feeding layer does not induce condensation (i.e. so that
     315! --- plcl < p2feed).
     316! --- Method : iterative secant method.
     317! -------------------------------------------------------------------
     318
     319! 1- First bracketing of the solution : ph(nk+1), p2feed
     320
     321! 1.a- LCL associated with p2feed
    293322  DO i = 1, len
    294323    pup(i) = p2feed(i)
    295324  END DO
    296   CALL cv3_vertmix(len, nd, iflag, p1feed, pup, p, ph, t, q, u, v, wght, &
    297     wghti, nk, tnk, thnk, qnk, qsnk, unk, vnk, plclup)
    298   ! 1.b- LCL associated to ph(nk+1)
     325  CALL cv3_vertmix(len, nd, iflag, p1feed, pup, p, ph, &
     326                   t, q, u, v, wght, &
     327                   wghti, nk, tnk, thnk, qnk, qsnk, unk, vnk, plclup)
     328! 1.b- LCL associated with ph(nk+1)
    299329  DO i = 1, len
    300330    plo(i) = ph(i, nk(i)+1)
    301331  END DO
    302   CALL cv3_vertmix(len, nd, iflag, p1feed, plo, p, ph, t, q, u, v, wght, &
    303     wghti, nk, tnk, thnk, qnk, qsnk, unk, vnk, plcllo)
    304   ! 2- Iterations
     332  CALL cv3_vertmix(len, nd, iflag, p1feed, plo, p, ph, &
     333                   t, q, u, v, wght, &
     334                   wghti, nk, tnk, thnk, qnk, qsnk, unk, vnk, plcllo)
     335! 2- Iterations
    305336  niter = 5
    306337  DO iter = 1, niter
     
    314345        pfeed(i) = pup(i)
    315346      ELSE
    316         pfeed(i) = (pup(i)*(plo(i)-plcllo(i))+plo(i)*(plclup(i)-pup(i)))/ &
    317           (plo(i)-plcllo(i)+plclup(i)-pup(i))
     347!JYG20140217<
     348        IF (ok_new_feed) THEN
     349          pfeed(i) = (pup(i)*(plo(i)-plcllo(i)-dp_lcl_feed)+  &
     350                      plo(i)*(plclup(i)-pup(i)+dp_lcl_feed))/ &
     351                     (plo(i)-plcllo(i)+plclup(i)-pup(i))
     352        ELSE
     353          pfeed(i) = (pup(i)*(plo(i)-plcllo(i))+  &
     354                      plo(i)*(plclup(i)-pup(i)))/ &
     355                     (plo(i)-plcllo(i)+plclup(i)-pup(i))
     356        END IF
     357!JYG>
    318358      END IF
    319359    END DO
    320     CALL cv3_vertmix(len, nd, iflag, p1feed, pfeed, p, ph, t, q, u, v, wght, &
    321       wghti, nk, tnk, thnk, qnk, qsnk, unk, vnk, plclfeed)
     360!jyg20140217<
     361! For the last iteration, make sure that the top of the feeding layer
     362! and LCL are not in the same layer:
     363    IF (ok_new_feed) THEN
     364      IF (iter==niter) THEN
     365        DO k = minorig, nd
     366          DO i = 1, len
     367            IF (ph(i,k)>=plclfeed(i)) pfeedmin(i) = ph(i, k)
     368          END DO
     369        END DO
     370        DO i = 1, len
     371          pfeed(i) = max(pfeedmin(i), pfeed(i))
     372        END DO
     373      END IF
     374    END IF
     375!jyg>
     376
     377    CALL cv3_vertmix(len, nd, iflag, p1feed, pfeed, p, ph, &
     378                   t, q, u, v, wght, &
     379                   wghti, nk, tnk, thnk, qnk, qsnk, unk, vnk, plclfeed)
     380!jyg20140217<
     381    IF (ok_new_feed) THEN
     382      DO i = 1, len
     383        posit(i) = (sign(1.,plclfeed(i)-pfeed(i)+dp_lcl_feed)+1.)*0.5
     384        IF (plclfeed(i)-pfeed(i)+dp_lcl_feed==0.) posit(i) = 1.
     385      END DO
     386    ELSE
     387      DO i = 1, len
     388        posit(i) = (sign(1.,plclfeed(i)-pfeed(i))+1.)*0.5
     389        IF (plclfeed(i)==pfeed(i)) posit(i) = 1.
     390      END DO
     391    END IF
     392!jyg>
    322393    DO i = 1, len
    323       posit(i) = (sign(1.,plclfeed(i)-pfeed(i))+1.)*0.5
    324       IF (plclfeed(i)==pfeed(i)) posit(i) = 1.
    325       ! - posit = 1 when lcl is below top of feeding layer (plclfeed>pfeed)
    326       ! -               => pup=pfeed
    327       ! - posit = 0 when lcl is above top of feeding layer (plclfeed<pfeed)
    328       ! -               => plo=pfeed
     394! - posit = 1 when lcl is below top of feeding layer (plclfeed>pfeed)
     395! -               => pup=pfeed
     396! - posit = 0 when lcl is above top of feeding layer (plclfeed<pfeed)
     397! -               => plo=pfeed
    329398      pup(i) = posit(i)*pfeed(i) + (1.-posit(i))*pup(i)
    330399      plo(i) = (1.-posit(i))*pfeed(i) + posit(i)*plo(i)
     
    343412  END DO
    344413
    345   ! -------------------------------------------------------------------
    346   ! --- Check whether parcel level temperature and specific humidity
    347   ! --- are reasonable
    348   ! -------------------------------------------------------------------
     414! -------------------------------------------------------------------
     415! --- Check whether parcel level temperature and specific humidity
     416! --- are reasonable
     417! -------------------------------------------------------------------
    349418  DO i = 1, len
    350419    IF (((tnk(i)<250.0) .OR. (qnk(i)<=0.0)) .AND. (iflag(i)==0)) iflag(i) = 7
    351420  END DO
    352421
    353   ! -------------------------------------------------------------------
    354   ! --- Calculate first level above lcl (=icb)
    355   ! -------------------------------------------------------------------
    356 
    357   ! @      do 270 i=1,len
    358   ! @       icb(i)=nlm
    359   ! @ 270  continue
    360   ! @c
    361   ! @      do 290 k=minorig,nl
    362   ! @        do 280 i=1,len
    363   ! @          if((k.ge.(nk(i)+1)).and.(p(i,k).lt.plcl(i)))
    364   ! @     &    icb(i)=min(icb(i),k)
    365   ! @ 280    continue
    366   ! @ 290  continue
    367   ! @c
    368   ! @      do 300 i=1,len
    369   ! @        if((icb(i).ge.nlm).and.(iflag(i).eq.0))iflag(i)=9
    370   ! @ 300  continue
     422! -------------------------------------------------------------------
     423! --- Calculate first level above lcl (=icb)
     424! -------------------------------------------------------------------
     425
     426!@      do 270 i=1,len
     427!@       icb(i)=nlm
     428!@ 270  continue
     429!@c
     430!@      do 290 k=minorig,nl
     431!@        do 280 i=1,len
     432!@          if((k.ge.(nk(i)+1)).and.(p(i,k).lt.plcl(i)))
     433!@     &    icb(i)=min(icb(i),k)
     434!@ 280    continue
     435!@ 290  continue
     436!@c
     437!@      do 300 i=1,len
     438!@        if((icb(i).ge.nlm).and.(iflag(i).eq.0))iflag(i)=9
     439!@ 300  continue
    371440
    372441  DO i = 1, len
     
    374443  END DO
    375444
    376   ! la modification consiste a comparer plcl a ph et non a p:
    377   ! icb est defini par :  ph(icb)<plcl<ph(icb-1)
    378   ! @      do 290 k=minorig,nl
     445! la modification consiste a comparer plcl a ph et non a p:
     446! icb est defini par :  ph(icb)<plcl<ph(icb-1)
     447!@      do 290 k=minorig,nl
    379448  DO k = 3, nl - 1 ! modif pour que icb soit sup/egal a 2
    380449    DO i = 1, len
     
    384453
    385454
    386   ! print*,'icb dans cv3_feed '
    387   ! write(*,'(64i2)') icb(2:len-1)
    388   ! call dump2d(64,43,'plcl dans cv3_feed ',plcl(2:len-1))
     455! print*,'icb dans cv3_feed '
     456! write(*,'(64i2)') icb(2:len-1)
     457! call dump2d(64,43,'plcl dans cv3_feed ',plcl(2:len-1))
    389458
    390459  DO i = 1, len
    391     ! @        if((icb(i).ge.nlm).and.(iflag(i).eq.0))iflag(i)=9
     460!@        if((icb(i).ge.nlm).and.(iflag(i).eq.0))iflag(i)=9
    392461    IF ((icb(i)==nlm) .AND. (iflag(i)==0)) iflag(i) = 9
    393462  END DO
     
    397466  END DO
    398467
    399   ! Compute icbmax.
     468! Compute icbmax.
    400469
    401470  icbmax = 2
    402471  DO i = 1, len
    403     ! !        icbmax=max(icbmax,icb(i))
    404     IF (iflag(i)<7) icbmax = max(icbmax, icb(i)) ! sb Jun7th02
     472!!        icbmax=max(icbmax,icb(i))
     473    IF (iflag(i)<7) icbmax = max(icbmax, icb(i))     ! sb Jun7th02
    405474  END DO
    406475
     
    409478
    410479SUBROUTINE cv3_undilute1(len, nd, t, qs, gz, plcl, p, icb, tnk, qnk, gznk, &
    411     tp, tvp, clw, icbs)
     480                         tp, tvp, clw, icbs)
    412481  IMPLICIT NONE
    413482
    414   ! ----------------------------------------------------------------
    415   ! Equivalent de TLIFT entre NK et ICB+1 inclus
    416 
    417   ! Differences with convect4:
    418   ! - specify plcl in input
    419   ! - icbs is the first level above LCL (may differ from icb)
    420   ! - in the iterations, used x(icbs) instead x(icb)
    421   ! - many minor differences in the iterations
    422   ! - tvp is computed in only one time
    423   ! - icbs: first level above Plcl (IMIN de TLIFT) in output
    424   ! - if icbs=icb, compute also tp(icb+1),tvp(icb+1) & clw(icb+1)
    425   ! ----------------------------------------------------------------
     483! ----------------------------------------------------------------
     484! Equivalent de TLIFT entre NK et ICB+1 inclus
     485
     486! Differences with convect4:
     487!    - specify plcl in input
     488!    - icbs is the first level above LCL (may differ from icb)
     489!    - in the iterations, used x(icbs) instead x(icb)
     490!    - many minor differences in the iterations
     491!    - tvp is computed in only one time
     492!    - icbs: first level above Plcl (IMIN de TLIFT) in output
     493!    - if icbs=icb, compute also tp(icb+1),tvp(icb+1) & clw(icb+1)
     494! ----------------------------------------------------------------
    426495
    427496  include "cvthermo.h"
    428497  include "cv3param.h"
    429498
    430   ! inputs:
     499! inputs:
    431500  INTEGER len, nd
    432501  INTEGER icb(len)
     
    436505  REAL plcl(len) ! convect3
    437506
    438   ! outputs:
     507! outputs:
    439508  REAL tp(len, nd), tvp(len, nd), clw(len, nd)
    440509
    441   ! local variables:
     510! local variables:
    442511  INTEGER i, k
    443512  INTEGER icb1(len), icbs(len), icbsmax2 ! convect3
     
    448517  REAL cpinv(len) ! convect3
    449518
    450   ! -------------------------------------------------------------------
    451   ! --- Calculates the lifted parcel virtual temperature at nk,
    452   ! --- the actual temperature, and the adiabatic
    453   ! --- liquid water content. The procedure is to solve the equation.
    454   ! cp*tp+L*qp+phi=cp*tnk+L*qnk+gznk.
    455   ! -------------------------------------------------------------------
    456 
    457 
    458   ! ***  Calculate certain parcel quantities, including static energy   ***
     519! -------------------------------------------------------------------
     520! --- Calculates the lifted parcel virtual temperature at nk,
     521! --- the actual temperature, and the adiabatic
     522! --- liquid water content. The procedure is to solve the equation.
     523!    cp*tp+L*qp+phi=cp*tnk+L*qnk+gznk.
     524! -------------------------------------------------------------------
     525
     526
     527! ***  Calculate certain parcel quantities, including static energy   ***
    459528
    460529  DO i = 1, len
    461     ah0(i) = (cpd*(1.-qnk(i))+cl*qnk(i))*tnk(i) + qnk(i)*(lv0-clmcpv*(tnk(i)- &
    462       273.15)) + gznk(i)
     530    ah0(i) = (cpd*(1.-qnk(i))+cl*qnk(i))*tnk(i) + qnk(i)*(lv0-clmcpv*(tnk(i)-273.15)) + gznk(i)
    463531    cpp(i) = cpd*(1.-qnk(i)) + qnk(i)*cpv
    464532    cpinv(i) = 1./cpp(i)
    465533  END DO
    466534
    467   ! ***   Calculate lifted parcel quantities below cloud base   ***
     535! ***   Calculate lifted parcel quantities below cloud base   ***
     536
     537  DO i = 1, len                                           !convect3
     538    icb1(i) = max(icb(i), 2)                              !convect3
     539    icb1(i) = min(icb(i), nl)                             !convect3
     540! if icb is below LCL, start loop at ICB+1:
     541! (icbs est le premier niveau au-dessus du LCL)
     542    icbs(i) = icb1(i)                                     !convect3
     543    IF (plcl(i)<p(i,icb1(i))) THEN
     544      icbs(i) = min(icbs(i)+1, nl)                        !convect3
     545    END IF
     546  END DO                                                  !convect3
    468547
    469548  DO i = 1, len !convect3
    470     icb1(i) = max(icb(i), 2) !convect3
    471     icb1(i) = min(icb(i), nl) !convect3
    472     ! if icb is below LCL, start loop at ICB+1:
    473     ! (icbs est le premier niveau au-dessus du LCL)
    474     icbs(i) = icb1(i) !convect3
    475     IF (plcl(i)<p(i,icb1(i))) THEN
    476       icbs(i) = min(icbs(i)+1, nl) !convect3
    477     END IF
     549    ticb(i) = t(i, icbs(i))                               !convect3
     550    gzicb(i) = gz(i, icbs(i))                             !convect3
     551    qsicb(i) = qs(i, icbs(i))                             !convect3
    478552  END DO !convect3
    479553
    480   DO i = 1, len !convect3
    481     ticb(i) = t(i, icbs(i)) !convect3
    482     gzicb(i) = gz(i, icbs(i)) !convect3
    483     qsicb(i) = qs(i, icbs(i)) !convect3
    484   END DO !convect3
    485 
    486 
    487   ! Re-compute icbsmax (icbsmax2):        !convect3
    488   ! !convect3
    489   icbsmax2 = 2 !convect3
    490   DO i = 1, len !convect3
    491     icbsmax2 = max(icbsmax2, icbs(i)) !convect3
    492   END DO !convect3
    493 
    494   ! initialization outputs:
    495 
    496   DO k = 1, icbsmax2 ! convect3
    497     DO i = 1, len ! convect3
    498       tp(i, k) = 0.0 ! convect3
    499       tvp(i, k) = 0.0 ! convect3
    500       clw(i, k) = 0.0 ! convect3
    501     END DO ! convect3
    502   END DO ! convect3
    503 
    504   ! tp and tvp below cloud base:
     554
     555! Re-compute icbsmax (icbsmax2):                          !convect3
     556!                                                         !convect3
     557  icbsmax2 = 2                                            !convect3
     558  DO i = 1, len                                           !convect3
     559    icbsmax2 = max(icbsmax2, icbs(i))                     !convect3
     560  END DO                                                  !convect3
     561
     562! initialization outputs:
     563
     564  DO k = 1, icbsmax2                                      ! convect3
     565    DO i = 1, len                                         ! convect3
     566      tp(i, k) = 0.0                                      ! convect3
     567      tvp(i, k) = 0.0                                     ! convect3
     568      clw(i, k) = 0.0                                     ! convect3
     569    END DO                                                ! convect3
     570  END DO                                                  ! convect3
     571
     572! tp and tvp below cloud base:
    505573
    506574  DO k = minorig, icbsmax2 - 1
    507575    DO i = 1, len
    508576      tp(i, k) = tnk(i) - (gz(i,k)-gznk(i))*cpinv(i)
    509       tvp(i, k) = tp(i, k)*(1.+qnk(i)/eps-qnk(i)) !whole thing (convect3)
    510     END DO
    511   END DO
    512 
    513   ! ***  Find lifted parcel quantities above cloud base    ***
     577      tvp(i, k) = tp(i, k)*(1.+qnk(i)/eps-qnk(i))        !whole thing (convect3)
     578    END DO
     579  END DO
     580
     581! ***  Find lifted parcel quantities above cloud base    ***
    514582
    515583  DO i = 1, len
    516584    tg = ticb(i)
    517     ! ori         qg=qs(i,icb(i))
     585! ori         qg=qs(i,icb(i))
    518586    qg = qsicb(i) ! convect3
    519     ! debug         alv=lv0-clmcpv*(ticb(i)-t0)
     587! debug         alv=lv0-clmcpv*(ticb(i)-t0)
    520588    alv = lv0 - clmcpv*(ticb(i)-273.15)
    521589
    522     ! First iteration.
    523 
    524     ! ori          s=cpd+alv*alv*qg/(rrv*ticb(i)*ticb(i))
    525     s = cpd*(1.-qnk(i)) + cl*qnk(i) & ! convect3
    526       +alv*alv*qg/(rrv*ticb(i)*ticb(i)) ! convect3
     590! First iteration.
     591
     592! ori          s=cpd+alv*alv*qg/(rrv*ticb(i)*ticb(i))
     593    s = cpd*(1.-qnk(i)) + cl*qnk(i) + &                  ! convect3
     594        alv*alv*qg/(rrv*ticb(i)*ticb(i))                  ! convect3
    527595    s = 1./s
    528     ! ori          ahg=cpd*tg+(cl-cpd)*qnk(i)*ticb(i)+alv*qg+gzicb(i)
     596! ori          ahg=cpd*tg+(cl-cpd)*qnk(i)*ticb(i)+alv*qg+gzicb(i)
    529597    ahg = cpd*tg + (cl-cpd)*qnk(i)*tg + alv*qg + gzicb(i) ! convect3
    530598    tg = tg + s*(ah0(i)-ahg)
    531     ! ori          tg=max(tg,35.0)
    532     ! debug          tc=tg-t0
     599! ori          tg=max(tg,35.0)
     600! debug          tc=tg-t0
    533601    tc = tg - 273.15
    534602    denom = 243.5 + tc
    535603    denom = max(denom, 1.0) ! convect3
    536     ! ori          if(tc.ge.0.0)then
     604! ori          if(tc.ge.0.0)then
    537605    es = 6.112*exp(17.67*tc/denom)
    538     ! ori          else
    539     ! ori           es=exp(23.33086-6111.72784/tg+0.15215*log(tg))
    540     ! ori          endif
    541     ! ori          qg=eps*es/(p(i,icb(i))-es*(1.-eps))
     606! ori          else
     607! ori           es=exp(23.33086-6111.72784/tg+0.15215*log(tg))
     608! ori          endif
     609! ori          qg=eps*es/(p(i,icb(i))-es*(1.-eps))
    542610    qg = eps*es/(p(i,icbs(i))-es*(1.-eps))
    543611
    544     ! Second iteration.
    545 
    546 
    547     ! ori          s=cpd+alv*alv*qg/(rrv*ticb(i)*ticb(i))
    548     ! ori          s=1./s
    549     ! ori          ahg=cpd*tg+(cl-cpd)*qnk(i)*ticb(i)+alv*qg+gzicb(i)
     612! Second iteration.
     613
     614
     615! ori          s=cpd+alv*alv*qg/(rrv*ticb(i)*ticb(i))
     616! ori          s=1./s
     617! ori          ahg=cpd*tg+(cl-cpd)*qnk(i)*ticb(i)+alv*qg+gzicb(i)
    550618    ahg = cpd*tg + (cl-cpd)*qnk(i)*tg + alv*qg + gzicb(i) ! convect3
    551619    tg = tg + s*(ah0(i)-ahg)
    552     ! ori          tg=max(tg,35.0)
    553     ! debug          tc=tg-t0
     620! ori          tg=max(tg,35.0)
     621! debug          tc=tg-t0
    554622    tc = tg - 273.15
    555623    denom = 243.5 + tc
    556     denom = max(denom, 1.0) ! convect3
    557     ! ori          if(tc.ge.0.0)then
     624    denom = max(denom, 1.0)                               ! convect3
     625! ori          if(tc.ge.0.0)then
    558626    es = 6.112*exp(17.67*tc/denom)
    559     ! ori          else
    560     ! ori           es=exp(23.33086-6111.72784/tg+0.15215*log(tg))
    561     ! ori          end if
    562     ! ori          qg=eps*es/(p(i,icb(i))-es*(1.-eps))
     627! ori          else
     628! ori           es=exp(23.33086-6111.72784/tg+0.15215*log(tg))
     629! ori          end if
     630! ori          qg=eps*es/(p(i,icb(i))-es*(1.-eps))
    563631    qg = eps*es/(p(i,icbs(i))-es*(1.-eps))
    564632
    565633    alv = lv0 - clmcpv*(ticb(i)-273.15)
    566634
    567     ! ori c approximation here:
    568     ! ori         tp(i,icb(i))=(ah0(i)-(cl-cpd)*qnk(i)*ticb(i)
    569     ! ori     &   -gz(i,icb(i))-alv*qg)/cpd
    570 
    571     ! convect3: no approximation:
     635! ori c approximation here:
     636! ori         tp(i,icb(i))=(ah0(i)-(cl-cpd)*qnk(i)*ticb(i)
     637! ori     &   -gz(i,icb(i))-alv*qg)/cpd
     638
     639! convect3: no approximation:
    572640    tp(i, icbs(i)) = (ah0(i)-gz(i,icbs(i))-alv*qg)/(cpd+(cl-cpd)*qnk(i))
    573641
    574     ! ori         clw(i,icb(i))=qnk(i)-qg
    575     ! ori         clw(i,icb(i))=max(0.0,clw(i,icb(i)))
     642! ori         clw(i,icb(i))=qnk(i)-qg
     643! ori         clw(i,icb(i))=max(0.0,clw(i,icb(i)))
    576644    clw(i, icbs(i)) = qnk(i) - qg
    577645    clw(i, icbs(i)) = max(0.0, clw(i,icbs(i)))
    578646
    579647    rg = qg/(1.-qnk(i))
    580     ! ori         tvp(i,icb(i))=tp(i,icb(i))*(1.+rg*epsi)
    581     ! convect3: (qg utilise au lieu du vrai mixing ratio rg)
    582     tvp(i, icbs(i)) = tp(i, icbs(i))*(1.+qg/eps-qnk(i)) !whole thing
    583 
    584   END DO
    585 
    586   ! ori      do 380 k=minorig,icbsmax2
    587   ! ori       do 370 i=1,len
    588   ! ori         tvp(i,k)=tvp(i,k)-tp(i,k)*qnk(i)
    589   ! ori 370   continue
    590   ! ori 380  continue
    591 
    592 
    593   ! -- The following is only for convect3:
    594 
    595   ! * icbs is the first level above the LCL:
    596   ! if plcl<p(icb), then icbs=icb+1
    597   ! if plcl>p(icb), then icbs=icb
    598 
    599   ! * the routine above computes tvp from minorig to icbs (included).
    600 
    601   ! * to compute buoybase (in cv3_trigger.F), both tvp(icb) and tvp(icb+1)
    602   ! must be known. This is the case if icbs=icb+1, but not if icbs=icb.
    603 
    604   ! * therefore, in the case icbs=icb, we compute tvp at level icb+1
    605   ! (tvp at other levels will be computed in cv3_undilute2.F)
     648! ori         tvp(i,icb(i))=tp(i,icb(i))*(1.+rg*epsi)
     649! convect3: (qg utilise au lieu du vrai mixing ratio rg)
     650    tvp(i, icbs(i)) = tp(i, icbs(i))*(1.+qg/eps-qnk(i))   !whole thing
     651
     652  END DO
     653
     654! ori      do 380 k=minorig,icbsmax2
     655! ori       do 370 i=1,len
     656! ori         tvp(i,k)=tvp(i,k)-tp(i,k)*qnk(i)
     657! ori 370   continue
     658! ori 380  continue
     659
     660
     661! -- The following is only for convect3:
     662
     663! * icbs is the first level above the LCL:
     664! if plcl<p(icb), then icbs=icb+1
     665! if plcl>p(icb), then icbs=icb
     666
     667! * the routine above computes tvp from minorig to icbs (included).
     668
     669! * to compute buoybase (in cv3_trigger.F), both tvp(icb) and tvp(icb+1)
     670! must be known. This is the case if icbs=icb+1, but not if icbs=icb.
     671
     672! * therefore, in the case icbs=icb, we compute tvp at level icb+1
     673! (tvp at other levels will be computed in cv3_undilute2.F)
    606674
    607675
     
    615683    tg = ticb(i)
    616684    qg = qsicb(i) ! convect3
    617     ! debug         alv=lv0-clmcpv*(ticb(i)-t0)
     685! debug         alv=lv0-clmcpv*(ticb(i)-t0)
    618686    alv = lv0 - clmcpv*(ticb(i)-273.15)
    619687
    620     ! First iteration.
    621 
    622     ! ori          s=cpd+alv*alv*qg/(rrv*ticb(i)*ticb(i))
    623     s = cpd*(1.-qnk(i)) + cl*qnk(i) & ! convect3
    624       +alv*alv*qg/(rrv*ticb(i)*ticb(i)) ! convect3
     688! First iteration.
     689
     690! ori          s=cpd+alv*alv*qg/(rrv*ticb(i)*ticb(i))
     691    s = cpd*(1.-qnk(i)) + cl*qnk(i) &                         ! convect3
     692      +alv*alv*qg/(rrv*ticb(i)*ticb(i))                       ! convect3
    625693    s = 1./s
    626     ! ori          ahg=cpd*tg+(cl-cpd)*qnk(i)*ticb(i)+alv*qg+gzicb(i)
    627     ahg = cpd*tg + (cl-cpd)*qnk(i)*tg + alv*qg + gzicb(i) ! convect3
     694! ori          ahg=cpd*tg+(cl-cpd)*qnk(i)*ticb(i)+alv*qg+gzicb(i)
     695    ahg = cpd*tg + (cl-cpd)*qnk(i)*tg + alv*qg + gzicb(i)     ! convect3
    628696    tg = tg + s*(ah0(i)-ahg)
    629     ! ori          tg=max(tg,35.0)
    630     ! debug          tc=tg-t0
     697! ori          tg=max(tg,35.0)
     698! debug          tc=tg-t0
    631699    tc = tg - 273.15
    632700    denom = 243.5 + tc
    633     denom = max(denom, 1.0) ! convect3
    634     ! ori          if(tc.ge.0.0)then
     701    denom = max(denom, 1.0)                                   ! convect3
     702! ori          if(tc.ge.0.0)then
    635703    es = 6.112*exp(17.67*tc/denom)
    636     ! ori          else
    637     ! ori           es=exp(23.33086-6111.72784/tg+0.15215*log(tg))
    638     ! ori          endif
    639     ! ori          qg=eps*es/(p(i,icb(i))-es*(1.-eps))
     704! ori          else
     705! ori           es=exp(23.33086-6111.72784/tg+0.15215*log(tg))
     706! ori          endif
     707! ori          qg=eps*es/(p(i,icb(i))-es*(1.-eps))
    640708    qg = eps*es/(p(i,icb(i)+1)-es*(1.-eps))
    641709
    642     ! Second iteration.
    643 
    644 
    645     ! ori          s=cpd+alv*alv*qg/(rrv*ticb(i)*ticb(i))
    646     ! ori          s=1./s
    647     ! ori          ahg=cpd*tg+(cl-cpd)*qnk(i)*ticb(i)+alv*qg+gzicb(i)
    648     ahg = cpd*tg + (cl-cpd)*qnk(i)*tg + alv*qg + gzicb(i) ! convect3
     710! Second iteration.
     711
     712
     713! ori          s=cpd+alv*alv*qg/(rrv*ticb(i)*ticb(i))
     714! ori          s=1./s
     715! ori          ahg=cpd*tg+(cl-cpd)*qnk(i)*ticb(i)+alv*qg+gzicb(i)
     716    ahg = cpd*tg + (cl-cpd)*qnk(i)*tg + alv*qg + gzicb(i)     ! convect3
    649717    tg = tg + s*(ah0(i)-ahg)
    650     ! ori          tg=max(tg,35.0)
    651     ! debug          tc=tg-t0
     718! ori          tg=max(tg,35.0)
     719! debug          tc=tg-t0
    652720    tc = tg - 273.15
    653721    denom = 243.5 + tc
    654     denom = max(denom, 1.0) ! convect3
    655     ! ori          if(tc.ge.0.0)then
     722    denom = max(denom, 1.0)                                   ! convect3
     723! ori          if(tc.ge.0.0)then
    656724    es = 6.112*exp(17.67*tc/denom)
    657     ! ori          else
    658     ! ori           es=exp(23.33086-6111.72784/tg+0.15215*log(tg))
    659     ! ori          end if
    660     ! ori          qg=eps*es/(p(i,icb(i))-es*(1.-eps))
     725! ori          else
     726! ori           es=exp(23.33086-6111.72784/tg+0.15215*log(tg))
     727! ori          end if
     728! ori          qg=eps*es/(p(i,icb(i))-es*(1.-eps))
    661729    qg = eps*es/(p(i,icb(i)+1)-es*(1.-eps))
    662730
    663731    alv = lv0 - clmcpv*(ticb(i)-273.15)
    664732
    665     ! ori c approximation here:
    666     ! ori         tp(i,icb(i))=(ah0(i)-(cl-cpd)*qnk(i)*ticb(i)
    667     ! ori     &   -gz(i,icb(i))-alv*qg)/cpd
    668 
    669     ! convect3: no approximation:
     733! ori c approximation here:
     734! ori         tp(i,icb(i))=(ah0(i)-(cl-cpd)*qnk(i)*ticb(i)
     735! ori     &   -gz(i,icb(i))-alv*qg)/cpd
     736
     737! convect3: no approximation:
    670738    tp(i, icb(i)+1) = (ah0(i)-gz(i,icb(i)+1)-alv*qg)/(cpd+(cl-cpd)*qnk(i))
    671739
    672     ! ori         clw(i,icb(i))=qnk(i)-qg
    673     ! ori         clw(i,icb(i))=max(0.0,clw(i,icb(i)))
     740! ori         clw(i,icb(i))=qnk(i)-qg
     741! ori         clw(i,icb(i))=max(0.0,clw(i,icb(i)))
    674742    clw(i, icb(i)+1) = qnk(i) - qg
    675743    clw(i, icb(i)+1) = max(0.0, clw(i,icb(i)+1))
    676744
    677745    rg = qg/(1.-qnk(i))
    678     ! ori         tvp(i,icb(i))=tp(i,icb(i))*(1.+rg*epsi)
    679     ! convect3: (qg utilise au lieu du vrai mixing ratio rg)
    680     tvp(i, icb(i)+1) = tp(i, icb(i)+1)*(1.+qg/eps-qnk(i)) !whole thing
     746! ori         tvp(i,icb(i))=tp(i,icb(i))*(1.+rg*epsi)
     747! convect3: (qg utilise au lieu du vrai mixing ratio rg)
     748    tvp(i, icb(i)+1) = tp(i, icb(i)+1)*(1.+qg/eps-qnk(i))     !whole thing
    681749
    682750  END DO
     
    685753END SUBROUTINE cv3_undilute1
    686754
    687 SUBROUTINE cv3_trigger(len, nd, icb, plcl, p, th, tv, tvp, thnk, pbase, &
    688     buoybase, iflag, sig, w0)
     755SUBROUTINE cv3_trigger(len, nd, icb, plcl, p, th, tv, tvp, thnk, &
     756                       pbase, buoybase, iflag, sig, w0)
    689757  IMPLICIT NONE
    690758
    691   ! -------------------------------------------------------------------
    692   ! --- TRIGGERING
    693 
    694   ! - computes the cloud base
    695   ! - triggering (crude in this version)
    696   ! - relaxation of sig and w0 when no convection
    697 
    698   ! Caution1: if no convection, we set iflag=4
    699   ! (it used to be 0 in convect3)
    700 
    701   ! Caution2: at this stage, tvp (and thus buoy) are know up
    702   ! through icb only!
    703   ! -> the buoyancy below cloud base not (yet) set to the cloud base buoyancy
    704   ! -------------------------------------------------------------------
     759! -------------------------------------------------------------------
     760! --- TRIGGERING
     761
     762! - computes the cloud base
     763! - triggering (crude in this version)
     764! - relaxation of sig and w0 when no convection
     765
     766! Caution1: if no convection, we set iflag=4
     767! (it used to be 0 in convect3)
     768
     769! Caution2: at this stage, tvp (and thus buoy) are know up
     770! through icb only!
     771! -> the buoyancy below cloud base not (yet) set to the cloud base buoyancy
     772! -------------------------------------------------------------------
    705773
    706774  include "cv3param.h"
    707775
    708   ! input:
     776! input:
    709777  INTEGER len, nd
    710778  INTEGER icb(len)
     
    713781  REAL thnk(len)
    714782
    715   ! output:
     783! output:
    716784  REAL pbase(len), buoybase(len)
    717785
    718   ! input AND output:
     786! input AND output:
    719787  INTEGER iflag(len)
    720788  REAL sig(len, nd), w0(len, nd)
    721789
    722   ! local variables:
     790! local variables:
    723791  INTEGER i, k
    724792  REAL tvpbase, tvbase, tdif, ath, ath1
    725793
    726794
    727   ! ***   set cloud base buoyancy at (plcl+dpbase) level buoyancy
     795! ***   set cloud base buoyancy at (plcl+dpbase) level buoyancy
    728796
    729797  DO i = 1, len
    730798    pbase(i) = plcl(i) + dpbase
    731     tvpbase = tvp(i, icb(i))*(pbase(i)-p(i,icb(i)+1))/ &
    732       (p(i,icb(i))-p(i,icb(i)+1)) + tvp(i, icb(i)+1)*(p(i,icb(i))-pbase(i))/( &
    733       p(i,icb(i))-p(i,icb(i)+1))
    734     tvbase = tv(i, icb(i))*(pbase(i)-p(i,icb(i)+1))/ &
    735       (p(i,icb(i))-p(i,icb(i)+1)) + tv(i, icb(i)+1)*(p(i,icb(i))-pbase(i))/(p &
    736       (i,icb(i))-p(i,icb(i)+1))
     799    tvpbase = tvp(i, icb(i))  *(pbase(i)-p(i,icb(i)+1))/(p(i,icb(i))-p(i,icb(i)+1)) + &
     800              tvp(i, icb(i)+1)*(p(i,icb(i))-pbase(i))  /(p(i,icb(i))-p(i,icb(i)+1))
     801    tvbase = tv(i, icb(i))  *(pbase(i)-p(i,icb(i)+1))/(p(i,icb(i))-p(i,icb(i)+1)) + &
     802             tv(i, icb(i)+1)*(p(i,icb(i))-pbase(i))  /(p(i,icb(i))-p(i,icb(i)+1))
    737803    buoybase(i) = tvpbase - tvbase
    738804  END DO
    739805
    740806
    741   ! ***   make sure that column is dry adiabatic between the surface  ***
    742   ! ***    and cloud base, and that lifted air is positively buoyant  ***
    743   ! ***                         at cloud base                         ***
    744   ! ***       if not, return to calling program after resetting       ***
    745   ! ***                        sig(i) and w0(i)                       ***
    746 
    747 
    748   ! oct3      do 200 i=1,len
    749   ! oct3
    750   ! oct3       tdif = buoybase(i)
    751   ! oct3       ath1 = th(i,1)
    752   ! oct3       ath  = th(i,icb(i)-1) - dttrig
    753   ! oct3
    754   ! oct3       if (tdif.lt.dtcrit .or. ath.gt.ath1) then
    755   ! oct3         do 60 k=1,nl
    756   ! oct3            sig(i,k) = beta*sig(i,k) - 2.*alpha*tdif*tdif
    757   ! oct3            sig(i,k) = AMAX1(sig(i,k),0.0)
    758   ! oct3            w0(i,k)  = beta*w0(i,k)
    759   ! oct3   60    continue
    760   ! oct3         iflag(i)=4 ! pour version vectorisee
    761   ! oct3c convect3         iflag(i)=0
    762   ! oct3cccc         return
    763   ! oct3       endif
    764   ! oct3
    765   ! oct3200   continue
    766 
    767   ! -- oct3: on reecrit la boucle 200 (pour la vectorisation)
     807! ***   make sure that column is dry adiabatic between the surface  ***
     808! ***    and cloud base, and that lifted air is positively buoyant  ***
     809! ***                         at cloud base                         ***
     810! ***       if not, return to calling program after resetting       ***
     811! ***                        sig(i) and w0(i)                       ***
     812
     813
     814! oct3      do 200 i=1,len
     815! oct3
     816! oct3       tdif = buoybase(i)
     817! oct3       ath1 = th(i,1)
     818! oct3       ath  = th(i,icb(i)-1) - dttrig
     819! oct3
     820! oct3       if (tdif.lt.dtcrit .or. ath.gt.ath1) then
     821! oct3         do 60 k=1,nl
     822! oct3            sig(i,k) = beta*sig(i,k) - 2.*alpha*tdif*tdif
     823! oct3            sig(i,k) = AMAX1(sig(i,k),0.0)
     824! oct3            w0(i,k)  = beta*w0(i,k)
     825! oct3   60    continue
     826! oct3         iflag(i)=4 ! pour version vectorisee
     827! oct3c convect3         iflag(i)=0
     828! oct3cccc         return
     829! oct3       endif
     830! oct3
     831! oct3200   continue
     832
     833! -- oct3: on reecrit la boucle 200 (pour la vectorisation)
    768834
    769835  DO k = 1, nl
     
    779845        w0(i, k) = beta*w0(i, k)
    780846        iflag(i) = 4 ! pour version vectorisee
    781         ! convect3         iflag(i)=0
     847! convect3         iflag(i)=0
    782848      END IF
    783849
     
    785851  END DO
    786852
    787   ! fin oct3 --
     853! fin oct3 --
    788854
    789855  RETURN
    790856END SUBROUTINE cv3_trigger
    791857
    792 SUBROUTINE cv3_compress(len, nloc, ncum, nd, ntra, iflag1, nk1, icb1, icbs1, &
    793     plcl1, tnk1, qnk1, gznk1, pbase1, buoybase1, t1, q1, qs1, u1, v1, gz1, &
    794     th1, tra1, h1, lv1, cpn1, p1, ph1, tv1, tp1, tvp1, clw1, sig1, w01, &
    795     iflag, nk, icb, icbs, plcl, tnk, qnk, gznk, pbase, buoybase, t, q, qs, u, &
    796     v, gz, th, tra, h, lv, cpn, p, ph, tv, tp, tvp, clw, sig, w0)
     858SUBROUTINE cv3_compress(len, nloc, ncum, nd, ntra, &
     859                        iflag1, nk1, icb1, icbs1, &
     860                        plcl1, tnk1, qnk1, gznk1, pbase1, buoybase1, &
     861                        t1, q1, qs1, u1, v1, gz1, th1, &
     862                        tra1, &
     863                        h1, lv1, cpn1, p1, ph1, tv1, tp1, tvp1, clw1, &
     864                        sig1, w01, &
     865                        iflag, nk, icb, icbs, &
     866                        plcl, tnk, qnk, gznk, pbase, buoybase, &
     867                        t, q, qs, u, v, gz, th, &
     868                        tra, &
     869                        h, lv, cpn, p, ph, tv, tp, tvp, clw, &
     870                        sig, w0)
    797871  IMPLICIT NONE
    798872
     
    800874  include 'iniprint.h'
    801875
    802   ! inputs:
     876!inputs:
    803877  INTEGER len, ncum, nd, ntra, nloc
    804878  INTEGER iflag1(len), nk1(len), icb1(len), icbs1(len)
     
    813887  REAL tra1(len, nd, ntra)
    814888
    815   ! outputs:
    816   ! en fait, on a nloc=len pour l'instant (cf cv_driver)
     889!outputs:
     890! en fait, on a nloc=len pour l'instant (cf cv_driver)
    817891  INTEGER iflag(nloc), nk(nloc), icb(nloc), icbs(nloc)
    818892  REAL plcl(nloc), tnk(nloc), qnk(nloc), gznk(nloc)
     
    826900  REAL tra(nloc, nd, ntra)
    827901
    828   ! local variables:
     902!local variables:
    829903  INTEGER i, k, nn, j
    830904
     
    859933  END DO
    860934
    861   ! AC!      do 121 j=1,ntra
    862   ! AC!ccccc      do 111 k=1,nl+1
    863   ! AC!      do 111 k=1,nd
    864   ! AC!       nn=0
    865   ! AC!      do 101 i=1,len
    866   ! AC!      if(iflag1(i).eq.0)then
    867   ! AC!       nn=nn+1
    868   ! AC!       tra(nn,k,j)=tra1(i,k,j)
    869   ! AC!      endif
    870   ! AC! 101  continue
    871   ! AC! 111  continue
    872   ! AC! 121  continue
     935!AC!      do 121 j=1,ntra
     936!AC!ccccc      do 111 k=1,nl+1
     937!AC!      do 111 k=1,nd
     938!AC!       nn=0
     939!AC!      do 101 i=1,len
     940!AC!      if(iflag1(i).eq.0)then
     941!AC!       nn=nn+1
     942!AC!       tra(nn,k,j)=tra1(i,k,j)
     943!AC!      endif
     944!AC! 101  continue
     945!AC! 111  continue
     946!AC! 121  continue
    873947
    874948  IF (nn/=ncum) THEN
     
    902976
    903977
    904   ! JAM--------------------------------------------------------------------
    905   ! Calcul de la quantité d'eau sous forme de glace
    906   ! --------------------------------------------------------------------
     978!JAM--------------------------------------------------------------------
     979! Calcul de la quantité d'eau sous forme de glace
     980! --------------------------------------------------------------------
    907981  REAL qi(len, nl)
    908982  REAL t(len, nl), clw(len, nl)
     
    922996        END IF
    923997      END IF
    924       ! print*,t(i,k),qi(i,k),'temp,testglace'
     998! print*,t(i,k),qi(i,k),'temp,testglace'
    925999    END DO
    9261000  END DO
     
    9301004END SUBROUTINE icefrac
    9311005
    932 SUBROUTINE cv3_undilute2(nloc, ncum, nd, icb, icbs, nk, tnk, qnk, gznk, hnk, &
    933     t, q, qs, gz, p, h, tv, lv, lf, pbase, buoybase, plcl, inb, tp, tvp, clw, &
    934     hp, ep, sigp, buoy, frac)
     1006SUBROUTINE cv3_undilute2(nloc, ncum, nd, icb, icbs, nk, &
     1007                         tnk, qnk, gznk, hnk, t, q, qs, gz, &
     1008                         p, h, tv, lv, lf, pbase, buoybase, plcl, &
     1009                         inb, tp, tvp, clw, hp, ep, sigp, buoy, frac)
    9351010  IMPLICIT NONE
    9361011
    937   ! ---------------------------------------------------------------------
    938   ! Purpose:
    939   ! FIND THE REST OF THE LIFTED PARCEL TEMPERATURES
    940   ! &
    941   ! COMPUTE THE PRECIPITATION EFFICIENCIES AND THE
    942   ! FRACTION OF PRECIPITATION FALLING OUTSIDE OF CLOUD
    943   ! &
    944   ! FIND THE LEVEL OF NEUTRAL BUOYANCY
    945 
    946   ! Main differences convect3/convect4:
    947   ! - icbs (input) is the first level above LCL (may differ from icb)
    948   ! - many minor differences in the iterations
    949   ! - condensed water not removed from tvp in convect3
    950   ! - vertical profile of buoyancy computed here (use of buoybase)
    951   ! - the determination of inb is different
    952   ! - no inb1, only inb in output
    953   ! ---------------------------------------------------------------------
     1012! ---------------------------------------------------------------------
     1013! Purpose:
     1014! FIND THE REST OF THE LIFTED PARCEL TEMPERATURES
     1015! &
     1016! COMPUTE THE PRECIPITATION EFFICIENCIES AND THE
     1017! FRACTION OF PRECIPITATION FALLING OUTSIDE OF CLOUD
     1018! &
     1019! FIND THE LEVEL OF NEUTRAL BUOYANCY
     1020
     1021! Main differences convect3/convect4:
     1022 - icbs (input) is the first level above LCL (may differ from icb)
     1023 - many minor differences in the iterations
     1024 - condensed water not removed from tvp in convect3
     1025 - vertical profile of buoyancy computed here (use of buoybase)
     1026 - the determination of inb is different
     1027 - no inb1, only inb in output
     1028! ---------------------------------------------------------------------
    9541029
    9551030  include "cvthermo.h"
     
    9581033  include "cvflag.h"
    9591034
    960   ! inputs:
     1035!inputs:
    9611036  INTEGER ncum, nd, nloc, j
    9621037  INTEGER icb(nloc), icbs(nloc), nk(nloc)
     
    9681043  REAL pbase(nloc), buoybase(nloc), plcl(nloc)
    9691044
    970   ! outputs:
     1045!outputs:
    9711046  INTEGER inb(nloc)
    9721047  REAL tp(nloc, nd), tvp(nloc, nd), clw(nloc, nd)
     
    9741049  REAL buoy(nloc, nd)
    9751050
    976   ! local variables:
     1051!local variables:
    9771052  INTEGER i, k
    9781053  REAL tg, qg, ahg, alv, alf, s, tc, es, esi, denom, rg, tca, elacrit
     
    9861061  REAL fracg
    9871062
    988   ! =====================================================================
    989   ! --- SOME INITIALIZATIONS
    990   ! =====================================================================
     1063! =====================================================================
     1064! --- SOME INITIALIZATIONS
     1065! =====================================================================
    9911066
    9921067  DO k = 1, nl
     
    9981073  END DO
    9991074
    1000   ! =====================================================================
    1001   ! --- FIND THE REST OF THE LIFTED PARCEL TEMPERATURES
    1002   ! =====================================================================
    1003 
    1004   ! ---       The procedure is to solve the equation.
    1005   ! cp*tp+L*qp+phi=cp*tnk+L*qnk+gznk.
    1006 
    1007   ! ***  Calculate certain parcel quantities, including static energy   ***
     1075! =====================================================================
     1076! --- FIND THE REST OF THE LIFTED PARCEL TEMPERATURES
     1077! =====================================================================
     1078
     1079! ---       The procedure is to solve the equation.
     1080!                cp*tp+L*qp+phi=cp*tnk+L*qnk+gznk.
     1081
     1082! ***  Calculate certain parcel quantities, including static energy   ***
    10081083
    10091084
    10101085  DO i = 1, ncum
    1011     ah0(i) = (cpd*(1.-qnk(i))+cl*qnk(i))*tnk(i) & ! debug     &
    1012                                                   ! +qnk(i)*(lv0-clmcpv*(tnk(i)-t0))+gznk(i)
    1013       +qnk(i)*(lv0-clmcpv*(tnk(i)-273.15)) + gznk(i)
    1014   END DO
    1015 
    1016 
    1017   ! ***  Find lifted parcel quantities above cloud base    ***
     1086    ah0(i) = (cpd*(1.-qnk(i))+cl*qnk(i))*tnk(i)+ &
     1087! debug          qnk(i)*(lv0-clmcpv*(tnk(i)-t0))+gznk(i)
     1088             qnk(i)*(lv0-clmcpv*(tnk(i)-273.15)) + gznk(i)
     1089  END DO
     1090
     1091
     1092! ***  Find lifted parcel quantities above cloud base    ***
    10181093
    10191094
    10201095  DO k = minorig + 1, nl
    10211096    DO i = 1, ncum
    1022       ! ori         if(k.ge.(icb(i)+1))then
    1023       IF (k>=(icbs(i)+1)) THEN ! convect3
     1097! ori       if(k.ge.(icb(i)+1))then
     1098      IF (k>=(icbs(i)+1)) THEN                                ! convect3
    10241099        tg = t(i, k)
    10251100        qg = qs(i, k)
    1026         ! debug       alv=lv0-clmcpv*(t(i,k)-t0)
     1101! debug       alv=lv0-clmcpv*(t(i,k)-t0)
    10271102        alv = lv0 - clmcpv*(t(i,k)-273.15)
    10281103
    1029         ! First iteration.
    1030 
    1031         ! ori          s=cpd+alv*alv*qg/(rrv*t(i,k)*t(i,k))
    1032         s = cpd*(1.-qnk(i)) + cl*qnk(i) & ! convect3
    1033           +alv*alv*qg/(rrv*t(i,k)*t(i,k)) ! convect3
     1104! First iteration.
     1105
     1106! ori          s=cpd+alv*alv*qg/(rrv*t(i,k)*t(i,k))
     1107        s = cpd*(1.-qnk(i)) + cl*qnk(i) + &                  ! convect3
     1108            alv*alv*qg/(rrv*t(i,k)*t(i,k))                    ! convect3
    10341109        s = 1./s
    1035         ! ori          ahg=cpd*tg+(cl-cpd)*qnk(i)*t(i,k)+alv*qg+gz(i,k)
     1110! ori          ahg=cpd*tg+(cl-cpd)*qnk(i)*t(i,k)+alv*qg+gz(i,k)
    10361111        ahg = cpd*tg + (cl-cpd)*qnk(i)*tg + alv*qg + gz(i, k) ! convect3
    10371112        tg = tg + s*(ah0(i)-ahg)
    1038         ! ori          tg=max(tg,35.0)
    1039         ! debug        tc=tg-t0
     1113! ori          tg=max(tg,35.0)
     1114! debug        tc=tg-t0
    10401115        tc = tg - 273.15
    10411116        denom = 243.5 + tc
    1042         denom = max(denom, 1.0) ! convect3
    1043         ! ori          if(tc.ge.0.0)then
     1117        denom = max(denom, 1.0)                               ! convect3
     1118! ori          if(tc.ge.0.0)then
    10441119        es = 6.112*exp(17.67*tc/denom)
    1045         ! ori          else
    1046         ! ori                   es=exp(23.33086-6111.72784/tg+0.15215*log(tg))
    1047         ! ori          endif
     1120! ori          else
     1121! ori                   es=exp(23.33086-6111.72784/tg+0.15215*log(tg))
     1122! ori          endif
    10481123        qg = eps*es/(p(i,k)-es*(1.-eps))
    10491124
    1050         ! Second iteration.
    1051 
    1052         ! ori          s=cpd+alv*alv*qg/(rrv*t(i,k)*t(i,k))
    1053         ! ori          s=1./s
    1054         ! ori          ahg=cpd*tg+(cl-cpd)*qnk(i)*t(i,k)+alv*qg+gz(i,k)
     1125! Second iteration.
     1126
     1127! ori          s=cpd+alv*alv*qg/(rrv*t(i,k)*t(i,k))
     1128! ori          s=1./s
     1129! ori          ahg=cpd*tg+(cl-cpd)*qnk(i)*t(i,k)+alv*qg+gz(i,k)
    10551130        ahg = cpd*tg + (cl-cpd)*qnk(i)*tg + alv*qg + gz(i, k) ! convect3
    10561131        tg = tg + s*(ah0(i)-ahg)
    1057         ! ori          tg=max(tg,35.0)
    1058         ! debug        tc=tg-t0
     1132! ori          tg=max(tg,35.0)
     1133! debug        tc=tg-t0
    10591134        tc = tg - 273.15
    10601135        denom = 243.5 + tc
    1061         denom = max(denom, 1.0) ! convect3
    1062         ! ori          if(tc.ge.0.0)then
     1136        denom = max(denom, 1.0)                               ! convect3
     1137! ori          if(tc.ge.0.0)then
    10631138        es = 6.112*exp(17.67*tc/denom)
    1064         ! ori          else
    1065         ! ori                   es=exp(23.33086-6111.72784/tg+0.15215*log(tg))
    1066         ! ori          endif
     1139! ori          else
     1140! ori                   es=exp(23.33086-6111.72784/tg+0.15215*log(tg))
     1141! ori          endif
    10671142        qg = eps*es/(p(i,k)-es*(1.-eps))
    10681143
    1069         ! debug        alv=lv0-clmcpv*(t(i,k)-t0)
     1144! debug        alv=lv0-clmcpv*(t(i,k)-t0)
    10701145        alv = lv0 - clmcpv*(t(i,k)-273.15)
    1071         ! print*,'cpd dans convect2 ',cpd
    1072         ! print*,'tp(i,k),ah0(i),cl,cpd,qnk(i),t(i,k),gz(i,k),alv,qg,cpd'
    1073         ! print*,tp(i,k),ah0(i),cl,cpd,qnk(i),t(i,k),gz(i,k),alv,qg,cpd
    1074 
    1075         ! ori c approximation here:
    1076         ! ori
    1077         ! tp(i,k)=(ah0(i)-(cl-cpd)*qnk(i)*t(i,k)-gz(i,k)-alv*qg)/cpd
    1078 
    1079         ! convect3: no approximation:
     1146! print*,'cpd dans convect2 ',cpd
     1147! print*,'tp(i,k),ah0(i),cl,cpd,qnk(i),t(i,k),gz(i,k),alv,qg,cpd'
     1148! print*,tp(i,k),ah0(i),cl,cpd,qnk(i),t(i,k),gz(i,k),alv,qg,cpd
     1149
     1150! ori c approximation here:
     1151! ori        tp(i,k)=(ah0(i)-(cl-cpd)*qnk(i)*t(i,k)-gz(i,k)-alv*qg)/cpd
     1152
     1153! convect3: no approximation:
    10801154        IF (cvflag_ice) THEN
    10811155          tp(i, k) = max(0., (ah0(i)-gz(i,k)-alv*qg)/(cpd+(cl-cpd)*qnk(i)))
     
    10871161        clw(i, k) = max(0.0, clw(i,k))
    10881162        rg = qg/(1.-qnk(i))
    1089         ! ori               tvp(i,k)=tp(i,k)*(1.+rg*epsi)
    1090         ! convect3: (qg utilise au lieu du vrai mixing ratio rg):
     1163! ori               tvp(i,k)=tp(i,k)*(1.+rg*epsi)
     1164! convect3: (qg utilise au lieu du vrai mixing ratio rg):
    10911165        tvp(i, k) = tp(i, k)*(1.+qg/eps-qnk(i)) ! whole thing
    10921166        IF (cvflag_ice) THEN
     
    10991173
    11001174      IF (cvflag_ice) THEN
    1101         ! CR:attention boucle en klon dans Icefrac
    1102         ! Call Icefrac(t,clw,qi,nl,nloc)
     1175!CR:attention boucle en klon dans Icefrac
     1176! Call Icefrac(t,clw,qi,nl,nloc)
    11031177        IF (t(i,k)>263.15) THEN
    11041178          qi(i, k) = 0.
     
    11111185          END IF
    11121186        END IF
    1113         ! CR: fin test
     1187!CR: fin test
    11141188        IF (t(i,k)<263.15) THEN
    1115           ! CR: on commente les calculs d'Arnaud car division par zero
    1116           ! nouveau calcul propose par JYG
    1117           ! alv=lv0-clmcpv*(t(i,k)-273.15)
    1118           ! alf=lf0-clmci*(t(i,k)-273.15)
    1119           ! tg=tp(i,k)
    1120           ! tc=tp(i,k)-273.15
    1121           ! denom=243.5+tc
    1122           ! do j=1,3
    1123           ! cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
    1124           ! il faudra que esi vienne en argument de la convection
    1125           ! cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
    1126           ! tbis=t(i,k)+(tp(i,k)-tg)
    1127           ! esi=exp(23.33086-(6111.72784/tbis)
    1128           ! :               +0.15215*log(tbis))
    1129           ! qsat_new=eps*esi/(p(i,k)-esi*(1.-eps))
    1130           ! snew=cpd*(1.-qnk(i))+cl*qnk(i)+alv*alv*qsat_new/
    1131           ! :                               (rrv*tbis*tbis)
    1132           ! snew=1./snew
    1133           ! print*,esi,qsat_new,snew,'esi,qsat,snew'
    1134           ! tp(i,k)=tg+(alf*qi(i,k)+alv*qg*(1.-(esi/es)))*snew
    1135           ! print*,k,tp(i,k),qnk(i),'avec glace'
    1136           ! print*,'tpNAN',tg,alf,qi(i,k),alv,qg,esi,es,snew
    1137           ! enddo
     1189!CR: on commente les calculs d'Arnaud car division par zero
     1190! nouveau calcul propose par JYG
     1191!      alv=lv0-clmcpv*(t(i,k)-273.15)
     1192!      alf=lf0-clmci*(t(i,k)-273.15)
     1193!      tg=tp(i,k)
     1194!      tc=tp(i,k)-273.15
     1195!      denom=243.5+tc
     1196!      do j=1,3
     1197! cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
     1198! il faudra que esi vienne en argument de la convection
     1199! cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
     1200!        tbis=t(i,k)+(tp(i,k)-tg)
     1201!        esi=exp(23.33086-(6111.72784/tbis) + &
     1202!                       0.15215*log(tbis))
     1203!        qsat_new=eps*esi/(p(i,k)-esi*(1.-eps))
     1204!        snew=cpd*(1.-qnk(i))+cl*qnk(i)+alv*alv*qsat_new/ &
     1205!                                       (rrv*tbis*tbis)
     1206!        snew=1./snew
     1207!        print*,esi,qsat_new,snew,'esi,qsat,snew'
     1208!        tp(i,k)=tg+(alf*qi(i,k)+alv*qg*(1.-(esi/es)))*snew
     1209!        print*,k,tp(i,k),qnk(i),'avec glace'
     1210!        print*,'tpNAN',tg,alf,qi(i,k),alv,qg,esi,es,snew
     1211!      enddo
    11381212
    11391213          alv = lv0 - clmcpv*(t(i,k)-273.15)
     
    11451219            esi = exp(23.33086-(6111.72784/tp(i,k))+0.15215*log(tp(i,k)))
    11461220            qsat_new = eps*esi/(p(i,k)-esi*(1.-eps))
    1147             snew = cpd*(1.-qnk(i)) + cl*qnk(i) + alv*als*qsat_new/(rrv*tp(i,k &
    1148               )*tp(i,k))
     1221            snew = cpd*(1.-qnk(i)) + cl*qnk(i) + alv*als*qsat_new/ &
     1222                                                 (rrv*tp(i,k)*tp(i,k))
    11491223            snew = 1./snew
    1150             ! c             print*,esi,qsat_new,snew,'esi,qsat,snew'
    1151             tp(i, k) = tp(i, k) + ((cpd*(1.-qnk(i))+cl*qnk(i))*(tg-tp(i, &
    1152               k))+alv*(qg-qsat_new)+alf*qi(i,k))*snew
    1153             ! print*,k,tp(i,k),qsat_new,qnk(i),qi(i,k),
    1154             ! :             'k,tp,q,qt,qi avec glace'
     1224! c             print*,esi,qsat_new,snew,'esi,qsat,snew'
     1225            tp(i, k) = tp(i, k) + &
     1226                       ((cpd*(1.-qnk(i))+cl*qnk(i))*(tg-tp(i,k)) + &
     1227                        alv*(qg-qsat_new)+alf*qi(i,k))*snew
     1228! print*,k,tp(i,k),qsat_new,qnk(i),qi(i,k), &
     1229!              'k,tp,q,qt,qi avec glace'
    11551230          END DO
    11561231
    1157           ! CR:reprise du code AJ
     1232!CR:reprise du code AJ
    11581233          clw(i, k) = qnk(i) - qsat_new
    11591234          clw(i, k) = max(0.0, clw(i,k))
    11601235          tvp(i, k) = max(0., tp(i,k)*(1.+qsat_new/eps-qnk(i)))
    1161           ! print*,tvp(i,k),'tvp'
     1236! print*,tvp(i,k),'tvp'
    11621237        END IF
    11631238        IF (clw(i,k)<1.E-11) THEN
     
    11701245  END DO
    11711246
    1172   ! =====================================================================
    1173   ! --- SET THE PRECIPITATION EFFICIENCIES AND THE FRACTION OF
    1174   ! --- PRECIPITATION FALLING OUTSIDE OF CLOUD
    1175   ! --- THESE MAY BE FUNCTIONS OF TP(I), P(I) AND CLW(I)
    1176   ! =====================================================================
     1247! =====================================================================
     1248! --- SET THE PRECIPITATION EFFICIENCIES AND THE FRACTION OF
     1249! --- PRECIPITATION FALLING OUTSIDE OF CLOUD
     1250! --- THESE MAY BE FUNCTIONS OF TP(I), P(I) AND CLW(I)
     1251! =====================================================================
    11771252
    11781253  IF (flag_epkeorig/=1) THEN
     
    12051280    END DO
    12061281  END IF
    1207   ! =====================================================================
    1208   ! --- CALCULATE VIRTUAL TEMPERATURE AND LIFTED PARCEL
    1209   ! --- VIRTUAL TEMPERATURE
    1210   ! =====================================================================
    1211 
    1212   ! dans convect3, tvp est calcule en une seule fois, et sans retirer
    1213   ! l'eau condensee (~> reversible CAPE)
    1214 
    1215   ! ori      do 340 k=minorig+1,nl
    1216   ! ori        do 330 i=1,ncum
    1217   ! ori        if(k.ge.(icb(i)+1))then
    1218   ! ori          tvp(i,k)=tvp(i,k)*(1.0-qnk(i)+ep(i,k)*clw(i,k))
    1219   ! oric         print*,'i,k,tvp(i,k),qnk(i),ep(i,k),clw(i,k)'
    1220   ! oric         print*, i,k,tvp(i,k),qnk(i),ep(i,k),clw(i,k)
    1221   ! ori        endif
    1222   ! ori 330    continue
    1223   ! ori 340  continue
    1224 
    1225   ! ori      do 350 i=1,ncum
    1226   ! ori       tvp(i,nlp)=tvp(i,nl)-(gz(i,nlp)-gz(i,nl))/cpd
    1227   ! ori 350  continue
    1228 
    1229   DO i = 1, ncum ! convect3
    1230     tp(i, nlp) = tp(i, nl) ! convect3
    1231   END DO ! convect3
    1232 
    1233   ! =====================================================================
    1234   ! --- EFFECTIVE VERTICAL PROFILE OF BUOYANCY (convect3 only):
    1235   ! =====================================================================
    1236 
    1237   ! -- this is for convect3 only:
    1238 
    1239   ! first estimate of buoyancy:
     1282! =====================================================================
     1283! --- CALCULATE VIRTUAL TEMPERATURE AND LIFTED PARCEL
     1284! --- VIRTUAL TEMPERATURE
     1285! =====================================================================
     1286
     1287! dans convect3, tvp est calcule en une seule fois, et sans retirer
     1288! l'eau condensee (~> reversible CAPE)
     1289
     1290! ori      do 340 k=minorig+1,nl
     1291! ori        do 330 i=1,ncum
     1292! ori        if(k.ge.(icb(i)+1))then
     1293! ori          tvp(i,k)=tvp(i,k)*(1.0-qnk(i)+ep(i,k)*clw(i,k))
     1294! oric         print*,'i,k,tvp(i,k),qnk(i),ep(i,k),clw(i,k)'
     1295! oric         print*, i,k,tvp(i,k),qnk(i),ep(i,k),clw(i,k)
     1296! ori        endif
     1297! ori 330    continue
     1298! ori 340  continue
     1299
     1300! ori      do 350 i=1,ncum
     1301! ori       tvp(i,nlp)=tvp(i,nl)-(gz(i,nlp)-gz(i,nl))/cpd
     1302! ori 350  continue
     1303
     1304  DO i = 1, ncum                                           ! convect3
     1305    tp(i, nlp) = tp(i, nl)                                 ! convect3
     1306  END DO                                                   ! convect3
     1307
     1308! =====================================================================
     1309! --- EFFECTIVE VERTICAL PROFILE OF BUOYANCY (convect3 only):
     1310! =====================================================================
     1311
     1312! -- this is for convect3 only:
     1313
     1314! first estimate of buoyancy:
    12401315
    12411316  DO i = 1, ncum
     
    12451320  END DO
    12461321
    1247   ! set buoyancy=buoybase for all levels below base
    1248   ! for safety, set buoy(icb)=buoybase
     1322! set buoyancy=buoybase for all levels below base
     1323! for safety, set buoy(icb)=buoybase
    12491324
    12501325  DO i = 1, ncum
     
    12541329      END IF
    12551330    END DO
    1256     ! buoy(icb(i),k)=buoybase(i)
     1331!    buoy(icb(i),k)=buoybase(i)
    12571332    buoy(i, icb(i)) = buoybase(i)
    12581333  END DO
    12591334
    1260   ! -- end convect3
    1261 
    1262   ! =====================================================================
    1263   ! --- FIND THE FIRST MODEL LEVEL (INB) ABOVE THE PARCEL'S
    1264   ! --- LEVEL OF NEUTRAL BUOYANCY
    1265   ! =====================================================================
    1266 
    1267   ! -- this is for convect3 only:
     1335! -- end convect3
     1336
     1337! =====================================================================
     1338! --- FIND THE FIRST MODEL LEVEL (INB) ABOVE THE PARCEL'S
     1339! --- LEVEL OF NEUTRAL BUOYANCY
     1340! =====================================================================
     1341
     1342! -- this is for convect3 only:
    12681343
    12691344  DO i = 1, ncum
     
    12731348
    12741349
    1275   ! --    iposit(i) = first level, above icb, with positive buoyancy
     1350! --    iposit(i) = first level, above icb, with positive buoyancy
    12761351  DO k = 1, nl - 1
    12771352    DO i = 1, ncum
     
    12961371  END DO
    12971372
    1298   ! -- end convect3
    1299 
    1300   ! ori      do 510 i=1,ncum
    1301   ! ori        cape(i)=0.0
    1302   ! ori        capem(i)=0.0
    1303   ! ori        inb(i)=icb(i)+1
    1304   ! ori        inb1(i)=inb(i)
    1305   ! ori 510  continue
    1306 
    1307   ! Originial Code
    1308 
    1309   ! do 530 k=minorig+1,nl-1
    1310   ! do 520 i=1,ncum
    1311   ! if(k.ge.(icb(i)+1))then
    1312   ! by=(tvp(i,k)-tv(i,k))*dph(i,k)/p(i,k)
    1313   ! byp=(tvp(i,k+1)-tv(i,k+1))*dph(i,k+1)/p(i,k+1)
    1314   ! cape(i)=cape(i)+by
    1315   ! if(by.ge.0.0)inb1(i)=k+1
    1316   ! if(cape(i).gt.0.0)then
    1317   ! inb(i)=k+1
    1318   ! capem(i)=cape(i)
    1319   ! endif
    1320   ! endif
    1321   ! 520    continue
    1322   ! 530  continue
    1323   ! do 540 i=1,ncum
    1324   ! byp=(tvp(i,nl)-tv(i,nl))*dph(i,nl)/p(i,nl)
    1325   ! cape(i)=capem(i)+byp
    1326   ! defrac=capem(i)-cape(i)
    1327   ! defrac=max(defrac,0.001)
    1328   ! frac(i)=-cape(i)/defrac
    1329   ! frac(i)=min(frac(i),1.0)
    1330   ! frac(i)=max(frac(i),0.0)
    1331   ! 540   continue
    1332 
    1333   ! K Emanuel fix
    1334 
    1335   ! call zilch(byp,ncum)
    1336   ! do 530 k=minorig+1,nl-1
    1337   ! do 520 i=1,ncum
    1338   ! if(k.ge.(icb(i)+1))then
    1339   ! by=(tvp(i,k)-tv(i,k))*dph(i,k)/p(i,k)
    1340   ! cape(i)=cape(i)+by
    1341   ! if(by.ge.0.0)inb1(i)=k+1
    1342   ! if(cape(i).gt.0.0)then
    1343   ! inb(i)=k+1
    1344   ! capem(i)=cape(i)
    1345   ! byp(i)=(tvp(i,k+1)-tv(i,k+1))*dph(i,k+1)/p(i,k+1)
    1346   ! endif
    1347   ! endif
    1348   ! 520    continue
    1349   ! 530  continue
    1350   ! do 540 i=1,ncum
    1351   ! inb(i)=max(inb(i),inb1(i))
    1352   ! cape(i)=capem(i)+byp(i)
    1353   ! defrac=capem(i)-cape(i)
    1354   ! defrac=max(defrac,0.001)
    1355   ! frac(i)=-cape(i)/defrac
    1356   ! frac(i)=min(frac(i),1.0)
    1357   ! frac(i)=max(frac(i),0.0)
    1358   ! 540   continue
    1359 
    1360   ! J Teixeira fix
    1361 
    1362   ! ori      call zilch(byp,ncum)
    1363   ! ori      do 515 i=1,ncum
    1364   ! ori        lcape(i)=.true.
    1365   ! ori 515  continue
    1366   ! ori      do 530 k=minorig+1,nl-1
    1367   ! ori        do 520 i=1,ncum
    1368   ! ori          if(cape(i).lt.0.0)lcape(i)=.false.
    1369   ! ori          if((k.ge.(icb(i)+1)).and.lcape(i))then
    1370   ! ori            by=(tvp(i,k)-tv(i,k))*dph(i,k)/p(i,k)
    1371   ! ori            byp(i)=(tvp(i,k+1)-tv(i,k+1))*dph(i,k+1)/p(i,k+1)
    1372   ! ori            cape(i)=cape(i)+by
    1373   ! ori            if(by.ge.0.0)inb1(i)=k+1
    1374   ! ori            if(cape(i).gt.0.0)then
    1375   ! ori              inb(i)=k+1
    1376   ! ori              capem(i)=cape(i)
    1377   ! ori            endif
    1378   ! ori          endif
    1379   ! ori 520    continue
    1380   ! ori 530  continue
    1381   ! ori      do 540 i=1,ncum
    1382   ! ori          cape(i)=capem(i)+byp(i)
    1383   ! ori          defrac=capem(i)-cape(i)
    1384   ! ori          defrac=max(defrac,0.001)
    1385   ! ori          frac(i)=-cape(i)/defrac
    1386   ! ori          frac(i)=min(frac(i),1.0)
    1387   ! ori          frac(i)=max(frac(i),0.0)
    1388   ! ori 540  continue
    1389 
    1390   ! =====================================================================
    1391   ! ---   CALCULATE LIQUID WATER STATIC ENERGY OF LIFTED PARCEL
    1392   ! =====================================================================
     1373! -- end convect3
     1374
     1375! ori      do 510 i=1,ncum
     1376! ori        cape(i)=0.0
     1377! ori        capem(i)=0.0
     1378! ori        inb(i)=icb(i)+1
     1379! ori        inb1(i)=inb(i)
     1380! ori 510  continue
     1381
     1382! Originial Code
     1383
     1384!    do 530 k=minorig+1,nl-1
     1385!    do 520 i=1,ncum
     1386!      if(k.ge.(icb(i)+1))then
     1387!      by=(tvp(i,k)-tv(i,k))*dph(i,k)/p(i,k)
     1388!      byp=(tvp(i,k+1)-tv(i,k+1))*dph(i,k+1)/p(i,k+1)
     1389!      cape(i)=cape(i)+by
     1390!      if(by.ge.0.0)inb1(i)=k+1
     1391!      if(cape(i).gt.0.0)then
     1392!        inb(i)=k+1
     1393!        capem(i)=cape(i)
     1394!      endif
     1395!      endif
     1396!520    continue
     1397!530  continue
     1398!    do 540 i=1,ncum
     1399!    byp=(tvp(i,nl)-tv(i,nl))*dph(i,nl)/p(i,nl)
     1400!    cape(i)=capem(i)+byp
     1401!    defrac=capem(i)-cape(i)
     1402!    defrac=max(defrac,0.001)
     1403!    frac(i)=-cape(i)/defrac
     1404!    frac(i)=min(frac(i),1.0)
     1405!    frac(i)=max(frac(i),0.0)
     1406!540   continue
     1407
     1408!    K Emanuel fix
     1409
     1410!    call zilch(byp,ncum)
     1411!    do 530 k=minorig+1,nl-1
     1412!    do 520 i=1,ncum
     1413!      if(k.ge.(icb(i)+1))then
     1414!      by=(tvp(i,k)-tv(i,k))*dph(i,k)/p(i,k)
     1415!      cape(i)=cape(i)+by
     1416!      if(by.ge.0.0)inb1(i)=k+1
     1417!      if(cape(i).gt.0.0)then
     1418!        inb(i)=k+1
     1419!        capem(i)=cape(i)
     1420!        byp(i)=(tvp(i,k+1)-tv(i,k+1))*dph(i,k+1)/p(i,k+1)
     1421!      endif
     1422!      endif
     1423!520    continue
     1424!530  continue
     1425!    do 540 i=1,ncum
     1426!    inb(i)=max(inb(i),inb1(i))
     1427!    cape(i)=capem(i)+byp(i)
     1428!    defrac=capem(i)-cape(i)
     1429!    defrac=max(defrac,0.001)
     1430!    frac(i)=-cape(i)/defrac
     1431!    frac(i)=min(frac(i),1.0)
     1432!    frac(i)=max(frac(i),0.0)
     1433!540   continue
     1434
     1435! J Teixeira fix
     1436
     1437! ori      call zilch(byp,ncum)
     1438! ori      do 515 i=1,ncum
     1439! ori        lcape(i)=.true.
     1440! ori 515  continue
     1441! ori      do 530 k=minorig+1,nl-1
     1442! ori        do 520 i=1,ncum
     1443! ori          if(cape(i).lt.0.0)lcape(i)=.false.
     1444! ori          if((k.ge.(icb(i)+1)).and.lcape(i))then
     1445! ori            by=(tvp(i,k)-tv(i,k))*dph(i,k)/p(i,k)
     1446! ori            byp(i)=(tvp(i,k+1)-tv(i,k+1))*dph(i,k+1)/p(i,k+1)
     1447! ori            cape(i)=cape(i)+by
     1448! ori            if(by.ge.0.0)inb1(i)=k+1
     1449! ori            if(cape(i).gt.0.0)then
     1450! ori              inb(i)=k+1
     1451! ori              capem(i)=cape(i)
     1452! ori            endif
     1453! ori          endif
     1454! ori 520    continue
     1455! ori 530  continue
     1456! ori      do 540 i=1,ncum
     1457! ori          cape(i)=capem(i)+byp(i)
     1458! ori          defrac=capem(i)-cape(i)
     1459! ori          defrac=max(defrac,0.001)
     1460! ori          frac(i)=-cape(i)/defrac
     1461! ori          frac(i)=min(frac(i),1.0)
     1462! ori          frac(i)=max(frac(i),0.0)
     1463! ori 540  continue
     1464
     1465! =====================================================================
     1466! ---   CALCULATE LIQUID WATER STATIC ENERGY OF LIFTED PARCEL
     1467! =====================================================================
    13931468
    13941469  DO k = 1, nd
     
    14051480          frac(i, k) = 1. - (t(i,k)-243.15)/(263.15-243.15)
    14061481          frac(i, k) = min(max(frac(i,k),0.0), 1.0)
    1407           hp(i, k) = hnk(i) + (lv(i,k)+(cpd-cpv)*t(i,k)+frac(i,k)*lf(i,k))*ep &
    1408             (i, k)*clw(i, k)
     1482          hp(i, k) = hnk(i) + (lv(i,k)+(cpd-cpv)*t(i,k)+frac(i,k)*lf(i,k))* &
     1483                              ep(i, k)*clw(i, k)
    14091484
    14101485        ELSE
     
    14191494END SUBROUTINE cv3_undilute2
    14201495
    1421 SUBROUTINE cv3_closure(nloc, ncum, nd, icb, inb, pbase, p, ph, tv, buoy, sig, &
    1422     w0, cape, m, iflag)
     1496SUBROUTINE cv3_closure(nloc, ncum, nd, icb, inb, &
     1497                       pbase, p, ph, tv, buoy, &
     1498                       sig, w0, cape, m, iflag)
    14231499  IMPLICIT NONE
    14241500
    1425   ! ===================================================================
    1426   ! ---  CLOSURE OF CONVECT3
    1427 
    1428   ! vectorization: S. Bony
    1429   ! ===================================================================
     1501! ===================================================================
     1502! ---  CLOSURE OF CONVECT3
     1503!
     1504! vectorization: S. Bony
     1505! ===================================================================
    14301506
    14311507  include "cvthermo.h"
    14321508  include "cv3param.h"
    14331509
    1434   ! input:
     1510!input:
    14351511  INTEGER ncum, nd, nloc
    14361512  INTEGER icb(nloc), inb(nloc)
     
    14391515  REAL tv(nloc, nd), buoy(nloc, nd)
    14401516
    1441   ! input/output:
     1517!input/output:
    14421518  REAL sig(nloc, nd), w0(nloc, nd)
    14431519  INTEGER iflag(nloc)
    14441520
    1445   ! output:
     1521!output:
    14461522  REAL cape(nloc)
    14471523  REAL m(nloc, nd)
    14481524
    1449   ! local variables:
     1525!local variables:
    14501526  INTEGER i, j, k, icbmax
    14511527  REAL deltap, fac, w, amu
     
    14541530
    14551531
    1456   ! -------------------------------------------------------
    1457   ! -- Initialization
    1458   ! -------------------------------------------------------
     1532! -------------------------------------------------------
     1533! -- Initialization
     1534! -------------------------------------------------------
    14591535
    14601536  DO k = 1, nl
     
    14641540  END DO
    14651541
    1466   ! -------------------------------------------------------
    1467   ! -- Reset sig(i) and w0(i) for i>inb and i<icb
    1468   ! -------------------------------------------------------
    1469 
    1470   ! update sig and w0 above LNB:
     1542! -------------------------------------------------------
     1543! -- Reset sig(i) and w0(i) for i>inb and i<icb
     1544! -------------------------------------------------------
     1545
     1546! update sig and w0 above LNB:
    14711547
    14721548  DO k = 1, nl - 1
    14731549    DO i = 1, ncum
    14741550      IF ((inb(i)<(nl-1)) .AND. (k>=(inb(i)+1))) THEN
    1475         sig(i, k) = beta*sig(i, k) + 2.*alpha*buoy(i, inb(i))*abs(buoy(i,inb( &
    1476           i)))
     1551        sig(i, k) = beta*sig(i, k) + &
     1552                    2.*alpha*buoy(i, inb(i))*abs(buoy(i,inb(i)))
    14771553        sig(i, k) = amax1(sig(i,k), 0.0)
    14781554        w0(i, k) = beta*w0(i, k)
     
    14811557  END DO
    14821558
    1483   ! compute icbmax:
     1559! compute icbmax:
    14841560
    14851561  icbmax = 2
     
    14881564  END DO
    14891565
    1490   ! update sig and w0 below cloud base:
     1566! update sig and w0 below cloud base:
    14911567
    14921568  DO k = 1, icbmax
    14931569    DO i = 1, ncum
    14941570      IF (k<=icb(i)) THEN
    1495         sig(i, k) = beta*sig(i, k) - 2.*alpha*buoy(i, icb(i))*buoy(i, icb(i))
     1571        sig(i, k) = beta*sig(i, k) - &
     1572                    2.*alpha*buoy(i, icb(i))*buoy(i, icb(i))
    14961573        sig(i, k) = max(sig(i,k), 0.0)
    14971574        w0(i, k) = beta*w0(i, k)
     
    15001577  END DO
    15011578
    1502   ! !      if(inb.lt.(nl-1))then
    1503   ! !         do 85 i=inb+1,nl-1
    1504   ! !            sig(i)=beta*sig(i)+2.*alpha*buoy(inb)*
    1505   ! !     1              abs(buoy(inb))
    1506   ! !            sig(i)=max(sig(i),0.0)
    1507   ! !            w0(i)=beta*w0(i)
    1508   ! !   85    continue
    1509   ! !      end if
    1510 
    1511   ! !      do 87 i=1,icb
    1512   ! !         sig(i)=beta*sig(i)-2.*alpha*buoy(icb)*buoy(icb)
    1513   ! !         sig(i)=max(sig(i),0.0)
    1514   ! !         w0(i)=beta*w0(i)
    1515   ! !   87 continue
    1516 
    1517   ! -------------------------------------------------------------
    1518   ! -- Reset fractional areas of updrafts and w0 at initial time
    1519   ! -- and after 10 time steps of no convection
    1520   ! -------------------------------------------------------------
     1579!!      if(inb.lt.(nl-1))then
     1580!!         do 85 i=inb+1,nl-1
     1581!!            sig(i)=beta*sig(i)+2.*alpha*buoy(inb)*
     1582!!     1              abs(buoy(inb))
     1583!!            sig(i)=max(sig(i),0.0)
     1584!!            w0(i)=beta*w0(i)
     1585!!   85    continue
     1586!!      end if
     1587
     1588!!      do 87 i=1,icb
     1589!!         sig(i)=beta*sig(i)-2.*alpha*buoy(icb)*buoy(icb)
     1590!!         sig(i)=max(sig(i),0.0)
     1591!!         w0(i)=beta*w0(i)
     1592!!   87 continue
     1593
     1594! -------------------------------------------------------------
     1595! -- Reset fractional areas of updrafts and w0 at initial time
     1596! -- and after 10 time steps of no convection
     1597! -------------------------------------------------------------
    15211598
    15221599  DO k = 1, nl - 1
     
    15291606  END DO
    15301607
    1531   ! -------------------------------------------------------------
    1532   ! -- Calculate convective available potential energy (cape),
    1533   ! -- vertical velocity (w), fractional area covered by
    1534   ! -- undilute updraft (sig), and updraft mass flux (m)
    1535   ! -------------------------------------------------------------
     1608! -------------------------------------------------------------
     1609! -- Calculate convective available potential energy (cape),
     1610! -- vertical velocity (w), fractional area covered by
     1611! -- undilute updraft (sig), and updraft mass flux (m)
     1612! -------------------------------------------------------------
    15361613
    15371614  DO i = 1, ncum
     
    15391616  END DO
    15401617
    1541   ! compute dtmin (minimum buoyancy between ICB and given level k):
     1618! compute dtmin (minimum buoyancy between ICB and given level k):
    15421619
    15431620  DO i = 1, ncum
     
    15501627    DO k = 1, nl
    15511628      DO j = minorig, nl
    1552         IF ((k>=(icb(i)+1)) .AND. (k<=inb(i)) .AND. (j>=icb(i)) .AND. (j<=(k- &
    1553             1))) THEN
     1629        IF ((k>=(icb(i)+1)) .AND. (k<=inb(i)) .AND. (j>=icb(i)) .AND. (j<=(k-1))) THEN
    15541630          dtmin(i, k) = amin1(dtmin(i,k), buoy(i,j))
    15551631        END IF
     
    15581634  END DO
    15591635
    1560   ! the interval on which cape is computed starts at pbase :
     1636! the interval on which cape is computed starts at pbase :
    15611637
    15621638  DO k = 1, nl
     
    15701646        sigold(i, k) = sig(i, k)
    15711647
    1572         ! dtmin(i,k)=100.0
    1573         ! do 97 j=icb(i),k-1 ! mauvaise vectorisation
    1574         ! dtmin(i,k)=AMIN1(dtmin(i,k),buoy(i,j))
    1575         ! 97     continue
     1648! dtmin(i,k)=100.0
     1649! do 97 j=icb(i),k-1 ! mauvaise vectorisation
     1650! dtmin(i,k)=AMIN1(dtmin(i,k),buoy(i,j))
     1651! 97     continue
    15761652
    15771653        sig(i, k) = beta*sig(i, k) + alpha*dtmin(i, k)*abs(dtmin(i,k))
     
    15901666  DO i = 1, ncum
    15911667    w0(i, icb(i)) = 0.5*w0(i, icb(i)+1)
    1592     m(i, icb(i)) = 0.5*m(i, icb(i)+1)*(ph(i,icb(i))-ph(i,icb(i)+1))/ &
    1593       (ph(i,icb(i)+1)-ph(i,icb(i)+2))
     1668    m(i, icb(i)) = 0.5*m(i, icb(i)+1)*(ph(i,icb(i))-ph(i,icb(i)+1))/(ph(i,icb(i)+1)-ph(i,icb(i)+2))
    15941669    sig(i, icb(i)) = sig(i, icb(i)+1)
    15951670    sig(i, icb(i)-1) = sig(i, icb(i))
    15961671  END DO
    15971672
    1598   ! ccc 3. Compute final cloud base mass flux and set iflag to 3 if
    1599   ! ccc    cloud base mass flux is exceedingly small and is decreasing (i.e.
    1600   ! if
    1601   ! ccc    the final mass flux (cbmflast) is greater than the target mass
    1602   ! flux
    1603   ! ccc    (cbmf) ??).
    1604   ! cc
    1605   ! c      do i = 1,ncum
    1606   ! c       cbmflast(i) = 0.
    1607   ! c      enddo
    1608   ! cc
    1609   ! c      do k= 1,nl
    1610   ! c       do i = 1,ncum
    1611   ! c        IF (k .ge. icb(i) .and. k .le. inb(i)) THEN
    1612   ! c         cbmflast(i) = cbmflast(i)+M(i,k)
    1613   ! c        ENDIF
    1614   ! c       enddo
    1615   ! c      enddo
    1616   ! cc
    1617   ! c      do i = 1,ncum
    1618   ! c       IF (cbmflast(i) .lt. 1.e-6) THEN
    1619   ! c         iflag(i) = 3
    1620   ! c       ENDIF
    1621   ! c      enddo
    1622   ! cc
    1623   ! c      do k= 1,nl
    1624   ! c       do i = 1,ncum
    1625   ! c        IF (iflag(i) .ge. 3) THEN
    1626   ! c         M(i,k) = 0.
    1627   ! c         sig(i,k) = 0.
    1628   ! c         w0(i,k) = 0.
    1629   ! c        ENDIF
    1630   ! c       enddo
    1631   ! c      enddo
    1632   ! cc
    1633   ! !      cape=0.0
    1634   ! !      do 98 i=icb+1,inb
    1635   ! !         deltap = min(pbase,ph(i-1))-min(pbase,ph(i))
    1636   ! !         cape=cape+rrd*buoy(i-1)*deltap/p(i-1)
    1637   ! !         dcape=rrd*buoy(i-1)*deltap/p(i-1)
    1638   ! !         dlnp=deltap/p(i-1)
    1639   ! !         cape=max(0.0,cape)
    1640   ! !         sigold=sig(i)
    1641 
    1642   ! !         dtmin=100.0
    1643   ! !         do 97 j=icb,i-1
    1644   ! !            dtmin=amin1(dtmin,buoy(j))
    1645   ! !   97    continue
    1646 
    1647   ! !         sig(i)=beta*sig(i)+alpha*dtmin*abs(dtmin)
    1648   ! !         sig(i)=max(sig(i),0.0)
    1649   ! !         sig(i)=amin1(sig(i),0.01)
    1650   ! !         fac=amin1(((dtcrit-dtmin)/dtcrit),1.0)
    1651   ! !         w=(1.-beta)*fac*sqrt(cape)+beta*w0(i)
    1652   ! !         amu=0.5*(sig(i)+sigold)*w
    1653   ! !         m(i)=amu*0.007*p(i)*(ph(i)-ph(i+1))/tv(i)
    1654   ! !         w0(i)=w
    1655   ! !   98 continue
    1656   ! !      w0(icb)=0.5*w0(icb+1)
    1657   ! !      m(icb)=0.5*m(icb+1)*(ph(icb)-ph(icb+1))/(ph(icb+1)-ph(icb+2))
    1658   ! !      sig(icb)=sig(icb+1)
    1659   ! !      sig(icb-1)=sig(icb)
     1673! ccc 3. Compute final cloud base mass flux and set iflag to 3 if
     1674! ccc    cloud base mass flux is exceedingly small and is decreasing (i.e. if
     1675! ccc    the final mass flux (cbmflast) is greater than the target mass flux
     1676! ccc    (cbmf) ??).
     1677! cc
     1678! c      do i = 1,ncum
     1679! c       cbmflast(i) = 0.
     1680! c      enddo
     1681! cc
     1682! c      do k= 1,nl
     1683! c       do i = 1,ncum
     1684! c        IF (k .ge. icb(i) .and. k .le. inb(i)) THEN
     1685! c         cbmflast(i) = cbmflast(i)+M(i,k)
     1686! c        ENDIF
     1687! c       enddo
     1688! c      enddo
     1689! cc
     1690! c      do i = 1,ncum
     1691! c       IF (cbmflast(i) .lt. 1.e-6) THEN
     1692! c         iflag(i) = 3
     1693! c       ENDIF
     1694! c      enddo
     1695! cc
     1696! c      do k= 1,nl
     1697! c       do i = 1,ncum
     1698! c        IF (iflag(i) .ge. 3) THEN
     1699! c         M(i,k) = 0.
     1700! c         sig(i,k) = 0.
     1701! c         w0(i,k) = 0.
     1702! c        ENDIF
     1703! c       enddo
     1704! c      enddo
     1705! cc
     1706!!      cape=0.0
     1707!!      do 98 i=icb+1,inb
     1708!!         deltap = min(pbase,ph(i-1))-min(pbase,ph(i))
     1709!!         cape=cape+rrd*buoy(i-1)*deltap/p(i-1)
     1710!!         dcape=rrd*buoy(i-1)*deltap/p(i-1)
     1711!!         dlnp=deltap/p(i-1)
     1712!!         cape=max(0.0,cape)
     1713!!         sigold=sig(i)
     1714
     1715!!         dtmin=100.0
     1716!!         do 97 j=icb,i-1
     1717!!            dtmin=amin1(dtmin,buoy(j))
     1718!!   97    continue
     1719
     1720!!         sig(i)=beta*sig(i)+alpha*dtmin*abs(dtmin)
     1721!!         sig(i)=max(sig(i),0.0)
     1722!!         sig(i)=amin1(sig(i),0.01)
     1723!!         fac=amin1(((dtcrit-dtmin)/dtcrit),1.0)
     1724!!         w=(1.-beta)*fac*sqrt(cape)+beta*w0(i)
     1725!!         amu=0.5*(sig(i)+sigold)*w
     1726!!         m(i)=amu*0.007*p(i)*(ph(i)-ph(i+1))/tv(i)
     1727!!         w0(i)=w
     1728!!   98 continue
     1729!!      w0(icb)=0.5*w0(icb+1)
     1730!!      m(icb)=0.5*m(icb+1)*(ph(icb)-ph(icb+1))/(ph(icb+1)-ph(icb+2))
     1731!!      sig(icb)=sig(icb+1)
     1732!!      sig(icb-1)=sig(icb)
    16601733
    16611734  RETURN
    16621735END SUBROUTINE cv3_closure
    16631736
    1664 SUBROUTINE cv3_mixing(nloc, ncum, nd, na, ntra, icb, nk, inb, ph, t, rr, rs, &
    1665     u, v, tra, h, lv, lf, frac, qnk, unk, vnk, hp, tv, tvp, ep, clw, m, sig, &
    1666     ment, qent, uent, vent, nent, sij, elij, ments, qents, traent)
     1737SUBROUTINE cv3_mixing(nloc, ncum, nd, na, ntra, icb, nk, inb, &
     1738                      ph, t, rr, rs, u, v, tra, h, lv, lf, frac, qnk, &
     1739                      unk, vnk, hp, tv, tvp, ep, clw, m, sig, &
     1740                      ment, qent, uent, vent, nent, sij, elij, ments, qents, traent)
    16671741  IMPLICIT NONE
    16681742
    1669   ! ---------------------------------------------------------------------
    1670   ! a faire:
    1671   ! - vectorisation de la partie normalisation des flux (do 789...)
    1672   ! ---------------------------------------------------------------------
     1743! ---------------------------------------------------------------------
     1744! a faire:
     1745! - vectorisation de la partie normalisation des flux (do 789...)
     1746! ---------------------------------------------------------------------
    16731747
    16741748  include "cvthermo.h"
     
    16761750  include "cvflag.h"
    16771751
    1678   ! inputs:
     1752!inputs:
    16791753  INTEGER ncum, nd, na, ntra, nloc
    16801754  INTEGER icb(nloc), inb(nloc), nk(nloc)
     
    16901764  REAL m(nloc, na) ! input of convect3
    16911765
    1692   ! outputs:
     1766!outputs:
    16931767  REAL ment(nloc, na, na), qent(nloc, na, na)
    16941768  REAL uent(nloc, na, na), vent(nloc, na, na)
     
    16991773  INTEGER nent(nloc, nd)
    17001774
    1701   ! local variables:
     1775!local variables:
    17021776  INTEGER i, j, k, il, im, jm
    17031777  INTEGER num1, num2
     
    17101784  LOGICAL lwork(nloc)
    17111785
    1712   ! =====================================================================
    1713   ! --- INITIALIZE VARIOUS ARRAYS USED IN THE COMPUTATIONS
    1714   ! =====================================================================
    1715 
    1716   ! ori        do 360 i=1,ncum*nlp
     1786! =====================================================================
     1787! --- INITIALIZE VARIOUS ARRAYS USED IN THE COMPUTATIONS
     1788! =====================================================================
     1789
     1790! ori        do 360 i=1,ncum*nlp
    17171791  DO j = 1, nl
    17181792    DO i = 1, ncum
    17191793      nent(i, j) = 0
    1720       ! in convect3, m is computed in cv3_closure
    1721       ! ori          m(i,1)=0.0
    1722     END DO
    1723   END DO
    1724 
    1725   ! ori      do 400 k=1,nlp
    1726   ! ori       do 390 j=1,nlp
     1794! in convect3, m is computed in cv3_closure
     1795! ori          m(i,1)=0.0
     1796    END DO
     1797  END DO
     1798
     1799! ori      do 400 k=1,nlp
     1800! ori       do 390 j=1,nlp
    17271801  DO j = 1, nl
    17281802    DO k = 1, nl
     
    17321806        vent(i, k, j) = v(i, j)
    17331807        elij(i, k, j) = 0.0
    1734         ! ym            ment(i,k,j)=0.0
    1735         ! ym            sij(i,k,j)=0.0
     1808!ym            ment(i,k,j)=0.0
     1809!ym            sij(i,k,j)=0.0
    17361810      END DO
    17371811    END DO
    17381812  END DO
    17391813
    1740   ! ym
     1814!ym
    17411815  ment(1:ncum, 1:nd, 1:nd) = 0.0
    17421816  sij(1:ncum, 1:nd, 1:nd) = 0.0
    17431817
    1744   ! AC!      do k=1,ntra
    1745   ! AC!       do j=1,nd  ! instead nlp
    1746   ! AC!        do i=1,nd ! instead nlp
    1747   ! AC!         do il=1,ncum
    1748   ! AC!            traent(il,i,j,k)=tra(il,j,k)
    1749   ! AC!         enddo
    1750   ! AC!        enddo
    1751   ! AC!       enddo
    1752   ! AC!      enddo
     1818!AC!      do k=1,ntra
     1819!AC!       do j=1,nd  ! instead nlp
     1820!AC!        do i=1,nd ! instead nlp
     1821!AC!         do il=1,ncum
     1822!AC!            traent(il,i,j,k)=tra(il,j,k)
     1823!AC!         enddo
     1824!AC!        enddo
     1825!AC!       enddo
     1826!AC!      enddo
    17531827  zm(:, :) = 0.
    17541828
    1755   ! =====================================================================
    1756   ! --- CALCULATE ENTRAINED AIR MASS FLUX (ment), TOTAL WATER MIXING
    1757   ! --- RATIO (QENT), TOTAL CONDENSED WATER (elij), AND MIXING
    1758   ! --- FRACTION (sij)
    1759   ! =====================================================================
     1829! =====================================================================
     1830! --- CALCULATE ENTRAINED AIR MASS FLUX (ment), TOTAL WATER MIXING
     1831! --- RATIO (QENT), TOTAL CONDENSED WATER (elij), AND MIXING
     1832! --- FRACTION (sij)
     1833! =====================================================================
    17601834
    17611835  DO i = minorig + 1, nl
     
    17631837    DO j = minorig, nl
    17641838      DO il = 1, ncum
    1765         IF ((i>=icb(il)) .AND. (i<=inb(il)) .AND. (j>=(icb(il)- &
    1766             1)) .AND. (j<=inb(il))) THEN
     1839        IF ((i>=icb(il)) .AND. (i<=inb(il)) .AND. (j>=(icb(il)-1)) .AND. (j<=inb(il))) THEN
    17671840
    17681841          rti = qnk(il) - ep(il, i)*clw(il, i)
     
    17711844
    17721845          IF (cvflag_ice) THEN
    1773             ! print*,cvflag_ice,'cvflag_ice dans do 700'
     1846! print*,cvflag_ice,'cvflag_ice dans do 700'
    17741847            IF (t(il,j)<=263.15) THEN
    1775               bf2 = 1. + (lf(il,j)+lv(il,j))*(lv(il,j)+frac(il,j)*lf(il,j))* &
    1776                 rs(il, j)/(rrv*t(il,j)*t(il,j)*cpd)
     1848              bf2 = 1. + (lf(il,j)+lv(il,j))*(lv(il,j)+frac(il,j)* &
     1849                   lf(il,j))*rs(il, j)/(rrv*t(il,j)*t(il,j)*cpd)
    17771850            END IF
    17781851          END IF
     
    17911864
    17921865            IF (cvflag_ice) THEN
    1793               anum = anum - (lv(il,j)+frac(il,j)*lf(il,j))*(rti-rs(il,j)-cwat &
    1794                 *bf2)
     1866              anum = anum - (lv(il,j)+frac(il,j)*lf(il,j))*(rti-rs(il,j)-cwat*bf2)
    17951867              denom = denom + (lv(il,j)+frac(il,j)*lf(il,j))*(rr(il,i)-rti)
    17961868            ELSE
     
    18011873            IF (abs(denom)<0.01) denom = 0.01
    18021874            sij(il, i, j) = anum/denom
    1803             altem = sij(il, i, j)*rr(il, i) + (1.-sij(il,i,j))*rti - &
    1804               rs(il, j)
     1875            altem = sij(il, i, j)*rr(il, i) + (1.-sij(il,i,j))*rti - rs(il, j)
    18051876            altem = altem - (bf2-1.)*cwat
    18061877          END IF
    18071878          IF (sij(il,i,j)>0.0 .AND. sij(il,i,j)<0.95) THEN
    18081879            qent(il, i, j) = sij(il, i, j)*rr(il, i) + (1.-sij(il,i,j))*rti
    1809             uent(il, i, j) = sij(il, i, j)*u(il, i) + &
    1810               (1.-sij(il,i,j))*unk(il)
    1811             vent(il, i, j) = sij(il, i, j)*v(il, i) + &
    1812               (1.-sij(il,i,j))*vnk(il)
    1813             ! !!!      do k=1,ntra
    1814             ! !!!      traent(il,i,j,k)=sij(il,i,j)*tra(il,i,k)
    1815             ! !!!     :      +(1.-sij(il,i,j))*tra(il,nk(il),k)
    1816             ! !!!      end do
     1880            uent(il, i, j) = sij(il, i, j)*u(il, i) + (1.-sij(il,i,j))*unk(il)
     1881            vent(il, i, j) = sij(il, i, j)*v(il, i) + (1.-sij(il,i,j))*vnk(il)
     1882!!!!      do k=1,ntra
     1883!!!!      traent(il,i,j,k)=sij(il,i,j)*tra(il,i,k)
     1884!!!!     :      +(1.-sij(il,i,j))*tra(il,nk(il),k)
     1885!!!!      end do
    18171886            elij(il, i, j) = altem
    18181887            elij(il, i, j) = max(0.0, elij(il,i,j))
     
    18261895    END DO
    18271896
    1828     ! AC!       do k=1,ntra
    1829     ! AC!        do j=minorig,nl
    1830     ! AC!         do il=1,ncum
    1831     ! AC!          if( (i.ge.icb(il)).and.(i.le.inb(il)).and.
    1832     ! AC!     :       (j.ge.(icb(il)-1)).and.(j.le.inb(il)))then
    1833     ! AC!            traent(il,i,j,k)=sij(il,i,j)*tra(il,i,k)
    1834     ! AC!     :            +(1.-sij(il,i,j))*tra(il,nk(il),k)
    1835     ! AC!          endif
    1836     ! AC!         enddo
    1837     ! AC!        enddo
    1838     ! AC!       enddo
    1839 
    1840 
    1841     ! ***   if no air can entrain at level i assume that updraft detrains
    1842     ! ***
    1843     ! ***   at that level and calculate detrained air flux and properties
    1844     ! ***
    1845 
    1846 
    1847     ! @      do 170 i=icb(il),inb(il)
     1897!AC!       do k=1,ntra
     1898!AC!        do j=minorig,nl
     1899!AC!         do il=1,ncum
     1900!AC!          if( (i.ge.icb(il)).and.(i.le.inb(il)).and.
     1901!AC!     :       (j.ge.(icb(il)-1)).and.(j.le.inb(il)))then
     1902!AC!            traent(il,i,j,k)=sij(il,i,j)*tra(il,i,k)
     1903!AC!     :            +(1.-sij(il,i,j))*tra(il,nk(il),k)
     1904!AC!          endif
     1905!AC!         enddo
     1906!AC!        enddo
     1907!AC!       enddo
     1908
     1909
     1910! ***   if no air can entrain at level i assume that updraft detrains  ***
     1911! ***   at that level and calculate detrained air flux and properties  ***
     1912
     1913
     1914! @      do 170 i=icb(il),inb(il)
    18481915
    18491916    DO il = 1, ncum
    18501917      IF ((i>=icb(il)) .AND. (i<=inb(il)) .AND. (nent(il,i)==0)) THEN
    1851         ! @      if(nent(il,i).eq.0)then
     1918! @      if(nent(il,i).eq.0)then
    18521919        ment(il, i, i) = m(il, i)
    18531920        qent(il, i, i) = qnk(il) - ep(il, i)*clw(il, i)
     
    18551922        vent(il, i, i) = vnk(il)
    18561923        elij(il, i, i) = clw(il, i)
    1857         ! MAF      sij(il,i,i)=1.0
     1924! MAF      sij(il,i,i)=1.0
    18581925        sij(il, i, i) = 0.0
    18591926      END IF
     
    18611928  END DO
    18621929
    1863   ! AC!      do j=1,ntra
    1864   ! AC!       do i=minorig+1,nl
    1865   ! AC!        do il=1,ncum
    1866   ! AC!         if (i.ge.icb(il) .and. i.le.inb(il) .and. nent(il,i).eq.0)
    1867   ! then
    1868   ! AC!          traent(il,i,i,j)=tra(il,nk(il),j)
    1869   ! AC!         endif
    1870   ! AC!        enddo
    1871   ! AC!       enddo
    1872   ! AC!      enddo
     1930!AC!      do j=1,ntra
     1931!AC!       do i=minorig+1,nl
     1932!AC!        do il=1,ncum
     1933!AC!         if (i.ge.icb(il) .and. i.le.inb(il) .and. nent(il,i).eq.0) then
     1934!AC!          traent(il,i,i,j)=tra(il,nk(il),j)
     1935!AC!         endif
     1936!AC!        enddo
     1937!AC!       enddo
     1938!AC!      enddo
    18731939
    18741940  DO j = minorig, nl
    18751941    DO i = minorig, nl
    18761942      DO il = 1, ncum
    1877         IF ((j>=(icb(il)-1)) .AND. (j<=inb(il)) .AND. (i>=icb(il)) .AND. (i<= &
    1878             inb(il))) THEN
     1943        IF ((j>=(icb(il)-1)) .AND. (j<=inb(il)) .AND. (i>=icb(il)) .AND. (i<=inb(il))) THEN
    18791944          sigij(il, i, j) = sij(il, i, j)
    18801945        END IF
     
    18821947    END DO
    18831948  END DO
    1884   ! @      enddo
    1885 
    1886   ! @170   continue
    1887 
    1888   ! =====================================================================
    1889   ! ---  NORMALIZE ENTRAINED AIR MASS FLUXES
    1890   ! ---  TO REPRESENT EQUAL PROBABILITIES OF MIXING
    1891   ! =====================================================================
     1949! @      enddo
     1950
     1951! @170   continue
     1952
     1953! =====================================================================
     1954! ---  NORMALIZE ENTRAINED AIR MASS FLUXES
     1955! ---  TO REPRESENT EQUAL PROBABILITIES OF MIXING
     1956! =====================================================================
    18921957
    18931958  CALL zilch(asum, nloc*nd)
     
    19151980        IF (cvflag_ice) THEN
    19161981
    1917           anum = h(il, i) - hp(il, i) - (lv(il,i)+frac(il,i)*lf(il,i))*(qp-rs &
    1918             (il,i)) + (cpv-cpd)*t(il, i)*(qp-rr(il,i))
    1919           denom = h(il, i) - hp(il, i) + (lv(il,i)+frac(il,i)*lf(il,i))*(rr( &
    1920             il,i)-qp) + (cpd-cpv)*t(il, i)*(rr(il,i)-qp)
     1982          anum = h(il, i) - hp(il, i) - (lv(il,i)+frac(il,i)*lf(il,i))* &
     1983                       (qp-rs(il,i)) + (cpv-cpd)*t(il, i)*(qp-rr(il,i))
     1984          denom = h(il, i) - hp(il, i) + (lv(il,i)+frac(il,i)*lf(il,i))* &
     1985                       (rr(il,i)-qp) + (cpd-cpv)*t(il, i)*(rr(il,i)-qp)
    19211986        ELSE
    19221987
    19231988          anum = h(il, i) - hp(il, i) - lv(il, i)*(qp-rs(il,i)) + &
    1924             (cpv-cpd)*t(il, i)*(qp-rr(il,i))
     1989                       (cpv-cpd)*t(il, i)*(qp-rr(il,i))
    19251990          denom = h(il, i) - hp(il, i) + lv(il, i)*(rr(il,i)-qp) + &
    1926             (cpd-cpv)*t(il, i)*(rr(il,i)-qp)
     1991                       (cpd-cpv)*t(il, i)*(rr(il,i)-qp)
    19271992        END IF
    19281993
     
    19402005      num2 = 0
    19412006      DO il = 1, ncum
    1942         IF (i>=icb(il) .AND. i<=inb(il) .AND. j>=(icb( &
    1943           il)-1) .AND. j<=inb(il) .AND. lwork(il)) num2 = num2 + 1
     2007        IF (i>=icb(il) .AND. i<=inb(il) .AND. &
     2008            j>=(icb(il)-1) .AND. j<=inb(il) .AND. &
     2009            lwork(il)) num2 = num2 + 1
    19442010      END DO
    19452011      IF (num2<=0) GO TO 175
    19462012
    19472013      DO il = 1, ncum
    1948         IF (i>=icb(il) .AND. i<=inb(il) .AND. j>=(icb( &
    1949             il)-1) .AND. j<=inb(il) .AND. lwork(il)) THEN
     2014        IF (i>=icb(il) .AND. i<=inb(il) .AND. &
     2015            j>=(icb(il)-1) .AND. j<=inb(il) .AND. &
     2016            lwork(il)) THEN
    19502017
    19512018          IF (sij(il,i,j)>1.0E-16 .AND. sij(il,i,j)<0.95) THEN
     
    19882055    DO j = minorig, nl
    19892056      DO il = 1, ncum
    1990         IF (i>=icb(il) .AND. i<=inb(il) .AND. lwork(il) .AND. j>=(icb( &
    1991             il)-1) .AND. j<=inb(il)) THEN
     2057        IF (i>=icb(il) .AND. i<=inb(il) .AND. lwork(il) .AND. &
     2058            j>=(icb(il)-1) .AND. j<=inb(il)) THEN
    19922059          ment(il, i, j) = ment(il, i, j)*asij(il)
    19932060        END IF
     
    19972064    DO j = minorig, nl
    19982065      DO il = 1, ncum
    1999         IF (i>=icb(il) .AND. i<=inb(il) .AND. lwork(il) .AND. j>=(icb( &
    2000             il)-1) .AND. j<=inb(il)) THEN
     2066        IF (i>=icb(il) .AND. i<=inb(il) .AND. lwork(il) .AND. &
     2067            j>=(icb(il)-1) .AND. j<=inb(il)) THEN
    20012068          asum(il, i) = asum(il, i) + ment(il, i, j)
    20022069          ment(il, i, j) = ment(il, i, j)*sig(il, j)
     
    20152082    DO j = minorig, nl
    20162083      DO il = 1, ncum
    2017         IF (i>=icb(il) .AND. i<=inb(il) .AND. lwork(il) .AND. j>=(icb( &
    2018             il)-1) .AND. j<=inb(il)) THEN
     2084        IF (i>=icb(il) .AND. i<=inb(il) .AND. lwork(il) .AND. &
     2085            j>=(icb(il)-1) .AND. j<=inb(il)) THEN
    20192086          ment(il, i, j) = ment(il, i, j)*asum(il, i)*bsum(il, i)
    20202087        END IF
     
    20242091    DO j = minorig, nl
    20252092      DO il = 1, ncum
    2026         IF (i>=icb(il) .AND. i<=inb(il) .AND. lwork(il) .AND. j>=(icb( &
    2027             il)-1) .AND. j<=inb(il)) THEN
     2093        IF (i>=icb(il) .AND. i<=inb(il) .AND. lwork(il) .AND. &
     2094            j>=(icb(il)-1) .AND. j<=inb(il)) THEN
    20282095          csum(il, i) = csum(il, i) + ment(il, i, j)
    20292096        END IF
     
    20402107        vent(il, i, i) = vnk(il)
    20412108        elij(il, i, i) = clw(il, i)
    2042         ! MAF        sij(il,i,i)=1.0
     2109! MAF        sij(il,i,i)=1.0
    20432110        sij(il, i, i) = 0.0
    20442111      END IF
    20452112    END DO ! il
    20462113
    2047     ! AC!      do j=1,ntra
    2048     ! AC!       do il=1,ncum
    2049     ! AC!        if ( i.ge.icb(il) .and. i.le.inb(il) .and. lwork(il)
    2050     ! AC!     :     .and. csum(il,i).lt.m(il,i) ) then
    2051     ! AC!         traent(il,i,i,j)=tra(il,nk(il),j)
    2052     ! AC!        endif
    2053     ! AC!       enddo
    2054     ! AC!      enddo
     2114!AC!      do j=1,ntra
     2115!AC!       do il=1,ncum
     2116!AC!        if ( i.ge.icb(il) .and. i.le.inb(il) .and. lwork(il)
     2117!AC!     :     .and. csum(il,i).lt.m(il,i) ) then
     2118!AC!         traent(il,i,i,j)=tra(il,nk(il),j)
     2119!AC!        endif
     2120!AC!       enddo
     2121!AC!      enddo
    20552122789 END DO
    20562123
    2057   ! MAF: renormalisation de MENT
     2124! MAF: renormalisation de MENT
    20582125  CALL zilch(zm, nloc*na)
    20592126  DO jm = 1, nd
     
    20872154END SUBROUTINE cv3_mixing
    20882155
    2089 SUBROUTINE cv3_unsat(nloc, ncum, nd, na, ntra, icb, inb, iflag, t, rr, rs, &
    2090     gz, u, v, tra, p, ph, th, tv, lv, lf, cpn, ep, sigp, clw, m, ment, elij, &
    2091     delt, plcl, coef_clos, mp, rp, up, vp, trap, wt, water, evap, fondue, &
    2092     ice, faci, b, sigd, wdtraina, wdtrainm) ! RomP
     2156SUBROUTINE cv3_unsat(nloc, ncum, nd, na, ntra, icb, inb, iflag, &
     2157                     t, rr, rs, gz, u, v, tra, p, ph, &
     2158                     th, tv, lv, lf, cpn, ep, sigp, clw, &
     2159                     m, ment, elij, delt, plcl, coef_clos, &
     2160                     mp, rp, up, vp, trap, wt, water, evap, fondue, ice, &
     2161                     faci, b, sigd, &
     2162                     wdtrainA, wdtrainM)                                      ! RomP
    20932163  IMPLICIT NONE
    20942164
     
    20982168  include "cvflag.h"
    20992169
    2100   ! inputs:
     2170!inputs:
    21012171  INTEGER ncum, nd, na, ntra, nloc
    21022172  INTEGER icb(nloc), inb(nloc)
     
    21122182  REAL coef_clos(nloc)
    21132183
    2114   ! input/output
     2184!input/output
    21152185  INTEGER iflag(nloc)
    21162186
    2117   ! outputs:
     2187!outputs:
    21182188  REAL mp(nloc, na), rp(nloc, na), up(nloc, na), vp(nloc, na)
    21192189  REAL water(nloc, na), evap(nloc, na), wt(nloc, na)
     
    21212191  REAL trap(nloc, na, ntra)
    21222192  REAL b(nloc, na), sigd(nloc)
    2123   ! 25/08/10 - RomP---- ajout des masses precipitantes ejectees
    2124   ! lascendance adiabatique et des flux melanges Pa et Pm.
    2125   ! Distinction des wdtrain
    2126   ! Pa = wdtrainA     Pm = wdtrainM
    2127   REAL wdtraina(nloc, na), wdtrainm(nloc, na)
    2128 
    2129   ! local variables
     2193! 25/08/10 - RomP---- ajout des masses precipitantes ejectees
     2194! de l ascendance adiabatique et des flux melanges Pa et Pm.
     2195! Distinction des wdtrain
     2196! Pa = wdtrainA     Pm = wdtrainM
     2197  REAL wdtrainA(nloc, na), wdtrainM(nloc, na)
     2198
     2199!local variables
    21302200  INTEGER i, j, k, il, num1, ndp1
    21312201  REAL tinv, delti, coef
     
    21432213
    21442214
    2145   ! ------------------------------------------------------
     2215! ------------------------------------------------------
    21462216
    21472217  delti = 1./delt
     
    21702240    END DO
    21712241  END DO
    2172   ! AC!        do k=1,ntra
    2173   ! AC!         do i=1,nd
    2174   ! AC!          do il=1,ncum
    2175   ! AC!           trap(il,i,k)=tra(il,i,k)
    2176   ! AC!          enddo
    2177   ! AC!         enddo
    2178   ! AC!        enddo
    2179   ! ! RomP >>>
     2242!AC!        do k=1,ntra
     2243!AC!         do i=1,nd
     2244!AC!          do il=1,ncum
     2245!AC!           trap(il,i,k)=tra(il,i,k)
     2246!AC!          enddo
     2247!AC!         enddo
     2248!AC!        enddo
     2249!! RomP >>>
    21802250  DO i = 1, nd
    21812251    DO il = 1, ncum
    2182       wdtraina(il, i) = 0.0
    2183       wdtrainm(il, i) = 0.0
    2184     END DO
    2185   END DO
    2186   ! ! RomP <<<
    2187 
    2188   ! ***  check whether ep(inb)=0, if so, skip precipitating    ***
    2189   ! ***             downdraft calculation                      ***
     2252      wdtrainA(il, i) = 0.0
     2253      wdtrainM(il, i) = 0.0
     2254    END DO
     2255  END DO
     2256!! RomP <<<
     2257
     2258! ***  check whether ep(inb)=0, if so, skip precipitating    ***
     2259! ***             downdraft calculation                      ***
    21902260
    21912261
    21922262  DO il = 1, ncum
    2193     ! !          lwork(il)=.TRUE.
    2194     ! !          if(ep(il,inb(il)).lt.0.0001)lwork(il)=.FALSE.
     2263!!          lwork(il)=.TRUE.
     2264!!          if(ep(il,inb(il)).lt.0.0001)lwork(il)=.FALSE.
    21952265    lwork(il) = ep(il, inb(il)) >= 0.0001
    21962266  END DO
    21972267
    2198   ! ***  Set the fractionnal area sigd of precipitating downdraughts
     2268! ***  Set the fractionnal area sigd of precipitating downdraughts
    21992269  DO il = 1, ncum
    22002270    sigd(il) = sigdz*coef_clos(il)
     
    22022272
    22032273
    2204   ! ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    2205 
    2206   ! ***                    begin downdraft loop                    ***
    2207 
    2208   ! ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
     2274! ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
     2275!
     2276! ***                    begin downdraft loop                    ***
     2277!
     2278! ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    22092279
    22102280  DO i = nl + 1, 1, -1
     
    22192289
    22202290
    2221     ! ***  integrate liquid water equation to find condensed water   ***
    2222     ! ***                and condensed water flux                    ***
    2223 
    2224 
    2225     ! ***              calculate detrained precipitation             ***
     2291! ***  integrate liquid water equation to find condensed water   ***
     2292! ***                and condensed water flux                    ***
     2293!
     2294!
     2295! ***              calculate detrained precipitation             ***
    22262296
    22272297    DO il = 1, ncum
     
    22292299        IF (cvflag_grav) THEN
    22302300          wdtrain(il) = grav*ep(il, i)*m(il, i)*clw(il, i)
    2231           wdtraina(il, i) = wdtrain(il)/grav !   Pa   RomP
     2301          wdtrainA(il, i) = wdtrain(il)/grav                        !   Pa   RomP
    22322302        ELSE
    22332303          wdtrain(il) = 10.0*ep(il, i)*m(il, i)*clw(il, i)
    2234           wdtraina(il, i) = wdtrain(il)/10. !   Pa   RomP
     2304          wdtrainA(il, i) = wdtrain(il)/10.                        !   Pa   RomP
    22352305        END IF
    22362306      END IF
     
    22452315            IF (cvflag_grav) THEN
    22462316              wdtrain(il) = wdtrain(il) + grav*awat*ment(il, j, i)
    2247               wdtrainm(il, i) = wdtrain(il)/grav - wdtraina(il, i) !   Pm  RomP
     2317              wdtrainM(il, i) = wdtrain(il)/grav - wdtrainA(il, i) !   Pm  RomP
    22482318            ELSE
    22492319              wdtrain(il) = wdtrain(il) + 10.0*awat*ment(il, j, i)
    2250               wdtrainm(il, i) = wdtrain(il)/10. - wdtraina(il, i) !   Pm  RomP
     2320              wdtrainM(il, i) = wdtrain(il)/10. - wdtrainA(il, i)  !   Pm  RomP
    22512321            END IF
    22522322          END IF
     
    22562326
    22572327
    2258     ! ***    find rain water and evaporation using provisional   ***
    2259     ! ***              estimates of rp(i)and rp(i-1)             ***
     2328! ***    find rain water and evaporation using provisional   ***
     2329! ***              estimates of rp(i)and rp(i-1)             ***
    22602330
    22612331
     
    22832353          END IF
    22842354
    2285           rp(il, i) = rp(il, i+1) + (cpd*(t(il,i+1)-t(il, &
    2286             i))+gz(il,i+1)-gz(il,i))/lv(il, i)
     2355          rp(il, i) = rp(il, i+1) + &
     2356                      (cpd*(t(il,i+1)-t(il,i))+gz(il,i+1)-gz(il,i))/lv(il, i)
    22872357          rp(il, i) = 0.5*(rp(il,i)+rr(il,i))
    22882358        END IF
     
    22962366          afac = p(il, 1)*(rs(il,1)-rp(il,1))/(1.0E4+2000.0*p(il,1)*rs(il,1))
    22972367          IF (cvflag_ice) THEN
    2298             afac1 = p(il, i)*(rs(il,1)-rp(il,1))/(1.0E4+2000.0*p(il,1)*rs(il, &
    2299               1))
     2368            afac1 = p(il, i)*(rs(il,1)-rp(il,1))/(1.0E4+2000.0*p(il,1)*rs(il,1))
    23002369          END IF
    23012370        ELSE
    2302           rp(il, i-1) = rp(il, i) + (cpd*(t(il,i)-t(il, &
    2303             i-1))+gz(il,i)-gz(il,i-1))/lv(il, i)
     2371          rp(il, i-1) = rp(il, i) + (cpd*(t(il,i)-t(il,i-1))+gz(il,i)-gz(il,i-1))/lv(il, i)
    23042372          rp(il, i-1) = 0.5*(rp(il,i-1)+rr(il,i-1))
    23052373          rp(il, i-1) = amin1(rp(il,i-1), rs(il,i-1))
    23062374          rp(il, i-1) = max(rp(il,i-1), 0.0)
    2307           afac1 = p(il, i)*(rs(il,i)-rp(il,i))/(1.0E4+2000.0*p(il,i)*rs(il,i) &
    2308             )
    2309           afac2 = p(il, i-1)*(rs(il,i-1)-rp(il,i-1))/ &
    2310             (1.0E4+2000.0*p(il,i-1)*rs(il,i-1))
     2375          afac1 = p(il, i)*(rs(il,i)-rp(il,i))/(1.0E4+2000.0*p(il,i)*rs(il,i))
     2376          afac2 = p(il, i-1)*(rs(il,i-1)-rp(il,i-1))/(1.0E4+2000.0*p(il,i-1)*rs(il,i-1))
    23112377          afac = 0.5*(afac1+afac2)
    23122378        END IF
     
    23152381        bfac = 1./(sigd(il)*wt(il,i))
    23162382
    2317         ! jyg1
    2318         ! cc        sigt=1.0
    2319         ! cc        if(i.ge.icb)sigt=sigp(i)
    2320         ! prise en compte de la variation progressive de sigt dans
    2321         ! les couches icb et icb-1:
    2322         ! pour plcl<ph(i+1), pr1=0 & pr2=1
    2323         ! pour plcl>ph(i),   pr1=1 & pr2=0
    2324         ! pour ph(i+1)<plcl<ph(i), pr1 est la proportion a cheval
    2325         ! sur le nuage, et pr2 est la proportion sous la base du
    2326         ! nuage.
     2383!JYG1
     2384! cc        sigt=1.0
     2385! cc        if(i.ge.icb)sigt=sigp(i)
     2386! prise en compte de la variation progressive de sigt dans
     2387! les couches icb et icb-1:
     2388! pour plcl<ph(i+1), pr1=0 & pr2=1
     2389! pour plcl>ph(i),   pr1=1 & pr2=0
     2390! pour ph(i+1)<plcl<ph(i), pr1 est la proportion a cheval
     2391! sur le nuage, et pr2 est la proportion sous la base du
     2392! nuage.
    23272393        pr1 = (plcl(il)-ph(il,i+1))/(ph(il,i)-ph(il,i+1))
    23282394        pr1 = max(0., min(1.,pr1))
     
    23302396        pr2 = max(0., min(1.,pr2))
    23312397        sigt = sigp(il, i)*pr1 + pr2
    2332         ! jyg2
    2333 
    2334         ! jyg----
    2335         ! b6 = bfac*100.*sigd(il)*(ph(il,i)-ph(il,i+1))*sigt*afac
    2336         ! c6 = water(il,i+1) + wdtrain(il)*bfac
    2337         ! c6 = prec(il,i+1) + wdtrain(il)*bfac
    2338         ! revap=0.5*(-b6+sqrt(b6*b6+4.*c6))
    2339         ! evap(il,i)=sigt*afac*revap
    2340         ! water(il,i)=revap*revap
    2341         ! prec(il,i)=revap*revap
    2342         ! c        print *,' i,b6,c6,revap,evap(il,i),water(il,i),wdtrain(il)
    2343         ! ',
    2344         ! c     $            i,b6,c6,revap,evap(il,i),water(il,i),wdtrain(il)
    2345         ! c---end jyg---
    2346 
    2347         ! --------retour à la formulation originale d'Emanuel.
     2398!JYG2
     2399
     2400!JYG----
     2401!    b6 = bfac*100.*sigd(il)*(ph(il,i)-ph(il,i+1))*sigt*afac
     2402!    c6 = water(il,i+1) + wdtrain(il)*bfac
     2403!    c6 = prec(il,i+1) + wdtrain(il)*bfac
     2404!    revap=0.5*(-b6+sqrt(b6*b6+4.*c6))
     2405!    evap(il,i)=sigt*afac*revap
     2406!    water(il,i)=revap*revap
     2407!    prec(il,i)=revap*revap
     2408!!        print *,' i,b6,c6,revap,evap(il,i),water(il,i),wdtrain(il) ', &
     2409!!                 i,b6,c6,revap,evap(il,i),water(il,i),wdtrain(il)
     2410!!---end jyg---
     2411
     2412! --------retour à la formulation originale d'Emanuel.
    23482413        IF (cvflag_ice) THEN
    23492414
    2350           ! b6=bfac*50.*sigd(il)*(ph(il,i)-ph(il,i+1))*sigt*afac
    2351           ! c6=prec(il,i+1)+bfac*wdtrain(il)
    2352           ! :    -50.*sigd(il)*bfac*(ph(il,i)-ph(il,i+1))*evap(il,i+1)
    2353           ! if(c6.gt.0.0)then
    2354           ! revap=0.5*(-b6+sqrt(b6*b6+4.*c6))
    2355 
    2356           ! JAM  Attention: evap=sigt*E
    2357           ! Modification: evap devient l'évaporation en milieu de couche
    2358           ! car nécessaire dans cv3_yield
    2359           ! Du coup, il faut modifier pas mal d'équations...
    2360           ! et l'expression de afac qui devient afac1
    2361           ! revap=sqrt((prec(i+1)+prec(i))/2)
     2415 b6=bfac*50.*sigd(il)*(ph(il,i)-ph(il,i+1))*sigt*afac
     2416!   c6=prec(il,i+1)+bfac*wdtrain(il) &
     2417!       -50.*sigd(il)*bfac*(ph(il,i)-ph(il,i+1))*evap(il,i+1)
     2418 if(c6.gt.0.0)then
     2419 revap=0.5*(-b6+sqrt(b6*b6+4.*c6))
     2420
     2421!JAM  Attention: evap=sigt*E
     2422!    Modification: evap devient l'évaporation en milieu de couche
     2423!    car nécessaire dans cv3_yield
     2424!    Du coup, il faut modifier pas mal d'équations...
     2425!    et l'expression de afac qui devient afac1
     2426!    revap=sqrt((prec(i+1)+prec(i))/2)
    23622427
    23632428          b6 = bfac*50.*sigd(il)*(ph(il,i)-ph(il,i+1))*sigt*afac1
    23642429          c6 = prec(il, i+1) + 0.5*bfac*wdtrain(il)
    2365           ! print *,'bfac,sigd(il),sigt,afac1 ',bfac,sigd(il),sigt,afac1
    2366           ! print *,'prec(il,i+1),wdtrain(il) ',prec(il,i+1),wdtrain(il)
    2367           ! print *,'b6,c6,b6*b6+4.*c6 ',b6,c6,b6*b6+4.*c6
     2430! print *,'bfac,sigd(il),sigt,afac1 ',bfac,sigd(il),sigt,afac1
     2431! print *,'prec(il,i+1),wdtrain(il) ',prec(il,i+1),wdtrain(il)
     2432! print *,'b6,c6,b6*b6+4.*c6 ',b6,c6,b6*b6+4.*c6
    23682433          IF (c6>b6*b6+1.E-20) THEN
    23692434            revap = 2.*c6/(b6+sqrt(b6*b6+4.*c6))
     
    23722437          END IF
    23732438          prec(il, i) = max(0., 2.*revap*revap-prec(il,i+1))
    2374           ! print*,prec(il,i),'neige'
    2375 
    2376           ! jyg    Dans sa formulation originale, Emanuel calcule
    2377           ! l'evaporation par:
    2378           ! c             evap(il,i)=sigt*afac*revap
    2379           ! ce qui n'est pas correct. Dans cv_routines, la formulation a été
    2380           ! modifiee.
    2381           ! Ici,l'evaporation evap est simplement calculee par l'equation de
    2382           ! conservation.
    2383           ! prec(il,i)=revap*revap
    2384           ! else
    2385           ! jyg----   Correction : si c6 <= 0, water(il,i)=0.
    2386           ! prec(il,i)=0.
    2387           ! endif
    2388 
    2389           ! jyg---   Dans tous les cas, evaporation = [tt ce qui entre dans
    2390           ! la couche i]
    2391           ! moins [tt ce qui sort de la couche i]
    2392           ! print *, 'evap avec ice'
    2393           evap(il, i) = (wdtrain(il)+sigd(il)*wt(il,i)*(prec(il,i+1)-prec(il, &
    2394             i)))/(sigd(il)*(ph(il,i)-ph(il,i+1))*100.)
    2395 
    2396           d6 = bfac*wdtrain(il) - 100.*sigd(il)*bfac*(ph(il,i)-ph(il,i+1))* &
    2397             evap(il, i)
     2439! print*,prec(il,i),'neige'
     2440
     2441!JYG    Dans sa formulation originale, Emanuel calcule l'evaporation par:
     2442! c             evap(il,i)=sigt*afac*revap
     2443! ce qui n'est pas correct. Dans cv_routines, la formulation a été modifiee.
     2444! Ici,l'evaporation evap est simplement calculee par l'equation de
     2445! conservation.
     2446! prec(il,i)=revap*revap
     2447! else
     2448!JYG----   Correction : si c6 <= 0, water(il,i)=0.
     2449! prec(il,i)=0.
     2450! endif
     2451
     2452!JYG---   Dans tous les cas, evaporation = [tt ce qui entre dans la couche i]
     2453! moins [tt ce qui sort de la couche i]
     2454! print *, 'evap avec ice'
     2455          evap(il, i) = (wdtrain(il)+sigd(il)*wt(il,i)*(prec(il,i+1)-prec(il,i))) / &
     2456                        (sigd(il)*(ph(il,i)-ph(il,i+1))*100.)
     2457
     2458          d6 = bfac*wdtrain(il) - 100.*sigd(il)*bfac*(ph(il,i)-ph(il,i+1))*evap(il, i)
    23982459          e6 = bfac*wdtrain(il)
    23992460          f6 = -100.*sigd(il)*bfac*(ph(il,i)-ph(il,i+1))*evap(il, i)
     
    24152476          END IF
    24162477
    2417           ! water(il,i)=water(il,i+1)+(1.-fraci(il,i))*e6+(1.-faci(il,i))*f6
    2418           ! water(il,i)=max(water(il,i),0.)
    2419           ! ice(il,i)=ice(il,i+1)+fraci(il,i)*e6+faci(il,i)*f6
    2420           ! ice(il,i)=max(ice(il,i),0.)
    2421           ! fondue(il,i)=ice(il,i)*thaw
    2422           ! water(il,i)=water(il,i)+fondue(il,i)
    2423           ! ice(il,i)=ice(il,i)-fondue(il,i)
    2424 
    2425           ! if((water(il,i)+ice(il,i)).lt.1.e-30)then
    2426           ! faci(il,i)=0.
    2427           ! else
    2428           ! faci(il,i)=ice(il,i)/(water(il,i)+ice(il,i))
    2429           ! endif
     2478!          water(il,i)=water(il,i+1)+(1.-fraci(il,i))*e6+(1.-faci(il,i))*f6
     2479!          water(il,i)=max(water(il,i),0.)
     2480!          ice(il,i)=ice(il,i+1)+fraci(il,i)*e6+faci(il,i)*f6
     2481!          ice(il,i)=max(ice(il,i),0.)
     2482!          fondue(il,i)=ice(il,i)*thaw
     2483!          water(il,i)=water(il,i)+fondue(il,i)
     2484!          ice(il,i)=ice(il,i)-fondue(il,i)
     2485           
     2486!          if((water(il,i)+ice(il,i)).lt.1.e-30)then
     2487!            faci(il,i)=0.
     2488!          else
     2489!            faci(il,i)=ice(il,i)/(water(il,i)+ice(il,i))
     2490!          endif
    24302491
    24312492        ELSE
    24322493          b6 = bfac*50.*sigd(il)*(ph(il,i)-ph(il,i+1))*sigt*afac
    2433           c6 = water(il, i+1) + bfac*wdtrain(il) - 50.*sigd(il)*bfac*(ph(il,i &
    2434             )-ph(il,i+1))*evap(il, i+1)
     2494          c6 = water(il, i+1) + bfac*wdtrain(il) - &
     2495               50.*sigd(il)*bfac*(ph(il,i)-ph(il,i+1))*evap(il, i+1)
    24352496          IF (c6>0.0) THEN
    24362497            revap = 0.5*(-b6+sqrt(b6*b6+4.*c6))
     
    24392500            water(il, i) = 0.
    24402501          END IF
    2441           ! print *, 'evap sans ice'
    2442           evap(il, i) = (wdtrain(il)+sigd(il)*wt(il,i)*(water(il, &
    2443             i+1)-water(il,i)))/(sigd(il)*(ph(il,i)-ph(il,i+1))*100.)
     2502! print *, 'evap sans ice'
     2503          evap(il, i) = (wdtrain(il)+sigd(il)*wt(il,i)*(water(il,i+1)-water(il,i)))/ &
     2504                        (sigd(il)*(ph(il,i)-ph(il,i+1))*100.)
    24442505
    24452506        END IF
    24462507      END IF !(i.le.inb(il) .and. lwork(il))
    24472508    END DO
    2448     ! ----------------------------------------------------------------
    2449 
    2450     ! cc
    2451     ! ***  calculate precipitating downdraft mass flux under     ***
    2452     ! ***              hydrostatic approximation                 ***
     2509! ----------------------------------------------------------------
     2510
     2511! cc
     2512! ***  calculate precipitating downdraft mass flux under     ***
     2513! ***              hydrostatic approximation                 ***
    24532514
    24542515    DO il = 1, ncum
     
    24592520        IF (cvflag_ice) THEN
    24602521          IF (cvflag_grav) THEN
    2461             mp(il, i) = 100.*ginv*(lvcp(il,i)*sigd(il)*tevap(il)*(p(il, &
    2462               i-1)-p(il,i))/delth+lfcp(il,i)*sigd(il)*faci(il,i)*tevap(il)*(p &
    2463               (il,i-1)-p(il,i))/delth+lfcp(il,i)*sigd(il)*wt(il,i)/100.* &
    2464               fondue(il,i)*(p(il,i-1)-p(il,i))/delth/(ph(il,i)-ph(il,i+1)))
     2522            mp(il, i) = 100.*ginv*(lvcp(il,i)*sigd(il)*tevap(il)* &
     2523                                               (p(il,i-1)-p(il,i))/delth + &
     2524                                   lfcp(il,i)*sigd(il)*faci(il,i)*tevap(il)* &
     2525                                               (p(il,i-1)-p(il,i))/delth + &
     2526                                   lfcp(il,i)*sigd(il)*wt(il,i)/100.*fondue(il,i)* &
     2527                                               (p(il,i-1)-p(il,i))/delth/(ph(il,i)-ph(il,i+1)))
    24652528          ELSE
    2466             mp(il, i) = 10.*(lvcp(il,i)*sigd(il)*tevap(il)*(p(il,i-1)-p(il, &
    2467               i))/delth+lfcp(il,i)*sigd(il)*faci(il,i)*tevap(il)*(p(il, &
    2468               i-1)-p(il,i))/delth+lfcp(il,i)*sigd(il)*wt(il,i)/100.*fondue(il &
    2469               ,i)*(p(il,i-1)-p(il,i))/delth/(ph(il,i)-ph(il,i+1)))
     2529            mp(il, i) = 10.*(lvcp(il,i)*sigd(il)*tevap(il)* &
     2530                                                (p(il,i-1)-p(il,i))/delth + &
     2531                             lfcp(il,i)*sigd(il)*faci(il,i)*tevap(il)* &
     2532                                                (p(il,i-1)-p(il,i))/delth + &
     2533                             lfcp(il,i)*sigd(il)*wt(il,i)/100.*fondue(il,i)* &
     2534                                                (p(il,i-1)-p(il,i))/delth/(ph(il,i)-ph(il,i+1)))
    24702535
    24712536          END IF
     
    24732538          IF (cvflag_grav) THEN
    24742539            mp(il, i) = 100.*ginv*lvcp(il, i)*sigd(il)*tevap(il)* &
    2475               (p(il,i-1)-p(il,i))/delth
     2540                                                (p(il,i-1)-p(il,i))/delth
    24762541          ELSE
    24772542            mp(il, i) = 10.*lvcp(il, i)*sigd(il)*tevap(il)* &
    2478               (p(il,i-1)-p(il,i))/delth
     2543                                                (p(il,i-1)-p(il,i))/delth
    24792544          END IF
    24802545
     
    24832548      END IF !(i.le.inb(il) .and. lwork(il) .and. i.ne.1)
    24842549    END DO
    2485     ! ----------------------------------------------------------------
    2486 
    2487     ! ***           if hydrostatic assumption fails,             ***
    2488     ! ***   solve cubic difference equation for downdraft theta  ***
    2489     ! ***  and mass flux from two simultaneous differential eqns ***
     2550! ----------------------------------------------------------------
     2551
     2552! ***           if hydrostatic assumption fails,             ***
     2553! ***   solve cubic difference equation for downdraft theta  ***
     2554! ***  and mass flux from two simultaneous differential eqns ***
    24902555
    24912556    DO il = 1, ncum
     
    24932558
    24942559        amfac = sigd(il)*sigd(il)*70.0*ph(il, i)*(p(il,i-1)-p(il,i))* &
    2495           (th(il,i)-th(il,i-1))/(tv(il,i)*th(il,i))
     2560                         (th(il,i)-th(il,i-1))/(tv(il,i)*th(il,i))
    24962561        amp2 = abs(mp(il,i+1)*mp(il,i+1)-mp(il,i)*mp(il,i))
    24972562
    24982563        IF (amp2>(0.1*amfac)) THEN
    24992564          xf = 100.0*sigd(il)*sigd(il)*sigd(il)*(ph(il,i)-ph(il,i+1))
    2500           tf = b(il, i) - 5.0*(th(il,i)-th(il,i-1))*t(il, i)/(lvcp(il,i)*sigd &
    2501             (il)*th(il,i))
     2565          tf = b(il, i) - 5.0*(th(il,i)-th(il,i-1))*t(il, i) / &
     2566                              (lvcp(il,i)*sigd(il)*th(il,i))
    25022567          af = xf*tf + mp(il, i+1)*mp(il, i+1)*tinv
    25032568
    25042569          IF (cvflag_ice) THEN
    25052570            bf = 2.*(tinv*mp(il,i+1))**3 + tinv*mp(il, i+1)*xf*tf + &
    2506               50.*(p(il,i-1)-p(il,i))*xf*(tevap(il)*(1.+(lf(il,i)/lv(il,i))* &
    2507               faci(il,i))+(lf(il,i)/lv(il,i))*wt(il,i)/100.*fondue(il,i)/(ph( &
    2508               il,i)-ph(il,i+1)))
     2571                 50.*(p(il,i-1)-p(il,i))*xf*(tevap(il)*(1.+(lf(il,i)/lv(il,i))*faci(il,i)) + &
     2572                (lf(il,i)/lv(il,i))*wt(il,i)/100.*fondue(il,i)/(ph(il,i)-ph(il,i+1)))
    25092573          ELSE
    25102574
    25112575            bf = 2.*(tinv*mp(il,i+1))**3 + tinv*mp(il, i+1)*xf*tf + &
    2512               50.*(p(il,i-1)-p(il,i))*xf*tevap(il)
     2576                                           50.*(p(il,i-1)-p(il,i))*xf*tevap(il)
    25132577          END IF
    25142578
     
    25222586            IF ((0.5*bf-sru)<0.0) fac = -1.0
    25232587            mp(il, i) = mp(il, i+1)*tinv + (0.5*bf+sru)**tinv + &
    2524               fac*(abs(0.5*bf-sru))**tinv
     2588                                           fac*(abs(0.5*bf-sru))**tinv
    25252589          ELSE
    25262590            d = atan(2.*sqrt(-ur)/(bf+1.0E-28))
     
    25322596          IF (cvflag_ice) THEN
    25332597            IF (cvflag_grav) THEN
    2534               ! jyg : il y a vraisemblablement une erreur dans la ligne 2
    2535               ! suivante:
    2536               ! il faut diviser par (mp(il,i)*sigd(il)*grav) et non par
    2537               ! (mp(il,i)+sigd(il)*0.1).
    2538               ! Et il faut bien revoir les facteurs 100.
    2539               b(il, i-1) = b(il, i) + 100.0*(p(il,i-1)-p(il,i))*(tevap(il)*( &
    2540                 1.+(lf(il,i)/lv(il,i))*faci(il,i))+(lf(il,i)/lv(il, &
    2541                 i))*wt(il,i)/100.*fondue(il,i)/(ph(il,i)-ph(il, &
    2542                 i+1)))/(mp(il,i)+sigd(il)*0.1) - 10.0*(th(il,i)-th(il,i-1))*t &
    2543                 (il, i)/(lvcp(il,i)*sigd(il)*th(il,i))
     2598!JYG : il y a vraisemblablement une erreur dans la ligne 2 suivante:
     2599! il faut diviser par (mp(il,i)*sigd(il)*grav) et non par (mp(il,i)+sigd(il)*0.1).
     2600! Et il faut bien revoir les facteurs 100.
     2601              b(il, i-1) = b(il, i) + 100.0*(p(il,i-1)-p(il,i))* &
     2602                           (tevap(il)*(1.+(lf(il,i)/lv(il,i))*faci(il,i)) + &
     2603                           (lf(il,i)/lv(il,i))*wt(il,i)/100.*fondue(il,i) / &
     2604                           (ph(il,i)-ph(il,i+1))) / &
     2605                           (mp(il,i)+sigd(il)*0.1) - &
     2606                           10.0*(th(il,i)-th(il,i-1))*t(il, i) / &
     2607                           (lvcp(il,i)*sigd(il)*th(il,i))
    25442608            ELSE
    2545               b(il, i-1) = b(il, i) + 100.0*(p(il,i-1)-p(il,i))*(tevap(il)*( &
    2546                 1.+(lf(il,i)/lv(il,i))*faci(il,i))+(lf(il,i)/lv(il, &
    2547                 i))*wt(il,i)/100.*fondue(il,i)/(ph(il,i)-ph(il, &
    2548                 i+1)))/(mp(il,i)+sigd(il)*0.1) - 10.0*(th(il,i)-th(il,i-1))*t &
    2549                 (il, i)/(lvcp(il,i)*sigd(il)*th(il,i))
     2609              b(il, i-1) = b(il, i) + 100.0*(p(il,i-1)-p(il,i))*&
     2610                           (tevap(il)*(1.+(lf(il,i)/lv(il,i))*faci(il,i)) + &
     2611                           (lf(il,i)/lv(il,i))*wt(il,i)/100.*fondue(il,i) / &
     2612                           (ph(il,i)-ph(il,i+1))) / &
     2613                           (mp(il,i)+sigd(il)*0.1) - &
     2614                           10.0*(th(il,i)-th(il,i-1))*t(il, i) / &
     2615                           (lvcp(il,i)*sigd(il)*th(il,i))
    25502616            END IF
    25512617          ELSE
    25522618            IF (cvflag_grav) THEN
    2553               b(il, i-1) = b(il, i) + 100.0*(p(il,i-1)-p(il,i))*tevap(il)/(mp &
    2554                 (il,i)+sigd(il)*0.1) - 10.0*(th(il,i)-th(il,i-1))*t(il, i)/( &
    2555                 lvcp(il,i)*sigd(il)*th(il,i))
     2619              b(il, i-1) = b(il, i) + 100.0*(p(il,i-1)-p(il,i))*tevap(il) / &
     2620                           (mp(il,i)+sigd(il)*0.1) - &
     2621                           10.0*(th(il,i)-th(il,i-1))*t(il, i) / &
     2622                           (lvcp(il,i)*sigd(il)*th(il,i))
    25562623            ELSE
    2557               b(il, i-1) = b(il, i) + 100.0*(p(il,i-1)-p(il,i))*tevap(il)/(mp &
    2558                 (il,i)+sigd(il)*0.1) - 10.0*(th(il,i)-th(il,i-1))*t(il, i)/( &
    2559                 lvcp(il,i)*sigd(il)*th(il,i))
     2624              b(il, i-1) = b(il, i) + 100.0*(p(il,i-1)-p(il,i))*tevap(il) / &
     2625                           (mp(il,i)+sigd(il)*0.1) - &
     2626                           10.0*(th(il,i)-th(il,i-1))*t(il, i) / &
     2627                           (lvcp(il,i)*sigd(il)*th(il,i))
    25602628            END IF
    25612629          END IF
     
    25642632        END IF !(amp2.gt.(0.1*amfac))
    25652633
    2566         ! ***         limit magnitude of mp(i) to meet cfl condition      ***
     2634! ***         limit magnitude of mp(i) to meet cfl condition      ***
    25672635
    25682636        ampmax = 2.0*(ph(il,i)-ph(il,i+1))*delti
     
    25712639        mp(il, i) = min(mp(il,i), ampmax)
    25722640
    2573         ! ***      force mp to decrease linearly to zero                 ***
    2574         ! ***       between cloud base and the surface                   ***
    2575 
    2576 
    2577         ! c      if(p(il,i).gt.p(il,icb(il)))then
    2578         ! c
    2579         ! mp(il,i)=mp(il,icb(il))*(p(il,1)-p(il,i))/(p(il,1)-p(il,icb(il)))
    2580         ! c      endif
     2641! ***      force mp to decrease linearly to zero                 ***
     2642! ***       between cloud base and the surface                   ***
     2643
     2644
     2645! c      if(p(il,i).gt.p(il,icb(il)))then
     2646! c       mp(il,i)=mp(il,icb(il))*(p(il,1)-p(il,i))/(p(il,1)-p(il,icb(il)))
     2647! c      endif
    25812648        IF (ph(il,i)>0.9*plcl(il)) THEN
    25822649          mp(il, i) = mp(il, i)*(ph(il,1)-ph(il,i))/(ph(il,1)-0.9*plcl(il))
     
    25852652      END IF ! (i.le.inb(il) .and. lwork(il) .and. i.ne.1)
    25862653    END DO
    2587     ! ----------------------------------------------------------------
    2588 
    2589     ! ***       find mixing ratio of precipitating downdraft     ***
     2654! ----------------------------------------------------------------
     2655
     2656! ***       find mixing ratio of precipitating downdraft     ***
    25902657
    25912658    DO il = 1, ncum
     
    26032670
    26042671          IF (cvflag_grav) THEN
    2605             rp(il, i) = rp(il, i+1)*mp(il, i+1) + rr(il, i)*(mp(il,i)-mp(il,i &
    2606               +1)) + 100.*ginv*0.5*sigd(il)*(ph(il,i)-ph(il,i+1))*(evap(il,i+ &
    2607               1)+evap(il,i))
     2672            rp(il, i) = rp(il, i+1)*mp(il, i+1) + rr(il, i)*(mp(il,i)-mp(il,i+1)) + &
     2673              100.*ginv*0.5*sigd(il)*(ph(il,i)-ph(il,i+1))*(evap(il,i+1)+evap(il,i))
    26082674          ELSE
    2609             rp(il, i) = rp(il, i+1)*mp(il, i+1) + rr(il, i)*(mp(il,i)-mp(il,i &
    2610               +1)) + 5.*sigd(il)*(ph(il,i)-ph(il,i+1))*(evap(il,i+1)+evap(il, &
    2611               i))
     2675            rp(il, i) = rp(il, i+1)*mp(il, i+1) + rr(il, i)*(mp(il,i)-mp(il,i+1)) + &
     2676              5.*sigd(il)*(ph(il,i)-ph(il,i+1))*(evap(il,i+1)+evap(il,i))
    26122677          END IF
    26132678          rp(il, i) = rp(il, i)/mp(il, i)
    2614           up(il, i) = up(il, i+1)*mp(il, i+1) + u(il, i)*(mp(il,i)-mp(il,i+1) &
    2615             )
     2679          up(il, i) = up(il, i+1)*mp(il, i+1) + u(il, i)*(mp(il,i)-mp(il,i+1))
    26162680          up(il, i) = up(il, i)/mp(il, i)
    2617           vp(il, i) = vp(il, i+1)*mp(il, i+1) + v(il, i)*(mp(il,i)-mp(il,i+1) &
    2618             )
     2681          vp(il, i) = vp(il, i+1)*mp(il, i+1) + v(il, i)*(mp(il,i)-mp(il,i+1))
    26192682          vp(il, i) = vp(il, i)/mp(il, i)
    26202683
     
    26232686          IF (mp(il,i+1)>1.0E-16) THEN
    26242687            IF (cvflag_grav) THEN
    2625               rp(il, i) = rp(il, i+1) + 100.*ginv*0.5*sigd(il)*(ph(il,i)-ph( &
    2626                 il,i+1))*(evap(il,i+1)+evap(il,i))/mp(il, i+1)
     2688              rp(il, i) = rp(il,i+1) + 100.*ginv*0.5*sigd(il)*(ph(il,i)-ph(il,i+1)) * &
     2689                                       (evap(il,i+1)+evap(il,i))/mp(il,i+1)
    26272690            ELSE
    2628               rp(il, i) = rp(il, i+1) + 5.*sigd(il)*(ph(il,i)-ph(il,i+1))*( &
    2629                 evap(il,i+1)+evap(il,i))/mp(il, i+1)
     2691              rp(il, i) = rp(il,i+1) + 5.*sigd(il)*(ph(il,i)-ph(il,i+1)) * &
     2692                                       (evap(il,i+1)+evap(il,i))/mp(il, i+1)
    26302693            END IF
    26312694            up(il, i) = up(il, i+1)
     
    26392702      END IF ! (i.lt.inb(il) .and. lwork(il))
    26402703    END DO
    2641     ! ----------------------------------------------------------------
    2642 
    2643     ! ***       find tracer concentrations in precipitating downdraft     ***
    2644 
    2645     ! AC!      do j=1,ntra
    2646     ! AC!       do il = 1,ncum
    2647     ! AC!       if (i.lt.inb(il) .and. lwork(il)) then
    2648     ! AC!c
    2649     ! AC!         if(mplus(il))then
    2650     ! AC!          trap(il,i,j)=trap(il,i+1,j)*mp(il,i+1)
    2651     ! AC!     :              +trap(il,i,j)*(mp(il,i)-mp(il,i+1))
    2652     ! AC!          trap(il,i,j)=trap(il,i,j)/mp(il,i)
    2653     ! AC!         else ! if (mplus(il))
    2654     ! AC!          if(mp(il,i+1).gt.1.0e-16)then
    2655     ! AC!           trap(il,i,j)=trap(il,i+1,j)
    2656     ! AC!          endif
    2657     ! AC!         endif ! (mplus(il)) else if (.not.mplus(il))
    2658     ! AC!c
    2659     ! AC!        endif ! (i.lt.inb(il) .and. lwork(il))
    2660     ! AC!       enddo
    2661     ! AC!      end do
     2704! ----------------------------------------------------------------
     2705
     2706! ***       find tracer concentrations in precipitating downdraft     ***
     2707
     2708!AC!      do j=1,ntra
     2709!AC!       do il = 1,ncum
     2710!AC!       if (i.lt.inb(il) .and. lwork(il)) then
     2711!AC!c
     2712!AC!         if(mplus(il))then
     2713!AC!          trap(il,i,j)=trap(il,i+1,j)*mp(il,i+1)
     2714!AC!     :              +trap(il,i,j)*(mp(il,i)-mp(il,i+1))
     2715!AC!          trap(il,i,j)=trap(il,i,j)/mp(il,i)
     2716!AC!         else ! if (mplus(il))
     2717!AC!          if(mp(il,i+1).gt.1.0e-16)then
     2718!AC!           trap(il,i,j)=trap(il,i+1,j)
     2719!AC!          endif
     2720!AC!         endif ! (mplus(il)) else if (.not.mplus(il))
     2721!AC!c
     2722!AC!        endif ! (i.lt.inb(il) .and. lwork(il))
     2723!AC!       enddo
     2724!AC!      end do
    26622725
    26632726400 END DO
    2664   ! ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    2665 
    2666   ! ***                    end of downdraft loop                    ***
    2667 
    2668   ! ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
     2727! ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
     2728
     2729! ***                    end of downdraft loop                    ***
     2730
     2731! ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    26692732
    26702733
     
    26722735END SUBROUTINE cv3_unsat
    26732736
    2674 SUBROUTINE cv3_yield(nloc, ncum, nd, na, ntra, icb, inb, delt, t, rr, t_wake, &
    2675     rr_wake, s_wake, u, v, tra, gz, p, ph, h, hp, lv, lf, cpn, th, th_wake, &
    2676     ep, clw, m, tp, mp, rp, up, vp, trap, wt, water, ice, evap, fondue, faci, &
    2677     b, sigd, ment, qent, hent, iflag_mix, uent, vent, nent, elij, traent, &
    2678     sig, tv, tvp, wghti, iflag, precip, vprecip, ft, fr, fu, fv, ftra, cbmf, &
    2679     upwd, dnwd, dnwd0, ma, mip, tls, tps, qcondc, wd, ftd, fqd)
     2737SUBROUTINE cv3_yield(nloc, ncum, nd, na, ntra, ok_conserv_q, &
     2738                     icb, inb, delt, &
     2739                     t, rr, t_wake, rr_wake, s_wake, u, v, tra, &
     2740                     gz, p, ph, h, hp, lv, lf, cpn, th, th_wake, &
     2741                     ep, clw, m, tp, mp, rp, up, vp, trap, &
     2742                     wt, water, ice, evap, fondue, faci, b, sigd, &
     2743                     ment, qent, hent, iflag_mix, uent, vent, &
     2744                     nent, elij, traent, sig, &
     2745                     tv, tvp, wghti, &
     2746                     iflag, precip, Vprecip, ft, fr, fu, fv, ftra, &
     2747                     cbmf, upwd, dnwd, dnwd0, ma, mip, &
     2748                     tls, tps, qcondc, wd, &
     2749                     ftd, fqd)
    26802750
    26812751  IMPLICIT NONE
     
    26862756  include "conema3.h"
    26872757
    2688   ! inputs:
    2689   ! print*,'cv3_yield apres include'
    2690   INTEGER iflag_mix
    2691   INTEGER ncum, nd, na, ntra, nloc
    2692   INTEGER icb(nloc), inb(nloc)
    2693   REAL delt
    2694   REAL t(nloc, nd), rr(nloc, nd), u(nloc, nd), v(nloc, nd)
    2695   REAL t_wake(nloc, nd), rr_wake(nloc, nd)
    2696   REAL s_wake(nloc)
    2697   REAL tra(nloc, nd, ntra), sig(nloc, nd)
    2698   REAL gz(nloc, na), ph(nloc, nd+1), h(nloc, na), hp(nloc, na)
    2699   REAL th(nloc, na), p(nloc, nd), tp(nloc, na)
    2700   REAL lv(nloc, na), cpn(nloc, na), ep(nloc, na), clw(nloc, na)
    2701   REAL lf(nloc, na)
    2702   REAL m(nloc, na), mp(nloc, na), rp(nloc, na), up(nloc, na)
    2703   REAL vp(nloc, na), wt(nloc, nd), trap(nloc, nd, ntra)
    2704   REAL water(nloc, na), evap(nloc, na), b(nloc, na), sigd(nloc)
    2705   REAL fondue(nloc, na), faci(nloc, na), ice(nloc, na)
    2706   REAL ment(nloc, na, na), qent(nloc, na, na), uent(nloc, na, na)
    2707   REAL hent(nloc, na, na)
    2708   ! IM bug   real vent(nloc,na,na), nent(nloc,na), elij(nloc,na,na)
    2709   REAL vent(nloc, na, na), elij(nloc, na, na)
    2710   INTEGER nent(nloc, nd)
    2711   REAL traent(nloc, na, na, ntra)
    2712   REAL tv(nloc, nd), tvp(nloc, nd), wghti(nloc, nd)
    2713   ! print*,'cv3_yield declarations 1'
    2714   ! input/output:
    2715   INTEGER iflag(nloc)
    2716 
    2717   ! outputs:
    2718   REAL precip(nloc)
    2719   REAL ft(nloc, nd), fr(nloc, nd), fu(nloc, nd), fv(nloc, nd)
    2720   REAL ftd(nloc, nd), fqd(nloc, nd)
    2721   REAL ftra(nloc, nd, ntra)
    2722   REAL upwd(nloc, nd), dnwd(nloc, nd), ma(nloc, nd)
    2723   REAL dnwd0(nloc, nd), mip(nloc, nd)
    2724   REAL vprecip(nloc, nd+1)
    2725   REAL tls(nloc, nd), tps(nloc, nd)
    2726   REAL qcondc(nloc, nd) ! cld
    2727   REAL wd(nloc) ! gust
    2728   REAL cbmf(nloc)
    2729   ! print*,'cv3_yield declarations 2'
    2730   ! local variables:
    2731   INTEGER i, k, il, n, j, num1
    2732   REAL rat, delti
    2733   REAL ax, bx, cx, dx, ex
    2734   REAL cpinv, rdcp, dpinv
    2735   REAL awat(nloc)
    2736   REAL lvcp(nloc, na), lfcp(nloc, na), mke(nloc, na)
    2737   REAL am(nloc), work(nloc), ad(nloc), amp1(nloc)
    2738   ! !!      real up1(nloc), dn1(nloc)
    2739   REAL up1(nloc, nd, nd), dn1(nloc, nd, nd)
    2740   REAL asum(nloc), bsum(nloc), csum(nloc), dsum(nloc)
    2741   REAL esum(nloc), fsum(nloc), gsum(nloc), hsum(nloc)
    2742   REAL th_wake(nloc, nd)
    2743   REAL alpha_qpos(nloc), alpha_qpos1(nloc)
    2744   REAL qcond(nloc, nd), nqcond(nloc, nd), wa(nloc, nd) ! cld
    2745   REAL siga(nloc, nd), sax(nloc, nd), mac(nloc, nd) ! cld
    2746 
    2747   ! print*,'cv3_yield declarations 3'
    2748   ! -------------------------------------------------------------
    2749 
    2750   ! initialization:
     2758!inputs:
     2759      INTEGER iflag_mix
     2760      INTEGER ncum, nd, na, ntra, nloc
     2761      LOGICAL ok_conserv_q
     2762      INTEGER icb(nloc), inb(nloc)
     2763      REAL delt
     2764      REAL t(nloc, nd), rr(nloc, nd), u(nloc, nd), v(nloc, nd)
     2765      REAL t_wake(nloc, nd), rr_wake(nloc, nd)
     2766      REAL s_wake(nloc)
     2767      REAL tra(nloc, nd, ntra), sig(nloc, nd)
     2768      REAL gz(nloc, na), ph(nloc, nd+1), h(nloc, na), hp(nloc, na)
     2769      REAL th(nloc, na), p(nloc, nd), tp(nloc, na)
     2770      REAL lv(nloc, na), cpn(nloc, na), ep(nloc, na), clw(nloc, na)
     2771      REAL lf(nloc, na)
     2772      REAL m(nloc, na), mp(nloc, na), rp(nloc, na), up(nloc, na)
     2773      REAL vp(nloc, na), wt(nloc, nd), trap(nloc, nd, ntra)
     2774      REAL water(nloc, na), evap(nloc, na), b(nloc, na), sigd(nloc)
     2775      REAL fondue(nloc, na), faci(nloc, na), ice(nloc, na)
     2776      REAL ment(nloc, na, na), qent(nloc, na, na), uent(nloc, na, na)
     2777      REAL hent(nloc, na, na)
     2778!IM bug   real vent(nloc,na,na), nent(nloc,na), elij(nloc,na,na)
     2779      REAL vent(nloc, na, na), elij(nloc, na, na)
     2780      INTEGER nent(nloc, nd)
     2781      REAL traent(nloc, na, na, ntra)
     2782      REAL tv(nloc, nd), tvp(nloc, nd), wghti(nloc, nd)
     2783!
     2784!input/output:
     2785      INTEGER iflag(nloc)
     2786!
     2787!outputs:
     2788      REAL precip(nloc)
     2789      REAL ft(nloc, nd), fr(nloc, nd), fu(nloc, nd), fv(nloc, nd)
     2790      REAL ftd(nloc, nd), fqd(nloc, nd)
     2791      REAL ftra(nloc, nd, ntra)
     2792      REAL upwd(nloc, nd), dnwd(nloc, nd), ma(nloc, nd)
     2793      REAL dnwd0(nloc, nd), mip(nloc, nd)
     2794      REAL Vprecip(nloc, nd+1)
     2795      REAL tls(nloc, nd), tps(nloc, nd)
     2796      REAL qcondc(nloc, nd) ! cld
     2797      REAL wd(nloc) ! gust
     2798      REAL cbmf(nloc)
     2799!
     2800!local variables:
     2801      INTEGER i, k, il, n, j, num1
     2802      REAL rat, delti
     2803      REAL ax, bx, cx, dx, ex
     2804      REAL cpinv, rdcp, dpinv
     2805      REAL awat(nloc)
     2806      REAL lvcp(nloc, na), lfcp(nloc, na), mke(nloc, na)
     2807      REAL am(nloc), work(nloc), ad(nloc), amp1(nloc)
     2808!!      real up1(nloc), dn1(nloc)
     2809      REAL up1(nloc, nd, nd), dn1(nloc, nd, nd)
     2810      REAL asum(nloc), bsum(nloc), csum(nloc), dsum(nloc)
     2811      REAL esum(nloc), fsum(nloc), gsum(nloc), hsum(nloc)
     2812      REAL th_wake(nloc, nd)
     2813      REAL alpha_qpos(nloc), alpha_qpos1(nloc)
     2814      REAL qcond(nloc, nd), nqcond(nloc, nd), wa(nloc, nd) ! cld
     2815      REAL siga(nloc, nd), sax(nloc, nd), mac(nloc, nd) ! cld
     2816
     2817      REAL sumdq !jyg
     2818!
     2819! -------------------------------------------------------------
     2820
     2821! initialization:
    27512822
    27522823  delti = 1.0/delt
    2753   ! print*,'cv3_yield initialisation delt', delt
    2754   ! precip,Vprecip,ft,fr,fu,fv,ftra
    2755   ! :                    ,cbmf,upwd,dnwd,dnwd0,ma,mip
    2756   ! :                    ,tls,tps,qcondc,wd
    2757   ! :                    ,ftd,fqd  )
     2824! print*,'cv3_yield initialisation delt', delt
     2825!
    27582826  DO il = 1, ncum
    27592827    precip(il) = 0.0
    2760     vprecip(il, nd+1) = 0.0
     2828    Vprecip(il, nd+1) = 0.0
    27612829    wd(il) = 0.0 ! gust
    27622830  END DO
     
    27642832  DO i = 1, nd
    27652833    DO il = 1, ncum
    2766       vprecip(il, i) = 0.0
     2834      Vprecip(il, i) = 0.0
    27672835      ft(il, i) = 0.0
    27682836      fr(il, i) = 0.0
     
    27802848    END DO
    27812849  END DO
    2782   ! print*,'cv3_yield initialisation 2'
    2783   ! AC!      do j=1,ntra
    2784   ! AC!       do i=1,nd
    2785   ! AC!        do il=1,ncum
    2786   ! AC!          ftra(il,i,j)=0.0
    2787   ! AC!        enddo
    2788   ! AC!       enddo
    2789   ! AC!      enddo
    2790   ! print*,'cv3_yield initialisation 3'
     2850! print*,'cv3_yield initialisation 2'
     2851!AC!      do j=1,ntra
     2852!AC!       do i=1,nd
     2853!AC!        do il=1,ncum
     2854!AC!          ftra(il,i,j)=0.0
     2855!AC!        enddo
     2856!AC!       enddo
     2857!AC!      enddo
     2858! print*,'cv3_yield initialisation 3'
    27912859  DO i = 1, nl
    27922860    DO il = 1, ncum
     
    27982866
    27992867
    2800   ! ***  calculate surface precipitation in mm/day     ***
     2868! ***  calculate surface precipitation in mm/day     ***
    28012869
    28022870  DO il = 1, ncum
    28032871    IF (ep(il,inb(il))>=0.0001 .AND. iflag(il)<=1) THEN
    28042872      IF (cvflag_ice) THEN
    2805         IF (cvflag_grav) THEN
    2806           precip(il) = wt(il, 1)*sigd(il)*(water(il,1)+ice(il,1))*86400.* &
    2807             1000./(rowl*grav)
    2808         ELSE
    2809           precip(il) = wt(il, 1)*sigd(il)*(water(il,1)+ice(il,1))*8640.
    2810         END IF
     2873        precip(il) = wt(il, 1)*sigd(il)*(water(il,1)+ice(il,1)) &
     2874                              *86400.*1000./(rowl*grav)
    28112875      ELSE
    2812         IF (cvflag_grav) THEN
    2813           precip(il) = wt(il, 1)*sigd(il)*water(il, 1)*86400.*1000./ &
    2814             (rowl*grav)
    2815         ELSE
    2816           precip(il) = wt(il, 1)*sigd(il)*water(il, 1)*8640.
    2817         END IF
     2876        precip(il) = wt(il, 1)*sigd(il)*water(il, 1) &
     2877                              *86400.*1000./(rowl*grav)
    28182878      END IF
    28192879    END IF
    28202880  END DO
    2821   ! print*,'cv3_yield apres calcul precip'
    2822 
    2823 
    2824   ! ===  calculate vertical profile of  precipitation in kg/m2/s  ===
     2881! print*,'cv3_yield apres calcul precip'
     2882
     2883
     2884! ===  calculate vertical profile of  precipitation in kg/m2/s  ===
    28252885
    28262886  DO i = 1, nl
     
    28282888      IF (ep(il,inb(il))>=0.0001 .AND. i<=inb(il) .AND. iflag(il)<=1) THEN
    28292889        IF (cvflag_ice) THEN
    2830           IF (cvflag_grav) THEN
    2831             vprecip(il, i) = wt(il, i)*sigd(il)*(water(il,i)+ice(il,i))/grav
    2832           ELSE
    2833             vprecip(il, i) = wt(il, i)*sigd(il)*(water(il,i)+ice(il,i))/10.
    2834           END IF
     2890          Vprecip(il, i) = wt(il, i)*sigd(il)*(water(il,i)+ice(il,i))/grav
    28352891        ELSE
    2836           IF (cvflag_grav) THEN
    2837             vprecip(il, i) = wt(il, i)*sigd(il)*water(il, i)/grav
    2838           ELSE
    2839             vprecip(il, i) = wt(il, i)*sigd(il)*water(il, i)/10.
    2840           END IF
     2892          Vprecip(il, i) = wt(il, i)*sigd(il)*water(il, i)/grav
    28412893        END IF
    28422894      END IF
     
    28452897
    28462898
    2847   ! ***  Calculate downdraft velocity scale    ***
    2848   ! ***  NE PAS UTILISER POUR L'INSTANT ***
    2849 
    2850   ! !      do il=1,ncum
    2851   ! !        wd(il)=betad*abs(mp(il,icb(il)))*0.01*rrd*t(il,icb(il))
    2852   ! !     :                                  /(sigd(il)*p(il,icb(il)))
    2853   ! !      enddo
    2854 
    2855 
    2856   ! ***  calculate tendencies of lowest level potential temperature  ***
    2857   ! ***                      and mixing ratio                        ***
     2899! ***  Calculate downdraft velocity scale    ***
     2900! ***  NE PAS UTILISER POUR L'INSTANT ***
     2901
     2902!!      do il=1,ncum
     2903!!        wd(il)=betad*abs(mp(il,icb(il)))*0.01*rrd*t(il,icb(il)) &
     2904!!                                       /(sigd(il)*p(il,icb(il)))
     2905!!      enddo
     2906
     2907
     2908! ***  calculate tendencies of lowest level potential temperature  ***
     2909! ***                      and mixing ratio                        ***
    28582910
    28592911  DO il = 1, ncum
     
    28702922  END DO
    28712923
    2872   ! print*,'cv3_yield avant ft'
    2873   ! AM is the part of cbmf taken from the first level
     2924!    print*,'cv3_yield avant ft'
     2925! am is the part of cbmf taken from the first level
    28742926  DO il = 1, ncum
    28752927    am(il) = cbmf(il)*wghti(il, 1)
     
    28782930  DO il = 1, ncum
    28792931    IF (iflag(il)<=1) THEN
    2880       ! convect3      if((0.1*dpinv*am).ge.delti)iflag(il)=4
    2881       ! jyg  Correction pour conserver l'eau
    2882       ! cc       ft(il,1)=-0.5*lvcp(il,1)*sigd(il)*(evap(il,1)+evap(il,2))
    2883       ! !precip
     2932! convect3      if((0.1*dpinv*am).ge.delti)iflag(il)=4
     2933!JYG  Correction pour conserver l'eau
     2934! cc       ft(il,1)=-0.5*lvcp(il,1)*sigd(il)*(evap(il,1)+evap(il,2))          !precip
    28842935      IF (cvflag_ice) THEN
    28852936        ft(il, 1) = -lvcp(il, 1)*sigd(il)*evap(il, 1) - &
    2886           lfcp(il, 1)*sigd(il)*evap(il, 1)*faci(il, 1) - &
    2887           lfcp(il, 1)*sigd(il)*(fondue(il,1)*wt(il,1))/(100.*(ph(il,1)-ph(il, &
    2888           2))) !precip
     2937                     lfcp(il, 1)*sigd(il)*evap(il, 1)*faci(il, 1) - &
     2938                     lfcp(il, 1)*sigd(il)*(fondue(il,1)*wt(il,1)) / &
     2939                       (100.*(ph(il,1)-ph(il,2)))                            !precip
    28892940      ELSE
    28902941        ft(il, 1) = -lvcp(il, 1)*sigd(il)*evap(il, 1)
    28912942      END IF
    28922943
    2893       IF (cvflag_grav) THEN
    2894         ft(il, 1) = ft(il, 1) - 0.009*grav*sigd(il)*mp(il, 2)*t_wake(il, 1)*b &
    2895           (il, 1)*work(il)
     2944      ft(il, 1) = ft(il, 1) - 0.009*grav*sigd(il)*mp(il, 2)*t_wake(il, 1)*b(il, 1)*work(il)
     2945
     2946      IF (cvflag_ice) THEN
     2947        ft(il, 1) = ft(il, 1) + 0.01*sigd(il)*wt(il, 1)*(cl-cpd)*water(il, 2) * &
     2948                                     (t_wake(il,2)-t_wake(il,1))*work(il)/cpn(il, 1) + &
     2949                                0.01*sigd(il)*wt(il, 1)*(ci-cpd)*ice(il, 2) * &
     2950                                     (t_wake(il,2)-t_wake(il,1))*work(il)/cpn(il, 1)
    28962951      ELSE
    2897         ft(il, 1) = ft(il, 1) - 0.09*sigd(il)*mp(il, 2)*t_wake(il, 1)*b(il, 1 &
    2898           )*work(il)
     2952        ft(il, 1) = ft(il, 1) + 0.01*sigd(il)*wt(il, 1)*(cl-cpd)*water(il, 2) * &
     2953                                     (t_wake(il,2)-t_wake(il,1))*work(il)/cpn(il, 1)
    28992954      END IF
    29002955
    2901       IF (cvflag_ice) THEN
    2902         ft(il, 1) = ft(il, 1) + 0.01*sigd(il)*wt(il, 1)*(cl-cpd)*water(il, 2) &
    2903           *(t_wake(il,2)-t_wake(il,1))*work(il)/cpn(il, 1) + &
    2904           0.01*sigd(il)*wt(il, 1)*(ci-cpd)*ice(il, 2)* &
    2905           (t_wake(il,2)-t_wake(il,1))*work(il)/cpn(il, 1)
    2906       ELSE
    2907         ft(il, 1) = ft(il, 1) + 0.01*sigd(il)*wt(il, 1)*(cl-cpd)*water(il, 2) &
    2908           *(t_wake(il,2)-t_wake(il,1))*work(il)/cpn(il, 1)
    2909       END IF
    2910 
    2911       ftd(il, 1) = ft(il, 1) ! fin precip
    2912 
    2913       IF (cvflag_grav) THEN !sature
    2914         IF ((0.01*grav*work(il)*am(il))>=delti) iflag(il) = 1 !consist vect
    2915         ft(il, 1) = ft(il, 1) + 0.01*grav*work(il)*am(il)*(t(il,2)-t(il,1)+( &
    2916           gz(il,2)-gz(il,1))/cpn(il,1))
    2917       ELSE
    2918         IF ((0.1*work(il)*am(il))>=delti) iflag(il) = 1 !consistency vect
    2919         ft(il, 1) = ft(il, 1) + 0.1*work(il)*am(il)*(t(il,2)-t(il,1)+(gz(il, &
    2920           2)-gz(il,1))/cpn(il,1))
    2921       END IF
     2956      ftd(il, 1) = ft(il, 1)                                                  ! fin precip
     2957
     2958      IF ((0.01*grav*work(il)*am(il))>=delti) iflag(il) = 1 !consist vect
     2959      ft(il, 1) = ft(il, 1) + 0.01*grav*work(il)*am(il) * &
     2960                                   (t(il,2)-t(il,1)+(gz(il,2)-gz(il,1))/cpn(il,1))
    29222961    END IF ! iflag
    29232962  END DO
     
    29272966    IF (iflag_mix>0) THEN
    29282967      DO il = 1, ncum
    2929         ! FH WARNING a modifier :
     2968! FH WARNING a modifier :
    29302969        cpinv = 0.
    2931         ! cpinv=1.0/cpn(il,1)
     2970! cpinv=1.0/cpn(il,1)
    29322971        IF (j<=inb(il) .AND. iflag(il)<=1) THEN
    2933           IF (cvflag_grav) THEN
    2934             ft(il, 1) = ft(il, 1) + 0.01*grav*work(il)*ment(il, j, 1)*(hent( &
    2935               il,j,1)-h(il,1)+t(il,1)*(cpv-cpd)*(rr(il,1)-qent(il,j, &
    2936               1)))*cpinv
    2937           ELSE
    2938             ft(il, 1) = ft(il, 1) + 0.1*work(il)*ment(il, j, 1)*(hent(il,j,1) &
    2939               -h(il,1)+t(il,1)*(cpv-cpd)*(rr(il,1)-qent(il,j,1)))*cpinv
    2940           END IF ! cvflag_grav
     2972          ft(il, 1) = ft(il, 1) + 0.01*grav*work(il)*ment(il, j, 1) * &
     2973                     (hent(il,j,1)-h(il,1)+t(il,1)*(cpv-cpd)*(rr(il,1)-qent(il,j,1)))*cpinv
    29412974        END IF ! j
    29422975      END DO
    29432976    END IF
    29442977  END DO
    2945     ! fin sature
     2978! fin sature
    29462979
    29472980
    29482981  DO il = 1, ncum
    29492982    IF (iflag(il)<=1) THEN
    2950       IF (cvflag_grav) THEN
    2951         ! jyg1  Correction pour mieux conserver l'eau (conformite avec
    2952         ! CONVECT4.3)
    2953         fr(il, 1) = 0.01*grav*mp(il, 2)*(rp(il,2)-rr_wake(il,1))*work(il) + &
    2954           sigd(il)*evap(il, 1)
    2955         ! cc     :          +sigd(il)*0.5*(evap(il,1)+evap(il,2))
    2956 
    2957         fqd(il, 1) = fr(il, 1) !precip
    2958 
    2959         fr(il, 1) = fr(il, 1) + 0.01*grav*am(il)*(rr(il,2)-rr(il,1))*work(il) !sature
    2960 
    2961         fu(il, 1) = fu(il, 1) + 0.01*grav*work(il)*(mp(il,2)*(up(il,2)-u(il, &
    2962           1))+am(il)*(u(il,2)-u(il,1)))
    2963         fv(il, 1) = fv(il, 1) + 0.01*grav*work(il)*(mp(il,2)*(vp(il,2)-v(il, &
    2964           1))+am(il)*(v(il,2)-v(il,1)))
    2965       ELSE ! cvflag_grav
    2966         fr(il, 1) = 0.1*mp(il, 2)*(rp(il,2)-rr_wake(il,1))*work(il) + &
    2967           sigd(il)*evap(il, 1)
    2968         ! cc     :          +sigd(il)*0.5*(evap(il,1)+evap(il,2))
    2969         fqd(il, 1) = fr(il, 1) !precip
    2970         fr(il, 1) = fr(il, 1) + 0.1*am(il)*(rr(il,2)-rr(il,1))*work(il)
    2971         fu(il, 1) = fu(il, 1) + 0.1*work(il)*(mp(il,2)*(up(il,2)-u(il, &
    2972           1))+am(il)*(u(il,2)-u(il,1)))
    2973         fv(il, 1) = fv(il, 1) + 0.1*work(il)*(mp(il,2)*(vp(il,2)-v(il, &
    2974           1))+am(il)*(v(il,2)-v(il,1)))
    2975       END IF ! cvflag_grav
     2983!JYG1  Correction pour mieux conserver l'eau (conformite avec CONVECT4.3)
     2984      fr(il, 1) = 0.01*grav*mp(il, 2)*(rp(il,2)-rr_wake(il,1))*work(il) + &
     2985                  sigd(il)*evap(il, 1)
     2986!!!                  sigd(il)*0.5*(evap(il,1)+evap(il,2))
     2987
     2988      fqd(il, 1) = fr(il, 1) !precip
     2989
     2990      fr(il, 1) = fr(il, 1) + 0.01*grav*am(il)*(rr(il,2)-rr(il,1))*work(il)        !sature
     2991
     2992      fu(il, 1) = fu(il, 1) + 0.01*grav*work(il)*(mp(il,2)*(up(il,2)-u(il,1)) + &
     2993                                                  am(il)*(u(il,2)-u(il,1)))
     2994      fv(il, 1) = fv(il, 1) + 0.01*grav*work(il)*(mp(il,2)*(vp(il,2)-v(il,1)) + &
     2995                                                  am(il)*(v(il,2)-v(il,1)))
    29762996    END IF ! iflag
    29772997  END DO ! il
    29782998
    29792999
    2980   ! AC!     do j=1,ntra
    2981   ! AC!      do il=1,ncum
    2982   ! AC!       if (iflag(il) .le. 1) then
    2983   ! AC!       if (cvflag_grav) then
    2984   ! AC!        ftra(il,1,j)=ftra(il,1,j)+0.01*grav*work(il)
    2985   ! AC!    :                     *(mp(il,2)*(trap(il,2,j)-tra(il,1,j))
    2986   ! AC!    :             +am(il)*(tra(il,2,j)-tra(il,1,j)))
    2987   ! AC!       else
    2988   ! AC!        ftra(il,1,j)=ftra(il,1,j)+0.1*work(il)
    2989   ! AC!    :                     *(mp(il,2)*(trap(il,2,j)-tra(il,1,j))
    2990   ! AC!    :             +am(il)*(tra(il,2,j)-tra(il,1,j)))
    2991   ! AC!       endif
    2992   ! AC!       endif  ! iflag
    2993   ! AC!      enddo
    2994   ! AC!     enddo
     3000!AC!     do j=1,ntra
     3001!AC!      do il=1,ncum
     3002!AC!       if (iflag(il) .le. 1) then
     3003!AC!       if (cvflag_grav) then
     3004!AC!        ftra(il,1,j)=ftra(il,1,j)+0.01*grav*work(il)
     3005!AC!    :                     *(mp(il,2)*(trap(il,2,j)-tra(il,1,j))
     3006!AC!    :             +am(il)*(tra(il,2,j)-tra(il,1,j)))
     3007!AC!       else
     3008!AC!        ftra(il,1,j)=ftra(il,1,j)+0.1*work(il)
     3009!AC!    :                     *(mp(il,2)*(trap(il,2,j)-tra(il,1,j))
     3010!AC!    :             +am(il)*(tra(il,2,j)-tra(il,1,j)))
     3011!AC!       endif
     3012!AC!       endif  ! iflag
     3013!AC!      enddo
     3014!AC!     enddo
    29953015
    29963016  DO j = 2, nl
    29973017    DO il = 1, ncum
    29983018      IF (j<=inb(il) .AND. iflag(il)<=1) THEN
    2999         IF (cvflag_grav) THEN
    3000           fr(il, 1) = fr(il, 1) + 0.01*grav*work(il)*ment(il, j, 1)*(qent(il, &
    3001             j,1)-rr(il,1))
    3002           fu(il, 1) = fu(il, 1) + 0.01*grav*work(il)*ment(il, j, 1)*(uent(il, &
    3003             j,1)-u(il,1))
    3004           fv(il, 1) = fv(il, 1) + 0.01*grav*work(il)*ment(il, j, 1)*(vent(il, &
    3005             j,1)-v(il,1))
    3006         ELSE ! cvflag_grav
    3007           fr(il, 1) = fr(il, 1) + 0.1*work(il)*ment(il, j, 1)*(qent(il,j,1)- &
    3008             rr(il,1))
    3009           fu(il, 1) = fu(il, 1) + 0.1*work(il)*ment(il, j, 1)*(uent(il,j,1)-u &
    3010             (il,1))
    3011           fv(il, 1) = fv(il, 1) + 0.1*work(il)*ment(il, j, 1)*(vent(il,j,1)-v &
    3012             (il,1)) ! fin sature
    3013         END IF ! cvflag_grav
     3019        fr(il, 1) = fr(il, 1) + 0.01*grav*work(il)*ment(il, j, 1)*(qent(il,j,1)-rr(il,1))
     3020        fu(il, 1) = fu(il, 1) + 0.01*grav*work(il)*ment(il, j, 1)*(uent(il,j,1)-u(il,1))
     3021        fv(il, 1) = fv(il, 1) + 0.01*grav*work(il)*ment(il, j, 1)*(vent(il,j,1)-v(il,1))
    30143022      END IF ! j
    30153023    END DO
    30163024  END DO
    30173025
    3018   ! AC!      do k=1,ntra
    3019   ! AC!       do j=2,nl
    3020   ! AC!        do il=1,ncum
    3021   ! AC!         if (j.le.inb(il) .and. iflag(il) .le. 1) then
    3022   ! AC!
    3023   ! AC!          if (cvflag_grav) then
    3024   ! AC!           ftra(il,1,k)=ftra(il,1,k)+0.01*grav*work(il)*ment(il,j,1)
    3025   ! AC!     :                *(traent(il,j,1,k)-tra(il,1,k))
    3026   ! AC!          else
    3027   ! AC!           ftra(il,1,k)=ftra(il,1,k)+0.1*work(il)*ment(il,j,1)
    3028   ! AC!     :                *(traent(il,j,1,k)-tra(il,1,k))
    3029   ! AC!          endif
    3030   ! AC!
    3031   ! AC!         endif
    3032   ! AC!        enddo
    3033   ! AC!       enddo
    3034   ! AC!      enddo
    3035   ! print*,'cv3_yield apres ft'
    3036 
    3037   ! ***  calculate tendencies of potential temperature and mixing ratio  ***
    3038   ! ***               at levels above the lowest level                   ***
    3039 
    3040   ! ***  first find the net saturated updraft and downdraft mass fluxes  ***
    3041   ! ***                      through each level                          ***
     3026!AC!      do k=1,ntra
     3027!AC!       do j=2,nl
     3028!AC!        do il=1,ncum
     3029!AC!         if (j.le.inb(il) .and. iflag(il) .le. 1) then
     3030!AC!
     3031!AC!          if (cvflag_grav) then
     3032!AC!           ftra(il,1,k)=ftra(il,1,k)+0.01*grav*work(il)*ment(il,j,1)
     3033!AC!     :                *(traent(il,j,1,k)-tra(il,1,k))
     3034!AC!          else
     3035!AC!           ftra(il,1,k)=ftra(il,1,k)+0.1*work(il)*ment(il,j,1)
     3036!AC!     :                *(traent(il,j,1,k)-tra(il,1,k))
     3037!AC!          endif
     3038!AC!
     3039!AC!         endif
     3040!AC!        enddo
     3041!AC!       enddo
     3042!AC!      enddo
     3043! print*,'cv3_yield apres ft'
     3044
     3045! ***  calculate tendencies of potential temperature and mixing ratio  ***
     3046! ***               at levels above the lowest level                   ***
     3047
     3048! ***  first find the net saturated updraft and downdraft mass fluxes  ***
     3049! ***                      through each level                          ***
    30423050
    30433051
     
    30603068          END IF
    30613069        ELSE
    3062           ! AMP1 is the part of cbmf taken from layers I and lower
     3070! AMP1 is the part of cbmf taken from layers I and lower
    30633071          IF (k<=i) THEN
    30643072            amp1(il) = amp1(il) + cbmf(il)*wghti(il, k)
     
    30933101        cpinv = 1.0/cpn(il, i)
    30943102
    3095         ! convect3      if((0.1*dpinv*amp1).ge.delti)iflag(il)=4
    3096         IF (cvflag_grav) THEN
    3097           IF ((0.01*grav*dpinv*amp1(il))>=delti) iflag(il) = 1 ! vecto
    3098         ELSE
    3099           IF ((0.1*dpinv*amp1(il))>=delti) iflag(il) = 1 ! vecto
    3100         END IF
    3101 
    3102           ! precip
    3103         ! cc       ft(il,i)=
    3104         ! -0.5*sigd(il)*lvcp(il,i)*(evap(il,i)+evap(il,i+1))
     3103! convect3      if((0.1*dpinv*amp1).ge.delti)iflag(il)=4
     3104        IF ((0.01*grav*dpinv*amp1(il))>=delti) iflag(il) = 1 ! vecto
     3105
     3106! precip
     3107! cc       ft(il,i)= -0.5*sigd(il)*lvcp(il,i)*(evap(il,i)+evap(il,i+1))
    31053108        IF (cvflag_ice) THEN
    31063109          ft(il, i) = -sigd(il)*lvcp(il, i)*evap(il, i) - &
    3107             sigd(il)*lfcp(il, i)*evap(il, i)*faci(il, i) - &
    3108             sigd(il)*lfcp(il, i)*fondue(il, i)*wt(il, i)/(100.*(p(il, &
    3109             i-1)-p(il,i)))
     3110                       sigd(il)*lfcp(il, i)*evap(il, i)*faci(il, i) - &
     3111                       sigd(il)*lfcp(il, i)*fondue(il, i)*wt(il, i)/(100.*(p(il,i-1)-p(il,i)))
    31103112        ELSE
    31113113          ft(il, i) = -sigd(il)*lvcp(il, i)*evap(il, i)
     
    31143116        rat = cpn(il, i-1)*cpinv
    31153117
    3116         IF (cvflag_grav) THEN
    3117           ft(il, i) = ft(il, i) - 0.009*grav*sigd(il)*(mp(il,i+1)*t_wake(il,i &
    3118             )*b(il,i)-mp(il,i)*t_wake(il,i-1)*rat*b(il,i-1))*dpinv
    3119           IF (cvflag_ice) THEN
    3120             ft(il, i) = ft(il, i) + 0.01*sigd(il)*wt(il, i)*(cl-cpd)*water(il &
    3121               , i+1)*(t_wake(il,i+1)-t_wake(il,i))*dpinv*cpinv + &
    3122               0.01*sigd(il)*wt(il, i)*(ci-cpd)*ice(il, i+1)* &
    3123               (t_wake(il,i+1)-t_wake(il,i))*dpinv*cpinv
    3124           ELSE
    3125             ft(il, i) = ft(il, i) + 0.01*sigd(il)*wt(il, i)*(cl-cpd)*water(il &
    3126               , i+1)*(t_wake(il,i+1)-t_wake(il,i))*dpinv*cpinv
    3127           END IF
    3128 
    3129           ftd(il, i) = ft(il, i)
    3130             ! fin precip
    3131 
    3132             ! sature
    3133           ft(il, i) = ft(il, i) + 0.01*grav*dpinv*(amp1(il)*(t(il,i+1)-t(il, &
    3134             i)+(gz(il,i+1)-gz(il,i))*cpinv)-ad(il)*(t(il,i)-t(il, &
    3135             i-1)+(gz(il,i)-gz(il,i-1))*cpinv))
    3136 
    3137 
    3138           IF (iflag_mix==0) THEN
    3139             ft(il, i) = ft(il, i) + 0.01*grav*dpinv*ment(il, i, i)*(hp(il,i)- &
    3140               h(il,i)+t(il,i)*(cpv-cpd)*(rr(il,i)-qent(il,i,i)))*cpinv
    3141           END IF
    3142 
    3143         ELSE ! cvflag_grav
    3144           ft(il, i) = ft(il, i) - 0.09*sigd(il)*(mp(il,i+1)*t_wake(il,i)*b(il &
    3145             ,i)-mp(il,i)*t_wake(il,i-1)*rat*b(il,i-1))*dpinv
    3146 
    3147           IF (cvflag_ice) THEN
    3148             ft(il, i) = ft(il, i) + 0.01*sigd(il)*wt(il, i)*(cl-cpd)*water(il &
    3149               , i+1)*(t_wake(il,i+1)-t_wake(il,i))*dpinv*cpinv + &
    3150               0.01*sigd(il)*wt(il, i)*(ci-cpd)*ice(il, i+1)* &
    3151               (t_wake(il,i+1)-t_wake(il,i))*dpinv*cpinv
    3152           ELSE
    3153             ft(il, i) = ft(il, i) + 0.01*sigd(il)*wt(il, i)*(cl-cpd)*water(il &
    3154               , i+1)*(t_wake(il,i+1)-t_wake(il,i))*dpinv*cpinv
    3155           END IF
    3156 
    3157           ftd(il, i) = ft(il, i)
    3158             ! fin precip
    3159 
    3160             ! sature
    3161           ft(il, i) = ft(il, i) + 0.1*dpinv*(amp1(il)*(t(il,i+1)-t(il, &
    3162             i)+(gz(il,i+1)-gz(il,i))*cpinv)-ad(il)*(t(il,i)-t(il, &
    3163             i-1)+(gz(il,i)-gz(il,i-1))*cpinv))
    3164 
    3165 
    3166           IF (iflag_mix==0) THEN
    3167             ft(il, i) = ft(il, i) + 0.1*dpinv*ment(il, i, i)*(hp(il,i)-h(il,i &
    3168               )+t(il,i)*(cpv-cpd)*(rr(il,i)-qent(il,i,i)))*cpinv
    3169           END IF
    3170         END IF ! cvflag_grav
    3171 
    3172 
    3173         IF (cvflag_grav) THEN
    3174           ! sb: on ne fait pas encore la correction permettant de mieux
    3175           ! conserver l'eau:
    3176           ! jyg: correction permettant de mieux conserver l'eau:
    3177           ! cc         fr(il,i)=0.5*sigd(il)*(evap(il,i)+evap(il,i+1))
    3178           fr(il, i) = sigd(il)*evap(il, i) + 0.01*grav*(mp(il,i+1)*(rp(il, &
    3179             i+1)-rr_wake(il,i))-mp(il,i)*(rp(il,i)-rr_wake(il,i-1)))*dpinv
    3180           fqd(il, i) = fr(il, i) ! precip
    3181 
    3182           fu(il, i) = 0.01*grav*(mp(il,i+1)*(up(il,i+1)-u(il, &
    3183             i))-mp(il,i)*(up(il,i)-u(il,i-1)))*dpinv
    3184           fv(il, i) = 0.01*grav*(mp(il,i+1)*(vp(il,i+1)-v(il, &
    3185             i))-mp(il,i)*(vp(il,i)-v(il,i-1)))*dpinv
    3186         ELSE ! cvflag_grav
    3187           ! cc         fr(il,i)=0.5*sigd(il)*(evap(il,i)+evap(il,i+1))
    3188           fr(il, i) = sigd(il)*evap(il, i) + 0.1*(mp(il,i+1)*(rp(il, &
    3189             i+1)-rr_wake(il,i))-mp(il,i)*(rp(il,i)-rr_wake(il,i-1)))*dpinv
    3190           fqd(il, i) = fr(il, i) ! precip
    3191 
    3192           fu(il, i) = 0.1*(mp(il,i+1)*(up(il,i+1)-u(il,i))-mp(il,i)*(up(il, &
    3193             i)-u(il,i-1)))*dpinv
    3194           fv(il, i) = 0.1*(mp(il,i+1)*(vp(il,i+1)-v(il,i))-mp(il,i)*(vp(il, &
    3195             i)-v(il,i-1)))*dpinv
    3196         END IF ! cvflag_grav
    3197 
    3198 
    3199         IF (cvflag_grav) THEN
    3200           fr(il, i) = fr(il, i) + 0.01*grav*dpinv*(amp1(il)*(rr(il, &
    3201             i+1)-rr(il,i))-ad(il)*(rr(il,i)-rr(il,i-1)))
    3202           fu(il, i) = fu(il, i) + 0.01*grav*dpinv*(amp1(il)*(u(il,i+1)-u(il, &
    3203             i))-ad(il)*(u(il,i)-u(il,i-1)))
    3204           fv(il, i) = fv(il, i) + 0.01*grav*dpinv*(amp1(il)*(v(il,i+1)-v(il, &
    3205             i))-ad(il)*(v(il,i)-v(il,i-1)))
    3206         ELSE ! cvflag_grav
    3207           fr(il, i) = fr(il, i) + 0.1*dpinv*(amp1(il)*(rr(il,i+1)-rr(il, &
    3208             i))-ad(il)*(rr(il,i)-rr(il,i-1)))
    3209           fu(il, i) = fu(il, i) + 0.1*dpinv*(amp1(il)*(u(il,i+1)-u(il, &
    3210             i))-ad(il)*(u(il,i)-u(il,i-1)))
    3211           fv(il, i) = fv(il, i) + 0.1*dpinv*(amp1(il)*(v(il,i+1)-v(il, &
    3212             i))-ad(il)*(v(il,i)-v(il,i-1)))
    3213         END IF ! cvflag_grav
     3118        ft(il, i) = ft(il, i) - 0.009*grav*sigd(il) * &
     3119                     (mp(il,i+1)*t_wake(il,i)*b(il,i)-mp(il,i)*t_wake(il,i-1)*rat*b(il,i-1))*dpinv
     3120        IF (cvflag_ice) THEN
     3121          ft(il, i) = ft(il, i) + 0.01*sigd(il)*wt(il, i)*(cl-cpd)*water(il, i+1) * &
     3122                                       (t_wake(il,i+1)-t_wake(il,i))*dpinv*cpinv + &
     3123                                  0.01*sigd(il)*wt(il, i)*(ci-cpd)*ice(il, i+1) * &
     3124                                       (t_wake(il,i+1)-t_wake(il,i))*dpinv*cpinv
     3125        ELSE
     3126          ft(il, i) = ft(il, i) + 0.01*sigd(il)*wt(il, i)*(cl-cpd)*water(il, i+1) * &
     3127                                       (t_wake(il,i+1)-t_wake(il,i))*dpinv* &
     3128            cpinv
     3129        END IF
     3130
     3131        ftd(il, i) = ft(il, i)
     3132! fin precip
     3133
     3134! sature
     3135        ft(il, i) = ft(il, i) + 0.01*grav*dpinv * &
     3136                     (amp1(il)*(t(il,i+1)-t(il,i) + (gz(il,i+1)-gz(il,i))*cpinv) - &
     3137                      ad(il)*(t(il,i)-t(il,i-1)+(gz(il,i)-gz(il,i-1))*cpinv))
     3138
     3139
     3140        IF (iflag_mix==0) THEN
     3141          ft(il, i) = ft(il, i) + 0.01*grav*dpinv*ment(il, i, i)*(hp(il,i)-h(il,i) + &
     3142                                    t(il,i)*(cpv-cpd)*(rr(il,i)-qent(il,i,i)))*cpinv
     3143        END IF
     3144
     3145
     3146
     3147! sb: on ne fait pas encore la correction permettant de mieux
     3148! conserver l'eau:
     3149!JYG: correction permettant de mieux conserver l'eau:
     3150! cc         fr(il,i)=0.5*sigd(il)*(evap(il,i)+evap(il,i+1))
     3151        fr(il, i) = sigd(il)*evap(il, i) + 0.01*grav*(mp(il,i+1)*(rp(il,i+1)-rr_wake(il,i)) - &
     3152                                                      mp(il,i)*(rp(il,i)-rr_wake(il,i-1)))*dpinv
     3153        fqd(il, i) = fr(il, i)                                                                     ! precip
     3154
     3155        fu(il, i) = 0.01*grav*(mp(il,i+1)*(up(il,i+1)-u(il,i)) - &
     3156                               mp(il,i)*(up(il,i)-u(il,i-1)))*dpinv
     3157        fv(il, i) = 0.01*grav*(mp(il,i+1)*(vp(il,i+1)-v(il,i)) - &
     3158                               mp(il,i)*(vp(il,i)-v(il,i-1)))*dpinv
     3159
     3160
     3161        fr(il, i) = fr(il, i) + 0.01*grav*dpinv*(amp1(il)*(rr(il,i+1)-rr(il,i)) - &
     3162                                                 ad(il)*(rr(il,i)-rr(il,i-1)))
     3163        fu(il, i) = fu(il, i) + 0.01*grav*dpinv*(amp1(il)*(u(il,i+1)-u(il,i)) - &
     3164                                                 ad(il)*(u(il,i)-u(il,i-1)))
     3165        fv(il, i) = fv(il, i) + 0.01*grav*dpinv*(amp1(il)*(v(il,i+1)-v(il,i)) - &
     3166                                                 ad(il)*(v(il,i)-v(il,i-1)))
    32143167
    32153168      END IF ! i
    32163169    END DO
    32173170
    3218     ! AC!      do k=1,ntra
    3219     ! AC!       do il=1,ncum
    3220     ! AC!        if (i.le.inb(il) .and. iflag(il) .le. 1) then
    3221     ! AC!         dpinv=1.0/(ph(il,i)-ph(il,i+1))
    3222     ! AC!         cpinv=1.0/cpn(il,i)
    3223     ! AC!         if (cvflag_grav) then
    3224     ! AC!           ftra(il,i,k)=ftra(il,i,k)+0.01*grav*dpinv
    3225     ! AC!     :         *(amp1(il)*(tra(il,i+1,k)-tra(il,i,k))
    3226     ! AC!     :           -ad(il)*(tra(il,i,k)-tra(il,i-1,k)))
    3227     ! AC!         else
    3228     ! AC!           ftra(il,i,k)=ftra(il,i,k)+0.1*dpinv
    3229     ! AC!     :         *(amp1(il)*(tra(il,i+1,k)-tra(il,i,k))
    3230     ! AC!     :           -ad(il)*(tra(il,i,k)-tra(il,i-1,k)))
    3231     ! AC!         endif
    3232     ! AC!        endif
    3233     ! AC!       enddo
    3234     ! AC!      enddo
     3171!AC!      do k=1,ntra
     3172!AC!       do il=1,ncum
     3173!AC!        if (i.le.inb(il) .and. iflag(il) .le. 1) then
     3174!AC!         dpinv=1.0/(ph(il,i)-ph(il,i+1))
     3175!AC!         cpinv=1.0/cpn(il,i)
     3176!AC!         if (cvflag_grav) then
     3177!AC!           ftra(il,i,k)=ftra(il,i,k)+0.01*grav*dpinv
     3178!AC!     :         *(amp1(il)*(tra(il,i+1,k)-tra(il,i,k))
     3179!AC!     :           -ad(il)*(tra(il,i,k)-tra(il,i-1,k)))
     3180!AC!         else
     3181!AC!           ftra(il,i,k)=ftra(il,i,k)+0.1*dpinv
     3182!AC!     :         *(amp1(il)*(tra(il,i+1,k)-tra(il,i,k))
     3183!AC!     :           -ad(il)*(tra(il,i,k)-tra(il,i-1,k)))
     3184!AC!         endif
     3185!AC!        endif
     3186!AC!       enddo
     3187!AC!      enddo
    32353188
    32363189    DO k = 1, i - 1
     
    32463199            dpinv = 1.0/(ph(il,i)-ph(il,i+1))
    32473200            cpinv = 1.0/cpn(il, i)
    3248             IF (cvflag_grav) THEN
    3249               ft(il, i) = ft(il, i) + 0.01*grav*dpinv*ment(il, k, i)*(hent(il &
    3250                 ,k,i)-h(il,i)+t(il,i)*(cpv-cpd)*(rr(il,i)+awat(il)-qent(il,k, &
    3251                 i)))*cpinv
    3252 
    3253 
    3254 
    3255             ELSE
    3256               ft(il, i) = ft(il, i) + 0.1*dpinv*ment(il, k, i)*(hent(il,k,i)- &
    3257                 h(il,i)+t(il,i)*(cpv-cpd)*(rr(il,i)+awat(il)-qent(il,k, &
    3258                 i)))*cpinv
    3259             END IF !cvflag_grav
     3201            ft(il, i) = ft(il, i) + 0.01*grav*dpinv*ment(il, k, i) * &
     3202                 (hent(il,k,i)-h(il,i)+t(il,i)*(cpv-cpd)*(rr(il,i)+awat(il)-qent(il,k,i)))*cpinv
     3203!
     3204!
    32603205          END IF ! i
    32613206        END DO
     
    32663211          dpinv = 1.0/(ph(il,i)-ph(il,i+1))
    32673212          cpinv = 1.0/cpn(il, i)
    3268           IF (cvflag_grav) THEN
    3269             fr(il, i) = fr(il, i) + 0.01*grav*dpinv*ment(il, k, i)*(qent(il,k &
    3270               ,i)-awat(il)-rr(il,i))
    3271             fu(il, i) = fu(il, i) + 0.01*grav*dpinv*ment(il, k, i)*(uent(il,k &
    3272               ,i)-u(il,i))
    3273             fv(il, i) = fv(il, i) + 0.01*grav*dpinv*ment(il, k, i)*(vent(il,k &
    3274               ,i)-v(il,i))
    3275           ELSE ! cvflag_grav
    3276             fr(il, i) = fr(il, i) + 0.1*dpinv*ment(il, k, i)*(qent(il,k,i)- &
    3277               awat(il)-rr(il,i))
    3278             fu(il, i) = fu(il, i) + 0.01*grav*dpinv*ment(il, k, i)*(uent(il,k &
    3279               ,i)-u(il,i))
    3280             fv(il, i) = fv(il, i) + 0.1*dpinv*ment(il, k, i)*(vent(il,k,i)-v( &
    3281               il,i))
    3282           END IF ! cvflag_grav
    3283 
    3284           ! (saturated updrafts resulting from mixing)        ! cld
    3285           qcond(il, i) = qcond(il, i) + (elij(il,k,i)-awat(il)) ! cld
     3213          fr(il, i) = fr(il, i) + 0.01*grav*dpinv*ment(il, k, i) * &
     3214                                                       (qent(il,k,i)-awat(il)-rr(il,i))
     3215          fu(il, i) = fu(il, i) + 0.01*grav*dpinv*ment(il, k, i)*(uent(il,k,i)-u(il,i))
     3216          fv(il, i) = fv(il, i) + 0.01*grav*dpinv*ment(il, k, i)*(vent(il,k,i)-v(il,i))
     3217
     3218! (saturated updrafts resulting from mixing)                                   ! cld
     3219          qcond(il, i) = qcond(il, i) + (elij(il,k,i)-awat(il))                ! cld
    32863220          nqcond(il, i) = nqcond(il, i) + 1. ! cld
    32873221        END IF ! i
     
    32893223    END DO
    32903224
    3291     ! AC!      do j=1,ntra
    3292     ! AC!       do k=1,i-1
    3293     ! AC!        do il=1,ncum
    3294     ! AC!         if (i.le.inb(il) .and. iflag(il) .le. 1) then
    3295     ! AC!          dpinv=1.0/(ph(il,i)-ph(il,i+1))
    3296     ! AC!          cpinv=1.0/cpn(il,i)
    3297     ! AC!          if (cvflag_grav) then
    3298     ! AC!           ftra(il,i,j)=ftra(il,i,j)+0.01*grav*dpinv*ment(il,k,i)
    3299     ! AC!     :        *(traent(il,k,i,j)-tra(il,i,j))
    3300     ! AC!          else
    3301     ! AC!           ftra(il,i,j)=ftra(il,i,j)+0.1*dpinv*ment(il,k,i)
    3302     ! AC!     :        *(traent(il,k,i,j)-tra(il,i,j))
    3303     ! AC!          endif
    3304     ! AC!         endif
    3305     ! AC!        enddo
    3306     ! AC!       enddo
    3307     ! AC!      enddo
     3225!AC!      do j=1,ntra
     3226!AC!       do k=1,i-1
     3227!AC!        do il=1,ncum
     3228!AC!         if (i.le.inb(il) .and. iflag(il) .le. 1) then
     3229!AC!          dpinv=1.0/(ph(il,i)-ph(il,i+1))
     3230!AC!          cpinv=1.0/cpn(il,i)
     3231!AC!          if (cvflag_grav) then
     3232!AC!           ftra(il,i,j)=ftra(il,i,j)+0.01*grav*dpinv*ment(il,k,i)
     3233!AC!     :        *(traent(il,k,i,j)-tra(il,i,j))
     3234!AC!          else
     3235!AC!           ftra(il,i,j)=ftra(il,i,j)+0.1*dpinv*ment(il,k,i)
     3236!AC!     :        *(traent(il,k,i,j)-tra(il,i,j))
     3237!AC!          endif
     3238!AC!         endif
     3239!AC!        enddo
     3240!AC!       enddo
     3241!AC!      enddo
    33083242
    33093243    DO k = i, nl + 1
     
    33143248            dpinv = 1.0/(ph(il,i)-ph(il,i+1))
    33153249            cpinv = 1.0/cpn(il, i)
    3316             IF (cvflag_grav) THEN
    3317               ft(il, i) = ft(il, i) + 0.01*grav*dpinv*ment(il, k, i)*(hent(il &
    3318                 ,k,i)-h(il,i)+t(il,i)*(cpv-cpd)*(rr(il,i)-qent(il,k, &
    3319                 i)))*cpinv
    3320 
    3321 
    3322             ELSE
    3323               ft(il, i) = ft(il, i) + 0.1*dpinv*ment(il, k, i)*(hent(il,k,i)- &
    3324                 h(il,i)+t(il,i)*(cpv-cpd)*(rr(il,i)-qent(il,k,i)))*cpinv
    3325             END IF !cvflag_grav
     3250            ft(il, i) = ft(il, i) + 0.01*grav*dpinv*ment(il, k, i) * &
     3251                  (hent(il,k,i)-h(il,i)+t(il,i)*(cpv-cpd)*(rr(il,i)-qent(il,k,i)))*cpinv
     3252
     3253
    33263254          END IF ! i
    33273255        END DO
     
    33333261          cpinv = 1.0/cpn(il, i)
    33343262
    3335           IF (cvflag_grav) THEN
    3336             fr(il, i) = fr(il, i) + 0.01*grav*dpinv*ment(il, k, i)*(qent(il,k &
    3337               ,i)-rr(il,i))
    3338             fu(il, i) = fu(il, i) + 0.01*grav*dpinv*ment(il, k, i)*(uent(il,k &
    3339               ,i)-u(il,i))
    3340             fv(il, i) = fv(il, i) + 0.01*grav*dpinv*ment(il, k, i)*(vent(il,k &
    3341               ,i)-v(il,i))
    3342           ELSE ! cvflag_grav
    3343             fr(il, i) = fr(il, i) + 0.1*dpinv*ment(il, k, i)*(qent(il,k,i)-rr &
    3344               (il,i))
    3345             fu(il, i) = fu(il, i) + 0.1*dpinv*ment(il, k, i)*(uent(il,k,i)-u( &
    3346               il,i))
    3347             fv(il, i) = fv(il, i) + 0.1*dpinv*ment(il, k, i)*(vent(il,k,i)-v( &
    3348               il,i))
    3349           END IF ! cvflag_grav
     3263          fr(il, i) = fr(il, i) + 0.01*grav*dpinv*ment(il, k, i)*(qent(il,k,i)-rr(il,i))
     3264          fu(il, i) = fu(il, i) + 0.01*grav*dpinv*ment(il, k, i)*(uent(il,k,i)-u(il,i))
     3265          fv(il, i) = fv(il, i) + 0.01*grav*dpinv*ment(il, k, i)*(vent(il,k,i)-v(il,i))
    33503266        END IF ! i and k
    33513267      END DO
    33523268    END DO
    33533269
    3354     ! AC!      do j=1,ntra
    3355     ! AC!       do k=i,nl+1
    3356     ! AC!        do il=1,ncum
    3357     ! AC!         if (i.le.inb(il) .and. k.le.inb(il)
    3358     ! AC!     $                .and. iflag(il) .le. 1) then
    3359     ! AC!          dpinv=1.0/(ph(il,i)-ph(il,i+1))
    3360     ! AC!          cpinv=1.0/cpn(il,i)
    3361     ! AC!          if (cvflag_grav) then
    3362     ! AC!           ftra(il,i,j)=ftra(il,i,j)+0.01*grav*dpinv*ment(il,k,i)
    3363     ! AC!     :         *(traent(il,k,i,j)-tra(il,i,j))
    3364     ! AC!          else
    3365     ! AC!           ftra(il,i,j)=ftra(il,i,j)+0.1*dpinv*ment(il,k,i)
    3366     ! AC!     :             *(traent(il,k,i,j)-tra(il,i,j))
    3367     ! AC!          endif
    3368     ! AC!         endif ! i and k
    3369     ! AC!        enddo
    3370     ! AC!       enddo
    3371     ! AC!      enddo
    3372 
    3373     ! sb: interface with the cloud parameterization:          ! cld
     3270!AC!      do j=1,ntra
     3271!AC!       do k=i,nl+1
     3272!AC!        do il=1,ncum
     3273!AC!         if (i.le.inb(il) .and. k.le.inb(il)
     3274!AC!     $                .and. iflag(il) .le. 1) then
     3275!AC!          dpinv=1.0/(ph(il,i)-ph(il,i+1))
     3276!AC!          cpinv=1.0/cpn(il,i)
     3277!AC!          if (cvflag_grav) then
     3278!AC!           ftra(il,i,j)=ftra(il,i,j)+0.01*grav*dpinv*ment(il,k,i)
     3279!AC!     :         *(traent(il,k,i,j)-tra(il,i,j))
     3280!AC!          else
     3281!AC!           ftra(il,i,j)=ftra(il,i,j)+0.1*dpinv*ment(il,k,i)
     3282!AC!     :             *(traent(il,k,i,j)-tra(il,i,j))
     3283!AC!          endif
     3284!AC!         endif ! i and k
     3285!AC!        enddo
     3286!AC!       enddo
     3287!AC!      enddo
     3288
     3289! sb: interface with the cloud parameterization:                               ! cld
    33743290
    33753291    DO k = i + 1, nl
    33763292      DO il = 1, ncum
    3377         IF (k<=inb(il) .AND. i<=inb(il) .AND. iflag(il)<=1) THEN ! cld
    3378           ! (saturated downdrafts resulting from mixing)            ! cld
    3379           qcond(il, i) = qcond(il, i) + elij(il, k, i) ! cld
     3293        IF (k<=inb(il) .AND. i<=inb(il) .AND. iflag(il)<=1) THEN               ! cld
     3294! (saturated downdrafts resulting from mixing)                                 ! cld
     3295          qcond(il, i) = qcond(il, i) + elij(il, k, i)                         ! cld
    33803296          nqcond(il, i) = nqcond(il, i) + 1. ! cld
    33813297        END IF ! cld
     
    33833299    END DO ! cld
    33843300
    3385     ! (particular case: no detraining level is found)         ! cld
    3386     DO il = 1, ncum ! cld
    3387       IF (i<=inb(il) .AND. nent(il,i)==0 .AND. iflag(il)<=1) THEN ! cld
    3388         qcond(il, i) = qcond(il, i) + (1.-ep(il,i))*clw(il, i) ! cld
    3389         nqcond(il, i) = nqcond(il, i) + 1. ! cld
    3390       END IF ! cld
    3391     END DO ! cld
    3392 
    3393     DO il = 1, ncum ! cld
    3394       IF (i<=inb(il) .AND. nqcond(il,i)/=0 .AND. iflag(il)<=1) THEN ! cld
    3395         qcond(il, i) = qcond(il, i)/nqcond(il, i) ! cld
    3396       END IF ! cld
    3397     END DO
    3398 
    3399     ! AC!      do j=1,ntra
    3400     ! AC!       do il=1,ncum
    3401     ! AC!        if (i.le.inb(il) .and. iflag(il) .le. 1) then
    3402     ! AC!         dpinv=1.0/(ph(il,i)-ph(il,i+1))
    3403     ! AC!         cpinv=1.0/cpn(il,i)
    3404     ! AC!
    3405     ! AC!         if (cvflag_grav) then
    3406     ! AC!          ftra(il,i,j)=ftra(il,i,j)+0.01*grav*dpinv
    3407     ! AC!     :     *(mp(il,i+1)*(trap(il,i+1,j)-tra(il,i,j))
    3408     ! AC!     :     -mp(il,i)*(trap(il,i,j)-trap(il,i-1,j)))
    3409     ! AC!         else
    3410     ! AC!          ftra(il,i,j)=ftra(il,i,j)+0.1*dpinv
    3411     ! AC!     :     *(mp(il,i+1)*(trap(il,i+1,j)-tra(il,i,j))
    3412     ! AC!     :     -mp(il,i)*(trap(il,i,j)-trap(il,i-1,j)))
    3413     ! AC!         endif
    3414     ! AC!        endif ! i
    3415     ! AC!       enddo
    3416     ! AC!      enddo
     3301! (particular case: no detraining level is found)                              ! cld
     3302    DO il = 1, ncum                                                            ! cld
     3303      IF (i<=inb(il) .AND. nent(il,i)==0 .AND. iflag(il)<=1) THEN              ! cld
     3304        qcond(il, i) = qcond(il, i) + (1.-ep(il,i))*clw(il, i)                 ! cld
     3305        nqcond(il, i) = nqcond(il, i) + 1.                                     ! cld
     3306      END IF                                                                   ! cld
     3307    END DO                                                                     ! cld
     3308
     3309    DO il = 1, ncum                                                            ! cld
     3310      IF (i<=inb(il) .AND. nqcond(il,i)/=0 .AND. iflag(il)<=1) THEN            ! cld
     3311        qcond(il, i) = qcond(il, i)/nqcond(il, i)                              ! cld
     3312      END IF                                                                   ! cld
     3313    END DO
     3314
     3315!AC!      do j=1,ntra
     3316!AC!       do il=1,ncum
     3317!AC!        if (i.le.inb(il) .and. iflag(il) .le. 1) then
     3318!AC!         dpinv=1.0/(ph(il,i)-ph(il,i+1))
     3319!AC!         cpinv=1.0/cpn(il,i)
     3320!AC!
     3321!AC!         if (cvflag_grav) then
     3322!AC!          ftra(il,i,j)=ftra(il,i,j)+0.01*grav*dpinv
     3323!AC!     :     *(mp(il,i+1)*(trap(il,i+1,j)-tra(il,i,j))
     3324!AC!     :     -mp(il,i)*(trap(il,i,j)-trap(il,i-1,j)))
     3325!AC!         else
     3326!AC!          ftra(il,i,j)=ftra(il,i,j)+0.1*dpinv
     3327!AC!     :     *(mp(il,i+1)*(trap(il,i+1,j)-tra(il,i,j))
     3328!AC!     :     -mp(il,i)*(trap(il,i,j)-trap(il,i-1,j)))
     3329!AC!         endif
     3330!AC!        endif ! i
     3331!AC!       enddo
     3332!AC!      enddo
    34173333
    34183334
    34193335500 END DO
    34203336
    3421 
    3422   ! ***   move the detrainment at level inb down to level inb-1   ***
    3423   ! ***        in such a way as to preserve the vertically        ***
    3424   ! ***          integrated enthalpy and water tendencies         ***
    3425 
    3426   ! Correction bug le 18-03-09
     3337!JYG<
     3338!Conservation de l'eau
     3339!   sumdq = 0.
     3340!   DO k = 1, nl
     3341!     sumdq = sumdq + fr(1, k)*100.*(ph(1,k)-ph(1,k+1))/grav
     3342!   END DO
     3343!   PRINT *, 'cv3_yield, apres 500, sum(dq), precip, somme ', sumdq, Vprecip(1, 1), sumdq + vprecip(1, 1)
     3344!JYG>
     3345! ***   move the detrainment at level inb down to level inb-1   ***
     3346! ***        in such a way as to preserve the vertically        ***
     3347! ***          integrated enthalpy and water tendencies         ***
     3348
     3349! Correction bug le 18-03-09
    34273350  DO il = 1, ncum
    34283351    IF (iflag(il)<=1) THEN
    3429       IF (cvflag_grav) THEN
    3430         ax = 0.01*grav*ment(il, inb(il), inb(il))*(hp(il,inb(il))-h(il,inb(il &
    3431           ))+t(il,inb(il))*(cpv-cpd)*(rr(il,inb(il))-qent(il,inb(il), &
    3432           inb(il))))/(cpn(il,inb(il))*(ph(il,inb(il))-ph(il,inb(il)+1)))
    3433         ft(il, inb(il)) = ft(il, inb(il)) - ax
    3434         ft(il, inb(il)-1) = ft(il, inb(il)-1) + ax*cpn(il, inb(il))*(ph(il, &
    3435           inb(il))-ph(il,inb(il)+1))/(cpn(il,inb(il)-1)*(ph(il, &
    3436           inb(il)-1)-ph(il,inb(il))))
    3437 
    3438         bx = 0.01*grav*ment(il, inb(il), inb(il))*(qent(il,inb(il),inb(il))- &
    3439           rr(il,inb(il)))/(ph(il,inb(il))-ph(il,inb(il)+1))
    3440         fr(il, inb(il)) = fr(il, inb(il)) - bx
    3441         fr(il, inb(il)-1) = fr(il, inb(il)-1) + bx*(ph(il,inb(il))-ph(il,inb( &
    3442           il)+1))/(ph(il,inb(il)-1)-ph(il,inb(il)))
    3443 
    3444         cx = 0.01*grav*ment(il, inb(il), inb(il))*(uent(il,inb(il),inb(il))-u &
    3445           (il,inb(il)))/(ph(il,inb(il))-ph(il,inb(il)+1))
    3446         fu(il, inb(il)) = fu(il, inb(il)) - cx
    3447         fu(il, inb(il)-1) = fu(il, inb(il)-1) + cx*(ph(il,inb(il))-ph(il,inb( &
    3448           il)+1))/(ph(il,inb(il)-1)-ph(il,inb(il)))
    3449 
    3450         dx = 0.01*grav*ment(il, inb(il), inb(il))*(vent(il,inb(il),inb(il))-v &
    3451           (il,inb(il)))/(ph(il,inb(il))-ph(il,inb(il)+1))
    3452         fv(il, inb(il)) = fv(il, inb(il)) - dx
    3453         fv(il, inb(il)-1) = fv(il, inb(il)-1) + dx*(ph(il,inb(il))-ph(il,inb( &
    3454           il)+1))/(ph(il,inb(il)-1)-ph(il,inb(il)))
    3455       ELSE
    3456         ax = 0.1*ment(il, inb(il), inb(il))*(hp(il,inb(il))-h(il,inb(il))+t( &
    3457           il,inb(il))*(cpv-cpd)*(rr(il,inb(il))-qent(il,inb(il), &
    3458           inb(il))))/(cpn(il,inb(il))*(ph(il,inb(il))-ph(il,inb(il)+1)))
    3459         ft(il, inb(il)) = ft(il, inb(il)) - ax
    3460         ft(il, inb(il)-1) = ft(il, inb(il)-1) + ax*cpn(il, inb(il))*(ph(il, &
    3461           inb(il))-ph(il,inb(il)+1))/(cpn(il,inb(il)-1)*(ph(il, &
    3462           inb(il)-1)-ph(il,inb(il))))
    3463 
    3464         bx = 0.1*ment(il, inb(il), inb(il))*(qent(il,inb(il),inb(il))-rr(il, &
    3465           inb(il)))/(ph(il,inb(il))-ph(il,inb(il)+1))
    3466         fr(il, inb(il)) = fr(il, inb(il)) - bx
    3467         fr(il, inb(il)-1) = fr(il, inb(il)-1) + bx*(ph(il,inb(il))-ph(il,inb( &
    3468           il)+1))/(ph(il,inb(il)-1)-ph(il,inb(il)))
    3469 
    3470         cx = 0.1*ment(il, inb(il), inb(il))*(uent(il,inb(il),inb(il))-u(il, &
    3471           inb(il)))/(ph(il,inb(il))-ph(il,inb(il)+1))
    3472         fu(il, inb(il)) = fu(il, inb(il)) - cx
    3473         fu(il, inb(il)-1) = fu(il, inb(il)-1) + cx*(ph(il,inb(il))-ph(il,inb( &
    3474           il)+1))/(ph(il,inb(il)-1)-ph(il,inb(il)))
    3475 
    3476         dx = 0.1*ment(il, inb(il), inb(il))*(vent(il,inb(il),inb(il))-v(il, &
    3477           inb(il)))/(ph(il,inb(il))-ph(il,inb(il)+1))
    3478         fv(il, inb(il)) = fv(il, inb(il)) - dx
    3479         fv(il, inb(il)-1) = fv(il, inb(il)-1) + dx*(ph(il,inb(il))-ph(il,inb( &
    3480           il)+1))/(ph(il,inb(il)-1)-ph(il,inb(il)))
    3481       END IF
     3352      ax = 0.01*grav*ment(il, inb(il), inb(il))* &
     3353           (hp(il,inb(il))-h(il,inb(il))+t(il,inb(il))*(cpv-cpd)*(rr(il,inb(il))-qent(il,inb(il),inb(il))))/ &
     3354                                (cpn(il,inb(il))*(ph(il,inb(il))-ph(il,inb(il)+1)))
     3355      ft(il, inb(il)) = ft(il, inb(il)) - ax
     3356      ft(il, inb(il)-1) = ft(il, inb(il)-1) + ax*cpn(il, inb(il))*(ph(il,inb(il))-ph(il,inb(il)+1))/ &
     3357                              (cpn(il,inb(il)-1)*(ph(il,inb(il)-1)-ph(il,inb(il))))
     3358
     3359      bx = 0.01*grav*ment(il, inb(il), inb(il))*(qent(il,inb(il),inb(il))-rr(il,inb(il)))/ &
     3360                                                 (ph(il,inb(il))-ph(il,inb(il)+1))
     3361      fr(il, inb(il)) = fr(il, inb(il)) - bx
     3362      fr(il, inb(il)-1) = fr(il, inb(il)-1) + bx*(ph(il,inb(il))-ph(il,inb(il)+1))/ &
     3363                                                 (ph(il,inb(il)-1)-ph(il,inb(il)))
     3364
     3365      cx = 0.01*grav*ment(il, inb(il), inb(il))*(uent(il,inb(il),inb(il))-u(il,inb(il)))/ &
     3366                                                 (ph(il,inb(il))-ph(il,inb(il)+1))
     3367      fu(il, inb(il)) = fu(il, inb(il)) - cx
     3368      fu(il, inb(il)-1) = fu(il, inb(il)-1) + cx*(ph(il,inb(il))-ph(il,inb(il)+1))/ &
     3369                                                 (ph(il,inb(il)-1)-ph(il,inb(il)))
     3370
     3371      dx = 0.01*grav*ment(il, inb(il), inb(il))*(vent(il,inb(il),inb(il))-v(il,inb(il)))/ &
     3372                                                 (ph(il,inb(il))-ph(il,inb(il)+1))
     3373      fv(il, inb(il)) = fv(il, inb(il)) - dx
     3374      fv(il, inb(il)-1) = fv(il, inb(il)-1) + dx*(ph(il,inb(il))-ph(il,inb(il)+1))/ &
     3375                                                 (ph(il,inb(il)-1)-ph(il,inb(il)))
    34823376    END IF !iflag
    34833377  END DO
    34843378
    3485   ! AC!      do j=1,ntra
    3486   ! AC!       do il=1,ncum
    3487   ! AC!        IF (iflag(il) .le. 1) THEN
    3488   ! AC! IF (cvflag_grav) then
    3489   ! AC!        ex=0.01*grav*ment(il,inb(il),inb(il))
    3490   ! AC!     :      *(traent(il,inb(il),inb(il),j)-tra(il,inb(il),j))
    3491   ! AC!     :      /(ph(i l,inb(il))-ph(il,inb(il)+1))
    3492   ! AC!        ftra(il,inb(il),j)=ftra(il,inb(il),j)-ex
    3493   ! AC!        ftra(il,inb(il)-1,j)=ftra(il,inb(il)-1,j)
    3494   ! AC!     :       +ex*(ph(il,inb(il))-ph(il,inb(il)+1))
    3495   ! AC!     :          /(ph(il,inb(il)-1)-ph(il,inb(il)))
    3496   ! AC! else
    3497   ! AC!        ex=0.1*ment(il,inb(il),inb(il))
    3498   ! AC!     :      *(traent(il,inb(il),inb(il),j)-tra(il,inb(il),j))
    3499   ! AC!     :      /(ph(i l,inb(il))-ph(il,inb(il)+1))
    3500   ! AC!        ftra(il,inb(il),j)=ftra(il,inb(il),j)-ex
    3501   ! AC!        ftra(il,inb(il)-1,j)=ftra(il,inb(il)-1,j)
    3502   ! AC!     :       +ex*(ph(il,inb(il))-ph(il,inb(il)+1))
    3503   ! AC!     :          /(ph(il,inb(il)-1)-ph(il,inb(il)))
    3504   ! AC!        ENDIF   !cvflag grav
    3505   ! AC!        ENDIF    !iflag
    3506   ! AC!       enddo
    3507   ! AC!      enddo
    3508 
    3509 
    3510   ! ***    homogenize tendencies below cloud base    ***
     3379!JYG<
     3380!Conservation de l'eau
     3381!   sumdq = 0.
     3382!   DO k = 1, nl
     3383!     sumdq = sumdq + fr(1, k)*100.*(ph(1,k)-ph(1,k+1))/grav
     3384!   END DO
     3385!   PRINT *, 'cv3_yield, apres 503, sum(dq), precip, somme ', sumdq, Vprecip(1, 1), sumdq + vprecip(1, 1)
     3386!JYG>
     3387
     3388!AC!      do j=1,ntra
     3389!AC!       do il=1,ncum
     3390!AC!        IF (iflag(il) .le. 1) THEN
     3391!AC!    IF (cvflag_grav) then
     3392!AC!        ex=0.01*grav*ment(il,inb(il),inb(il))
     3393!AC!     :      *(traent(il,inb(il),inb(il),j)-tra(il,inb(il),j))
     3394!AC!     :      /(ph(i l,inb(il))-ph(il,inb(il)+1))
     3395!AC!        ftra(il,inb(il),j)=ftra(il,inb(il),j)-ex
     3396!AC!        ftra(il,inb(il)-1,j)=ftra(il,inb(il)-1,j)
     3397!AC!     :       +ex*(ph(il,inb(il))-ph(il,inb(il)+1))
     3398!AC!     :          /(ph(il,inb(il)-1)-ph(il,inb(il)))
     3399!AC!    else
     3400!AC!        ex=0.1*ment(il,inb(il),inb(il))
     3401!AC!     :      *(traent(il,inb(il),inb(il),j)-tra(il,inb(il),j))
     3402!AC!     :      /(ph(i l,inb(il))-ph(il,inb(il)+1))
     3403!AC!        ftra(il,inb(il),j)=ftra(il,inb(il),j)-ex
     3404!AC!        ftra(il,inb(il)-1,j)=ftra(il,inb(il)-1,j)
     3405!AC!     :       +ex*(ph(il,inb(il))-ph(il,inb(il)+1))
     3406!AC!     :          /(ph(il,inb(il)-1)-ph(il,inb(il)))
     3407!AC!        ENDIF   !cvflag grav
     3408!AC!        ENDIF    !iflag
     3409!AC!       enddo
     3410!AC!      enddo
     3411
     3412
     3413! ***    homogenize tendencies below cloud base    ***
    35113414
    35123415
     
    35223425  END DO
    35233426
    3524   ! do i=1,nl
    3525   ! do il=1,ncum
    3526   ! th_wake(il,i)=t_wake(il,i)*(1000.0/p(il,i))**rdcp
    3527   ! enddo
    3528   ! enddo
     3427!do i=1,nl
     3428!do il=1,ncum
     3429!th_wake(il,i)=t_wake(il,i)*(1000.0/p(il,i))**rdcp
     3430!enddo
     3431!enddo
    35293432
    35303433  DO i = 1, nl
    35313434    DO il = 1, ncum
    35323435      IF (i<=(icb(il)-1) .AND. iflag(il)<=1) THEN
    3533         ! jyg  Saturated part : use T profile
     3436!jyg  Saturated part : use T profile
    35343437        asum(il) = asum(il) + (ft(il,i)-ftd(il,i))*(ph(il,i)-ph(il,i+1))
    3535         bsum(il) = bsum(il) + (fr(il,i)-fqd(il,i))*(lv(il,i)+(cl-cpd)*(t(il, &
    3536           i)-t(il,1)))*(ph(il,i)-ph(il,i+1))
    3537         csum(il) = csum(il) + (lv(il,i)+(cl-cpd)*(t(il,i)-t(il, &
    3538           1)))*(ph(il,i)-ph(il,i+1))
     3438!jyg<20140311
     3439!Correction pour conserver l eau
     3440        IF (ok_conserv_q) THEN
     3441          bsum(il) = bsum(il) + (fr(il,i)-fqd(il,i))*(ph(il,i)-ph(il,i+1))
     3442          csum(il) = csum(il) + (ph(il,i)-ph(il,i+1))
     3443
     3444        ELSE
     3445          bsum(il)=bsum(il)+(fr(il,i)-fqd(il,i))*(lv(il,i)+(cl-cpd)*(t(il,i)-t(il,1)))* &
     3446                            (ph(il,i)-ph(il,i+1))
     3447          csum(il)=csum(il)+(lv(il,i)+(cl-cpd)*(t(il,i)-t(il,1)))* &
     3448                            (ph(il,i)-ph(il,i+1))
     3449        ENDIF ! (ok_conserv_q)
     3450!jyg>
    35393451        dsum(il) = dsum(il) + t(il, i)*(ph(il,i)-ph(il,i+1))/th(il, i)
    3540         ! jyg  Unsaturated part : use T_wake profile
     3452!jyg  Unsaturated part : use T_wake profile
    35413453        esum(il) = esum(il) + ftd(il, i)*(ph(il,i)-ph(il,i+1))
    3542         fsum(il) = fsum(il) + fqd(il, i)*(lv(il,i)+(cl-cpd)*(t_wake(il, &
    3543           i)-t_wake(il,1)))*(ph(il,i)-ph(il,i+1))
    3544         gsum(il) = gsum(il) + (lv(il,i)+(cl-cpd)*(t_wake(il,i)-t_wake(il, &
    3545           1)))*(ph(il,i)-ph(il,i+1))
    3546         hsum(il) = hsum(il) + t_wake(il, i)*(ph(il,i)-ph(il,i+1))/th_wake(il, &
    3547           i)
     3454!jyg<20140311
     3455!Correction pour conserver l eau
     3456        IF (ok_conserv_q) THEN
     3457          fsum(il) = fsum(il) + fqd(il, i)*(ph(il,i)-ph(il,i+1))
     3458          gsum(il) = gsum(il) + (ph(il,i)-ph(il,i+1))
     3459        ELSE
     3460          fsum(il)=fsum(il)+fqd(il,i)*(lv(il,i)+(cl-cpd)*(t_wake(il,i)-t_wake(il,1)))* &
     3461                            (ph(il,i)-ph(il,i+1))
     3462          gsum(il)=gsum(il)+(lv(il,i)+(cl-cpd)*(t_wake(il,i)-t_wake(il,1)))* &
     3463                            (ph(il,i)-ph(il,i+1))
     3464        ENDIF ! (ok_conserv_q)
     3465!jyg>
     3466        hsum(il) = hsum(il) + t_wake(il, i)*(ph(il,i)-ph(il,i+1))/th_wake(il, i)
    35483467      END IF
    35493468    END DO
    35503469  END DO
    35513470
    3552   ! !!!      do 700 i=1,icb(il)-1
     3471!!!!      do 700 i=1,icb(il)-1
    35533472  DO i = 1, nl
    35543473    DO il = 1, ncum
     
    35623481  END DO
    35633482
    3564 
    3565   ! ***   Check that moisture stays positive. If not, scale tendencies
    3566   ! in order to ensure moisture positivity
     3483!jyg<
     3484!Conservation de l'eau
     3485!!  sumdq = 0.
     3486!!  DO k = 1, nl
     3487!!    sumdq = sumdq + fr(1, k)*100.*(ph(1,k)-ph(1,k+1))/grav
     3488!!  END DO
     3489!!  PRINT *, 'cv3_yield, apres hom, sum(dq), precip, somme ', sumdq, Vprecip(1, 1), sumdq + vprecip(1, 1)
     3490!jyg>
     3491
     3492
     3493! ***   Check that moisture stays positive. If not, scale tendencies
     3494! in order to ensure moisture positivity
    35673495  DO il = 1, ncum
    35683496    alpha_qpos(il) = 1.
    35693497    IF (iflag(il)<=1) THEN
    35703498      IF (fr(il,1)<=0.) THEN
    3571         alpha_qpos(il) = max(alpha_qpos(il), (-delt*fr(il, &
    3572           1))/(s_wake(il)*rr_wake(il,1)+(1.-s_wake(il))*rr(il,1)))
     3499        alpha_qpos(il) = max(alpha_qpos(il), (-delt*fr(il,1))/(s_wake(il)*rr_wake(il,1)+(1.-s_wake(il))*rr(il,1)))
    35733500      END IF
    35743501    END IF
     
    35783505      IF (iflag(il)<=1) THEN
    35793506        IF (fr(il,i)<=0.) THEN
    3580           alpha_qpos1(il) = max(1., (-delt*fr(il,i))/(s_wake(il)*rr_wake(il, &
    3581             i)+(1.-s_wake(il))*rr(il,i)))
    3582           IF (alpha_qpos1(il)>=alpha_qpos(il)) alpha_qpos(il) &
    3583             = alpha_qpos1(il)
     3507          alpha_qpos1(il) = max(1., (-delt*fr(il,i))/(s_wake(il)*rr_wake(il,i)+(1.-s_wake(il))*rr(il,i)))
     3508          IF (alpha_qpos1(il)>=alpha_qpos(il)) alpha_qpos(il) = alpha_qpos1(il)
    35843509        END IF
    35853510      END IF
     
    36083533        m(il, i) = m(il, i)/alpha_qpos(il)
    36093534        mp(il, i) = mp(il, i)/alpha_qpos(il)
    3610         vprecip(il, i) = vprecip(il, i)/alpha_qpos(il)
     3535        Vprecip(il, i) = vprecip(il, i)/alpha_qpos(il)
    36113536      END IF
    36123537    END DO
     
    36223547  END DO
    36233548
    3624   ! AC!      DO j = 1,ntra
    3625   ! AC!      DO i = 1,nl
    3626   ! AC!       DO il = 1,ncum
    3627   ! AC!        IF (iflag(il) .le. 1) THEN
    3628   ! AC!         ftra(il,i,j) = ftra(il,i,j)/alpha_qpos(il)
    3629   ! AC!        ENDIF
    3630   ! AC!       ENDDO
    3631   ! AC!      ENDDO
    3632   ! AC!      ENDDO
    3633 
    3634 
    3635   ! ***           reset counter and return           ***
     3549!AC!      DO j = 1,ntra
     3550!AC!      DO i = 1,nl
     3551!AC!       DO il = 1,ncum
     3552!AC!        IF (iflag(il) .le. 1) THEN
     3553!AC!         ftra(il,i,j) = ftra(il,i,j)/alpha_qpos(il)
     3554!AC!        ENDIF
     3555!AC!       ENDDO
     3556!AC!      ENDDO
     3557!AC!      ENDDO
     3558
     3559
     3560! ***           reset counter and return           ***
    36363561
    36373562  DO il = 1, ncum
     
    37023627          END IF
    37033628        END IF
    3704         ! c        print *,'cbmf',il,i,k,cbmf(il),wghti(il,k)
     3629! c        print *,'cbmf',il,i,k,cbmf(il),wghti(il,k)
    37053630      END DO
    37063631    END DO
     
    37103635    DO k = i, nl
    37113636      DO il = 1, ncum
    3712         ! test         if (i.ge.icb(il).and.i.le.inb(il).and.k.le.inb(il))
    3713         ! then
     3637! test         if (i.ge.icb(il).and.i.le.inb(il).and.k.le.inb(il)) then
    37143638        IF (i<=inb(il) .AND. k<=inb(il)) THEN
    37153639          upwd(il, i) = upwd(il, i) + up1(il, k, i)
    37163640          dnwd(il, i) = dnwd(il, i) + dn1(il, k, i)
    37173641        END IF
    3718         ! c         print
    3719         ! *,'upwd',il,i,k,inb(il),upwd(il,i),m(il,k),up1(il,k,i)
     3642! c         print *,'upwd',il,i,k,inb(il),upwd(il,i),m(il,k),up1(il,k,i)
    37203643      END DO
    37213644    END DO
     
    37233646
    37243647
    3725   ! !!!      DO il=1,ncum
    3726   ! !!!      do i=icb(il),inb(il)
    3727   ! !!!
    3728   ! !!!      upwd(il,i)=0.0
    3729   ! !!!      dnwd(il,i)=0.0
    3730   ! !!!      do k=i,inb(il)
    3731   ! !!!      up1=0.0
    3732   ! !!!      dn1=0.0
    3733   ! !!!      do n=1,i-1
    3734   ! !!!      up1=up1+ment(il,n,k)
    3735   ! !!!      dn1=dn1-ment(il,k,n)
    3736   ! !!!      enddo
    3737   ! !!!      upwd(il,i)=upwd(il,i)+m(il,k)+up1
    3738   ! !!!      dnwd(il,i)=dnwd(il,i)+dn1
    3739   ! !!!      enddo
    3740   ! !!!      enddo
    3741   ! !!!
    3742   ! !!!      ENDDO
    3743 
    3744   ! ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
    3745   ! determination de la variation de flux ascendant entre
    3746   ! deux niveau non dilue mip
    3747   ! ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
     3648!!!!      DO il=1,ncum
     3649!!!!      do i=icb(il),inb(il)
     3650!!!!
     3651!!!!      upwd(il,i)=0.0
     3652!!!!      dnwd(il,i)=0.0
     3653!!!!      do k=i,inb(il)
     3654!!!!      up1=0.0
     3655!!!!      dn1=0.0
     3656!!!!      do n=1,i-1
     3657!!!!      up1=up1+ment(il,n,k)
     3658!!!!      dn1=dn1-ment(il,k,n)
     3659!!!!      enddo
     3660!!!!      upwd(il,i)=upwd(il,i)+m(il,k)+up1
     3661!!!!      dnwd(il,i)=dnwd(il,i)+dn1
     3662!!!!      enddo
     3663!!!!      enddo
     3664!!!!
     3665!!!!      ENDDO
     3666
     3667! ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
     3668! determination de la variation de flux ascendant entre
     3669! deux niveau non dilue mip
     3670! ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
    37483671
    37493672  DO i = 1, nl
     
    37873710  END DO
    37883711
    3789   ! cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
    3790   ! icb represente de niveau ou se trouve la
    3791   ! base du nuage , et inb le top du nuage
    3792   ! ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
     3712! cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
     3713! icb represente de niveau ou se trouve la
     3714! base du nuage , et inb le top du nuage
     3715! ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
    37933716
    37943717  DO i = 1, nd
     
    38003723  DO i = 1, nd
    38013724    DO il = 1, ncum
    3802       rdcp = (rrd*(1.-rr(il,i))-rr(il,i)*rrv)/(cpd*(1.-rr(il, &
    3803         i))+rr(il,i)*cpv)
     3725      rdcp = (rrd*(1.-rr(il,i))-rr(il,i)*rrv)/(cpd*(1.-rr(il,i))+rr(il,i)*cpv)
    38043726      tls(il, i) = t(il, i)*(1000.0/p(il,i))**rdcp
    38053727      tps(il, i) = tp(il, i)
     
    38083730
    38093731
    3810   ! *** diagnose the in-cloud mixing ratio   ***            ! cld
    3811   ! ***           of condensed water         ***            ! cld
    3812   ! ! cld
    3813 
    3814   DO i = 1, nd ! cld
    3815     DO il = 1, ncum ! cld
    3816       mac(il, i) = 0.0 ! cld
    3817       wa(il, i) = 0.0 ! cld
    3818       siga(il, i) = 0.0 ! cld
    3819       sax(il, i) = 0.0 ! cld
    3820     END DO ! cld
    3821   END DO ! cld
    3822 
    3823   DO i = minorig, nl ! cld
    3824     DO k = i + 1, nl + 1 ! cld
    3825       DO il = 1, ncum ! cld
     3732! *** diagnose the in-cloud mixing ratio   ***                       ! cld
     3733! ***           of condensed water         ***                       ! cld
     3734!! cld                                                               
     3735                                                                     
     3736  DO i = 1, nd                                                       ! cld
     3737    DO il = 1, ncum                                                  ! cld
     3738      mac(il, i) = 0.0                                               ! cld
     3739      wa(il, i) = 0.0                                                ! cld
     3740      siga(il, i) = 0.0                                              ! cld
     3741      sax(il, i) = 0.0                                               ! cld
     3742    END DO                                                           ! cld
     3743  END DO                                                             ! cld
     3744                                                                     
     3745  DO i = minorig, nl                                                 ! cld
     3746    DO k = i + 1, nl + 1                                             ! cld
     3747      DO il = 1, ncum                                                ! cld
    38263748        IF (i<=inb(il) .AND. k<=(inb(il)+1) .AND. iflag(il)<=1) THEN ! cld
    3827           mac(il, i) = mac(il, i) + m(il, k) ! cld
    3828         END IF ! cld
    3829       END DO ! cld
    3830     END DO ! cld
    3831   END DO ! cld
    3832 
    3833   DO i = 1, nl ! cld
    3834     DO j = 1, i ! cld
    3835       DO il = 1, ncum ! cld
    3836         IF (i>=icb(il) .AND. i<=(inb(il)-1) & ! cld
    3837             .AND. j>=icb(il) .AND. iflag(il)<=1) THEN ! cld
    3838           sax(il, i) = sax(il, i) + rrd*(tvp(il,j)-tv(il,j)) & ! cld
    3839             *(ph(il,j)-ph(il,j+1))/p(il, j) ! cld
    3840         END IF ! cld
    3841       END DO ! cld
    3842     END DO ! cld
    3843   END DO ! cld
    3844 
    3845   DO i = 1, nl ! cld
    3846     DO il = 1, ncum ! cld
    3847       IF (i>=icb(il) .AND. i<=(inb(il)-1) & ! cld
    3848           .AND. sax(il,i)>0.0 .AND. iflag(il)<=1) THEN ! cld
    3849         wa(il, i) = sqrt(2.*sax(il,i)) ! cld
    3850       END IF ! cld
    3851     END DO ! cld
    3852   END DO ! cld
    3853 
    3854   DO i = 1, nl ! cld
    3855     DO il = 1, ncum ! cld
    3856       IF (wa(il,i)>0.0 .AND. iflag(il)<=1) & ! cld
    3857         siga(il, i) = mac(il, i)/wa(il, i) & ! cld
    3858         *rrd*tvp(il, i)/p(il, i)/100./delta ! cld
    3859       siga(il, i) = min(siga(il,i), 1.0) ! cld
    3860       ! IM cf. FH
    3861       IF (iflag_clw==0) THEN
    3862         qcondc(il, i) = siga(il, i)*clw(il, i)*(1.-ep(il,i)) & ! cld
    3863           +(1.-siga(il,i))*qcond(il, i) ! cld
    3864       ELSE IF (iflag_clw==1) THEN
    3865         qcondc(il, i) = qcond(il, i) ! cld
    3866       END IF
    3867 
    3868     END DO ! cld
    3869   END DO
    3870   ! print*,'cv3_yield fin'
    3871     ! cld
     3749          mac(il, i) = mac(il, i) + m(il, k)                         ! cld
     3750        END IF                                                       ! cld
     3751      END DO                                                         ! cld
     3752    END DO                                                           ! cld
     3753  END DO                                                             ! cld
     3754
     3755  DO i = 1, nl                                                       ! cld
     3756    DO j = 1, i                                                      ! cld
     3757      DO il = 1, ncum                                                ! cld
     3758        IF (i>=icb(il) .AND. i<=(inb(il)-1) &                        ! cld
     3759            .AND. j>=icb(il) .AND. iflag(il)<=1) THEN                ! cld
     3760          sax(il, i) = sax(il, i) + rrd*(tvp(il,j)-tv(il,j)) &       ! cld
     3761            *(ph(il,j)-ph(il,j+1))/p(il, j)                          ! cld
     3762        END IF                                                       ! cld
     3763      END DO                                                         ! cld
     3764    END DO                                                           ! cld
     3765  END DO                                                             ! cld
     3766
     3767  DO i = 1, nl                                                       ! cld
     3768    DO il = 1, ncum                                                  ! cld
     3769      IF (i>=icb(il) .AND. i<=(inb(il)-1) &                          ! cld
     3770          .AND. sax(il,i)>0.0 .AND. iflag(il)<=1) THEN               ! cld
     3771        wa(il, i) = sqrt(2.*sax(il,i))                               ! cld
     3772      END IF                                                         ! cld
     3773    END DO                                                           ! cld
     3774  END DO                                                             ! cld
     3775
     3776  DO i = 1, nl                                                       ! cld
     3777    DO il = 1, ncum                                                  ! cld
     3778      IF (wa(il,i)>0.0 .AND. iflag(il)<=1) &                         ! cld
     3779        siga(il, i) = mac(il, i)/wa(il, i) &                         ! cld
     3780        *rrd*tvp(il, i)/p(il, i)/100./delta                          ! cld
     3781      siga(il, i) = min(siga(il,i), 1.0)                             ! cld
     3782! IM cf. FH                                                         
     3783      IF (iflag_clw==0) THEN                                         ! cld
     3784        qcondc(il, i) = siga(il, i)*clw(il, i)*(1.-ep(il,i)) &       ! cld
     3785          +(1.-siga(il,i))*qcond(il, i)                              ! cld
     3786      ELSE IF (iflag_clw==1) THEN                                    ! cld
     3787        qcondc(il, i) = qcond(il, i)                                 ! cld
     3788      END IF                                                         ! cld
     3789
     3790    END DO                                                           ! cld
     3791  END DO
     3792! print*,'cv3_yield fin'
     3793
    38723794  RETURN
    38733795END SUBROUTINE cv3_yield
    38743796
    3875 ! AC! et !RomP >>>
    3876 SUBROUTINE cv3_tracer(nloc, len, ncum, nd, na, ment, sigij, da, phi, phi2, &
    3877     d1a, dam, ep, vprecip, elij, clw, epmlmmm, eplamm, icb, inb)
     3797!AC! et !RomP >>>
     3798SUBROUTINE cv3_tracer(nloc, len, ncum, nd, na, &
     3799                      ment, sigij, da, phi, phi2, d1a, dam, &
     3800                      ep, Vprecip, elij, clw, epmlmMm, eplaMm, &
     3801                      icb, inb)
    38783802  IMPLICIT NONE
    38793803
    38803804  include "cv3param.h"
    38813805
    3882   ! inputs:
     3806!inputs:
    38833807  INTEGER ncum, nd, na, nloc, len
    38843808  REAL ment(nloc, na, na), sigij(nloc, na, na)
     
    38863810  REAL ep(nloc, na)
    38873811  INTEGER icb(nloc), inb(nloc)
    3888   REAL vprecip(nloc, nd+1)
    3889   ! ouputs:
     3812  REAL Vprecip(nloc, nd+1)
     3813!ouputs:
    38903814  REAL da(nloc, na), phi(nloc, na, na)
    38913815  REAL phi2(nloc, na, na)
    38923816  REAL d1a(nloc, na), dam(nloc, na)
    3893   REAL epmlmmm(nloc, na, na), eplamm(nloc, na)
    3894   ! variables pour tracer dans precip de l'AA et des mel
    3895   ! local variables:
     3817  REAL epmlmMm(nloc, na, na), eplaMm(nloc, na)
     3818! variables pour tracer dans precip de l'AA et des mel
     3819!local variables:
    38963820  INTEGER i, j, k
    38973821  REAL epm(nloc, na, na)
    38983822
    3899   ! variables d'Emanuel : du second indice au troisieme
    3900   ! --->    tab(i,k,j) -> de l origine k a l arrivee j
    3901   ! ment, sigij, elij
    3902   ! variables personnelles : du troisieme au second indice
    3903   ! --->    tab(i,j,k) -> de k a j
    3904   ! phi, phi2
    3905 
    3906   ! initialisations
     3823! variables d'Emanuel : du second indice au troisieme
     3824! --->    tab(i,k,j) -> de l origine k a l arrivee j
     3825! ment, sigij, elij
     3826! variables personnelles : du troisieme au second indice
     3827! --->    tab(i,j,k) -> de k a j
     3828! phi, phi2
     3829
     3830! initialisations
    39073831
    39083832  da(:, :) = 0.
     
    39103834  dam(:, :) = 0.
    39113835  epm(:, :, :) = 0.
    3912   eplamm(:, :) = 0.
    3913   epmlmmm(:, :, :) = 0.
     3836  eplaMm(:, :) = 0.
     3837  epmlmMm(:, :, :) = 0.
    39143838  phi(:, :, :) = 0.
    39153839  phi2(:, :, :) = 0.
    39163840
    3917   ! fraction deau condensee dans les melanges convertie en precip : epm
    3918   ! et eau condensée précipitée dans masse d'air saturé : l_m*dM_m/dzdz.dzdz
     3841! fraction deau condensee dans les melanges convertie en precip : epm
     3842! et eau condensée précipitée dans masse d'air saturé : l_m*dM_m/dzdz.dzdz
    39193843  DO j = 1, na
    39203844    DO k = 1, na
    39213845      DO i = 1, ncum
    3922         IF (k>=icb(i) .AND. k<=inb(i) .AND. & ! !jyg     &
    3923                                               ! j.ge.k.and.j.le.inb(i)) then
    3924           ! !jyg             epm(i,j,k)=1.-(1.-ep(i,j))*clw(i,j)/elij(i,k,j)
     3846        IF (k>=icb(i) .AND. k<=inb(i) .AND. &
     3847!!jyg              j.ge.k.and.j.le.inb(i)) then
     3848!!jyg             epm(i,j,k)=1.-(1.-ep(i,j))*clw(i,j)/elij(i,k,j)
    39253849            j>k .AND. j<=inb(i)) THEN
    39263850          epm(i, j, k) = 1. - (1.-ep(i,j))*clw(i, j)/max(elij(i,k,j), 1.E-16)
    3927           ! !
     3851!!
    39283852          epm(i, j, k) = max(epm(i,j,k), 0.0)
    39293853        END IF
     
    39373861      DO i = 1, ncum
    39383862        IF (k>=icb(i) .AND. k<=inb(i)) THEN
    3939           eplamm(i, j) = eplamm(i, j) + ep(i, j)*clw(i, j)*ment(i, j, k)*(1.- &
    3940             sigij(i,j,k))
     3863          eplaMm(i, j) = eplamm(i, j) + &
     3864                         ep(i, j)*clw(i, j)*ment(i, j, k)*(1.-sigij(i,j,k))
    39413865        END IF
    39423866      END DO
     
    39483872      DO i = 1, ncum
    39493873        IF (k>=icb(i) .AND. k<=inb(i) .AND. j<=inb(i)) THEN
    3950           epmlmmm(i, j, k) = epm(i, j, k)*elij(i, k, j)*ment(i, k, j)
     3874          epmlmMm(i, j, k) = epm(i, j, k)*elij(i, k, j)*ment(i, k, j)
    39513875        END IF
    39523876      END DO
     
    39543878  END DO
    39553879
    3956   ! matrices pour calculer la tendance des concentrations dans cvltr.F90
     3880! matrices pour calculer la tendance des concentrations dans cvltr.F90
    39573881  DO j = 1, na
    39583882    DO k = 1, na
     
    39623886        d1a(i, j) = d1a(i, j) + ment(i, k, j)*ep(i, k)*(1.-sigij(i,k,j))
    39633887        IF (k<=j) THEN
    3964           dam(i, j) = dam(i, j) + ment(i, k, j)*epm(i, k, j)*(1.-ep(i,k))*(1. &
    3965             -sigij(i,k,j))
    3966 
     3888          dam(i, j) = dam(i, j) + ment(i, k, j)*epm(i, k, j)*(1.-ep(i,k))*(1.-sigij(i,k,j))
    39673889          phi2(i, j, k) = phi(i, j, k)*epm(i, j, k)
    39683890        END IF
     
    39733895  RETURN
    39743896END SUBROUTINE cv3_tracer
    3975 ! AC! et !RomP <<<
    3976 
    3977 SUBROUTINE cv3_uncompress(nloc, len, ncum, nd, ntra, idcum, iflag, precip, &
    3978     sig, w0, ft, fq, fu, fv, ftra, ma, upwd, dnwd, dnwd0, qcondc, wd, cape, &
    3979     iflag1, precip1, sig1, w01, ft1, fq1, fu1, fv1, ftra1, ma1, upwd1, dnwd1, &
    3980     dnwd01, qcondc1, wd1, cape1)
     3897!AC! et !RomP <<<
     3898
     3899SUBROUTINE cv3_uncompress(nloc, len, ncum, nd, ntra, idcum, &
     3900                          iflag, &
     3901                          precip, sig, w0, &
     3902                          ft, fq, fu, fv, ftra, &
     3903                          Ma, upwd, dnwd, dnwd0, qcondc, wd, cape, &
     3904                          iflag1, &
     3905                          precip1, sig1, w01, &
     3906                          ft1, fq1, fu1, fv1, ftra1, &
     3907                          Ma1, upwd1, dnwd1, dnwd01, qcondc1, wd1, cape1)
    39813908  IMPLICIT NONE
    39823909
    39833910  include "cv3param.h"
    39843911
    3985   ! inputs:
     3912!inputs:
    39863913  INTEGER len, ncum, nd, ntra, nloc
    39873914  INTEGER idcum(nloc)
     
    39963923  REAL wd(nloc), cape(nloc)
    39973924
    3998   ! outputs:
     3925!outputs:
    39993926  INTEGER iflag1(len)
    40003927  REAL precip1(len)
     
    40073934  REAL wd1(nloc), cape1(nloc)
    40083935
    4009   ! local variables:
     3936!local variables:
    40103937  INTEGER i, k, j
    40113938
     
    40383965
    40393966
    4040   ! AC!        do 2100 j=1,ntra
    4041   ! AC!c oct3         do 2110 k=1,nl
    4042   ! AC!         do 2110 k=1,nd ! oct3
    4043   ! AC!          do 2120 i=1,ncum
    4044   ! AC!            ftra1(idcum(i),k,j)=ftra(i,k,j)
    4045   ! AC! 2120     continue
    4046   ! AC! 2110    continue
    4047   ! AC! 2100   continue
     3967!AC!        do 2100 j=1,ntra
     3968!AC!c oct3         do 2110 k=1,nl
     3969!AC!         do 2110 k=1,nd ! oct3
     3970!AC!          do 2120 i=1,ncum
     3971!AC!            ftra1(idcum(i),k,j)=ftra(i,k,j)
     3972!AC! 2120     continue
     3973!AC! 2110    continue
     3974!AC! 2100   continue
     3975!
    40483976  RETURN
    40493977END SUBROUTINE cv3_uncompress
  • LMDZ5/trunk/libf/phylmd/cv3p_mixing.F90

    r1992 r2007  
    1 SUBROUTINE cv3p_mixing(nloc, ncum, nd, na, ntra, icb, nk, inb, ph, t, rr, rs, &
    2     u, v, tra, h, lv, qnk, unk, vnk, hp, tv, tvp, ep, clw, sig, ment, qent, &
    3     hent, uent, vent, nent, sigij, elij, supmax, ments, qents, traent)
    4   ! **************************************************************
    5   ! *
    6   ! CV3P_MIXING : compute mixed draught properties and,         *
    7   ! within a scaling factor, mixed draught        *
    8   ! mass fluxes.                                  *
    9   ! written by  : VTJ Philips,JY Grandpeix, 21/05/2003, 09.14.15*
    10   ! modified by :                                               *
    11   ! **************************************************************
     1SUBROUTINE cv3p_mixing(nloc, ncum, nd, na, ntra, icb, nk, inb, &
     2                       ph, t, rr, rs, u, v, tra, h, lv, qnk, &
     3                       unk, vnk, hp, tv, tvp, ep, clw, sig, &
     4                       Ment, Qent, hent, uent, vent, nent, &
     5                       Sigij, elij, supmax, Ments, Qents, traent)
     6! **************************************************************
     7! *
     8! CV3P_MIXING : compute mixed draught properties and,         *
     9! within a scaling factor, mixed draught        *
     10! mass fluxes.                                  *
     11! written by  : VTJ Philips,JY Grandpeix, 21/05/2003, 09.14.15*
     12! modified by :                                               *
     13! **************************************************************
    1214
    1315  IMPLICIT NONE
     
    1719  include "YOMCST2.h"
    1820
    19   ! inputs:
    20   INTEGER ncum, nd, na, ntra, nloc
    21   INTEGER icb(nloc), inb(nloc), nk(nloc)
    22   REAL sig(nloc, nd)
    23   REAL qnk(nloc), unk(nloc), vnk(nloc)
    24   REAL ph(nloc, nd+1)
    25   REAL t(nloc, nd), rr(nloc, nd), rs(nloc, nd)
    26   REAL u(nloc, nd), v(nloc, nd)
    27   REAL tra(nloc, nd, ntra) ! input of convect3
    28   REAL lv(nloc, na)
    29   REAL h(nloc, na) !liquid water static energy of environment
    30   REAL hp(nloc, na) !liquid water static energy of air shed from adiab. asc.
    31   REAL tv(nloc, na), tvp(nloc, na), ep(nloc, na), clw(nloc, na)
    32 
    33   ! outputs:
    34   REAL ment(nloc, na, na), qent(nloc, na, na)
    35   REAL uent(nloc, na, na), vent(nloc, na, na)
    36   REAL sigij(nloc, na, na), elij(nloc, na, na)
    37   REAL supmax(nloc, na) ! Highest mixing fraction of mixed updraughts
    38     ! with the sign of (h-hp)
    39   REAL traent(nloc, nd, nd, ntra)
    40   REAL ments(nloc, nd, nd), qents(nloc, nd, nd)
    41   REAL hent(nloc, nd, nd)
    42   INTEGER nent(nloc, nd)
    43 
    44   ! local variables:
     21!inputs:
     22  INTEGER, INTENT (IN)                               :: ncum, nd, na
     23  INTEGER, INTENT (IN)                               :: ntra, nloc
     24  INTEGER, DIMENSION (nloc), INTENT (IN)             :: icb, inb, nk
     25  REAL, DIMENSION (nloc, nd), INTENT (IN)            :: sig
     26  REAL, DIMENSION (nloc), INTENT (IN)                :: qnk, unk, vnk
     27  REAL, DIMENSION (nloc, nd+1), INTENT (IN)          :: ph
     28  REAL, DIMENSION (nloc, nd), INTENT (IN)            :: t, rr, rs
     29  REAL, DIMENSION (nloc, nd), INTENT (IN)            :: u, v
     30  REAL, DIMENSION (nloc, nd, ntra), INTENT (IN)      :: tra ! input of convect3
     31  REAL, DIMENSION (nloc, na), INTENT (IN)            :: lv
     32  REAL, DIMENSION (nloc, na), INTENT (IN)            :: h  !liquid water static energy of environMent
     33  REAL, DIMENSION (nloc, na), INTENT (IN)            :: hp !liquid water static energy of air shed from adiab. asc.
     34  REAL, DIMENSION (nloc, na), INTENT (IN)            :: tv, tvp
     35  REAL, DIMENSION (nloc, na), INTENT (IN)            :: ep, clw
     36
     37!outputs:
     38  REAL, DIMENSION (nloc, na, na), INTENT (OUT)       :: Ment, Qent
     39  REAL, DIMENSION (nloc, na, na), INTENT (OUT)       :: uent, vent
     40  REAL, DIMENSION (nloc, na, na), INTENT (OUT)       :: Sigij, elij
     41  REAL, DIMENSION (nloc, na), INTENT (OUT)           :: supmax(nloc, na) ! Highest mixing fraction of mixed
     42                                                                         ! updraughts with the sign of (h-hp)
     43  REAL, DIMENSION (nloc, nd, nd, ntra), INTENT (OUT) :: traent
     44  REAL, DIMENSION (nloc, nd, nd), INTENT (OUT)       :: Ments, Qents
     45  REAL, DIMENSION (nloc, nd, nd), INTENT (OUT)       :: hent
     46  INTEGER, DIMENSION (nloc, nd), INTENT (OUT)        :: nent
     47
     48!local variables:
    4549  INTEGER i, j, k, il, im, jm
    4650  INTEGER num1, num2
    47   REAL rti, bf2, anum, denom, dei, altem, cwat, stemp, qp
    48   REAL alt, delp, delm
    49   REAL qmixmax(nloc), rmixmax(nloc), sqmrmax(nloc)
    50   REAL qmixmin(nloc), rmixmin(nloc), sqmrmin(nloc)
    51   REAL signhpmh(nloc)
    52   REAL sx(nloc), scrit2
    53   REAL smid(nloc), sjmin(nloc), sjmax(nloc)
    54   REAL sbef(nloc), sup(nloc), smin(nloc)
    55   REAL asij(nloc), smax(nloc), scrit(nloc)
    56   REAL sij(nloc, nd, nd)
    57   REAL csum(nloc, nd)
    58   REAL awat
    59   LOGICAL lwork(nloc)
     51  REAL                               :: rti, bf2, anum, denom, dei, altem, cwat, stemp, qp
     52  REAL                               :: alt, delp, delm
     53  REAL, DIMENSION (nloc)             :: Qmixmax, Rmixmax, sqmrmax
     54  REAL, DIMENSION (nloc)             :: Qmixmin, Rmixmin, sqmrmin
     55  REAL, DIMENSION (nloc)             :: signhpmh
     56  REAL, DIMENSION (nloc)             :: Sx
     57  REAL                               :: Scrit2
     58  REAL, DIMENSION (nloc)             :: Smid, Sjmin, Sjmax
     59  REAL, DIMENSION (nloc)             :: Sbef, sup, smin
     60  REAL, DIMENSION (nloc)             :: ASij, smax, Scrit
     61  REAL, DIMENSION (nloc, nd, nd)     :: Sij
     62  REAL, DIMENSION (nloc, nd)         :: csum
     63  REAL                               :: awat
     64  LOGICAL, DIMENSION (nloc)          :: lwork
    6065
    6166  REAL amxupcrit, df, ff
    6267  INTEGER nstep
    6368
    64   ! --   Mixing probability distribution functions
    65 
    66   REAL qcoef1, qcoef2, qff, qfff, qmix, rmix, qmix1, rmix1, qmix2, rmix2, f
    67 
    68   qcoef1(f) = tanh(f/gammas)
    69   qcoef2(f) = (tanh(f/gammas)+gammas*log(cosh((1.-f)/gammas)/cosh(f/gammas)))
    70   qff(f) = max(min(f,1.), 0.)
    71   qfff(f) = min(qff(f), scut)
    72   qmix1(f) = (tanh((qff(f)-fmax)/gammas)+qcoef1max)/qcoef2max
    73   rmix1(f) = (gammas*log(cosh((qff(f)-fmax)/gammas))+qff(f)*qcoef1max)/ &
    74     qcoef2max
    75   qmix2(f) = -log(1.-qfff(f))/scut
    76   rmix2(f) = (qfff(f)+(1.-qff(f))*log(1.-qfff(f)))/scut
    77   qmix(f) = qqa1*qmix1(f) + qqa2*qmix2(f)
    78   rmix(f) = qqa1*rmix1(f) + qqa2*rmix2(f)
     69! --   Mixing probability distribution functions
     70
     71  REAL Qcoef1, Qcoef2, QFF, QFFF, Qmix, Rmix, Qmix1, Rmix1, Qmix2, Rmix2, F
     72
     73  Qcoef1(F) = tanh(F/gammas)
     74  Qcoef2(F) = (tanh(F/gammas)+gammas*log(cosh((1.-F)/gammas)/cosh(F/gammas)))
     75  QFF(F) = max(min(F,1.), 0.)
     76  QFFf(F) = min(QFF(F), scut)
     77  Qmix1(F) = (tanh((QFF(F)-Fmax)/gammas)+Qcoef1max)/Qcoef2max
     78  Rmix1(F) = (gammas*log(cosh((QFF(F)-Fmax)/gammas))+QFF(F)*Qcoef1max)/Qcoef2max
     79  Qmix2(F) = -log(1.-QFFf(F))/scut
     80  Rmix2(F) = (QFFf(F)+(1.-QFF(F))*log(1.-QFFf(F)))/scut
     81  Qmix(F) = qqa1*Qmix1(F) + qqa2*Qmix2(F)
     82  Rmix(F) = qqa1*Rmix1(F) + qqa2*Rmix2(F)
    7983
    8084  INTEGER, SAVE :: ifrst
    8185  DATA ifrst/0/
    82   !$OMP THREADPRIVATE(ifrst)
    83 
    84 
    85   ! =====================================================================
    86   ! --- INITIALIZE VARIOUS ARRAYS USED IN THE COMPUTATIONS
    87   ! =====================================================================
    88 
    89   ! -- Initialize mixing PDF coefficients
     86!$OMP THREADPRIVATE(ifrst)
     87
     88
     89! =====================================================================
     90! --- INITIALIZE VARIOUS ARRAYS USED IN THE COMPUTATIONS
     91! =====================================================================
     92
     93! -- Initialize mixing PDF coefficients
    9094  IF (ifrst==0) THEN
    9195    ifrst = 1
    92     qcoef1max = qcoef1(fmax)
    93     qcoef2max = qcoef2(fmax)
     96    Qcoef1max = Qcoef1(Fmax)
     97    Qcoef2max = Qcoef2(Fmax)
    9498
    9599  END IF
    96100
    97101
    98   ! ori        do 360 i=1,ncum*nlp
     102! ori        do 360 i=1,ncum*nlp
    99103  DO j = 1, nl
    100104    DO i = 1, ncum
    101105      nent(i, j) = 0
    102       ! in convect3, m is computed in cv3_closure
    103       ! ori          m(i,1)=0.0
    104     END DO
    105   END DO
    106 
    107   ! ori      do 400 k=1,nlp
    108   ! ori       do 390 j=1,nlp
     106! in convect3, m is computed in cv3_closure
     107! ori          m(i,1)=0.0
     108    END DO
     109  END DO
     110
     111! ori      do 400 k=1,nlp
     112! ori       do 390 j=1,nlp
    109113  DO j = 1, nl
    110114    DO k = 1, nl
    111115      DO i = 1, ncum
    112         qent(i, k, j) = rr(i, j)
     116        Qent(i, k, j) = rr(i, j)
    113117        uent(i, k, j) = u(i, j)
    114118        vent(i, k, j) = v(i, j)
    115119        elij(i, k, j) = 0.0
    116120        hent(i, k, j) = 0.0
    117         ! AC!            ment(i,k,j)=0.0
    118         ! AC!            sij(i,k,j)=0.0
    119       END DO
    120     END DO
    121   END DO
    122 
    123   ! AC!
    124   ment(1:ncum, 1:nd, 1:nd) = 0.0
    125   sij(1:ncum, 1:nd, 1:nd) = 0.0
    126   ! AC!
     121!AC!            Ment(i,k,j)=0.0
     122!AC!            Sij(i,k,j)=0.0
     123      END DO
     124    END DO
     125  END DO
     126
     127!AC!
     128  Ment(1:ncum, 1:nd, 1:nd) = 0.0
     129  Sij(1:ncum, 1:nd, 1:nd) = 0.0
     130!AC!
    127131
    128132  DO k = 1, ntra
     
    136140  END DO
    137141
    138   ! =====================================================================
    139   ! --- CALCULATE ENTRAINED AIR MASS FLUX (ment), TOTAL WATER MIXING
    140   ! --- RATIO (QENT), TOTAL CONDENSED WATER (elij), AND MIXING
    141   ! --- FRACTION (sij)
    142   ! =====================================================================
     142! =====================================================================
     143! --- CALCULATE ENTRAINED AIR MASS FLUX (Ment), TOTAL WATER MIXING
     144! --- RATIO (QENT), TOTAL CONDENSED WATER (elij), AND MIXING
     145! --- FRACTION (Sij)
     146! =====================================================================
    143147
    144148  DO i = minorig + 1, nl
     
    146150    DO j = minorig, nl
    147151      DO il = 1, ncum
    148         IF ((i>=icb(il)) .AND. (i<=inb(il)) .AND. (j>=(icb(il)- &
    149             1)) .AND. (j<=inb(il))) THEN
     152        IF ((i>=icb(il)) .AND. (i<=inb(il)) .AND. (j>=(icb(il)-1)) &
     153                        .AND. (j<=inb(il))) THEN
    150154
    151155          rti = qnk(il) - ep(il, i)*clw(il, i)
     
    155159          dei = denom
    156160          IF (abs(dei)<0.01) dei = 0.01
    157           sij(il, i, j) = anum/dei
    158           sij(il, i, i) = 1.0
    159           altem = sij(il, i, j)*rr(il, i) + (1.-sij(il,i,j))*rti - rs(il, j)
     161          Sij(il, i, j) = anum/dei
     162          Sij(il, i, i) = 1.0
     163          altem = Sij(il, i, j)*rr(il, i) + (1.-Sij(il,i,j))*rti - rs(il, j)
    160164          altem = altem/bf2
    161165          cwat = clw(il, j)*(1.-ep(il,j))
    162           stemp = sij(il, i, j)
     166          stemp = Sij(il, i, j)
    163167          IF ((stemp<0.0 .OR. stemp>1.0 .OR. altem>cwat) .AND. j>i) THEN
    164168            anum = anum - lv(il, j)*(rti-rs(il,j)-cwat*bf2)
    165169            denom = denom + lv(il, j)*(rr(il,i)-rti)
    166170            IF (abs(denom)<0.01) denom = 0.01
    167             sij(il, i, j) = anum/denom
    168             altem = sij(il, i, j)*rr(il, i) + (1.-sij(il,i,j))*rti - &
    169               rs(il, j)
     171            Sij(il, i, j) = anum/denom
     172            altem = Sij(il, i, j)*rr(il, i) + (1.-Sij(il,i,j))*rti - rs(il, j)
    170173            altem = altem - (bf2-1.)*cwat
    171174          END IF
    172           IF (sij(il,i,j)>0.0) THEN
    173             ! cc                 ment(il,i,j)=m(il,i)
    174             ment(il, i, j) = 1.
     175          IF (Sij(il,i,j)>0.0) THEN
     176!!!                 Ment(il,i,j)=m(il,i)
     177            Ment(il, i, j) = 1.
    175178            elij(il, i, j) = altem
    176179            elij(il, i, j) = amax1(0.0, elij(il,i,j))
     
    178181          END IF
    179182
    180           sij(il, i, j) = amax1(0.0, sij(il,i,j))
    181           sij(il, i, j) = amin1(1.0, sij(il,i,j))
     183          Sij(il, i, j) = amax1(0.0, Sij(il,i,j))
     184          Sij(il, i, j) = amin1(1.0, Sij(il,i,j))
    182185        END IF ! new
    183186      END DO
     
    185188
    186189
    187     ! ***   if no air can entrain at level i assume that updraft detrains
    188     ! ***
    189     ! ***   at that level and calculate detrained air flux and properties
    190     ! ***
    191 
    192 
    193     ! @      do 170 i=icb(il),inb(il)
     190! ***   if no air can entrain at level i assume that updraft detrains  ***
     191! ***   at that level and calculate detrained air flux and properties  ***
     192
     193
     194! @      do 170 i=icb(il),inb(il)
    194195
    195196    DO il = 1, ncum
    196197      IF ((i>=icb(il)) .AND. (i<=inb(il)) .AND. (nent(il,i)==0)) THEN
    197         ! @      if(nent(il,i).eq.0)then
    198         ! cc      ment(il,i,i)=m(il,i)
    199         ment(il, i, i) = 1.
    200         qent(il, i, i) = qnk(il) - ep(il, i)*clw(il, i)
     198! @      if(nent(il,i).eq.0)then
     199!!!       Ment(il,i,i)=m(il,i)
     200        Ment(il, i, i) = 1.
     201        Qent(il, i, i) = qnk(il) - ep(il, i)*clw(il, i)
    201202        uent(il, i, i) = unk(il)
    202203        vent(il, i, i) = vnk(il)
    203204        elij(il, i, i) = clw(il, i)*(1.-ep(il,i))
    204         sij(il, i, i) = 0.0
     205        Sij(il, i, i) = 0.0
    205206      END IF
    206207    END DO
     
    220221    DO i = minorig, nl
    221222      DO il = 1, ncum
    222         IF ((j>=(icb(il)-1)) .AND. (j<=inb(il)) .AND. (i>=icb(il)) .AND. (i<= &
    223             inb(il))) THEN
    224           sigij(il, i, j) = sij(il, i, j)
    225         END IF
    226       END DO
    227     END DO
    228   END DO
    229   ! @      enddo
    230 
    231   ! @170   continue
    232 
    233   ! =====================================================================
    234   ! ---  NORMALIZE ENTRAINED AIR MASS FLUXES
    235   ! ---  TO REPRESENT EQUAL PROBABILITIES OF MIXING
    236   ! =====================================================================
     223        IF ((j>=(icb(il)-1)) .AND. (j<=inb(il)) .AND. &
     224            (i>=icb(il)) .AND. (i<=inb(il))) THEN
     225          Sigij(il, i, j) = Sij(il, i, j)
     226        END IF
     227      END DO
     228    END DO
     229  END DO
     230! @      enddo
     231
     232! @170   continue
     233
     234! =====================================================================
     235! ---  NORMALIZE ENTRAINED AIR MASS FLUXES
     236! ---  TO REPRESENT EQUAL PROBABILITIES OF MIXING
     237! =====================================================================
    237238
    238239  CALL zilch(csum, nloc*nd)
     
    242243  END DO
    243244
    244   ! ---------------------------------------------------------------
    245   DO i = minorig + 1, nl !Loop on origin level "i"
    246     ! ---------------------------------------------------------------
     245! ---------------------------------------------------------------
     246  DO i = minorig + 1, nl      !Loop on origin level "i"
     247! ---------------------------------------------------------------
    247248
    248249    num1 = 0
     
    253254
    254255
    255     ! jyg1    Find maximum of SIJ for J>I, if any.
    256 
    257     sx(:) = 0.
     256!JYG1    Find maximum of SIJ for J>I, if any.
     257
     258    Sx(:) = 0.
    258259
    259260    DO il = 1, ncum
    260261      IF (i>=icb(il) .AND. i<=inb(il)) THEN
    261262        signhpmh(il) = sign(1., hp(il,i)-h(il,i))
    262         sbef(il) = max(0., signhpmh(il))
     263        Sbef(il) = max(0., signhpmh(il))
    263264      END IF
    264265    END DO
     
    267268      DO il = 1, ncum
    268269        IF (i>=icb(il) .AND. i<=inb(il) .AND. j<=inb(il)) THEN
    269           IF (sbef(il)<sij(il,i,j)) THEN
    270             sx(il) = max(sij(il,i,j), sx(il))
    271           END IF
    272           sbef(il) = sij(il, i, j)
     270          IF (Sbef(il)<Sij(il,i,j)) THEN
     271            Sx(il) = max(Sij(il,i,j), Sx(il))
     272          END IF
     273          Sbef(il) = Sij(il, i, j)
    273274        END IF
    274275      END DO
     
    279280      IF (i>=icb(il) .AND. i<=inb(il)) THEN
    280281        lwork(il) = (nent(il,i)/=0)
    281         qp = qnk(il) - ep(il, i)*clw(il, i)
    282         anum = h(il, i) - hp(il, i) - lv(il, i)*(qp-rs(il,i)) + &
    283           (cpv-cpd)*t(il, i)*(qp-rr(il,i))
    284         denom = h(il, i) - hp(il, i) + lv(il, i)*(rr(il,i)-qp) + &
    285           (cpd-cpv)*t(il, i)*(rr(il,i)-qp)
     282        rti = qnk(il) - ep(il, i)*clw(il, i)
     283        anum = h(il, i) - hp(il, i) - lv(il, i)*(rti-rs(il,i)) + &
     284               (cpv-cpd)*t(il, i)*(rti-rr(il,i))
     285        denom = h(il, i) - hp(il, i) + lv(il, i)*(rr(il,i)-rti) + &
     286                (cpd-cpv)*t(il, i)*(rr(il,i)-rti)
    286287        IF (abs(denom)<0.01) denom = 0.01
    287         scrit(il) = min(anum/denom, 1.)
    288         alt = qp - rs(il, i) + scrit(il)*(rr(il,i)-qp)
    289 
    290         ! jyg1    Find new critical value Scrit2
    291         ! such that : Sij > Scrit2  => mixed draught will detrain at J<I
    292         ! Sij < Scrit2  => mixed draught will detrain at J>I
    293 
    294         scrit2 = min(scrit(il), sx(il))*max(0., -signhpmh(il)) + &
    295           scrit(il)*max(0., signhpmh(il))
    296 
    297         scrit(il) = scrit2
    298 
    299         ! jyg    Correction pour la nouvelle logique; la correction pour ALT
    300         ! est un peu au hazard
    301         IF (scrit(il)<=0.0) scrit(il) = 0.0
    302         IF (alt<=0.0) scrit(il) = 1.0
     288        Scrit(il) = min(anum/denom, 1.)
     289        alt = rti - rs(il, i) + Scrit(il)*(rr(il,i)-rti)
     290
     291!JYG1    Find new critical value Scrit2
     292!        such that : Sij > Scrit2  => mixed draught will detrain at J<I
     293!                    Sij < Scrit2  => mixed draught will detrain at J>I
     294
     295        Scrit2 = min(Scrit(il), Sx(il))*max(0., -signhpmh(il)) + &
     296                 Scrit(il)*max(0., signhpmh(il))
     297
     298        Scrit(il) = Scrit2
     299
     300!JYG    Correction pour la nouvelle logique; la correction pour ALT
     301! est un peu au hazard
     302        IF (Scrit(il)<=0.0) Scrit(il) = 0.0
     303        IF (alt<=0.0) Scrit(il) = 1.0
    303304
    304305        smax(il) = 0.0
    305         asij(il) = 0.0
    306         sup(il) = 0. ! upper S-value reached by descending draughts
    307       END IF
    308     END DO
    309 
    310     ! ---------------------------------------------------------------
    311     DO j = minorig, nl !Loop on destination level "j"
    312       ! ---------------------------------------------------------------
     306        ASij(il) = 0.0
     307        sup(il) = 0.      ! upper S-value reached by descending draughts
     308      END IF
     309    END DO
     310
     311! ---------------------------------------------------------------
     312    DO j = minorig, nl         !Loop on destination level "j"
     313! ---------------------------------------------------------------
    313314
    314315      num2 = 0
    315316      DO il = 1, ncum
    316         IF (i>=icb(il) .AND. i<=inb(il) .AND. j>=(icb( &
    317           il)-1) .AND. j<=inb(il) .AND. lwork(il)) num2 = num2 + 1
     317        IF (i>=icb(il) .AND. i<=inb(il) .AND. &
     318            j>=(icb(il)-1) .AND. j<=inb(il) .AND. &
     319            lwork(il)) num2 = num2 + 1
    318320      END DO
    319321      IF (num2<=0) GO TO 175
    320322
    321       ! -----------------------------------------------
     323! -----------------------------------------------
    322324      IF (j>i) THEN
    323         ! -----------------------------------------------
     325! -----------------------------------------------
    324326        DO il = 1, ncum
    325           IF (i>=icb(il) .AND. i<=inb(il) .AND. j>=(icb( &
    326               il)-1) .AND. j<=inb(il) .AND. lwork(il)) THEN
    327             IF (sij(il,i,j)>0.0) THEN
    328               smid(il) = min(sij(il,i,j), scrit(il))
    329               sjmax(il) = smid(il)
    330               sjmin(il) = smid(il)
    331               IF (smid(il)<smin(il) .AND. sij(il,i,j+1)<smid(il)) THEN
    332                 smin(il) = smid(il)
    333                 sjmax(il) = min((sij(il,i,j+1)+sij(il,i, &
    334                   j))/2., sij(il,i,j), scrit(il))
    335                 sjmin(il) = max((sbef(il)+sij(il,i,j))/2., sij(il,i,j))
    336                 sjmin(il) = min(sjmin(il), scrit(il))
    337                 sbef(il) = sij(il, i, j)
     327          IF (i>=icb(il) .AND. i<=inb(il) .AND. &
     328              j>=(icb(il)-1) .AND. j<=inb(il) .AND. &
     329              lwork(il)) THEN
     330            IF (Sij(il,i,j)>0.0) THEN
     331              Smid(il) = min(Sij(il,i,j), Scrit(il))
     332              Sjmax(il) = Smid(il)
     333              Sjmin(il) = Smid(il)
     334              IF (Smid(il)<smin(il) .AND. Sij(il,i,j+1)<Smid(il)) THEN
     335                smin(il) = Smid(il)
     336                Sjmax(il) = min((Sij(il,i,j+1)+Sij(il,i,j))/2., Sij(il,i,j), Scrit(il))
     337                Sjmin(il) = max((Sbef(il)+Sij(il,i,j))/2., Sij(il,i,j))
     338                Sjmin(il) = min(Sjmin(il), Scrit(il))
     339                Sbef(il) = Sij(il, i, j)
    338340              END IF
    339341            END IF
    340342          END IF
    341343        END DO
    342         ! -----------------------------------------------
     344! -----------------------------------------------
    343345      ELSE IF (j==i) THEN
    344         ! -----------------------------------------------
     346! -----------------------------------------------
    345347        DO il = 1, ncum
    346           IF (i>=icb(il) .AND. i<=inb(il) .AND. j>=(icb( &
    347               il)-1) .AND. j<=inb(il) .AND. lwork(il)) THEN
    348             IF (sij(il,i,j)>0.0) THEN
    349               smid(il) = 1.
    350               sjmin(il) = max((sij(il,i,j-1)+smid(il))/2., scrit(il))*max(0., &
    351                 -signhpmh(il)) + min((sij(il,i,j+1)+smid(il))/2., scrit(il))* &
    352                 max(0., signhpmh(il))
    353               sjmin(il) = max(sjmin(il), sup(il))
    354               sjmax(il) = 1.
    355 
    356               ! -           preparation des variables Scrit, Smin et Sbef
    357               ! pour la partie j>i
    358               scrit(il) = min(sjmin(il), sjmax(il), scrit(il))
     348          IF (i>=icb(il) .AND. i<=inb(il) .AND. &
     349              j>=(icb(il)-1) .AND. j<=inb(il) .AND. &
     350              lwork(il)) THEN
     351            IF (Sij(il,i,j)>0.0) THEN
     352              Smid(il) = 1.
     353              Sjmin(il) = max((Sij(il,i,j-1)+Smid(il))/2., Scrit(il))*max(0., -signhpmh(il)) + &
     354                          min((Sij(il,i,j+1)+Smid(il))/2., Scrit(il))*max(0., signhpmh(il))
     355              Sjmin(il) = max(Sjmin(il), sup(il))
     356              Sjmax(il) = 1.
     357
     358! -             preparation des variables Scrit, Smin et Sbef pour la partie j>i
     359              Scrit(il) = min(Sjmin(il), Sjmax(il), Scrit(il))
    359360
    360361              smin(il) = 1.
    361               sbef(il) = max(0., signhpmh(il))
    362               supmax(il, i) = sign(scrit(il), -signhpmh(il))
    363             END IF
    364           END IF
    365         END DO
    366         ! -----------------------------------------------
     362              Sbef(il) = max(0., signhpmh(il))
     363              supmax(il, i) = sign(Scrit(il), -signhpmh(il))
     364            END IF
     365          END IF
     366        END DO
     367! -----------------------------------------------
    367368      ELSE IF (j<i) THEN
    368         ! -----------------------------------------------
     369! -----------------------------------------------
    369370        DO il = 1, ncum
    370           IF (i>=icb(il) .AND. i<=inb(il) .AND. j>=(icb( &
    371               il)-1) .AND. j<=inb(il) .AND. lwork(il)) THEN
    372             IF (sij(il,i,j)>0.0) THEN
    373               smid(il) = max(sij(il,i,j), scrit(il))
    374               sjmax(il) = smid(il)
    375               sjmin(il) = smid(il)
    376               IF (smid(il)>smax(il) .AND. sij(il,i,j+1)>smid(il)) THEN
    377                 smax(il) = smid(il)
    378                 sjmax(il) = max((sij(il,i,j+1)+sij(il,i,j))/2., sij(il,i,j))
    379                 sjmax(il) = max(sjmax(il), scrit(il))
    380                 sjmin(il) = min((sbef(il)+sij(il,i,j))/2., sij(il,i,j))
    381                 sjmin(il) = max(sjmin(il), scrit(il))
    382                 sbef(il) = sij(il, i, j)
     371          IF (i>=icb(il) .AND. i<=inb(il) .AND. &
     372              j>=(icb(il)-1) .AND. j<=inb(il) .AND. &
     373              lwork(il)) THEN
     374            IF (Sij(il,i,j)>0.0) THEN
     375              Smid(il) = max(Sij(il,i,j), Scrit(il))
     376              Sjmax(il) = Smid(il)
     377              Sjmin(il) = Smid(il)
     378              IF (Smid(il)>smax(il) .AND. Sij(il,i,j+1)>Smid(il)) THEN
     379                smax(il) = Smid(il)
     380                Sjmax(il) = max((Sij(il,i,j+1)+Sij(il,i,j))/2., Sij(il,i,j))
     381                Sjmax(il) = max(Sjmax(il), Scrit(il))
     382                Sjmin(il) = min((Sbef(il)+Sij(il,i,j))/2., Sij(il,i,j))
     383                Sjmin(il) = max(Sjmin(il), Scrit(il))
     384                Sbef(il) = Sij(il, i, j)
    383385              END IF
    384               IF (abs(sjmin(il)-sjmax(il))>1.E-10) sup(il) = max(sjmin(il), &
    385                 sjmax(il), sup(il))
    386             END IF
    387           END IF
    388         END DO
    389         ! -----------------------------------------------
    390       END IF
    391       ! -----------------------------------------------
    392 
    393 
    394       DO il = 1, ncum
    395         IF (i>=icb(il) .AND. i<=inb(il) .AND. j>=(icb( &
    396             il)-1) .AND. j<=inb(il) .AND. lwork(il)) THEN
    397           IF (sij(il,i,j)>0.0) THEN
     386              IF (abs(Sjmin(il)-Sjmax(il))>1.E-10) &
     387                             sup(il) = max(Sjmin(il), Sjmax(il), sup(il))
     388            END IF
     389          END IF
     390        END DO
     391! -----------------------------------------------
     392      END IF
     393! -----------------------------------------------
     394
     395
     396      DO il = 1, ncum
     397        IF (i>=icb(il) .AND. i<=inb(il) .AND. &
     398            j>=(icb(il)-1) .AND. j<=inb(il) .AND. &
     399            lwork(il)) THEN
     400          IF (Sij(il,i,j)>0.0) THEN
    398401            rti = qnk(il) - ep(il, i)*clw(il, i)
    399             qmixmax(il) = qmix(sjmax(il))
    400             qmixmin(il) = qmix(sjmin(il))
    401             rmixmax(il) = rmix(sjmax(il))
    402             rmixmin(il) = rmix(sjmin(il))
    403             sqmrmax(il) = sjmax(il)*qmix(sjmax(il)) - rmix(sjmax(il))
    404             sqmrmin(il) = sjmin(il)*qmix(sjmin(il)) - rmix(sjmin(il))
    405 
    406             ment(il, i, j) = abs(qmixmax(il)-qmixmin(il))*ment(il, i, j)
    407 
    408             ! Sigij(i,j) is the 'true' mixing fraction of mixture Ment(i,j)
    409             IF (abs(qmixmax(il)-qmixmin(il))>1.E-10) THEN
    410               sigij(il, i, j) = (sqmrmax(il)-sqmrmin(il))/ &
    411                 (qmixmax(il)-qmixmin(il))
     402            Qmixmax(il) = Qmix(Sjmax(il))
     403            Qmixmin(il) = Qmix(Sjmin(il))
     404            Rmixmax(il) = Rmix(Sjmax(il))
     405            Rmixmin(il) = Rmix(Sjmin(il))
     406            sqmrmax(il) = Sjmax(il)*Qmix(Sjmax(il)) - Rmix(Sjmax(il))
     407            sqmrmin(il) = Sjmin(il)*Qmix(Sjmin(il)) - Rmix(Sjmin(il))
     408
     409            Ment(il, i, j) = abs(Qmixmax(il)-Qmixmin(il))*Ment(il, i, j)
     410
     411! Sigij(i,j) is the 'true' mixing fraction of mixture Ment(i,j)
     412            IF (abs(Qmixmax(il)-Qmixmin(il))>1.E-10) THEN
     413              Sigij(il, i, j) = (sqmrmax(il)-sqmrmin(il))/(Qmixmax(il)-Qmixmin(il))
    412414            ELSE
    413               sigij(il, i, j) = 0.
    414             END IF
    415 
    416             ! --    Compute Qent, uent, vent according to the true mixing
    417             ! fraction
    418             qent(il, i, j) = (1.-sigij(il,i,j))*rti + &
    419               sigij(il, i, j)*rr(il, i)
    420             uent(il, i, j) = (1.-sigij(il,i,j))*unk(il) + &
    421               sigij(il, i, j)*u(il, i)
    422             vent(il, i, j) = (1.-sigij(il,i,j))*vnk(il) + &
    423               sigij(il, i, j)*v(il, i)
    424 
    425             ! --     Compute liquid water static energy of mixed draughts
    426             ! IF (j .GT. i) THEN
    427             ! awat=elij(il,i,j)-(1.-ep(il,j))*clw(il,j)
    428             ! awat=amax1(awat,0.0)
    429             ! ELSE
    430             ! awat = 0.
    431             ! ENDIF
    432             ! Hent(il,i,j) = (1.-Sigij(il,i,j))*HP(il,i)
    433             ! :         + Sigij(il,i,j)*H(il,i)
    434             ! :         + (LV(il,j)+(cpd-cpv)*t(il,j))*awat
    435             ! IM 301008 beg
    436             hent(il, i, j) = (1.-sigij(il,i,j))*hp(il, i) + &
    437               sigij(il, i, j)*h(il, i)
    438 
    439             elij(il, i, j) = qent(il, i, j) - rs(il, j)
    440             elij(il, i, j) = elij(il, i, j) + ((h(il,j)-hent(il,i, &
    441               j))*rs(il,j)*lv(il,j)/((cpd*(1.-qent(il,i,j))+ &
    442               qent(il,i,j)*cpv)*rrv*t(il,j)*t(il,j)))
    443             elij(il, i, j) = elij(il, i, j)/(1.+lv(il,j)*lv(il,j)*rs(il,j)/(( &
    444               cpd*(1.-qent(il,i,j))+qent(il,i,j)*cpv)*rrv*t(il,j)*t(il,j)))
     415              Sigij(il, i, j) = 0.
     416            END IF
     417
     418! --    Compute Qent, uent, vent according to the true mixing fraction
     419            Qent(il, i, j) = (1.-Sigij(il,i,j))*rti     + Sigij(il, i, j)*rr(il, i)
     420            uent(il, i, j) = (1.-Sigij(il,i,j))*unk(il) + Sigij(il, i, j)*u(il, i)
     421            vent(il, i, j) = (1.-Sigij(il,i,j))*vnk(il) + Sigij(il, i, j)*v(il, i)
     422
     423! --     Compute liquid water static energy of mixed draughts
     424!    IF (j .GT. i) THEN
     425!      awat=elij(il,i,j)-(1.-ep(il,j))*clw(il,j)
     426!      awat=amax1(awat,0.0)
     427!    ELSE
     428!      awat = 0.
     429!    ENDIF
     430!    Hent(il,i,j) = (1.-Sigij(il,i,j))*HP(il,i)
     431!    :         + Sigij(il,i,j)*H(il,i)
     432!    :         + (LV(il,j)+(cpd-cpv)*t(il,j))*awat
     433!IM 301008 beg
     434            hent(il, i, j) = (1.-Sigij(il,i,j))*hp(il, i) + Sigij(il, i, j)*h(il, i)
     435
     436            elij(il, i, j) = Qent(il, i, j) - rs(il, j)
     437            elij(il, i, j) = elij(il, i, j) + &
     438                             ((h(il,j)-hent(il,i,j))*rs(il,j)*lv(il,j) / &
     439                              ((cpd*(1.-Qent(il,i,j))+Qent(il,i,j)*cpv)*rrv*t(il,j)*t(il,j)))
     440            elij(il, i, j) = elij(il, i, j) / &
     441                             (1.+lv(il,j)*lv(il,j)*rs(il,j) / &
     442                              ((cpd*(1.-Qent(il,i,j))+Qent(il,i,j)*cpv)*rrv*t(il,j)*t(il,j)))
    445443
    446444            elij(il, i, j) = max(elij(il,i,j), 0.)
    447445
    448             elij(il, i, j) = min(elij(il,i,j), qent(il,i,j))
     446            elij(il, i, j) = min(elij(il,i,j), Qent(il,i,j))
    449447
    450448            IF (j>i) THEN
     
    455453            END IF
    456454
    457             ! print
    458             ! *,h(il,j)-hent(il,i,j),LV(il,j)*rs(il,j)/(cpd*rrv*t(il,j)*
    459             ! :         t(il,j))
    460 
    461             hent(il, i, j) = hent(il, i, j) + (lv(il,j)+(cpd-cpv)*t(il,j))* &
    462               awat
    463             ! IM 301008 end
    464 
    465             ! print *,'mix : i,j,hent(il,i,j),sigij(il,i,j) ',
    466             ! :               i,j,hent(il,i,j),sigij(il,i,j)
    467 
    468             ! --      ASij is the integral of P(F) over the relevant F
    469             ! interval
    470             asij(il) = asij(il) + abs(qmixmax(il)*(1.-sjmax(il))+rmixmax(il)- &
    471               qmixmin(il)*(1.-sjmin(il))-rmixmin(il))
     455! print *,h(il,j)-hent(il,i,j),LV(il,j)*rs(il,j)/(cpd*rrv*t(il,j)*
     456! :         t(il,j))
     457
     458            hent(il, i, j) = hent(il, i, j) + (lv(il,j)+(cpd-cpv)*t(il,j))*awat
     459!IM 301008 end
     460
     461! print *,'mix : i,j,hent(il,i,j),Sigij(il,i,j) ',
     462! :               i,j,hent(il,i,j),Sigij(il,i,j)
     463
     464! --      ASij is the integral of P(F) over the relevant F interval
     465            ASij(il) = ASij(il) + abs(Qmixmax(il)*(1.-Sjmax(il))+Rmixmax(il) - &
     466                                      Qmixmin(il)*(1.-Sjmin(il))-Rmixmin(il))
    472467
    473468          END IF
     
    476471      DO k = 1, ntra
    477472        DO il = 1, ncum
    478           IF ((i>=icb(il)) .AND. (i<=inb(il)) .AND. (j>=(icb(il)- &
    479               1)) .AND. (j<=inb(il)) .AND. lwork(il)) THEN
    480             IF (sij(il,i,j)>0.0) THEN
    481               traent(il, i, j, k) = sigij(il, i, j)*tra(il, i, k) + &
    482                 (1.-sigij(il,i,j))*tra(il, nk(il), k)
    483             END IF
    484           END IF
    485         END DO
    486       END DO
    487 
    488       ! --    If I=J (detrainement and entrainement at the same level), then
    489       ! only the
    490       ! --    adiabatic ascent part of the mixture is considered
     473          IF ((i>=icb(il)) .AND. (i<=inb(il)) .AND. &
     474              (j>=(icb(il)-1)) .AND. (j<=inb(il)) .AND. &
     475              lwork(il)) THEN
     476            IF (Sij(il,i,j)>0.0) THEN
     477              traent(il, i, j, k) = Sigij(il, i, j)*tra(il, i, k) + &
     478                                    (1.-Sigij(il,i,j))*tra(il, nk(il), k)
     479            END IF
     480          END IF
     481        END DO
     482      END DO
     483
     484! --    If I=J (detrainement and entrainement at the same level), then only the
     485! --    adiabatic ascent part of the mixture is considered
    491486      IF (i==j) THEN
    492487        DO il = 1, ncum
    493           IF (i>=icb(il) .AND. i<=inb(il) .AND. j>=(icb( &
    494               il)-1) .AND. j<=inb(il) .AND. lwork(il)) THEN
    495             IF (sij(il,i,j)>0.0) THEN
     488          IF (i>=icb(il) .AND. i<=inb(il) .AND. &
     489              j>=(icb(il)-1) .AND. j<=inb(il) .AND. &
     490              lwork(il)) THEN
     491            IF (Sij(il,i,j)>0.0) THEN
    496492              rti = qnk(il) - ep(il, i)*clw(il, i)
    497               ! cc          Ment(il,i,i) =
    498               ! m(il,i)*abs(Qmixmax(il)*(1.-Sjmax(il))
    499               ment(il, i, i) = abs(qmixmax(il)*(1.-sjmax( &
    500                 il))+rmixmax(il)-qmixmin(il)*(1.-sjmin(il))-rmixmin(il))
    501               qent(il, i, i) = rti
     493!!!             Ment(il,i,i) = m(il,i)*abs(Qmixmax(il)*(1.-Sjmax(il))
     494              Ment(il, i, i) = abs(Qmixmax(il)*(1.-Sjmax(il))+Rmixmax(il) - &
     495                                   Qmixmin(il)*(1.-Sjmin(il))-Rmixmin(il))
     496              Qent(il, i, i) = rti
    502497              uent(il, i, i) = unk(il)
    503498              vent(il, i, i) = vnk(il)
    504499              hent(il, i, i) = hp(il, i)
    505500              elij(il, i, i) = clw(il, i)*(1.-ep(il,i))
    506               sigij(il, i, i) = 0.
     501              Sigij(il, i, i) = 0.
    507502            END IF
    508503          END IF
     
    510505        DO k = 1, ntra
    511506          DO il = 1, ncum
    512             IF ((i>=icb(il)) .AND. (i<=inb(il)) .AND. (j>=(icb(il)- &
    513                 1)) .AND. (j<=inb(il)) .AND. lwork(il)) THEN
    514               IF (sij(il,i,j)>0.0) THEN
     507            IF ((i>=icb(il)) .AND. (i<=inb(il)) .AND. &
     508                (j>=(icb(il)-1)) .AND. (j<=inb(il)) .AND. &
     509                lwork(il)) THEN
     510              IF (Sij(il,i,j)>0.0) THEN
    515511                traent(il, i, i, k) = tra(il, nk(il), k)
    516512              END IF
     
    521517      END IF
    522518
    523 175 END DO
     519! ---------------------------------------------------------------
     520175 END DO        ! End loop on destination level "j"
     521! ---------------------------------------------------------------
    524522
    525523    DO il = 1, ncum
    526524      IF (i>=icb(il) .AND. i<=inb(il) .AND. lwork(il)) THEN
    527         asij(il) = amax1(1.0E-16, asij(il))
    528         asij(il) = 1.0/asij(il)
     525        ASij(il) = amax1(1.0E-16, ASij(il))
     526        ASij(il) = 1.0/ASij(il)
    529527        csum(il, i) = 0.0
    530528      END IF
     
    533531    DO j = minorig, nl
    534532      DO il = 1, ncum
    535         IF (i>=icb(il) .AND. i<=inb(il) .AND. lwork(il) .AND. j>=(icb( &
    536             il)-1) .AND. j<=inb(il)) THEN
    537           ment(il, i, j) = ment(il, i, j)*asij(il)
     533        IF (i>=icb(il) .AND. i<=inb(il) .AND. lwork(il) .AND. &
     534            j>=(icb(il)-1) .AND. j<=inb(il)) THEN
     535          Ment(il, i, j) = Ment(il, i, j)*ASij(il)
    538536        END IF
    539537      END DO
     
    542540    DO j = minorig, nl
    543541      DO il = 1, ncum
    544         IF (i>=icb(il) .AND. i<=inb(il) .AND. lwork(il) .AND. j>=(icb( &
    545             il)-1) .AND. j<=inb(il)) THEN
    546           csum(il, i) = csum(il, i) + ment(il, i, j)
     542        IF (i>=icb(il) .AND. i<=inb(il) .AND. lwork(il) .AND. &
     543            j>=(icb(il)-1) .AND. j<=inb(il)) THEN
     544          csum(il, i) = csum(il, i) + Ment(il, i, j)
    547545        END IF
    548546      END DO
     
    550548
    551549    DO il = 1, ncum
    552       IF (i>=icb(il) .AND. i<=inb(il) .AND. lwork(il) .AND. csum(il,i)<1.) &
    553           THEN
    554         ! cc     :     .and. csum(il,i).lt.m(il,i) ) then
     550      IF (i>=icb(il) .AND. i<=inb(il) .AND. lwork(il) .AND. csum(il,i)<1.) THEN
     551! cc     :     .and. csum(il,i).lt.m(il,i) ) then
    555552        nent(il, i) = 0
    556         ! cc        ment(il,i,i)=m(il,i)
    557         ment(il, i, i) = 1.
    558         qent(il, i, i) = qnk(il) - ep(il, i)*clw(il, i)
     553! cc        Ment(il,i,i)=m(il,i)
     554        Ment(il, i, i) = 1.
     555        Qent(il, i, i) = qnk(il) - ep(il, i)*clw(il, i)
    559556        uent(il, i, i) = unk(il)
    560557        vent(il, i, i) = vnk(il)
    561558        elij(il, i, i) = clw(il, i)*(1.-ep(il,i))
    562         sij(il, i, i) = 0.0
     559        Sij(il, i, i) = 0.0
    563560      END IF
    564561    END DO ! il
     
    566563    DO j = 1, ntra
    567564      DO il = 1, ncum
    568         IF (i>=icb(il) .AND. i<=inb(il) .AND. lwork(il) .AND. csum(il,i)<1.) &
    569             THEN
    570           ! cc     :     .and. csum(il,i).lt.m(il,i) ) then
     565        IF (i>=icb(il) .AND. i<=inb(il) .AND. lwork(il) .AND. csum(il,i)<1.) THEN
     566! cc     :     .and. csum(il,i).lt.m(il,i) ) then
    571567          traent(il, i, i, j) = tra(il, nk(il), j)
    572568        END IF
     
    574570    END DO
    575571
    576 789 END DO
     572! ---------------------------------------------------------------
     573789 END DO              ! End loop on origin level "i"
     574! ---------------------------------------------------------------
     575
    577576
    578577  RETURN
  • LMDZ5/trunk/libf/phylmd/cva_driver.F90

    r1992 r2007  
    22! $Id$
    33
    4 SUBROUTINE cva_driver(len, nd, ndp1, ntra, nloc, iflag_con, iflag_mix, &
    5     iflag_ice_thermo, iflag_clos, delt, t1, q1, qs1, t1_wake, q1_wake, &
    6     qs1_wake, s1_wake, u1, v1, tra1, p1, ph1, ale1, alp1, sig1feed1, &
    7     sig2feed1, wght1, iflag1, ft1, fq1, fu1, fv1, ftra1, precip1, kbas1, &
    8     ktop1, cbmf1, plcl1, plfc1, wbeff1, sig1, w01, & !input/output
    9     ptop21, sigd1, ma1, mip1, vprecip1, upwd1, dnwd1, dnwd01, qcondc1, wd1, &
    10     cape1, cin1, tvp1, ftd1, fqd1, plim11, plim21, asupmax1, supmax01, &
    11     asupmaxmin1, lalim_conv, da1, phi1, mp1, phi21, d1a1, dam1, sigij1, clw1, & ! RomP
    12     elij1, evap1, ep1, epmlmmm1, eplamm1, & ! RomP
    13     wdtraina1, wdtrainm1) ! RomP
    14   ! **************************************************************
    15   ! *
    16   ! CV_DRIVER                                                   *
    17   ! *
    18   ! *
    19   ! written by   : Sandrine Bony-Lena , 17/05/2003, 11.19.41    *
    20   ! modified by :                                               *
    21   ! **************************************************************
    22   ! **************************************************************
     4SUBROUTINE cva_driver(len, nd, ndp1, ntra, nloc, &
     5                      iflag_con, iflag_mix, iflag_ice_thermo, iflag_clos, ok_conserv_q, &
     6                      delt, t1, q1, qs1, t1_wake, q1_wake, qs1_wake, s1_wake, &
     7                      u1, v1, tra1, &
     8                      p1, ph1, &
     9                      Ale1, Alp1, &
     10                      sig1feed1, sig2feed1, wght1, &
     11                      iflag1, ft1, fq1, fu1, fv1, ftra1, &
     12                      precip1, kbas1, ktop1, &
     13                      cbmf1, plcl1, plfc1, wbeff1, &
     14                      sig1, w01, & !input/output
     15                      ptop21, sigd1, &
     16                      ma1, mip1, Vprecip1, upwd1, dnwd1, dnwd01, &
     17                      qcondc1, wd1, &
     18                      cape1, cin1, tvp1, &
     19                      ftd1, fqd1, &
     20                      Plim11, Plim21, asupmax1, supmax01, asupmaxmin1, &
     21                      lalim_conv, &
     22!!                      da1,phi1,mp1,phi21,d1a1,dam1,sigij1,clw1, &        ! RomP
     23!!                      elij1,evap1,ep1,epmlmMm1,eplaMm1, &                ! RomP
     24                      da1, phi1, mp1, phi21, d1a1, dam1, sigij1, wghti1, & ! RomP, RL
     25                      clw1, elij1, evap1, ep1, epmlmMm1, eplaMm1, &        ! RomP, RL
     26                      wdtrainA1, wdtrainM1)                                ! RomP
     27! **************************************************************
     28! *
     29! CV_DRIVER                                                   *
     30! *
     31! *
     32! written by   : Sandrine Bony-Lena , 17/05/2003, 11.19.41    *
     33! modified by :                                               *
     34! **************************************************************
     35! **************************************************************
    2336
    2437  USE dimphy
    2538  IMPLICIT NONE
    2639
    27   ! .............................START PROLOGUE............................
    28 
    29 
    30   ! All argument names (except len,nd,ntra,nloc,delt and the flags) have a
    31   ! "1" appended.
    32   ! The "1" is removed for the corresponding compressed variables.
    33   ! PARAMETERS:
    34   ! Name            Type         Usage            Description
    35   ! ----------      ----------     -------  ----------------------------
    36 
    37   ! len           Integer        Input        first (i) dimension
    38   ! nd            Integer        Input        vertical (k) dimension
    39   ! ndp1          Integer        Input        nd + 1
    40   ! ntra          Integer        Input        number of tracors
    41   ! iflag_con     Integer        Input        version of convect (3/4)
    42   ! iflag_mix     Integer        Input        version of mixing  (0/1/2)
    43   ! iflag_ice_thermo Integer        Input        accounting for ice
    44   ! thermodynamics (0/1)
    45   ! iflag_clos    Integer        Input        version of closure (0/1)
    46   ! delt          Real           Input        time step
    47   ! t1            Real           Input        temperature (sat draught envt)
    48   ! q1            Real           Input        specific hum (sat draught envt)
    49   ! qs1           Real           Input        sat specific hum (sat draught
    50   ! envt)
    51   ! t1_wake       Real           Input        temperature (unsat draught
    52   ! envt)
    53   ! q1_wake       Real           Input        specific hum(unsat draught
    54   ! envt)
    55   ! qs1_wake      Real           Input        sat specific hum(unsat draughts
    56   ! envt)
    57   ! s1_wake       Real           Input        fractionnal area covered by
    58   ! wakes
    59   ! u1            Real           Input        u-wind
    60   ! v1            Real           Input        v-wind
    61   ! tra1          Real           Input        tracors
    62   ! p1            Real           Input        full level pressure
    63   ! ph1           Real           Input        half level pressure
    64   ! ALE1          Real           Input        Available lifting Energy
    65   ! ALP1          Real           Input        Available lifting Power
    66   ! sig1feed1     Real           Input        sigma coord at lower bound of
    67   ! feeding layer
    68   ! sig2feed1     Real           Input        sigma coord at upper bound of
    69   ! feeding layer
    70   ! wght1         Real           Input        weight density determining the
    71   ! feeding mixture
    72   ! iflag1        Integer        Output       flag for Emanuel conditions
    73   ! ft1           Real           Output       temp tend
    74   ! fq1           Real           Output       spec hum tend
    75   ! fu1           Real           Output       u-wind tend
    76   ! fv1           Real           Output       v-wind tend
    77   ! ftra1         Real           Output       tracor tend
    78   ! precip1       Real           Output       precipitation
    79   ! kbas1         Integer        Output       cloud base level
    80   ! ktop1         Integer        Output       cloud top level
    81   ! cbmf1         Real           Output       cloud base mass flux
    82   ! sig1          Real           In/Out       section adiabatic updraft
    83   ! w01           Real           In/Out       vertical velocity within adiab
    84   ! updraft
    85   ! ptop21        Real           In/Out       top of entraining zone
    86   ! Ma1           Real           Output       mass flux adiabatic updraft
    87   ! mip1          Real           Output       mass flux shed by the adiabatic
    88   ! updraft
    89   ! Vprecip1      Real           Output       vertical profile of
    90   ! precipitations
    91   ! upwd1         Real           Output       total upward mass flux
    92   ! (adiab+mixed)
    93   ! dnwd1         Real           Output       saturated downward mass flux
    94   ! (mixed)
    95   ! dnwd01        Real           Output       unsaturated downward mass flux
    96   ! qcondc1       Real           Output       in-cld mixing ratio of
    97   ! condensed water
    98   ! wd1           Real           Output       downdraft velocity scale for
    99   ! sfc fluxes
    100   ! cape1         Real           Output       CAPE
    101   ! cin1          Real           Output       CIN
    102   ! tvp1          Real           Output       adiab lifted parcell virt temp
    103   ! ftd1          Real           Output       precip temp tend
    104   ! fqt1          Real           Output       precip spec hum tend
    105   ! Plim11        Real           Output
    106   ! Plim21        Real           Output
    107   ! asupmax1      Real           Output
    108   ! supmax01      Real           Output
    109   ! asupmaxmin1   Real           Output
    110 
    111   ! ftd1          Real           Output  Array of temperature tendency due to
    112   ! precipitations (K/s) of dimension ND,
    113   ! defined at same grid levels as T, Q, QS and P.
    114 
    115   ! fqd1          Real           Output  Array of specific humidity
    116   ! tendencies due to precipitations ((gm/gm)/s)
    117   ! of dimension ND, defined at same grid levels as T, Q, QS and P.
    118 
    119   ! wdtrainA1     Real           Output   precipitation detrained from
    120   ! adiabatic draught;
    121   ! used in tracer transport (cvltr)
    122   ! wdtrainM1     Real           Output   precipitation detrained from mixed
    123   ! draughts;
    124   ! used in tracer transport (cvltr)
    125   ! da1           Real           Output   used in tracer transport (cvltr)
    126   ! phi1          Real           Output   used in tracer transport (cvltr)
    127   ! mp1           Real           Output   used in tracer transport (cvltr)
    128 
    129   ! phi21         Real           Output   used in tracer transport (cvltr)
    130 
    131   ! d1a1          Real           Output   used in tracer transport (cvltr)
    132   ! dam1          Real           Output   used in tracer transport (cvltr)
    133 
    134   ! epmlmMm1      Real           Output   used in tracer transport (cvltr)
    135   ! eplaMm1       Real           Output   used in tracer transport (cvltr)
    136 
    137   ! evap1         Real           Output
    138   ! ep1           Real           Output
    139   ! sigij1        Real           Output
    140   ! elij1         Real           Output
    141 
    142 
    143   ! S. Bony, Mar 2002:
    144   ! * Several modules corresponding to different physical processes
    145   ! * Several versions of convect may be used:
    146   ! - iflag_con=3: version lmd  (previously named convect3)
    147   ! - iflag_con=4: version 4.3b (vect. version, previously convect1/2)
    148   ! + tard:     - iflag_con=5: version lmd with ice (previously named convectg)
    149   ! S. Bony, Oct 2002:
    150   ! * Vectorization of convect3 (ie version lmd)
    151 
    152   ! ..............................END PROLOGUE.............................
     40! .............................START PROLOGUE............................
     41
     42
     43! All argument names (except len,nd,ntra,nloc,delt and the flags) have a "1" appended.
     44! The "1" is removed for the corresponding compressed variables.
     45! PARAMETERS:
     46! Name            Type         Usage            Description
     47! ----------      ----------     -------  ----------------------------
     48
     49! len           Integer        Input        first (i) dimension
     50! nd            Integer        Input        vertical (k) dimension
     51! ndp1          Integer        Input        nd + 1
     52! ntra          Integer        Input        number of tracors
     53! iflag_con     Integer        Input        version of convect (3/4)
     54! iflag_mix     Integer        Input        version of mixing  (0/1/2)
     55! iflag_ice_thermo Integer        Input        accounting for ice thermodynamics (0/1)
     56! iflag_clos    Integer        Input        version of closure (0/1)
     57! ok_conserv_q  Logical        Input        when true corrections for water conservation are swtiched on
     58! delt          Real           Input        time step
     59! t1            Real           Input        temperature (sat draught envt)
     60! q1            Real           Input        specific hum (sat draught envt)
     61! qs1           Real           Input        sat specific hum (sat draught envt)
     62! t1_wake       Real           Input        temperature (unsat draught envt)
     63! q1_wake       Real           Input        specific hum(unsat draught envt)
     64! qs1_wake      Real           Input        sat specific hum(unsat draughts envt)
     65! s1_wake       Real           Input        fractionnal area covered by wakes
     66! u1            Real           Input        u-wind
     67! v1            Real           Input        v-wind
     68! tra1          Real           Input        tracors
     69! p1            Real           Input        full level pressure
     70! ph1           Real           Input        half level pressure
     71! ALE1          Real           Input        Available lifting Energy
     72! ALP1          Real           Input        Available lifting Power
     73! sig1feed1     Real           Input        sigma coord at lower bound of feeding layer
     74! sig2feed1     Real           Input        sigma coord at upper bound of feeding layer
     75! wght1         Real           Input        weight density determining the feeding mixture
     76! iflag1        Integer        Output       flag for Emanuel conditions
     77! ft1           Real           Output       temp tend
     78! fq1           Real           Output       spec hum tend
     79! fu1           Real           Output       u-wind tend
     80! fv1           Real           Output       v-wind tend
     81! ftra1         Real           Output       tracor tend
     82! precip1       Real           Output       precipitation
     83! kbas1         Integer        Output       cloud base level
     84! ktop1         Integer        Output       cloud top level
     85! cbmf1         Real           Output       cloud base mass flux
     86! sig1          Real           In/Out       section adiabatic updraft
     87! w01           Real           In/Out       vertical velocity within adiab updraft
     88! ptop21        Real           In/Out       top of entraining zone
     89! Ma1           Real           Output       mass flux adiabatic updraft
     90! mip1          Real           Output       mass flux shed by the adiabatic updraft
     91! Vprecip1      Real           Output       vertical profile of precipitations
     92! upwd1         Real           Output       total upward mass flux (adiab+mixed)
     93! dnwd1         Real           Output       saturated downward mass flux (mixed)
     94! dnwd01        Real           Output       unsaturated downward mass flux
     95! qcondc1       Real           Output       in-cld mixing ratio of condensed water
     96! wd1           Real           Output       downdraft velocity scale for sfc fluxes
     97! cape1         Real           Output       CAPE
     98! cin1          Real           Output       CIN
     99! tvp1          Real           Output       adiab lifted parcell virt temp
     100! ftd1          Real           Output       precip temp tend
     101! fqt1          Real           Output       precip spec hum tend
     102! Plim11        Real           Output
     103! Plim21        Real           Output
     104! asupmax1      Real           Output
     105! supmax01      Real           Output
     106! asupmaxmin1   Real           Output
     107
     108! ftd1          Real           Output  Array of temperature tendency due to precipitations (K/s) of dimension ND,
     109!                                      defined at same grid levels as T, Q, QS and P.
     110
     111! fqd1          Real           Output  Array of specific humidity tendencies due to precipitations ((gm/gm)/s)
     112!                                      of dimension ND, defined at same grid levels as T, Q, QS and P.
     113
     114! wdtrainA1     Real           Output   precipitation detrained from adiabatic draught;
     115!                                         used in tracer transport (cvltr)
     116! wdtrainM1     Real           Output   precipitation detrained from mixed draughts;
     117!                                         used in tracer transport (cvltr)
     118! da1           Real           Output     used in tracer transport (cvltr)
     119! phi1          Real           Output     used in tracer transport (cvltr)
     120! mp1           Real           Output     used in tracer transport (cvltr)
     121                                         
     122! phi21         Real           Output     used in tracer transport (cvltr)
     123                                         
     124! d1a1          Real           Output     used in tracer transport (cvltr)
     125! dam1          Real           Output     used in tracer transport (cvltr)
     126                                         
     127! epmlmMm1      Real           Output     used in tracer transport (cvltr)
     128! eplaMm1       Real           Output     used in tracer transport (cvltr)
     129                                         
     130! evap1         Real           Output   
     131! ep1           Real           Output   
     132! sigij1        Real           Output     used in tracer transport (cvltr)
     133! elij1         Real           Output
     134! wghti1        Real           Output   final weight of the feeding layers,
     135!                                         used in tracer transport (cvltr)
     136
     137
     138! S. Bony, Mar 2002:
     139! * Several modules corresponding to different physical processes
     140! * Several versions of convect may be used:
     141!         - iflag_con=3: version lmd  (previously named convect3)
     142!         - iflag_con=4: version 4.3b (vect. version, previously convect1/2)
     143! + tard: - iflag_con=5: version lmd with ice (previously named convectg)
     144! S. Bony, Oct 2002:
     145! * Vectorization of convect3 (ie version lmd)
     146
     147! ..............................END PROLOGUE.............................
    153148
    154149
    155150  include "dimensions.h"
    156   ! cccc#include "dimphy.h"
     151!!!!!#include "dimphy.h"
    157152  include 'iniprint.h'
    158153
    159154
    160   ! Input
     155! Input
    161156  INTEGER len
    162157  INTEGER nd
     
    167162  INTEGER iflag_ice_thermo
    168163  INTEGER iflag_clos
     164  LOGICAL ok_conserv_q
    169165  REAL delt
    170166  REAL t1(len, nd)
     
    180176  REAL p1(len, nd)
    181177  REAL ph1(len, ndp1)
    182   REAL ale1(len)
    183   REAL alp1(len)
     178  REAL Ale1(len)
     179  REAL Alp1(len)
    184180  REAL sig1feed1 ! pressure at lower bound of feeding layer
    185181  REAL sig2feed1 ! pressure at upper bound of feeding layer
    186182  REAL wght1(nd) ! weight density determining the feeding mixture
    187183
    188   ! Output
     184! Output
    189185  INTEGER iflag1(len)
    190186  REAL ft1(len, nd)
     
    206202  REAL ma1(len, nd)
    207203  REAL mip1(len, nd)
    208   ! real Vprecip1(len,nd)
     204! real Vprecip1(len,nd)
    209205  REAL vprecip1(len, nd+1)
    210206  REAL upwd1(len, nd)
     
    217213  REAL tvp1(len, nd)
    218214
    219   ! AC!
    220   ! !      real da1(len,nd),phi1(len,nd,nd)
    221   ! !      real da(len,nd),phi(len,nd,nd)
    222   ! AC!
     215!AC!
     216!!      real da1(len,nd),phi1(len,nd,nd)
     217!!      real da(len,nd),phi(len,nd,nd)
     218!AC!
    223219  REAL ftd1(len, nd)
    224220  REAL fqd1(len, nd)
    225   REAL plim11(len)
    226   REAL plim21(len)
     221  REAL Plim11(len)
     222  REAL Plim21(len)
    227223  REAL asupmax1(len, nd)
    228224  REAL supmax01(len)
    229225  REAL asupmaxmin1(len)
    230226  INTEGER lalim_conv(len)
    231   ! RomP >>>
    232   REAL wdtraina1(len, nd), wdtrainm1(len, nd)
     227! RomP >>>
     228  REAL wdtrainA1(len, nd), wdtrainM1(len, nd)
    233229  REAL da1(len, nd), phi1(len, nd, nd), mp1(len, nd)
    234   REAL epmlmmm1(len, nd, nd), eplamm1(len, nd)
     230  REAL epmlmMm1(len, nd, nd), eplaMm1(len, nd)
    235231  REAL evap1(len, nd), ep1(len, nd)
    236232  REAL sigij1(len, nd, nd), elij1(len, nd, nd)
     233!JYG,RL
     234  REAL wghti1(len, nd) ! final weight of the feeding layers
     235!JYG,RL
    237236  REAL phi21(len, nd, nd)
    238237  REAL d1a1(len, nd), dam1(len, nd)
    239   ! RomP <<<
    240 
    241   ! -------------------------------------------------------------------
    242   ! Prolog by Kerry Emanuel.
    243   ! -------------------------------------------------------------------
    244   ! --- ARGUMENTS
    245   ! -------------------------------------------------------------------
    246   ! --- On input:
    247 
    248   ! t:   Array of absolute temperature (K) of dimension ND, with first
    249   ! index corresponding to lowest model level. Note that this array
    250   ! will be altered by the subroutine if dry convective adjustment
    251   ! occurs and if IPBL is not equal to 0.
    252 
    253   ! q:   Array of specific humidity (gm/gm) of dimension ND, with first
    254   ! index corresponding to lowest model level. Must be defined
    255   ! at same grid levels as T. Note that this array will be altered
    256   ! if dry convective adjustment occurs and if IPBL is not equal to 0.
    257 
    258   ! qs:  Array of saturation specific humidity of dimension ND, with first
    259   ! index corresponding to lowest model level. Must be defined
    260   ! at same grid levels as T. Note that this array will be altered
    261   ! if dry convective adjustment occurs and if IPBL is not equal to 0.
    262 
    263   ! t_wake: Array of absolute temperature (K), seen by unsaturated draughts,
    264   ! of dimension ND, with first index corresponding to lowest model level.
    265 
    266   ! q_wake: Array of specific humidity (gm/gm), seen by unsaturated draughts,
    267   ! of dimension ND, with first index corresponding to lowest model level.
    268   ! Must be defined at same grid levels as T.
    269 
    270   ! qs_wake: Array of saturation specific humidity, seen by unsaturated
    271   ! draughts,
    272   ! of dimension ND, with first index corresponding to lowest model level.
    273   ! Must be defined at same grid levels as T.
    274 
    275   ! s_wake: Array of fractionnal area occupied by the wakes.
    276 
    277   ! u:   Array of zonal wind velocity (m/s) of dimension ND, witth first
    278   ! index corresponding with the lowest model level. Defined at
    279   ! same levels as T. Note that this array will be altered if
    280   ! dry convective adjustment occurs and if IPBL is not equal to 0.
    281 
    282   ! v:   Same as u but for meridional velocity.
    283 
    284   ! tra: Array of passive tracer mixing ratio, of dimensions (ND,NTRA),
    285   ! where NTRA is the number of different tracers. If no
    286   ! convective tracer transport is needed, define a dummy
    287   ! input array of dimension (ND,1). Tracers are defined at
    288   ! same vertical levels as T. Note that this array will be altered
    289   ! if dry convective adjustment occurs and if IPBL is not equal to 0.
    290 
    291   ! p:   Array of pressure (mb) of dimension ND, with first
    292   ! index corresponding to lowest model level. Must be defined
    293   ! at same grid levels as T.
    294 
    295   ! ph:  Array of pressure (mb) of dimension ND+1, with first index
    296   ! corresponding to lowest level. These pressures are defined at
    297   ! levels intermediate between those of P, T, Q and QS. The first
    298   ! value of PH should be greater than (i.e. at a lower level than)
    299   ! the first value of the array P.
    300 
    301   ! ALE:  Available lifting Energy
    302 
    303   ! ALP:  Available lifting Power
    304 
    305   ! nl:  The maximum number of levels to which convection can penetrate, plus
    306   ! 1.
    307   ! NL MUST be less than or equal to ND-1.
    308 
    309   ! delt: The model time step (sec) between calls to CONVECT
    310 
    311   ! ----------------------------------------------------------------------------
    312   ! ---   On Output:
    313 
    314   ! iflag: An output integer whose value denotes the following:
    315   ! VALUE   INTERPRETATION
    316   ! -----   --------------
    317   ! 0     Moist convection occurs.
    318   ! 1     Moist convection occurs, but a CFL condition
    319   ! on the subsidence warming is violated. This
    320   ! does not cause the scheme to terminate.
    321   ! 2     Moist convection, but no precip because ep(inb) lt 0.0001
    322   ! 3     No moist convection because new cbmf is 0 and old cbmf is 0.
    323   ! 4     No moist convection; atmosphere is not
    324   ! unstable
    325   ! 6     No moist convection because ihmin le minorig.
    326   ! 7     No moist convection because unreasonable
    327   ! parcel level temperature or specific humidity.
    328   ! 8     No moist convection: lifted condensation
    329   ! level is above the 200 mb level.
    330   ! 9     No moist convection: cloud base is higher
    331   ! then the level NL-1.
    332 
    333   ! ft:   Array of temperature tendency (K/s) of dimension ND, defined at
    334   ! same
    335   ! grid levels as T, Q, QS and P.
    336 
    337   ! fq:   Array of specific humidity tendencies ((gm/gm)/s) of dimension ND,
    338   ! defined at same grid levels as T, Q, QS and P.
    339 
    340   ! fu:   Array of forcing of zonal velocity (m/s^2) of dimension ND,
    341   ! defined at same grid levels as T.
    342 
    343   ! fv:   Same as FU, but for forcing of meridional velocity.
    344 
    345   ! ftra: Array of forcing of tracer content, in tracer mixing ratio per
    346   ! second, defined at same levels as T. Dimensioned (ND,NTRA).
    347 
    348   ! precip: Scalar convective precipitation rate (mm/day).
    349 
    350   ! wd:   A convective downdraft velocity scale. For use in surface
    351   ! flux parameterizations. See convect.ps file for details.
    352 
    353   ! tprime: A convective downdraft temperature perturbation scale (K).
    354   ! For use in surface flux parameterizations. See convect.ps
    355   ! file for details.
    356 
    357   ! qprime: A convective downdraft specific humidity
    358   ! perturbation scale (gm/gm).
    359   ! For use in surface flux parameterizations. See convect.ps
    360   ! file for details.
    361 
    362   ! cbmf: The cloud base mass flux ((kg/m**2)/s). THIS SCALAR VALUE MUST
    363   ! BE STORED BY THE CALLING PROGRAM AND RETURNED TO CONVECT AT
    364   ! ITS NEXT CALL. That is, the value of CBMF must be "remembered"
    365   ! by the calling program between calls to CONVECT.
    366 
    367   ! det:   Array of detrainment mass flux of dimension ND.
    368   ! -------------------------------------------------------------------
    369 
    370   ! Local arrays
     238! RomP <<<
     239
     240! -------------------------------------------------------------------
     241! Prolog by Kerry Emanuel.
     242! -------------------------------------------------------------------
     243! --- ARGUMENTS
     244! -------------------------------------------------------------------
     245! --- On input:
     246
     247! t:   Array of absolute temperature (K) of dimension ND, with first
     248! index corresponding to lowest model level. Note that this array
     249! will be altered by the subroutine if dry convective adjustment
     250! occurs and if IPBL is not equal to 0.
     251
     252! q:   Array of specific humidity (gm/gm) of dimension ND, with first
     253! index corresponding to lowest model level. Must be defined
     254! at same grid levels as T. Note that this array will be altered
     255! if dry convective adjustment occurs and if IPBL is not equal to 0.
     256
     257! qs:  Array of saturation specific humidity of dimension ND, with first
     258! index corresponding to lowest model level. Must be defined
     259! at same grid levels as T. Note that this array will be altered
     260! if dry convective adjustment occurs and if IPBL is not equal to 0.
     261
     262! t_wake: Array of absolute temperature (K), seen by unsaturated draughts,
     263! of dimension ND, with first index corresponding to lowest model level.
     264
     265! q_wake: Array of specific humidity (gm/gm), seen by unsaturated draughts,
     266! of dimension ND, with first index corresponding to lowest model level.
     267! Must be defined at same grid levels as T.
     268
     269! qs_wake: Array of saturation specific humidity, seen by unsaturated draughts,
     270! of dimension ND, with first index corresponding to lowest model level.
     271! Must be defined at same grid levels as T.
     272
     273! s_wake: Array of fractionnal area occupied by the wakes.
     274
     275! u:   Array of zonal wind velocity (m/s) of dimension ND, witth first
     276! index corresponding with the lowest model level. Defined at
     277! same levels as T. Note that this array will be altered if
     278! dry convective adjustment occurs and if IPBL is not equal to 0.
     279
     280! v:   Same as u but for meridional velocity.
     281
     282! tra: Array of passive tracer mixing ratio, of dimensions (ND,NTRA),
     283! where NTRA is the number of different tracers. If no
     284! convective tracer transport is needed, define a dummy
     285! input array of dimension (ND,1). Tracers are defined at
     286! same vertical levels as T. Note that this array will be altered
     287! if dry convective adjustment occurs and if IPBL is not equal to 0.
     288
     289! p:   Array of pressure (mb) of dimension ND, with first
     290! index corresponding to lowest model level. Must be defined
     291! at same grid levels as T.
     292
     293! ph:  Array of pressure (mb) of dimension ND+1, with first index
     294! corresponding to lowest level. These pressures are defined at
     295! levels intermediate between those of P, T, Q and QS. The first
     296! value of PH should be greater than (i.e. at a lower level than)
     297! the first value of the array P.
     298
     299! ALE:  Available lifting Energy
     300
     301! ALP:  Available lifting Power
     302
     303! nl:  The maximum number of levels to which convection can penetrate, plus 1.
     304!       NL MUST be less than or equal to ND-1.
     305
     306! delt: The model time step (sec) between calls to CONVECT
     307
     308! ----------------------------------------------------------------------------
     309! ---   On Output:
     310
     311! iflag: An output integer whose value denotes the following:
     312!       VALUE   INTERPRETATION
     313!       -----   --------------
     314!         0     Moist convection occurs.
     315!         1     Moist convection occurs, but a CFL condition
     316!               on the subsidence warming is violated. This
     317!               does not cause the scheme to terminate.
     318!         2     Moist convection, but no precip because ep(inb) lt 0.0001
     319!         3     No moist convection because new cbmf is 0 and old cbmf is 0.
     320!         4     No moist convection; atmosphere is not
     321!               unstable
     322!         6     No moist convection because ihmin le minorig.
     323!         7     No moist convection because unreasonable
     324!               parcel level temperature or specific humidity.
     325!         8     No moist convection: lifted condensation
     326!               level is above the 200 mb level.
     327!         9     No moist convection: cloud base is higher
     328!               then the level NL-1.
     329
     330! ft:   Array of temperature tendency (K/s) of dimension ND, defined at same
     331!       grid levels as T, Q, QS and P.
     332
     333! fq:   Array of specific humidity tendencies ((gm/gm)/s) of dimension ND,
     334!       defined at same grid levels as T, Q, QS and P.
     335
     336! fu:   Array of forcing of zonal velocity (m/s^2) of dimension ND,
     337!      defined at same grid levels as T.
     338
     339! fv:   Same as FU, but for forcing of meridional velocity.
     340
     341! ftra: Array of forcing of tracer content, in tracer mixing ratio per
     342!       second, defined at same levels as T. Dimensioned (ND,NTRA).
     343
     344! precip: Scalar convective precipitation rate (mm/day).
     345
     346! wd:   A convective downdraft velocity scale. For use in surface
     347!       flux parameterizations. See convect.ps file for details.
     348
     349! tprime: A convective downdraft temperature perturbation scale (K).
     350!         For use in surface flux parameterizations. See convect.ps
     351!         file for details.
     352
     353! qprime: A convective downdraft specific humidity
     354!         perturbation scale (gm/gm).
     355!         For use in surface flux parameterizations. See convect.ps
     356!         file for details.
     357
     358! cbmf: The cloud base mass flux ((kg/m**2)/s). THIS SCALAR VALUE MUST
     359!       BE STORED BY THE CALLING PROGRAM AND RETURNED TO CONVECT AT
     360!       ITS NEXT CALL. That is, the value of CBMF must be "remembered"
     361!       by the calling program between calls to CONVECT.
     362
     363! det:   Array of detrainment mass flux of dimension ND.
     364! -------------------------------------------------------------------
     365
     366! Local (non compressed) arrays
    371367
    372368
     
    380376  LOGICAL ok_inhib ! True => possible inhibition of convection by dryness
    381377  LOGICAL, SAVE :: debut = .TRUE.
    382   !$OMP THREADPRIVATE(debut)
     378!$OMP THREADPRIVATE(debut)
    383379
    384380  REAL tnk1(klon)
     
    414410  REAL p1feed1(len) ! pressure at lower bound of feeding layer
    415411  REAL p2feed1(len) ! pressure at upper bound of feeding layer
    416   REAL wghti1(len, nd) ! weights of the feeding layers
    417 
    418   ! (local) compressed fields:
     412!JYG,RL
     413!!      real wghti1(len,nd) ! weights of the feeding layers
     414!JYG,RL
     415
     416! (local) compressed fields:
    419417
    420418  INTEGER nloc
    421   ! parameter (nloc=klon) ! pour l'instant
     419! parameter (nloc=klon) ! pour l'instant
    422420
    423421  INTEGER idcum(nloc)
     
    456454  REAL elij(nloc, klev, klev)
    457455  REAL supmax(nloc, klev)
    458   REAL ale(nloc), alp(nloc), coef_clos(nloc)
     456  REAL Ale(nloc), Alp(nloc), coef_clos(nloc)
    459457  REAL sigd(nloc)
    460   ! real mp(nloc,klev), qp(nloc,klev), up(nloc,klev), vp(nloc,klev)
    461   ! real wt(nloc,klev), water(nloc,klev), evap(nloc,klev), ice(nloc,klev)
    462   ! real b(nloc,klev), sigd(nloc)
    463   ! save mp,qp,up,vp,wt,water,evap,b
     458! real mp(nloc,klev), qp(nloc,klev), up(nloc,klev), vp(nloc,klev)
     459! real wt(nloc,klev), water(nloc,klev), evap(nloc,klev), ice(nloc,klev)
     460! real b(nloc,klev), sigd(nloc)
     461! save mp,qp,up,vp,wt,water,evap,b
    464462  REAL, SAVE, ALLOCATABLE :: mp(:, :), qp(:, :), up(:, :), vp(:, :)
    465463  REAL, SAVE, ALLOCATABLE :: wt(:, :), water(:, :), evap(:, :)
    466464  REAL, SAVE, ALLOCATABLE :: ice(:, :), fondue(:, :), b(:, :)
    467465  REAL, SAVE, ALLOCATABLE :: frac(:, :), faci(:, :)
    468   !$OMP THREADPRIVATE(mp,qp,up,vp,wt,water,evap,ice,fondue,b,frac,faci)
     466!$OMP THREADPRIVATE(mp,qp,up,vp,wt,water,evap,ice,fondue,b,frac,faci)
    469467  REAL ft(nloc, klev), fq(nloc, klev)
    470468  REAL ftd(nloc, klev), fqd(nloc, klev)
     
    474472  REAL tps(nloc, klev), qprime(nloc), tprime(nloc)
    475473  REAL precip(nloc)
    476   ! real Vprecip(nloc,klev)
     474! real Vprecip(nloc,klev)
    477475  REAL vprecip(nloc, klev+1)
    478476  REAL tra(nloc, klev, ntra), trap(nloc, klev, ntra)
    479477  REAL ftra(nloc, klev, ntra), traent(nloc, klev, klev, ntra)
    480   REAL qcondc(nloc, klev) ! cld
    481   REAL wd(nloc) ! gust
    482   REAL plim1(nloc), plim2(nloc)
     478  REAL qcondc(nloc, klev)      ! cld
     479  REAL wd(nloc)                ! gust
     480  REAL Plim1(nloc), plim2(nloc)
    483481  REAL asupmax(nloc, klev)
    484482  REAL supmax0(nloc)
     
    489487  REAL hnk(nloc), unk(nloc), vnk(nloc)
    490488
    491   ! RomP >>>
    492   REAL wdtraina(nloc, klev), wdtrainm(nloc, klev)
     489! RomP >>>
     490  REAL wdtrainA(nloc, klev), wdtrainM(nloc, klev)
    493491  REAL da(len, nd), phi(len, nd, nd)
    494   REAL epmlmmm(nloc, klev, klev), eplamm(nloc, klev)
     492  REAL epmlmMm(nloc, klev, klev), eplaMm(nloc, klev)
    495493  REAL phi2(len, nd, nd)
    496494  REAL d1a(len, nd), dam(len, nd)
    497   ! RomP <<<
     495! RomP <<<
    498496
    499497  LOGICAL, SAVE :: first = .TRUE.
    500   !$OMP THREADPRIVATE(first)
     498!$OMP THREADPRIVATE(first)
    501499  CHARACTER (LEN=20) :: modname = 'cva_driver'
    502500  CHARACTER (LEN=80) :: abort_message
    503501
    504502
    505   ! print *, 't1, t1_wake ',(k,t1(1,k),t1_wake(1,k),k=1,klev)
    506   ! print *, 'q1, q1_wake ',(k,q1(1,k),q1_wake(1,k),k=1,klev)
    507 
    508   ! -------------------------------------------------------------------
    509   ! --- SET CONSTANTS AND PARAMETERS
    510   ! -------------------------------------------------------------------
     503! print *, 't1, t1_wake ',(k,t1(1,k),t1_wake(1,k),k=1,klev)
     504! print *, 'q1, q1_wake ',(k,q1(1,k),q1_wake(1,k),k=1,klev)
     505
     506! -------------------------------------------------------------------
     507! --- SET CONSTANTS AND PARAMETERS
     508! -------------------------------------------------------------------
    511509
    512510  IF (first) THEN
     
    518516    first = .FALSE.
    519517  END IF
    520   ! -- set simulation flags:
    521   ! (common cvflag)
     518! -- set simulation flags:
     519! (common cvflag)
    522520
    523521  CALL cv_flag(iflag_ice_thermo)
    524522
    525   ! -- set thermodynamical constants:
    526   ! (common cvthermo)
     523! -- set thermodynamical constants:
     524! (common cvthermo)
    527525
    528526  CALL cv_thermo(iflag_con)
    529527
    530   ! -- set convect parameters
    531 
    532   ! includes microphysical parameters and parameters that
    533   ! control the rate of approach to quasi-equilibrium)
    534   ! (common cvparam)
     528! -- set convect parameters
     529
     530! includes microphysical parameters and parameters that
     531! control the rate of approach to quasi-equilibrium)
     532! (common cvparam)
    535533
    536534  IF (iflag_con==3) THEN
     
    543541  END IF
    544542
    545   ! ---------------------------------------------------------------------
    546   ! --- INITIALIZE OUTPUT ARRAYS AND PARAMETERS
    547   ! ---------------------------------------------------------------------
     543! ---------------------------------------------------------------------
     544! --- INITIALIZE OUTPUT ARRAYS AND PARAMETERS
     545! ---------------------------------------------------------------------
    548546  nword1 = len
    549547  nword2 = len*nd
     
    576574  ftd1(:, :) = 0.
    577575  fqd1(:, :) = 0.
    578   plim11(:) = 0.
    579   plim21(:) = 0.
     576  Plim11(:) = 0.
     577  Plim21(:) = 0.
    580578  asupmax1(:, :) = 0.
    581579  supmax01(:) = 0.
     
    594592  END IF
    595593
    596   ! RomP >>>
    597   wdtraina1(:, :) = 0.
    598   wdtrainm1(:, :) = 0.
     594! RomP >>>
     595  wdtrainA1(:, :) = 0.
     596  wdtrainM1(:, :) = 0.
    599597  da1(:, :) = 0.
    600598  phi1(:, :, :) = 0.
    601   epmlmmm1(:, :, :) = 0.
    602   eplamm1(:, :) = 0.
     599  epmlmMm1(:, :, :) = 0.
     600  eplaMm1(:, :) = 0.
    603601  mp1(:, :) = 0.
    604602  evap1(:, :) = 0.
     
    609607  d1a1(:, :) = 0.
    610608  dam1(:, :) = 0.
    611   ! RomP <<<
    612   ! ---------------------------------------------------------------------
    613   ! --- INITIALIZE LOCAL ARRAYS AND PARAMETERS
    614   ! ---------------------------------------------------------------------
     609! RomP <<<
     610! ---------------------------------------------------------------------
     611! --- INITIALIZE LOCAL ARRAYS AND PARAMETERS
     612! ---------------------------------------------------------------------
    615613
    616614  DO il = 1, nloc
     
    618616  END DO
    619617
    620   ! --------------------------------------------------------------------
    621   ! --- CALCULATE ARRAYS OF GEOPOTENTIAL, HEAT CAPACITY & STATIC ENERGY
    622   ! --------------------------------------------------------------------
     618! --------------------------------------------------------------------
     619! --- CALCULATE ARRAYS OF GEOPOTENTIAL, HEAT CAPACITY & STATIC ENERGY
     620! --------------------------------------------------------------------
    623621
    624622  IF (iflag_con==3) THEN
     
    627625      PRINT *, 'Emanuel version 3 nouvelle'
    628626    END IF
    629     ! print*,'t1, q1 ',t1,q1
    630     CALL cv3_prelim(len, nd, ndp1, t1, q1, p1, ph1 & ! nd->na
    631       , lv1, lf1, cpn1, tv1, gz1, h1, hm1, th1)
    632 
    633 
    634     CALL cv3_prelim(len, nd, ndp1, t1_wake, q1_wake, p1, ph1 & !
    635                                                                ! nd->na
    636       , lv1_wake, lf1_wake, cpn1_wake, tv1_wake, gz1_wake, h1_wake, bid, &
    637       th1_wake)
     627! print*,'t1, q1 ',t1,q1
     628    CALL cv3_prelim(len, nd, ndp1, t1, q1, p1, ph1, &           ! nd->na
     629                    lv1, lf1, cpn1, tv1, gz1, h1, hm1, th1)
     630
     631
     632    CALL cv3_prelim(len, nd, ndp1, t1_wake, q1_wake, p1, ph1, & ! nd->na
     633                    lv1_wake, lf1_wake, cpn1_wake, tv1_wake, gz1_wake, &
     634                    h1_wake, bid, th1_wake)
    638635
    639636  END IF
     
    641638  IF (iflag_con==4) THEN
    642639    PRINT *, 'Emanuel version 4 '
    643     CALL cv_prelim(len, nd, ndp1, t1, q1, p1, ph1, lv1, cpn1, tv1, gz1, h1, &
    644       hm1)
    645   END IF
    646 
    647   ! --------------------------------------------------------------------
    648   ! --- CONVECTIVE FEED
    649   ! --------------------------------------------------------------------
    650 
    651   ! compute feeding layer potential temperature and mixing ratio :
    652 
    653   ! get bounds of feeding layer
    654 
    655   ! test niveaux couche alimentation KE
     640    CALL cv_prelim(len, nd, ndp1, t1, q1, p1, ph1, &
     641                   lv1, cpn1, tv1, gz1, h1, hm1)
     642  END IF
     643
     644! --------------------------------------------------------------------
     645! --- CONVECTIVE FEED
     646! --------------------------------------------------------------------
     647
     648! compute feeding layer potential temperature and mixing ratio :
     649
     650! get bounds of feeding layer
     651
     652! test niveaux couche alimentation KE
    656653  IF (sig1feed1==sig2feed1) THEN
    657654    WRITE (lunout, *) 'impossible de choisir sig1feed=sig2feed'
     
    664661    p1feed1(i) = sig1feed1*ph1(i, 1)
    665662    p2feed1(i) = sig2feed1*ph1(i, 1)
    666     ! test maf
    667     ! p1feed1(i)=ph1(i,1)
    668     ! p2feed1(i)=ph1(i,2)
    669     ! p2feed1(i)=ph1(i,3)
    670     ! testCR: on prend la couche alim des thermiques
    671     ! p2feed1(i)=ph1(i,lalim_conv(i)+1)
    672     ! print*,'lentr=',lentr(i),ph1(i,lentr(i)+1),ph1(i,2)
     663!test maf
     664 p1feed1(i)=ph1(i,1)
     665 p2feed1(i)=ph1(i,2)
     666 p2feed1(i)=ph1(i,3)
     667!testCR: on prend la couche alim des thermiques
     668 p2feed1(i)=ph1(i,lalim_conv(i)+1)
     669 print*,'lentr=',lentr(i),ph1(i,lentr(i)+1),ph1(i,2)
    673670  END DO
    674671
     
    676673  END IF
    677674  DO i = 1, len
    678     ! print*,'avant cv3_feed plim',p1feed1(i),p2feed1(i)
     675! print*,'avant cv3_feed Plim',p1feed1(i),p2feed1(i)
    679676  END DO
    680677  IF (iflag_con==3) THEN
    681678
    682     ! print*, 'IFLAG1 avant cv3_feed'
    683     ! print*,'len,nd',len,nd
    684     ! write(*,'(64i1)') iflag1(2:klon-1)
    685 
    686     CALL cv3_feed(len, nd, t1, q1, u1, v1, p1, ph1, hm1, gz1 & !
    687                                                                ! nd->na
    688       , p1feed1, p2feed1, wght1, wghti1, tnk1, thnk1, qnk1, qsnk1, unk1, &
    689       vnk1, cpnk1, hnk1, nk1, icb1, icbmax, iflag1, gznk1, plcl1)
    690   END IF
    691 
    692   ! print*, 'IFLAG1 apres cv3_feed'
    693   ! print*,'len,nd',len,nd
    694   ! write(*,'(64i1)') iflag1(2:klon-1)
     679! print*, 'IFLAG1 avant cv3_feed'
     680! print*,'len,nd',len,nd
     681! write(*,'(64i1)') iflag1(2:klon-1)
     682
     683    CALL cv3_feed(len, nd, ok_conserv_q, &                 ! nd->na
     684                  t1, q1, u1, v1, p1, ph1, hm1, gz1, &
     685                  p1feed1, p2feed1, wght1, &
     686                  wghti1, tnk1, thnk1, qnk1, qsnk1, unk1, vnk1, &
     687                  cpnk1, hnk1, nk1, icb1, icbmax, iflag1, gznk1, plcl1)
     688  END IF
     689
     690! print*, 'IFLAG1 apres cv3_feed'
     691! print*,'len,nd',len,nd
     692! write(*,'(64i1)') iflag1(2:klon-1)
    695693
    696694  IF (iflag_con==4) THEN
    697     CALL cv_feed(len, nd, t1, q1, qs1, p1, hm1, gz1, nk1, icb1, icbmax, &
    698       iflag1, tnk1, qnk1, gznk1, plcl1)
    699   END IF
    700 
    701   ! print *, 'cv3_feed-> iflag1, plcl1 ',iflag1(1),plcl1(1)
    702 
    703   ! --------------------------------------------------------------------
    704   ! --- UNDILUTE (ADIABATIC) UPDRAFT / 1st part
    705   ! (up through ICB for convect4, up through ICB+1 for convect3)
    706   ! Calculates the lifted parcel virtual temperature at nk, the
    707   ! actual temperature, and the adiabatic liquid water content.
    708   ! --------------------------------------------------------------------
     695    CALL cv_feed(len, nd, t1, q1, qs1, p1, hm1, gz1, &
     696                 nk1, icb1, icbmax, iflag1, tnk1, qnk1, gznk1, plcl1)
     697  END IF
     698
     699! print *, 'cv3_feed-> iflag1, plcl1 ',iflag1(1),plcl1(1)
     700
     701! --------------------------------------------------------------------
     702! --- UNDILUTE (ADIABATIC) UPDRAFT / 1st part
     703! (up through ICB for convect4, up through ICB+1 for convect3)
     704! Calculates the lifted parcel virtual temperature at nk, the
     705! actual temperature, and the adiabatic liquid water content.
     706! --------------------------------------------------------------------
    709707
    710708  IF (iflag_con==3) THEN
    711709
    712     CALL cv3_undilute1(len, nd, t1, qs1, gz1, plcl1, p1, icb1, tnk1, qnk1 & ! nd->na
    713       , gznk1, tp1, tvp1, clw1, icbs1)
     710    CALL cv3_undilute1(len, nd, t1, qs1, gz1, plcl1, p1, icb1, tnk1, qnk1, & ! nd->na
     711                      gznk1, tp1, tvp1, clw1, icbs1)
    714712  END IF
    715713
    716714
    717715  IF (iflag_con==4) THEN
    718     CALL cv_undilute1(len, nd, t1, q1, qs1, gz1, p1, nk1, icb1, icbmax, tp1, &
    719       tvp1, clw1)
    720   END IF
    721 
    722   ! -------------------------------------------------------------------
    723   ! --- TRIGGERING
    724   ! -------------------------------------------------------------------
    725 
    726   ! print *,' avant triggering, iflag_con ',iflag_con
     716    CALL cv_undilute1(len, nd, t1, q1, qs1, gz1, p1, nk1, icb1, icbmax, &
     717                      tp1, tvp1, clw1)
     718  END IF
     719
     720! -------------------------------------------------------------------
     721! --- TRIGGERING
     722! -------------------------------------------------------------------
     723
     724! print *,' avant triggering, iflag_con ',iflag_con
    727725
    728726  IF (iflag_con==3) THEN
    729727
    730     CALL cv3_trigger(len, nd, icb1, plcl1, p1, th1, tv1, tvp1, thnk1 & !
    731                                                                        ! nd->na
    732       , pbase1, buoybase1, iflag1, sig1, w01)
    733 
    734 
    735     ! print*, 'IFLAG1 apres cv3_triger'
    736     ! print*,'len,nd',len,nd
    737     ! write(*,'(64i1)') iflag1(2:klon-1)
    738 
    739     ! call dump2d(iim,jjm-1,sig1(2)
     728    CALL cv3_trigger(len, nd, icb1, plcl1, p1, th1, tv1, tvp1, thnk1, & ! nd->na
     729                      pbase1, buoybase1, iflag1, sig1, w01)
     730
     731
     732! print*, 'IFLAG1 apres cv3_triger'
     733! print*,'len,nd',len,nd
     734! write(*,'(64i1)') iflag1(2:klon-1)
     735
     736! call dump2d(iim,jjm-1,sig1(2)
    740737  END IF
    741738
     
    745742
    746743
    747   ! =====================================================================
    748   ! --- IF THIS POINT IS REACHED, MOIST CONVECTIVE ADJUSTMENT IS NECESSARY
    749   ! =====================================================================
     744! =====================================================================
     745! --- IF THIS POINT IS REACHED, MOIST CONVECTIVE ADJUSTMENT IS NECESSARY
     746! =====================================================================
    750747
    751748  ncum = 0
     
    757754  END DO
    758755
    759   ! print*,'klon, ncum = ',len,ncum
     756! print*,'klon, ncum = ',len,ncum
    760757
    761758  IF (ncum>0) THEN
    762759
    763     ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    764     ! --- COMPRESS THE FIELDS
    765     ! (-> vectorization over convective gridpoints)
    766     ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
     760! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
     761! --- COMPRESS THE FIELDS
     762!      (-> vectorization over convective gridpoints)
     763! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    767764
    768765    IF (iflag_con==3) THEN
    769       ! print*,'ncum tv1 ',ncum,tv1
    770       ! print*,'tvp1 ',tvp1
    771       CALL cv3a_compress(len, nloc, ncum, nd, ntra, iflag1, nk1, icb1, icbs1, &
    772         plcl1, tnk1, qnk1, gznk1, hnk1, unk1, vnk1, wghti1, pbase1, &
    773         buoybase1, t1, q1, qs1, t1_wake, q1_wake, qs1_wake, s1_wake, u1, v1, &
    774         gz1, th1, th1_wake, tra1, h1, lv1, lf1, cpn1, p1, ph1, tv1, tp1, &
    775         tvp1, clw1, h1_wake, lv1_wake, lf1_wake, cpn1_wake, tv1_wake, sig1, &
    776         w01, ptop21, ale1, alp1, iflag, nk, icb, icbs, plcl, tnk, qnk, gznk, &
    777         hnk, unk, vnk, wghti, pbase, buoybase, t, q, qs, t_wake, q_wake, &
    778         qs_wake, s_wake, u, v, gz, th, th_wake, tra, h, lv, lf, cpn, p, ph, &
    779         tv, tp, tvp, clw, h_wake, lv_wake, lf_wake, cpn_wake, tv_wake, sig, &
    780         w0, ptop2, ale, alp)
    781 
    782       ! print*,'tv ',tv
    783       ! print*,'tvp ',tvp
     766! print*,'ncum tv1 ',ncum,tv1
     767! print*,'tvp1 ',tvp1
     768      CALL cv3a_compress(len, nloc, ncum, nd, ntra, &
     769                         iflag1, nk1, icb1, icbs1, &
     770                         plcl1, tnk1, qnk1, gznk1, hnk1, unk1, vnk1, &
     771                         wghti1, pbase1, buoybase1, &
     772                         t1, q1, qs1, t1_wake, q1_wake, qs1_wake, s1_wake, &
     773                         u1, v1, gz1, th1, th1_wake, &
     774                         tra1, &
     775                         h1, lv1, lf1, cpn1, p1, ph1, tv1, tp1, tvp1, clw1, &
     776                         h1_wake, lv1_wake, lf1_wake, cpn1_wake, tv1_wake, &
     777                         sig1, w01, ptop21, &
     778                         Ale1, Alp1, &
     779                         iflag, nk, icb, icbs, &
     780                         plcl, tnk, qnk, gznk, hnk, unk, vnk, &
     781                         wghti, pbase, buoybase, &
     782                         t, q, qs, t_wake, q_wake, qs_wake, s_wake, &
     783                         u, v, gz, th, th_wake, &
     784                         tra, &
     785                         h, lv, lf, cpn, p, ph, tv, tp, tvp, clw, &
     786                         h_wake, lv_wake, lf_wake, cpn_wake, tv_wake, &
     787                         sig, w0, ptop2, &
     788                         Ale, Alp)
     789
     790! print*,'tv ',tv
     791! print*,'tvp ',tvp
    784792
    785793    END IF
    786794
    787795    IF (iflag_con==4) THEN
    788       CALL cv_compress(len, nloc, ncum, nd, iflag1, nk1, icb1, cbmf1, plcl1, &
    789         tnk1, qnk1, gznk1, t1, q1, qs1, u1, v1, gz1, h1, lv1, cpn1, p1, ph1, &
    790         tv1, tp1, tvp1, clw1, iflag, nk, icb, cbmf, plcl, tnk, qnk, gznk, t, &
    791         q, qs, u, v, gz, h, lv, cpn, p, ph, tv, tp, tvp, clw, dph)
    792     END IF
    793 
    794     ! -------------------------------------------------------------------
    795     ! --- UNDILUTE (ADIABATIC) UPDRAFT / second part :
    796     ! ---   FIND THE REST OF THE LIFTED PARCEL TEMPERATURES
    797     ! ---   &
    798     ! ---   COMPUTE THE PRECIPITATION EFFICIENCIES AND THE
    799     ! ---   FRACTION OF PRECIPITATION FALLING OUTSIDE OF CLOUD
    800     ! ---   &
    801     ! ---   FIND THE LEVEL OF NEUTRAL BUOYANCY
    802     ! -------------------------------------------------------------------
     796      CALL cv_compress(len, nloc, ncum, nd, &
     797                       iflag1, nk1, icb1, &
     798                       cbmf1, plcl1, tnk1, qnk1, gznk1, &
     799                       t1, q1, qs1, u1, v1, gz1, &
     800                       h1, lv1, cpn1, p1, ph1, tv1, tp1, tvp1, clw1, &
     801                       iflag, nk, icb, &
     802                       cbmf, plcl, tnk, qnk, gznk, &
     803                       t, q, qs, u, v, gz, h, lv, cpn, p, ph, tv, tp, tvp, clw, &
     804                       dph)
     805    END IF
     806
     807! -------------------------------------------------------------------
     808! --- UNDILUTE (ADIABATIC) UPDRAFT / second part :
     809! ---   FIND THE REST OF THE LIFTED PARCEL TEMPERATURES
     810! ---   &
     811! ---   COMPUTE THE PRECIPITATION EFFICIENCIES AND THE
     812! ---   FRACTION OF PRECIPITATION FALLING OUTSIDE OF CLOUD
     813! ---   &
     814! ---   FIND THE LEVEL OF NEUTRAL BUOYANCY
     815! -------------------------------------------------------------------
    803816
    804817    IF (iflag_con==3) THEN
    805       CALL cv3_undilute2(nloc, ncum, nd, icb, icbs, nk & !na->nd
    806         , tnk, qnk, gznk, hnk, t, q, qs, gz, p, h, tv, lv, lf, pbase, &
    807         buoybase, plcl, inb, tp, tvp, clw, hp, ep, sigp, buoy, frac)
     818      CALL cv3_undilute2(nloc, ncum, nd, icb, icbs, nk, &              !na->nd
     819                         tnk, qnk, gznk, hnk, t, q, qs, gz, &
     820                         p, h, tv, lv, lf, pbase, buoybase, plcl, &
     821                         inb, tp, tvp, clw, hp, ep, sigp, buoy, &
     822                         frac)
    808823
    809824    END IF
    810825
    811826    IF (iflag_con==4) THEN
    812       CALL cv_undilute2(nloc, ncum, nd, icb, nk, tnk, qnk, gznk, t, q, qs, &
    813         gz, p, dph, h, tv, lv, inb, inbis, tp, tvp, clw, hp, ep, sigp, frac)
    814     END IF
    815 
    816     ! -------------------------------------------------------------------
    817     ! --- MIXING(1)   (if iflag_mix .ge. 1)
    818     ! -------------------------------------------------------------------
     827      CALL cv_undilute2(nloc, ncum, nd, icb, nk, &
     828                        tnk, qnk, gznk, t, q, qs, gz, &
     829                        p, dph, h, tv, lv, &
     830                        inb, inbis, tp, tvp, clw, hp, ep, sigp, frac)
     831    END IF
     832
     833! -------------------------------------------------------------------
     834! --- MIXING(1)   (if iflag_mix .ge. 1)
     835! -------------------------------------------------------------------
    819836    IF (iflag_con==3) THEN
    820837      IF ((iflag_ice_thermo==1) .AND. (iflag_mix/=0)) THEN
    821         WRITE (*, *) ' iflag_ice_thermo==1 requires iflag_mix==0', &
    822           ' but iflag_mix=', iflag_mix, '. Might as well stop here.'
     838        WRITE (*, *) ' iflag_ice_thermo==1 requires iflag_mix==0', ' but iflag_mix=', iflag_mix, &
     839          '. Might as well stop here.'
    823840        STOP
    824841      END IF
    825842      IF (iflag_mix>=1) THEN
    826843        CALL zilch(supmax, nloc*klev)
    827         CALL cv3p_mixing(nloc, ncum, nd, nd, ntra, icb, nk, inb & !
    828                                                                   ! na->nd
    829           , ph, t, q, qs, u, v, tra, h, lv, qnk, unk, vnk, hp, tv, tvp, ep, &
    830           clw, sig, ment, qent, hent, uent, vent, nent, sigij, elij, supmax, &
    831           ments, qents, traent)
    832         ! print*, 'cv3p_mixing-> supmax ', (supmax(1,k), k=1,nd)
     844        CALL cv3p_mixing(nloc, ncum, nd, nd, ntra, icb, nk, inb, &           ! na->nd
     845                         ph, t, q, qs, u, v, tra, h, lv, qnk, &
     846                         unk, vnk, hp, tv, tvp, ep, clw, sig, &
     847                         ment, qent, hent, uent, vent, nent, &
     848                         sigij, elij, supmax, ments, qents, traent)
     849! print*, 'cv3p_mixing-> supmax ', (supmax(1,k), k=1,nd)
    833850
    834851      ELSE
     
    836853      END IF
    837854    END IF
    838     ! -------------------------------------------------------------------
    839     ! --- CLOSURE
    840     ! -------------------------------------------------------------------
     855! -------------------------------------------------------------------
     856! --- CLOSURE
     857! -------------------------------------------------------------------
    841858
    842859
    843860    IF (iflag_con==3) THEN
    844861      IF (iflag_clos==0) THEN
    845         CALL cv3_closure(nloc, ncum, nd, icb, inb & ! na->nd
    846           , pbase, p, ph, tv, buoy, sig, w0, cape, m, iflag)
     862        CALL cv3_closure(nloc, ncum, nd, icb, inb, &           ! na->nd
     863                         pbase, p, ph, tv, buoy, &
     864                         sig, w0, cape, m, iflag)
    847865      END IF
    848866
     
    851869      IF (iflag_clos==1) THEN
    852870        PRINT *, ' pas d appel cv3p_closure'
    853         ! c        CALL cv3p_closure(nloc,ncum,nd,icb,inb              !
    854         ! na->nd
    855         ! c    :                       ,pbase,plcl,p,ph,tv,tvp,buoy
    856         ! c    :                       ,supmax
    857         ! c    o                       ,sig,w0,ptop2,cape,cin,m)
     871! c        CALL cv3p_closure(nloc,ncum,nd,icb,inb              ! na->nd
     872! c    :                       ,pbase,plcl,p,ph,tv,tvp,buoy
     873! c    :                       ,supmax
     874! c    o                       ,sig,w0,ptop2,cape,cin,m)
    858875      END IF
    859876      IF (iflag_clos==2) THEN
    860         CALL cv3p1_closure(nloc, ncum, nd, icb, inb & ! na->nd
    861           , pbase, plcl, p, ph, tv, tvp, buoy, supmax, ok_inhib, ale, alp, &
    862           sig, w0, ptop2, cape, cin, m, iflag, coef_clos, plim1, plim2, &
    863           asupmax, supmax0, asupmaxmin, cbmf, plfc, wbeff)
     877        CALL cv3p1_closure(nloc, ncum, nd, icb, inb, &         ! na->nd
     878                           pbase, plcl, p, ph, tv, tvp, buoy, &
     879                           supmax, ok_inhib, Ale, Alp, &
     880                           sig, w0, ptop2, cape, cin, m, iflag, coef_clos, &
     881                           Plim1, plim2, asupmax, supmax0, &
     882                           asupmaxmin, cbmf, plfc, wbeff)
    864883
    865884        PRINT *, 'cv3p1_closure-> plfc,wbeff ', plfc(1), wbeff(1)
     
    868887
    869888    IF (iflag_con==4) THEN
    870       CALL cv_closure(nloc, ncum, nd, nk, icb, tv, tvp, p, ph, dph, plcl, &
    871         cpn, iflag, cbmf)
    872     END IF
    873 
    874     ! print *,'cv_closure-> cape ',cape(1)
    875 
    876     ! -------------------------------------------------------------------
    877     ! --- MIXING(2)
    878     ! -------------------------------------------------------------------
     889      CALL cv_closure(nloc, ncum, nd, nk, icb, &
     890                         tv, tvp, p, ph, dph, plcl, cpn, &
     891                         iflag, cbmf)
     892    END IF
     893
     894! print *,'cv_closure-> cape ',cape(1)
     895
     896! -------------------------------------------------------------------
     897! --- MIXING(2)
     898! -------------------------------------------------------------------
    879899
    880900    IF (iflag_con==3) THEN
    881901      IF (iflag_mix==0) THEN
    882         CALL cv3_mixing(nloc, ncum, nd, nd, ntra, icb, nk, inb & !
    883                                                                  ! na->nd
    884           , ph, t, q, qs, u, v, tra, h, lv, lf, frac, qnk, unk, vnk, hp, tv, &
    885           tvp, ep, clw, m, sig, ment, qent, uent, vent, nent, sigij, elij, &
    886           ments, qents, traent)
     902        CALL cv3_mixing(nloc, ncum, nd, nd, ntra, icb, nk, inb, &             ! na->nd
     903                        ph, t, q, qs, u, v, tra, h, lv, lf, frac, qnk, &
     904                        unk, vnk, hp, tv, tvp, ep, clw, m, sig, &
     905                        ment, qent, uent, vent, nent, sigij, elij, ments, qents, traent)
    887906        CALL zilch(hent, nloc*klev*klev)
    888907      ELSE
     
    895914
    896915    IF (iflag_con==4) THEN
    897       CALL cv_mixing(nloc, ncum, nd, icb, nk, inb, inbis, ph, t, q, qs, u, v, &
    898         h, lv, qnk, hp, tv, tvp, ep, clw, cbmf, m, ment, qent, uent, vent, &
    899         nent, sigij, elij)
    900     END IF
     916      CALL cv_mixing(nloc, ncum, nd, icb, nk, inb, inbis, &
     917                     ph, t, q, qs, u, v, h, lv, qnk, &
     918                     hp, tv, tvp, ep, clw, cbmf, &
     919                     m, ment, qent, uent, vent, nent, sigij, elij)
     920    END IF                                                                                         
    901921
    902922    IF (debut) THEN
    903923      PRINT *, ' cv_mixing ->'
    904924    END IF !(debut) THEN
    905     ! do i = 1,klev
    906     ! print*,'cv_mixing-> i,ment ',i,(ment(1,i,j),j=1,klev)
    907     ! enddo
    908 
    909     ! -------------------------------------------------------------------
    910     ! --- UNSATURATED (PRECIPITATING) DOWNDRAFTS
    911     ! -------------------------------------------------------------------
     925! do i = 1,klev
     926! print*,'cv_mixing-> i,ment ',i,(ment(1,i,j),j=1,klev)
     927! enddo
     928
     929! -------------------------------------------------------------------
     930! --- UNSATURATED (PRECIPITATING) DOWNDRAFTS
     931! -------------------------------------------------------------------
    912932    IF (iflag_con==3) THEN
    913933      IF (debut) THEN
     
    915935      END IF !(debut) THEN
    916936
    917       CALL cv3_unsat(nloc, ncum, nd, nd, ntra, icb, inb, iflag & !
    918                                                                  ! na->nd
    919         , t_wake, q_wake, qs_wake, gz, u, v, tra, p, ph, th_wake, tv_wake, &
    920         lv_wake, lf_wake, cpn_wake, ep, sigp, clw, m, ment, elij, delt, plcl, &
    921         coef_clos, mp, qp, up, vp, trap, wt, water, evap, fondue, ice, faci, &
    922         b, sigd, wdtraina, wdtrainm) ! RomP
     937      CALL cv3_unsat(nloc, ncum, nd, nd, ntra, icb, inb, iflag, &              ! na->nd
     938                     t_wake, q_wake, qs_wake, gz, u, v, tra, p, ph, &
     939                     th_wake, tv_wake, lv_wake, lf_wake, cpn_wake, &
     940                     ep, sigp, clw, &
     941                     m, ment, elij, delt, plcl, coef_clos, &
     942                     mp, qp, up, vp, trap, wt, water, evap, fondue, ice, &
     943                     faci, b, sigd, &
     944                     wdtrainA, wdtrainM)                                       ! RomP
    923945    END IF
    924946
    925947    IF (iflag_con==4) THEN
    926       CALL cv_unsat(nloc, ncum, nd, inb, t, q, qs, gz, u, v, p, ph, h, lv, &
    927         ep, sigp, clw, m, ment, elij, iflag, mp, qp, up, vp, wt, water, evap)
     948      CALL cv_unsat(nloc, ncum, nd, inb, t, q, qs, gz, u, v, p, ph, &
     949                     h, lv, ep, sigp, clw, m, ment, elij, &
     950                     iflag, mp, qp, up, vp, wt, water, evap)
    928951    END IF
    929952
     
    932955    END IF !(debut) THEN
    933956
    934     ! print *,'cv_unsat-> mp ',mp
    935     ! print *,'cv_unsat-> water ',water
    936     ! -------------------------------------------------------------------
    937     ! --- YIELD
    938     ! (tendencies, precipitation, variables of interface with other
    939     ! processes, etc)
    940     ! -------------------------------------------------------------------
     957! print *,'cv_unsat-> mp ',mp
     958! print *,'cv_unsat-> water ',water
     959! -------------------------------------------------------------------
     960! --- YIELD
     961! (tendencies, precipitation, variables of interface with other
     962! processes, etc)
     963! -------------------------------------------------------------------
    941964
    942965    IF (iflag_con==3) THEN
    943966
    944       CALL cv3_yield(nloc, ncum, nd, nd, ntra & ! na->nd
    945         , icb, inb, delt, t, q, t_wake, q_wake, s_wake, u, v, tra, gz, p, ph, &
    946         h, hp, lv, lf, cpn, th, th_wake, ep, clw, m, tp, mp, qp, up, vp, &
    947         trap, wt, water, ice, evap, fondue, faci, b, sigd, ment, qent, hent, &
    948         iflag_mix, uent, vent, nent, elij, traent, sig, tv, tvp, wghti, &
    949         iflag, precip, vprecip, ft, fq, fu, fv, ftra, cbmf, upwd, dnwd, &
    950         dnwd0, ma, mip, tls, tps, qcondc, wd, ftd, fqd)
     967      CALL cv3_yield(nloc, ncum, nd, nd, ntra, ok_conserv_q, &                      ! na->nd
     968                     icb, inb, delt, &
     969                     t, q, t_wake, q_wake, s_wake, u, v, tra, &
     970                     gz, p, ph, h, hp, lv, lf, cpn, th, th_wake, &
     971                     ep, clw, m, tp, mp, qp, up, vp, trap, &
     972                     wt, water, ice, evap, fondue, faci, b, sigd, &
     973                     ment, qent, hent, iflag_mix, uent, vent, &
     974                     nent, elij, traent, sig, &
     975                     tv, tvp, wghti, &
     976                     iflag, precip, vprecip, ft, fq, fu, fv, ftra, &
     977                     cbmf, upwd, dnwd, dnwd0, ma, mip, &
     978                     tls, tps, qcondc, wd, &
     979                     ftd, fqd)
    951980    END IF
    952981
     
    956985
    957986    IF (iflag_con==4) THEN
    958       CALL cv_yield(nloc, ncum, nd, nk, icb, inb, delt, t, q, u, v, gz, p, &
    959         ph, h, hp, lv, cpn, ep, clw, frac, m, mp, qp, up, vp, wt, water, &
    960         evap, ment, qent, uent, vent, nent, elij, tv, tvp, iflag, wd, qprime, &
    961         tprime, precip, cbmf, ft, fq, fu, fv, ma, qcondc)
    962     END IF
    963 
    964     ! AC!
    965     ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    966     ! --- passive tracers
    967     ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
     987      CALL cv_yield(nloc, ncum, nd, nk, icb, inb, delt, &
     988                     t, q, u, v, &
     989                     gz, p, ph, h, hp, lv, cpn, &
     990                     ep, clw, frac, m, mp, qp, up, vp, &
     991                     wt, water, evap, &
     992                     ment, qent, uent, vent, nent, elij, &
     993                     tv, tvp, &
     994                     iflag, wd, qprime, tprime, &
     995                     precip, cbmf, ft, fq, fu, fv, ma, qcondc)
     996    END IF
     997
     998!AC!
     999!^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
     1000!--- passive tracers
     1001!^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    9681002
    9691003    IF (iflag_con==3) THEN
    970       ! RomP >>>
    971       CALL cv3_tracer(nloc, len, ncum, nd, nd, ment, sigij, da, phi, phi2, &
    972         d1a, dam, ep, vprecip, elij, clw, epmlmmm, eplamm, icb, inb)
    973       ! RomP <<<
    974     END IF
    975 
    976     ! AC!
    977 
    978     ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    979     ! --- UNCOMPRESS THE FIELDS
    980     ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
     1004!RomP >>>
     1005      CALL cv3_tracer(nloc, len, ncum, nd, nd, &
     1006                     ment, sigij, da, phi, phi2, d1a, dam, &
     1007                     ep, vprecip, elij, clw, epmlmMm, eplaMm, &
     1008                     icb, inb)
     1009!RomP <<<
     1010    END IF
     1011
     1012!AC!
     1013
     1014! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
     1015! --- UNCOMPRESS THE FIELDS
     1016! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    9811017
    9821018
    9831019    IF (iflag_con==3) THEN
    984       CALL cv3a_uncompress(nloc, len, ncum, nd, ntra, idcum, iflag, icb, inb, &
    985         precip, cbmf, plcl, plfc, wbeff, sig, w0, ptop2, ft, fq, fu, fv, &
    986         ftra, sigd, ma, mip, vprecip, upwd, dnwd, dnwd0, qcondc, wd, cape, &
    987         cin, tvp, ftd, fqd, plim1, plim2, asupmax, supmax0, asupmaxmin, da, &
    988         phi, mp, phi2, d1a, dam, sigij & ! RomP
    989         , clw, elij, evap, ep, epmlmmm, eplamm & ! RomP
    990         , wdtraina, wdtrainm &     ! RomP
    991         , iflag1, kbas1, ktop1, precip1, cbmf1, plcl1, plfc1, wbeff1, sig1, &
    992         w01, ptop21, ft1, fq1, fu1, fv1, ftra1, sigd1, ma1, mip1, vprecip1, &
    993         upwd1, dnwd1, dnwd01, qcondc1, wd1, cape1, cin1, tvp1, ftd1, fqd1, &
    994         plim11, plim21, asupmax1, supmax01, asupmaxmin1, da1, phi1, mp1, &
    995         phi21, d1a1, dam1, sigij1 & ! RomP
    996         , clw1, elij1, evap1, ep1, epmlmmm1, eplamm1 & ! RomP
    997         , wdtraina1, wdtrainm1) ! RomP
     1020      CALL cv3a_uncompress(nloc, len, ncum, nd, ntra, idcum, &
     1021                           iflag, icb, inb, &
     1022                           precip, cbmf, plcl, plfc, wbeff, sig, w0, ptop2, &
     1023                           ft, fq, fu, fv, ftra, &
     1024                           sigd, ma, mip, vprecip, upwd, dnwd, dnwd0, &
     1025                           qcondc, wd, cape, cin, &
     1026                           tvp, &
     1027                           ftd, fqd, &
     1028                           Plim1, plim2, asupmax, supmax0, &
     1029                           asupmaxmin, &
     1030                           da, phi, mp, phi2, d1a, dam, sigij, &         ! RomP
     1031                           clw, elij, evap, ep, epmlmMm, eplaMm, &       ! RomP
     1032                           wdtrainA, wdtrainM, &                         ! RomP
     1033                           iflag1, kbas1, ktop1, &
     1034                           precip1, cbmf1, plcl1, plfc1, wbeff1, sig1, w01, ptop21, &
     1035                           ft1, fq1, fu1, fv1, ftra1, &
     1036                           sigd1, ma1, mip1, vprecip1, upwd1, dnwd1, dnwd01, &
     1037                           qcondc1, wd1, cape1, cin1, &
     1038                           tvp1, &
     1039                           ftd1, fqd1, &
     1040                           Plim11, plim21, asupmax1, supmax01, &
     1041                           asupmaxmin1, &
     1042                           da1, phi1, mp1, phi21, d1a1, dam1, sigij1,  & ! RomP
     1043                           clw1, elij1, evap1, ep1, epmlmMm1, eplaMm1, & ! RomP
     1044                           wdtrainA1, wdtrainM1)                         ! RomP
    9981045    END IF
    9991046
    10001047    IF (iflag_con==4) THEN
    1001       CALL cv_uncompress(nloc, len, ncum, nd, idcum, iflag, precip, cbmf, ft, &
    1002         fq, fu, fv, ma, qcondc, iflag1, precip1, cbmf1, ft1, fq1, fu1, fv1, &
    1003         ma1, qcondc1)
     1048      CALL cv_uncompress(nloc, len, ncum, nd, idcum, &
     1049                           iflag, &
     1050                           precip, cbmf, &
     1051                           ft, fq, fu, fv, &
     1052                           ma, qcondc, &
     1053                           iflag1, &
     1054                           precip1,cbmf1, &
     1055                           ft1, fq1, fu1, fv1, &
     1056                           ma1, qcondc1)
    10041057    END IF
    10051058
     
    10091062    PRINT *, ' cv_compress -> '
    10101063    debut = .FALSE.
    1011   END IF !(debut) THEN
     1064  END IF  !(debut) THEN
     1065
    10121066
    10131067  RETURN
  • LMDZ5/trunk/libf/phylmd/cvltr.F90

    r1907 r2007  
    33!
    44SUBROUTINE cvltr(pdtime, da, phi,phi2,d1a,dam, mpIN,epIN, &
    5            sigd,sij,clw,elij,epmlmMm,eplaMm,              &
     5!!           sigd,sij,clw,elij,epmlmMm,eplaMm,              &   !RL
     6           sigd,sij,wght_cvfd,clw,elij,epmlmMm,eplaMm,    &     !RL
    67           pmflxrIN,pmflxsIN,ev,te,wdtrainA,wdtrainM,     &
    78           paprs,it,tr,upd,dnd,inb,icb,                   &
     
    4748  REAL,DIMENSION(klon,klev),INTENT(IN)      :: te
    4849  REAL,DIMENSION(klon,klev,klev),INTENT(IN) :: sij        ! fraction dair de lenv
     50  REAL,DIMENSION(klon,klev),INTENT(IN)      :: wght_cvfd  ! weights of the layers feeding convection
    4951  REAL,DIMENSION(klon,klev,klev),INTENT(IN) :: elij       ! contenu en eau condensée spécifique/conc deau condensée massique
    5052  REAL,DIMENSION(klon,klev,klev),INTENT(IN) :: epmlmMm    ! eau condensee precipitee dans mel masse dair sat
     
    7173  REAL,DIMENSION(klon,klev,nbtr)    :: zmfd,zmfa
    7274  REAL,DIMENSION(klon,klev,nbtr)    :: zmfp,zmfu
     75  REAL,DIMENSION(klon,nbtr)         :: qfeed     ! tracer concentration feeding convection
    7376
    7477  REAL,DIMENSION(klon,klev,nbtr),INTENT(OUT)    :: zmfd1a
     
    168171   scavtrac = 0.
    169172   uscavtrac = 0.
    170 
     173   qfeed(:,it) = 0.              !RL
    171174  DO j=1,klev
    172175   DO i=1,klon
     
    330333! calcul des tendances liees aux courants satures   j <-> z ; k <-> z'
    331334! =========================================
     335!
     336!RL
     337!  Feeding concentrations
    332338  DO j=1,klev
    333339     DO i=1,klon
    334         zmfa(i,j,it)=da(i,j)*(tr(i,1,it)-tr(i,j,it))                     ! da
    335      END DO
    336   END DO
     340        qfeed(i,it)=qfeed(i,it)+wght_cvfd(i,j)*tr(i,j,it)
     341     END DO
     342  END DO
     343!RL
     344!
     345  DO j=1,klev
     346     DO i=1,klon
     347!RL
     348!!        zmfa(i,j,it)=da(i,j)*(tr(i,1,it)-tr(i,j,it))                     ! da
     349        zmfa(i,j,it)=da(i,j)*(qfeed(i,it)-tr(i,j,it))                     ! da
     350!RL
     351     END DO
     352  END DO
     353!
    337354  DO k=1,klev
    338355     DO j=1,klev
  • LMDZ5/trunk/libf/phylmd/physiq.F90

    r2006 r2007  
    237237  ! Variables pour le transport convectif
    238238  real da(klon,klev),phi(klon,klev,klev),mp(klon,klev)
     239  real wght_cvfd(klon,klev)
    239240  ! Variables pour le lessivage convectif
    240241  ! RomP >>>
     
    20612062             ftd,fqd,lalim_conv,wght_th, &
    20622063             ev, ep,epmlmMm,eplaMm, &
    2063              wdtrainA,wdtrainM)
     2064             wdtrainA,wdtrainM,wght_cvfd)
    20642065        ! RomP <<<
    20652066
     
    34793480       pmflxr,   pmflxs,    prfl,     psfl, &
    34803481       da,       phi,       mp,       upwd, &
    3481        phi2,     d1a,       dam,      sij, &        !<<RomP
     3482       phi2,     d1a,       dam,      sij, wght_cvfd, &        !<<RomP+RL
    34823483       wdtrainA, wdtrainM,  sigd,     clw,elij, &   !<<RomP
    34833484       ev,       ep,        epmlmMm,  eplaMm, &     !<<RomP
  • LMDZ5/trunk/libf/phylmd/phytrac_mod.F90

    r1909 r2007  
    5454CONTAINS
    5555
    56 SUBROUTINE phytrac(                            &
    57      nstep,     julien,   gmtime,   debutphy,  &
    58      lafin,     pdtphys,  u, v,     t_seri,    &
    59      paprs,     pplay,    pmfu,     pmfd,      &
    60      pen_u,     pde_u,    pen_d,    pde_d,     &
    61      cdragh,    coefh,    fm_therm, entr_therm,&
    62      yu1,       yv1,      ftsol,    pctsrf,    &
    63      ustar,     u10m,      v10m,               &
    64      wstar,     ale_bl,      ale_wake,         &
    65      xlat,      xlon,                          &
    66      frac_impa,frac_nucl,beta_fisrt,beta_v1,   &
    67      presnivs,  pphis,    pphi,     albsol,    &
    68      sh,        rh,       cldfra,   rneb,      &
    69      diafra,    cldliq,   itop_con, ibas_con,  &
    70      pmflxr,    pmflxs,   prfl,     psfl,      &
    71      da,        phi,      mp,       upwd,      &
    72      phi2,      d1a,      dam,      sij,       &   ! RomP
    73      wdtrainA,  wdtrainM, sigd,     clw,elij,  &   ! RomP
    74      evap,      ep,       epmlmMm,  eplaMm,    &   ! RomP
    75      dnwd,      aerosol_couple,     flxmass_w, &
    76      tau_aero,  piz_aero,  cg_aero, ccm,       &
    77      rfname,                                   &
    78      d_tr_dyn,                                 &   ! RomP
     56SUBROUTINE phytrac(                                 &
     57     nstep,     julien,   gmtime,   debutphy,       &
     58     lafin,     pdtphys,  u, v,     t_seri,         &
     59     paprs,     pplay,    pmfu,     pmfd,           &
     60     pen_u,     pde_u,    pen_d,    pde_d,          &
     61     cdragh,    coefh,    fm_therm, entr_therm,     &
     62     yu1,       yv1,      ftsol,    pctsrf,         &
     63     ustar,     u10m,      v10m,                    &
     64     wstar,     ale_bl,      ale_wake,              &
     65     xlat,      xlon,                               &
     66     frac_impa,frac_nucl,beta_fisrt,beta_v1,        &
     67     presnivs,  pphis,    pphi,     albsol,         &
     68     sh,        rh,       cldfra,   rneb,           &
     69     diafra,    cldliq,   itop_con, ibas_con,       &
     70     pmflxr,    pmflxs,   prfl,     psfl,           &
     71     da,        phi,      mp,       upwd,           &
     72     phi2,      d1a,      dam,      sij, wght_cvfd, &   ! RomP +RL
     73     wdtrainA,  wdtrainM, sigd,     clw, elij,      &   ! RomP
     74     evap,      ep,       epmlmMm,  eplaMm,         &   ! RomP
     75     dnwd,      aerosol_couple,     flxmass_w,      &
     76     tau_aero,  piz_aero,  cg_aero, ccm,            &
     77     rfname,                                        &
     78     d_tr_dyn,                                      &   ! RomP
    7979     tr_seri)         
    8080!
     
    190190  REAL,DIMENSION(klon,klev),INTENT(IN)      :: ep
    191191  REAL,DIMENSION(klon,klev,klev),INTENT(IN) :: sij
     192  REAL,DIMENSION(klon,klev),INTENT(IN)      :: wght_cvfd          !RL
    192193  REAL,DIMENSION(klon,klev,klev),INTENT(IN) :: elij
    193194  REAL,DIMENSION(klon,klev,klev),INTENT(IN) :: epmlmMm
     
    507508!
    508509          CALL cvltr(pdtphys, da, phi,phi2,d1a,dam, mp,ep,              &
    509                sigd,sij,clw,elij,epmlmMm,eplaMm,                        &
     510!!               sigd,sij,clw,elij,epmlmMm,eplaMm,                        &   !RL
     511               sigd,sij,wght_cvfd,clw,elij,epmlmMm,eplaMm,              &     !RL
    510512               pmflxr,pmflxs,evap,t_seri,wdtrainA,wdtrainM,             &   
    511513               paprs,it,tr_seri,upwd,dnwd,itop_con,ibas_con,            &
     
    514516               zmfd1a,zmfphi2,zmfdam)
    515517        else  !pas de lessivage convectif ou n'est pas un aerosol
    516            CALL cvltrorig(it,pdtphys, da, phi,mp,paprs,pplay,tr_seri,&
    517                     upwd,dnwd,d_tr_cv)
     518!!           CALL cvltrorig(it,pdtphys, da, phi,mp,paprs,pplay,tr_seri,&      !jyg
     519!!                    upwd,dnwd,d_tr_cv)                                      !jyg
     520           CALL cvltr_noscav(it,pdtphys, da, phi,mp,wght_cvfd,paprs,pplay, &  !jyg
     521                    tr_seri,upwd,dnwd,d_tr_cv)                                !jyg
    518522        endif
    519523        END IF
Note: See TracChangeset for help on using the changeset viewer.