Index: LMDZ5/trunk/libf/phylmd/cva_driver.F90
===================================================================
--- LMDZ5/trunk/libf/phylmd/cva_driver.F90	(revision 1992)
+++ LMDZ5/trunk/libf/phylmd/cva_driver.F90	(revision 2007)
@@ -2,161 +2,156 @@
 ! $Id$
 
-SUBROUTINE cva_driver(len, nd, ndp1, ntra, nloc, iflag_con, iflag_mix, &
-    iflag_ice_thermo, iflag_clos, delt, t1, q1, qs1, t1_wake, q1_wake, &
-    qs1_wake, s1_wake, u1, v1, tra1, p1, ph1, ale1, alp1, sig1feed1, &
-    sig2feed1, wght1, iflag1, ft1, fq1, fu1, fv1, ftra1, precip1, kbas1, &
-    ktop1, cbmf1, plcl1, plfc1, wbeff1, sig1, w01, & !input/output
-    ptop21, sigd1, ma1, mip1, vprecip1, upwd1, dnwd1, dnwd01, qcondc1, wd1, &
-    cape1, cin1, tvp1, ftd1, fqd1, plim11, plim21, asupmax1, supmax01, &
-    asupmaxmin1, lalim_conv, da1, phi1, mp1, phi21, d1a1, dam1, sigij1, clw1, & ! RomP
-    elij1, evap1, ep1, epmlmmm1, eplamm1, & ! RomP
-    wdtraina1, wdtrainm1) ! RomP
-  ! **************************************************************
-  ! *
-  ! CV_DRIVER                                                   *
-  ! *
-  ! *
-  ! written by   : Sandrine Bony-Lena , 17/05/2003, 11.19.41    *
-  ! modified by :                                               *
-  ! **************************************************************
-  ! **************************************************************
+SUBROUTINE cva_driver(len, nd, ndp1, ntra, nloc, &
+                      iflag_con, iflag_mix, iflag_ice_thermo, iflag_clos, ok_conserv_q, &
+                      delt, t1, q1, qs1, t1_wake, q1_wake, qs1_wake, s1_wake, &
+                      u1, v1, tra1, &
+                      p1, ph1, &
+                      Ale1, Alp1, &
+                      sig1feed1, sig2feed1, wght1, &
+                      iflag1, ft1, fq1, fu1, fv1, ftra1, &
+                      precip1, kbas1, ktop1, &
+                      cbmf1, plcl1, plfc1, wbeff1, &
+                      sig1, w01, & !input/output
+                      ptop21, sigd1, &
+                      ma1, mip1, Vprecip1, upwd1, dnwd1, dnwd01, &
+                      qcondc1, wd1, &
+                      cape1, cin1, tvp1, &
+                      ftd1, fqd1, &
+                      Plim11, Plim21, asupmax1, supmax01, asupmaxmin1, &
+                      lalim_conv, & 
+!!                      da1,phi1,mp1,phi21,d1a1,dam1,sigij1,clw1, &        ! RomP
+!!                      elij1,evap1,ep1,epmlmMm1,eplaMm1, &                ! RomP
+                      da1, phi1, mp1, phi21, d1a1, dam1, sigij1, wghti1, & ! RomP, RL
+                      clw1, elij1, evap1, ep1, epmlmMm1, eplaMm1, &        ! RomP, RL
+                      wdtrainA1, wdtrainM1)                                ! RomP
+! **************************************************************
+! *
+! CV_DRIVER                                                   *
+! *
+! *
+! written by   : Sandrine Bony-Lena , 17/05/2003, 11.19.41    *
+! modified by :                                               *
+! **************************************************************
+! **************************************************************
 
   USE dimphy
   IMPLICIT NONE
 
-  ! .............................START PROLOGUE............................
-
-
-  ! All argument names (except len,nd,ntra,nloc,delt and the flags) have a
-  ! "1" appended.
-  ! The "1" is removed for the corresponding compressed variables.
-  ! PARAMETERS:
-  ! Name            Type         Usage            Description
-  ! ----------      ----------     -------  ----------------------------
-
-  ! len           Integer        Input        first (i) dimension
-  ! nd            Integer        Input        vertical (k) dimension
-  ! ndp1          Integer        Input        nd + 1
-  ! ntra          Integer        Input        number of tracors
-  ! iflag_con     Integer        Input        version of convect (3/4)
-  ! iflag_mix     Integer        Input        version of mixing  (0/1/2)
-  ! iflag_ice_thermo Integer        Input        accounting for ice
-  ! thermodynamics (0/1)
-  ! iflag_clos    Integer        Input        version of closure (0/1)
-  ! delt          Real           Input        time step
-  ! t1            Real           Input        temperature (sat draught envt)
-  ! q1            Real           Input        specific hum (sat draught envt)
-  ! qs1           Real           Input        sat specific hum (sat draught
-  ! envt)
-  ! t1_wake       Real           Input        temperature (unsat draught
-  ! envt)
-  ! q1_wake       Real           Input        specific hum(unsat draught
-  ! envt)
-  ! qs1_wake      Real           Input        sat specific hum(unsat draughts
-  ! envt)
-  ! s1_wake       Real           Input        fractionnal area covered by
-  ! wakes
-  ! u1            Real           Input        u-wind
-  ! v1            Real           Input        v-wind
-  ! tra1          Real           Input        tracors
-  ! p1            Real           Input        full level pressure
-  ! ph1           Real           Input        half level pressure
-  ! ALE1          Real           Input        Available lifting Energy
-  ! ALP1          Real           Input        Available lifting Power
-  ! sig1feed1     Real           Input        sigma coord at lower bound of
-  ! feeding layer
-  ! sig2feed1     Real           Input        sigma coord at upper bound of
-  ! feeding layer
-  ! wght1         Real           Input        weight density determining the
-  ! feeding mixture
-  ! iflag1        Integer        Output       flag for Emanuel conditions
-  ! ft1           Real           Output       temp tend
-  ! fq1           Real           Output       spec hum tend
-  ! fu1           Real           Output       u-wind tend
-  ! fv1           Real           Output       v-wind tend
-  ! ftra1         Real           Output       tracor tend
-  ! precip1       Real           Output       precipitation
-  ! kbas1         Integer        Output       cloud base level
-  ! ktop1         Integer        Output       cloud top level
-  ! cbmf1         Real           Output       cloud base mass flux
-  ! sig1          Real           In/Out       section adiabatic updraft
-  ! w01           Real           In/Out       vertical velocity within adiab
-  ! updraft
-  ! ptop21        Real           In/Out       top of entraining zone
-  ! Ma1           Real           Output       mass flux adiabatic updraft
-  ! mip1          Real           Output       mass flux shed by the adiabatic
-  ! updraft
-  ! Vprecip1      Real           Output       vertical profile of
-  ! precipitations
-  ! upwd1         Real           Output       total upward mass flux
-  ! (adiab+mixed)
-  ! dnwd1         Real           Output       saturated downward mass flux
-  ! (mixed)
-  ! dnwd01        Real           Output       unsaturated downward mass flux
-  ! qcondc1       Real           Output       in-cld mixing ratio of
-  ! condensed water
-  ! wd1           Real           Output       downdraft velocity scale for
-  ! sfc fluxes
-  ! cape1         Real           Output       CAPE
-  ! cin1          Real           Output       CIN
-  ! tvp1          Real           Output       adiab lifted parcell virt temp
-  ! ftd1          Real           Output       precip temp tend
-  ! fqt1          Real           Output       precip spec hum tend
-  ! Plim11        Real           Output
-  ! Plim21        Real           Output
-  ! asupmax1      Real           Output
-  ! supmax01      Real           Output
-  ! asupmaxmin1   Real           Output
-
-  ! ftd1          Real           Output  Array of temperature tendency due to
-  ! precipitations (K/s) of dimension ND,
-  ! defined at same grid levels as T, Q, QS and P.
-
-  ! fqd1          Real           Output  Array of specific humidity
-  ! tendencies due to precipitations ((gm/gm)/s)
-  ! of dimension ND, defined at same grid levels as T, Q, QS and P.
-
-  ! wdtrainA1     Real           Output   precipitation detrained from
-  ! adiabatic draught;
-  ! used in tracer transport (cvltr)
-  ! wdtrainM1     Real           Output   precipitation detrained from mixed
-  ! draughts;
-  ! used in tracer transport (cvltr)
-  ! da1           Real           Output   used in tracer transport (cvltr)
-  ! phi1          Real           Output   used in tracer transport (cvltr)
-  ! mp1           Real           Output   used in tracer transport (cvltr)
-
-  ! phi21         Real           Output   used in tracer transport (cvltr)
-
-  ! d1a1          Real           Output   used in tracer transport (cvltr)
-  ! dam1          Real           Output   used in tracer transport (cvltr)
-
-  ! epmlmMm1      Real           Output   used in tracer transport (cvltr)
-  ! eplaMm1       Real           Output   used in tracer transport (cvltr)
-
-  ! evap1         Real           Output
-  ! ep1           Real           Output
-  ! sigij1        Real           Output
-  ! elij1         Real           Output
-
-
-  ! S. Bony, Mar 2002:
-  ! * Several modules corresponding to different physical processes
-  ! * Several versions of convect may be used:
-  ! - iflag_con=3: version lmd  (previously named convect3)
-  ! - iflag_con=4: version 4.3b (vect. version, previously convect1/2)
-  ! + tard: 	- iflag_con=5: version lmd with ice (previously named convectg)
-  ! S. Bony, Oct 2002:
-  ! * Vectorization of convect3 (ie version lmd)
-
-  ! ..............................END PROLOGUE.............................
+! .............................START PROLOGUE............................
+
+
+! All argument names (except len,nd,ntra,nloc,delt and the flags) have a "1" appended.
+! The "1" is removed for the corresponding compressed variables.
+! PARAMETERS:
+! Name            Type         Usage            Description
+! ----------      ----------     -------  ----------------------------
+
+! len           Integer        Input        first (i) dimension
+! nd            Integer        Input        vertical (k) dimension
+! ndp1          Integer        Input        nd + 1
+! ntra          Integer        Input        number of tracors
+! iflag_con     Integer        Input        version of convect (3/4)
+! iflag_mix     Integer        Input        version of mixing  (0/1/2)
+! iflag_ice_thermo Integer        Input        accounting for ice thermodynamics (0/1)
+! iflag_clos    Integer        Input        version of closure (0/1)
+! ok_conserv_q  Logical        Input        when true corrections for water conservation are swtiched on
+! delt          Real           Input        time step
+! t1            Real           Input        temperature (sat draught envt)
+! q1            Real           Input        specific hum (sat draught envt)
+! qs1           Real           Input        sat specific hum (sat draught envt)
+! t1_wake       Real           Input        temperature (unsat draught envt)
+! q1_wake       Real           Input        specific hum(unsat draught envt)
+! qs1_wake      Real           Input        sat specific hum(unsat draughts envt)
+! s1_wake       Real           Input        fractionnal area covered by wakes
+! u1            Real           Input        u-wind
+! v1            Real           Input        v-wind
+! tra1          Real           Input        tracors
+! p1            Real           Input        full level pressure
+! ph1           Real           Input        half level pressure
+! ALE1          Real           Input        Available lifting Energy
+! ALP1          Real           Input        Available lifting Power
+! sig1feed1     Real           Input        sigma coord at lower bound of feeding layer
+! sig2feed1     Real           Input        sigma coord at upper bound of feeding layer
+! wght1         Real           Input        weight density determining the feeding mixture
+! iflag1        Integer        Output       flag for Emanuel conditions
+! ft1           Real           Output       temp tend
+! fq1           Real           Output       spec hum tend
+! fu1           Real           Output       u-wind tend
+! fv1           Real           Output       v-wind tend
+! ftra1         Real           Output       tracor tend
+! precip1       Real           Output       precipitation
+! kbas1         Integer        Output       cloud base level
+! ktop1         Integer        Output       cloud top level
+! cbmf1         Real           Output       cloud base mass flux
+! sig1          Real           In/Out       section adiabatic updraft
+! w01           Real           In/Out       vertical velocity within adiab updraft
+! ptop21        Real           In/Out       top of entraining zone
+! Ma1           Real           Output       mass flux adiabatic updraft
+! mip1          Real           Output       mass flux shed by the adiabatic updraft
+! Vprecip1      Real           Output       vertical profile of precipitations
+! upwd1         Real           Output       total upward mass flux (adiab+mixed)
+! dnwd1         Real           Output       saturated downward mass flux (mixed)
+! dnwd01        Real           Output       unsaturated downward mass flux
+! qcondc1       Real           Output       in-cld mixing ratio of condensed water
+! wd1           Real           Output       downdraft velocity scale for sfc fluxes
+! cape1         Real           Output       CAPE
+! cin1          Real           Output       CIN
+! tvp1          Real           Output       adiab lifted parcell virt temp
+! ftd1          Real           Output       precip temp tend
+! fqt1          Real           Output       precip spec hum tend
+! Plim11        Real           Output
+! Plim21        Real           Output
+! asupmax1      Real           Output
+! supmax01      Real           Output
+! asupmaxmin1   Real           Output
+
+! ftd1          Real           Output  Array of temperature tendency due to precipitations (K/s) of dimension ND,
+!                                      defined at same grid levels as T, Q, QS and P.
+
+! fqd1          Real           Output  Array of specific humidity tendencies due to precipitations ((gm/gm)/s)
+!                                      of dimension ND, defined at same grid levels as T, Q, QS and P.
+
+! wdtrainA1     Real           Output   precipitation detrained from adiabatic draught;
+!                                         used in tracer transport (cvltr)
+! wdtrainM1     Real           Output   precipitation detrained from mixed draughts;
+!                                         used in tracer transport (cvltr)
+! da1           Real           Output     used in tracer transport (cvltr)
+! phi1          Real           Output     used in tracer transport (cvltr)
+! mp1           Real           Output     used in tracer transport (cvltr)
+                                         
+! phi21         Real           Output     used in tracer transport (cvltr)
+                                         
+! d1a1          Real           Output     used in tracer transport (cvltr)
+! dam1          Real           Output     used in tracer transport (cvltr)
+                                         
+! epmlmMm1      Real           Output     used in tracer transport (cvltr)
+! eplaMm1       Real           Output     used in tracer transport (cvltr)
+                                         
+! evap1         Real           Output    
+! ep1           Real           Output    
+! sigij1        Real           Output     used in tracer transport (cvltr)
+! elij1         Real           Output
+! wghti1        Real           Output   final weight of the feeding layers,
+!                                         used in tracer transport (cvltr)
+
+
+! S. Bony, Mar 2002:
+! * Several modules corresponding to different physical processes
+! * Several versions of convect may be used:
+!         - iflag_con=3: version lmd  (previously named convect3)
+!         - iflag_con=4: version 4.3b (vect. version, previously convect1/2)
+! + tard: - iflag_con=5: version lmd with ice (previously named convectg)
+! S. Bony, Oct 2002:
+! * Vectorization of convect3 (ie version lmd)
+
+! ..............................END PROLOGUE.............................
 
 
   include "dimensions.h"
-  ! cccc#include "dimphy.h"
+!!!!!#include "dimphy.h"
   include 'iniprint.h'
 
 
-  ! Input
+! Input
   INTEGER len
   INTEGER nd
@@ -167,4 +162,5 @@
   INTEGER iflag_ice_thermo
   INTEGER iflag_clos
+  LOGICAL ok_conserv_q
   REAL delt
   REAL t1(len, nd)
@@ -180,11 +176,11 @@
   REAL p1(len, nd)
   REAL ph1(len, ndp1)
-  REAL ale1(len)
-  REAL alp1(len)
+  REAL Ale1(len)
+  REAL Alp1(len)
   REAL sig1feed1 ! pressure at lower bound of feeding layer
   REAL sig2feed1 ! pressure at upper bound of feeding layer
   REAL wght1(nd) ! weight density determining the feeding mixture
 
-  ! Output
+! Output
   INTEGER iflag1(len)
   REAL ft1(len, nd)
@@ -206,5 +202,5 @@
   REAL ma1(len, nd)
   REAL mip1(len, nd)
-  ! real Vprecip1(len,nd)
+! real Vprecip1(len,nd)
   REAL vprecip1(len, nd+1)
   REAL upwd1(len, nd)
@@ -217,156 +213,156 @@
   REAL tvp1(len, nd)
 
-  ! AC!
-  ! !      real da1(len,nd),phi1(len,nd,nd)
-  ! !      real da(len,nd),phi(len,nd,nd)
-  ! AC!
+!AC!
+!!      real da1(len,nd),phi1(len,nd,nd)
+!!      real da(len,nd),phi(len,nd,nd)
+!AC!
   REAL ftd1(len, nd)
   REAL fqd1(len, nd)
-  REAL plim11(len)
-  REAL plim21(len)
+  REAL Plim11(len)
+  REAL Plim21(len)
   REAL asupmax1(len, nd)
   REAL supmax01(len)
   REAL asupmaxmin1(len)
   INTEGER lalim_conv(len)
-  ! RomP >>>
-  REAL wdtraina1(len, nd), wdtrainm1(len, nd)
+! RomP >>>
+  REAL wdtrainA1(len, nd), wdtrainM1(len, nd)
   REAL da1(len, nd), phi1(len, nd, nd), mp1(len, nd)
-  REAL epmlmmm1(len, nd, nd), eplamm1(len, nd)
+  REAL epmlmMm1(len, nd, nd), eplaMm1(len, nd)
   REAL evap1(len, nd), ep1(len, nd)
   REAL sigij1(len, nd, nd), elij1(len, nd, nd)
+!JYG,RL
+  REAL wghti1(len, nd) ! final weight of the feeding layers
+!JYG,RL
   REAL phi21(len, nd, nd)
   REAL d1a1(len, nd), dam1(len, nd)
-  ! RomP <<<
-
-  ! -------------------------------------------------------------------
-  ! Prolog by Kerry Emanuel.
-  ! -------------------------------------------------------------------
-  ! --- ARGUMENTS
-  ! -------------------------------------------------------------------
-  ! --- On input:
-
-  ! t:   Array of absolute temperature (K) of dimension ND, with first
-  ! index corresponding to lowest model level. Note that this array
-  ! will be altered by the subroutine if dry convective adjustment
-  ! occurs and if IPBL is not equal to 0.
-
-  ! q:   Array of specific humidity (gm/gm) of dimension ND, with first
-  ! index corresponding to lowest model level. Must be defined
-  ! at same grid levels as T. Note that this array will be altered
-  ! if dry convective adjustment occurs and if IPBL is not equal to 0.
-
-  ! qs:  Array of saturation specific humidity of dimension ND, with first
-  ! index corresponding to lowest model level. Must be defined
-  ! at same grid levels as T. Note that this array will be altered
-  ! if dry convective adjustment occurs and if IPBL is not equal to 0.
-
-  ! t_wake: Array of absolute temperature (K), seen by unsaturated draughts,
-  ! of dimension ND, with first index corresponding to lowest model level.
-
-  ! q_wake: Array of specific humidity (gm/gm), seen by unsaturated draughts,
-  ! of dimension ND, with first index corresponding to lowest model level.
-  ! Must be defined at same grid levels as T.
-
-  ! qs_wake: Array of saturation specific humidity, seen by unsaturated
-  ! draughts,
-  ! of dimension ND, with first index corresponding to lowest model level.
-  ! Must be defined at same grid levels as T.
-
-  ! s_wake: Array of fractionnal area occupied by the wakes.
-
-  ! u:   Array of zonal wind velocity (m/s) of dimension ND, witth first
-  ! index corresponding with the lowest model level. Defined at
-  ! same levels as T. Note that this array will be altered if
-  ! dry convective adjustment occurs and if IPBL is not equal to 0.
-
-  ! v:   Same as u but for meridional velocity.
-
-  ! tra: Array of passive tracer mixing ratio, of dimensions (ND,NTRA),
-  ! where NTRA is the number of different tracers. If no
-  ! convective tracer transport is needed, define a dummy
-  ! input array of dimension (ND,1). Tracers are defined at
-  ! same vertical levels as T. Note that this array will be altered
-  ! if dry convective adjustment occurs and if IPBL is not equal to 0.
-
-  ! p:   Array of pressure (mb) of dimension ND, with first
-  ! index corresponding to lowest model level. Must be defined
-  ! at same grid levels as T.
-
-  ! ph:  Array of pressure (mb) of dimension ND+1, with first index
-  ! corresponding to lowest level. These pressures are defined at
-  ! levels intermediate between those of P, T, Q and QS. The first
-  ! value of PH should be greater than (i.e. at a lower level than)
-  ! the first value of the array P.
-
-  ! ALE:  Available lifting Energy
-
-  ! ALP:  Available lifting Power
-
-  ! nl:  The maximum number of levels to which convection can penetrate, plus
-  ! 1.
-  ! NL MUST be less than or equal to ND-1.
-
-  ! delt: The model time step (sec) between calls to CONVECT
-
-  ! ----------------------------------------------------------------------------
-  ! ---   On Output:
-
-  ! iflag: An output integer whose value denotes the following:
-  ! VALUE   INTERPRETATION
-  ! -----   --------------
-  ! 0     Moist convection occurs.
-  ! 1     Moist convection occurs, but a CFL condition
-  ! on the subsidence warming is violated. This
-  ! does not cause the scheme to terminate.
-  ! 2     Moist convection, but no precip because ep(inb) lt 0.0001
-  ! 3     No moist convection because new cbmf is 0 and old cbmf is 0.
-  ! 4     No moist convection; atmosphere is not
-  ! unstable
-  ! 6     No moist convection because ihmin le minorig.
-  ! 7     No moist convection because unreasonable
-  ! parcel level temperature or specific humidity.
-  ! 8     No moist convection: lifted condensation
-  ! level is above the 200 mb level.
-  ! 9     No moist convection: cloud base is higher
-  ! then the level NL-1.
-
-  ! ft:   Array of temperature tendency (K/s) of dimension ND, defined at
-  ! same
-  ! grid levels as T, Q, QS and P.
-
-  ! fq:   Array of specific humidity tendencies ((gm/gm)/s) of dimension ND,
-  ! defined at same grid levels as T, Q, QS and P.
-
-  ! fu:   Array of forcing of zonal velocity (m/s^2) of dimension ND,
-  ! defined at same grid levels as T.
-
-  ! fv:   Same as FU, but for forcing of meridional velocity.
-
-  ! ftra: Array of forcing of tracer content, in tracer mixing ratio per
-  ! second, defined at same levels as T. Dimensioned (ND,NTRA).
-
-  ! precip: Scalar convective precipitation rate (mm/day).
-
-  ! wd:   A convective downdraft velocity scale. For use in surface
-  ! flux parameterizations. See convect.ps file for details.
-
-  ! tprime: A convective downdraft temperature perturbation scale (K).
-  ! For use in surface flux parameterizations. See convect.ps
-  ! file for details.
-
-  ! qprime: A convective downdraft specific humidity
-  ! perturbation scale (gm/gm).
-  ! For use in surface flux parameterizations. See convect.ps
-  ! file for details.
-
-  ! cbmf: The cloud base mass flux ((kg/m**2)/s). THIS SCALAR VALUE MUST
-  ! BE STORED BY THE CALLING PROGRAM AND RETURNED TO CONVECT AT
-  ! ITS NEXT CALL. That is, the value of CBMF must be "remembered"
-  ! by the calling program between calls to CONVECT.
-
-  ! det:   Array of detrainment mass flux of dimension ND.
-  ! -------------------------------------------------------------------
-
-  ! Local arrays
+! RomP <<<
+
+! -------------------------------------------------------------------
+! Prolog by Kerry Emanuel.
+! -------------------------------------------------------------------
+! --- ARGUMENTS
+! -------------------------------------------------------------------
+! --- On input:
+
+! t:   Array of absolute temperature (K) of dimension ND, with first
+! index corresponding to lowest model level. Note that this array
+! will be altered by the subroutine if dry convective adjustment
+! occurs and if IPBL is not equal to 0.
+
+! q:   Array of specific humidity (gm/gm) of dimension ND, with first
+! index corresponding to lowest model level. Must be defined
+! at same grid levels as T. Note that this array will be altered
+! if dry convective adjustment occurs and if IPBL is not equal to 0.
+
+! qs:  Array of saturation specific humidity of dimension ND, with first
+! index corresponding to lowest model level. Must be defined
+! at same grid levels as T. Note that this array will be altered
+! if dry convective adjustment occurs and if IPBL is not equal to 0.
+
+! t_wake: Array of absolute temperature (K), seen by unsaturated draughts,
+! of dimension ND, with first index corresponding to lowest model level.
+
+! q_wake: Array of specific humidity (gm/gm), seen by unsaturated draughts,
+! of dimension ND, with first index corresponding to lowest model level.
+! Must be defined at same grid levels as T.
+
+! qs_wake: Array of saturation specific humidity, seen by unsaturated draughts,
+! of dimension ND, with first index corresponding to lowest model level.
+! Must be defined at same grid levels as T.
+
+! s_wake: Array of fractionnal area occupied by the wakes.
+
+! u:   Array of zonal wind velocity (m/s) of dimension ND, witth first
+! index corresponding with the lowest model level. Defined at
+! same levels as T. Note that this array will be altered if
+! dry convective adjustment occurs and if IPBL is not equal to 0.
+
+! v:   Same as u but for meridional velocity.
+
+! tra: Array of passive tracer mixing ratio, of dimensions (ND,NTRA),
+! where NTRA is the number of different tracers. If no
+! convective tracer transport is needed, define a dummy
+! input array of dimension (ND,1). Tracers are defined at
+! same vertical levels as T. Note that this array will be altered
+! if dry convective adjustment occurs and if IPBL is not equal to 0.
+
+! p:   Array of pressure (mb) of dimension ND, with first
+! index corresponding to lowest model level. Must be defined
+! at same grid levels as T.
+
+! ph:  Array of pressure (mb) of dimension ND+1, with first index
+! corresponding to lowest level. These pressures are defined at
+! levels intermediate between those of P, T, Q and QS. The first
+! value of PH should be greater than (i.e. at a lower level than)
+! the first value of the array P.
+
+! ALE:  Available lifting Energy
+
+! ALP:  Available lifting Power
+
+! nl:  The maximum number of levels to which convection can penetrate, plus 1.
+!       NL MUST be less than or equal to ND-1.
+
+! delt: The model time step (sec) between calls to CONVECT
+
+! ----------------------------------------------------------------------------
+! ---   On Output:
+
+! iflag: An output integer whose value denotes the following:
+!       VALUE   INTERPRETATION
+!       -----   --------------
+!         0     Moist convection occurs.
+!         1     Moist convection occurs, but a CFL condition
+!               on the subsidence warming is violated. This
+!               does not cause the scheme to terminate.
+!         2     Moist convection, but no precip because ep(inb) lt 0.0001
+!         3     No moist convection because new cbmf is 0 and old cbmf is 0.
+!         4     No moist convection; atmosphere is not
+!               unstable
+!         6     No moist convection because ihmin le minorig.
+!         7     No moist convection because unreasonable
+!               parcel level temperature or specific humidity.
+!         8     No moist convection: lifted condensation
+!               level is above the 200 mb level.
+!         9     No moist convection: cloud base is higher
+!               then the level NL-1.
+
+! ft:   Array of temperature tendency (K/s) of dimension ND, defined at same
+!       grid levels as T, Q, QS and P.
+
+! fq:   Array of specific humidity tendencies ((gm/gm)/s) of dimension ND,
+!       defined at same grid levels as T, Q, QS and P.
+
+! fu:   Array of forcing of zonal velocity (m/s^2) of dimension ND,
+!      defined at same grid levels as T.
+
+! fv:   Same as FU, but for forcing of meridional velocity.
+
+! ftra: Array of forcing of tracer content, in tracer mixing ratio per
+!       second, defined at same levels as T. Dimensioned (ND,NTRA).
+
+! precip: Scalar convective precipitation rate (mm/day).
+
+! wd:   A convective downdraft velocity scale. For use in surface
+!       flux parameterizations. See convect.ps file for details.
+
+! tprime: A convective downdraft temperature perturbation scale (K).
+!         For use in surface flux parameterizations. See convect.ps
+!         file for details.
+
+! qprime: A convective downdraft specific humidity
+!         perturbation scale (gm/gm).
+!         For use in surface flux parameterizations. See convect.ps
+!         file for details.
+
+! cbmf: The cloud base mass flux ((kg/m**2)/s). THIS SCALAR VALUE MUST
+!       BE STORED BY THE CALLING PROGRAM AND RETURNED TO CONVECT AT
+!       ITS NEXT CALL. That is, the value of CBMF must be "remembered"
+!       by the calling program between calls to CONVECT.
+
+! det:   Array of detrainment mass flux of dimension ND.
+! -------------------------------------------------------------------
+
+! Local (non compressed) arrays
 
 
@@ -380,5 +376,5 @@
   LOGICAL ok_inhib ! True => possible inhibition of convection by dryness
   LOGICAL, SAVE :: debut = .TRUE.
-  !$OMP THREADPRIVATE(debut)
+!$OMP THREADPRIVATE(debut)
 
   REAL tnk1(klon)
@@ -414,10 +410,12 @@
   REAL p1feed1(len) ! pressure at lower bound of feeding layer
   REAL p2feed1(len) ! pressure at upper bound of feeding layer
-  REAL wghti1(len, nd) ! weights of the feeding layers
-
-  ! (local) compressed fields:
+!JYG,RL
+!!      real wghti1(len,nd) ! weights of the feeding layers
+!JYG,RL
+
+! (local) compressed fields:
 
   INTEGER nloc
-  ! parameter (nloc=klon) ! pour l'instant
+! parameter (nloc=klon) ! pour l'instant
 
   INTEGER idcum(nloc)
@@ -456,15 +454,15 @@
   REAL elij(nloc, klev, klev)
   REAL supmax(nloc, klev)
-  REAL ale(nloc), alp(nloc), coef_clos(nloc)
+  REAL Ale(nloc), Alp(nloc), coef_clos(nloc)
   REAL sigd(nloc)
-  ! real mp(nloc,klev), qp(nloc,klev), up(nloc,klev), vp(nloc,klev)
-  ! real wt(nloc,klev), water(nloc,klev), evap(nloc,klev), ice(nloc,klev)
-  ! real b(nloc,klev), sigd(nloc)
-  ! save mp,qp,up,vp,wt,water,evap,b
+! real mp(nloc,klev), qp(nloc,klev), up(nloc,klev), vp(nloc,klev)
+! real wt(nloc,klev), water(nloc,klev), evap(nloc,klev), ice(nloc,klev)
+! real b(nloc,klev), sigd(nloc)
+! save mp,qp,up,vp,wt,water,evap,b
   REAL, SAVE, ALLOCATABLE :: mp(:, :), qp(:, :), up(:, :), vp(:, :)
   REAL, SAVE, ALLOCATABLE :: wt(:, :), water(:, :), evap(:, :)
   REAL, SAVE, ALLOCATABLE :: ice(:, :), fondue(:, :), b(:, :)
   REAL, SAVE, ALLOCATABLE :: frac(:, :), faci(:, :)
-  !$OMP THREADPRIVATE(mp,qp,up,vp,wt,water,evap,ice,fondue,b,frac,faci)
+!$OMP THREADPRIVATE(mp,qp,up,vp,wt,water,evap,ice,fondue,b,frac,faci)
   REAL ft(nloc, klev), fq(nloc, klev)
   REAL ftd(nloc, klev), fqd(nloc, klev)
@@ -474,11 +472,11 @@
   REAL tps(nloc, klev), qprime(nloc), tprime(nloc)
   REAL precip(nloc)
-  ! real Vprecip(nloc,klev)
+! real Vprecip(nloc,klev)
   REAL vprecip(nloc, klev+1)
   REAL tra(nloc, klev, ntra), trap(nloc, klev, ntra)
   REAL ftra(nloc, klev, ntra), traent(nloc, klev, klev, ntra)
-  REAL qcondc(nloc, klev) ! cld
-  REAL wd(nloc) ! gust
-  REAL plim1(nloc), plim2(nloc)
+  REAL qcondc(nloc, klev)      ! cld
+  REAL wd(nloc)                ! gust
+  REAL Plim1(nloc), plim2(nloc)
   REAL asupmax(nloc, klev)
   REAL supmax0(nloc)
@@ -489,24 +487,24 @@
   REAL hnk(nloc), unk(nloc), vnk(nloc)
 
-  ! RomP >>>
-  REAL wdtraina(nloc, klev), wdtrainm(nloc, klev)
+! RomP >>>
+  REAL wdtrainA(nloc, klev), wdtrainM(nloc, klev)
   REAL da(len, nd), phi(len, nd, nd)
-  REAL epmlmmm(nloc, klev, klev), eplamm(nloc, klev)
+  REAL epmlmMm(nloc, klev, klev), eplaMm(nloc, klev)
   REAL phi2(len, nd, nd)
   REAL d1a(len, nd), dam(len, nd)
-  ! RomP <<<
+! RomP <<<
 
   LOGICAL, SAVE :: first = .TRUE.
-  !$OMP THREADPRIVATE(first)
+!$OMP THREADPRIVATE(first)
   CHARACTER (LEN=20) :: modname = 'cva_driver'
   CHARACTER (LEN=80) :: abort_message
 
 
-  ! print *, 't1, t1_wake ',(k,t1(1,k),t1_wake(1,k),k=1,klev)
-  ! print *, 'q1, q1_wake ',(k,q1(1,k),q1_wake(1,k),k=1,klev)
-
-  ! -------------------------------------------------------------------
-  ! --- SET CONSTANTS AND PARAMETERS
-  ! -------------------------------------------------------------------
+! print *, 't1, t1_wake ',(k,t1(1,k),t1_wake(1,k),k=1,klev)
+! print *, 'q1, q1_wake ',(k,q1(1,k),q1_wake(1,k),k=1,klev)
+
+! -------------------------------------------------------------------
+! --- SET CONSTANTS AND PARAMETERS
+! -------------------------------------------------------------------
 
   IF (first) THEN
@@ -518,19 +516,19 @@
     first = .FALSE.
   END IF
-  ! -- set simulation flags:
-  ! (common cvflag)
+! -- set simulation flags:
+! (common cvflag)
 
   CALL cv_flag(iflag_ice_thermo)
 
-  ! -- set thermodynamical constants:
-  ! (common cvthermo)
+! -- set thermodynamical constants:
+! (common cvthermo)
 
   CALL cv_thermo(iflag_con)
 
-  ! -- set convect parameters
-
-  ! includes microphysical parameters and parameters that
-  ! control the rate of approach to quasi-equilibrium)
-  ! (common cvparam)
+! -- set convect parameters
+
+! includes microphysical parameters and parameters that
+! control the rate of approach to quasi-equilibrium)
+! (common cvparam)
 
   IF (iflag_con==3) THEN
@@ -543,7 +541,7 @@
   END IF
 
-  ! ---------------------------------------------------------------------
-  ! --- INITIALIZE OUTPUT ARRAYS AND PARAMETERS
-  ! ---------------------------------------------------------------------
+! ---------------------------------------------------------------------
+! --- INITIALIZE OUTPUT ARRAYS AND PARAMETERS
+! ---------------------------------------------------------------------
   nword1 = len
   nword2 = len*nd
@@ -576,6 +574,6 @@
   ftd1(:, :) = 0.
   fqd1(:, :) = 0.
-  plim11(:) = 0.
-  plim21(:) = 0.
+  Plim11(:) = 0.
+  Plim21(:) = 0.
   asupmax1(:, :) = 0.
   supmax01(:) = 0.
@@ -594,11 +592,11 @@
   END IF
 
-  ! RomP >>>
-  wdtraina1(:, :) = 0.
-  wdtrainm1(:, :) = 0.
+! RomP >>>
+  wdtrainA1(:, :) = 0.
+  wdtrainM1(:, :) = 0.
   da1(:, :) = 0.
   phi1(:, :, :) = 0.
-  epmlmmm1(:, :, :) = 0.
-  eplamm1(:, :) = 0.
+  epmlmMm1(:, :, :) = 0.
+  eplaMm1(:, :) = 0.
   mp1(:, :) = 0.
   evap1(:, :) = 0.
@@ -609,8 +607,8 @@
   d1a1(:, :) = 0.
   dam1(:, :) = 0.
-  ! RomP <<<
-  ! ---------------------------------------------------------------------
-  ! --- INITIALIZE LOCAL ARRAYS AND PARAMETERS
-  ! ---------------------------------------------------------------------
+! RomP <<<
+! ---------------------------------------------------------------------
+! --- INITIALIZE LOCAL ARRAYS AND PARAMETERS
+! ---------------------------------------------------------------------
 
   DO il = 1, nloc
@@ -618,7 +616,7 @@
   END DO
 
-  ! --------------------------------------------------------------------
-  ! --- CALCULATE ARRAYS OF GEOPOTENTIAL, HEAT CAPACITY & STATIC ENERGY
-  ! --------------------------------------------------------------------
+! --------------------------------------------------------------------
+! --- CALCULATE ARRAYS OF GEOPOTENTIAL, HEAT CAPACITY & STATIC ENERGY
+! --------------------------------------------------------------------
 
   IF (iflag_con==3) THEN
@@ -627,13 +625,12 @@
       PRINT *, 'Emanuel version 3 nouvelle'
     END IF
-    ! print*,'t1, q1 ',t1,q1
-    CALL cv3_prelim(len, nd, ndp1, t1, q1, p1, ph1 & ! nd->na
-      , lv1, lf1, cpn1, tv1, gz1, h1, hm1, th1)
-
-
-    CALL cv3_prelim(len, nd, ndp1, t1_wake, q1_wake, p1, ph1 & !
-                                                               ! nd->na
-      , lv1_wake, lf1_wake, cpn1_wake, tv1_wake, gz1_wake, h1_wake, bid, &
-      th1_wake)
+! print*,'t1, q1 ',t1,q1
+    CALL cv3_prelim(len, nd, ndp1, t1, q1, p1, ph1, &           ! nd->na
+                    lv1, lf1, cpn1, tv1, gz1, h1, hm1, th1)
+
+
+    CALL cv3_prelim(len, nd, ndp1, t1_wake, q1_wake, p1, ph1, & ! nd->na
+                    lv1_wake, lf1_wake, cpn1_wake, tv1_wake, gz1_wake, &
+                    h1_wake, bid, th1_wake)
 
   END IF
@@ -641,17 +638,17 @@
   IF (iflag_con==4) THEN
     PRINT *, 'Emanuel version 4 '
-    CALL cv_prelim(len, nd, ndp1, t1, q1, p1, ph1, lv1, cpn1, tv1, gz1, h1, &
-      hm1)
-  END IF
-
-  ! --------------------------------------------------------------------
-  ! --- CONVECTIVE FEED
-  ! --------------------------------------------------------------------
-
-  ! compute feeding layer potential temperature and mixing ratio :
-
-  ! get bounds of feeding layer
-
-  ! test niveaux couche alimentation KE
+    CALL cv_prelim(len, nd, ndp1, t1, q1, p1, ph1, &
+                   lv1, cpn1, tv1, gz1, h1, hm1)
+  END IF
+
+! --------------------------------------------------------------------
+! --- CONVECTIVE FEED
+! --------------------------------------------------------------------
+
+! compute feeding layer potential temperature and mixing ratio :
+
+! get bounds of feeding layer
+
+! test niveaux couche alimentation KE
   IF (sig1feed1==sig2feed1) THEN
     WRITE (lunout, *) 'impossible de choisir sig1feed=sig2feed'
@@ -664,11 +661,11 @@
     p1feed1(i) = sig1feed1*ph1(i, 1)
     p2feed1(i) = sig2feed1*ph1(i, 1)
-    ! test maf
-    ! p1feed1(i)=ph1(i,1)
-    ! p2feed1(i)=ph1(i,2)
-    ! p2feed1(i)=ph1(i,3)
-    ! testCR: on prend la couche alim des thermiques
-    ! p2feed1(i)=ph1(i,lalim_conv(i)+1)
-    ! print*,'lentr=',lentr(i),ph1(i,lentr(i)+1),ph1(i,2)
+!test maf
+!   p1feed1(i)=ph1(i,1)
+!   p2feed1(i)=ph1(i,2)
+!   p2feed1(i)=ph1(i,3)
+!testCR: on prend la couche alim des thermiques
+!   p2feed1(i)=ph1(i,lalim_conv(i)+1)
+!   print*,'lentr=',lentr(i),ph1(i,lentr(i)+1),ph1(i,2)
   END DO
 
@@ -676,66 +673,66 @@
   END IF
   DO i = 1, len
-    ! print*,'avant cv3_feed plim',p1feed1(i),p2feed1(i)
+! print*,'avant cv3_feed Plim',p1feed1(i),p2feed1(i)
   END DO
   IF (iflag_con==3) THEN
 
-    ! print*, 'IFLAG1 avant cv3_feed'
-    ! print*,'len,nd',len,nd
-    ! write(*,'(64i1)') iflag1(2:klon-1)
-
-    CALL cv3_feed(len, nd, t1, q1, u1, v1, p1, ph1, hm1, gz1 & !
-                                                               ! nd->na
-      , p1feed1, p2feed1, wght1, wghti1, tnk1, thnk1, qnk1, qsnk1, unk1, &
-      vnk1, cpnk1, hnk1, nk1, icb1, icbmax, iflag1, gznk1, plcl1)
-  END IF
-
-  ! print*, 'IFLAG1 apres cv3_feed'
-  ! print*,'len,nd',len,nd
-  ! write(*,'(64i1)') iflag1(2:klon-1)
+! print*, 'IFLAG1 avant cv3_feed'
+! print*,'len,nd',len,nd
+! write(*,'(64i1)') iflag1(2:klon-1)
+
+    CALL cv3_feed(len, nd, ok_conserv_q, &                 ! nd->na
+                  t1, q1, u1, v1, p1, ph1, hm1, gz1, & 
+                  p1feed1, p2feed1, wght1, &
+                  wghti1, tnk1, thnk1, qnk1, qsnk1, unk1, vnk1, &
+                  cpnk1, hnk1, nk1, icb1, icbmax, iflag1, gznk1, plcl1)
+  END IF
+
+! print*, 'IFLAG1 apres cv3_feed'
+! print*,'len,nd',len,nd
+! write(*,'(64i1)') iflag1(2:klon-1)
 
   IF (iflag_con==4) THEN
-    CALL cv_feed(len, nd, t1, q1, qs1, p1, hm1, gz1, nk1, icb1, icbmax, &
-      iflag1, tnk1, qnk1, gznk1, plcl1)
-  END IF
-
-  ! print *, 'cv3_feed-> iflag1, plcl1 ',iflag1(1),plcl1(1)
-
-  ! --------------------------------------------------------------------
-  ! --- UNDILUTE (ADIABATIC) UPDRAFT / 1st part
-  ! (up through ICB for convect4, up through ICB+1 for convect3)
-  ! Calculates the lifted parcel virtual temperature at nk, the
-  ! actual temperature, and the adiabatic liquid water content.
-  ! --------------------------------------------------------------------
+    CALL cv_feed(len, nd, t1, q1, qs1, p1, hm1, gz1, &
+                 nk1, icb1, icbmax, iflag1, tnk1, qnk1, gznk1, plcl1)
+  END IF
+
+! print *, 'cv3_feed-> iflag1, plcl1 ',iflag1(1),plcl1(1)
+
+! --------------------------------------------------------------------
+! --- UNDILUTE (ADIABATIC) UPDRAFT / 1st part
+! (up through ICB for convect4, up through ICB+1 for convect3)
+! Calculates the lifted parcel virtual temperature at nk, the
+! actual temperature, and the adiabatic liquid water content.
+! --------------------------------------------------------------------
 
   IF (iflag_con==3) THEN
 
-    CALL cv3_undilute1(len, nd, t1, qs1, gz1, plcl1, p1, icb1, tnk1, qnk1 & ! nd->na
-      , gznk1, tp1, tvp1, clw1, icbs1)
+    CALL cv3_undilute1(len, nd, t1, qs1, gz1, plcl1, p1, icb1, tnk1, qnk1, & ! nd->na
+                       gznk1, tp1, tvp1, clw1, icbs1)
   END IF
 
 
   IF (iflag_con==4) THEN
-    CALL cv_undilute1(len, nd, t1, q1, qs1, gz1, p1, nk1, icb1, icbmax, tp1, &
-      tvp1, clw1)
-  END IF
-
-  ! -------------------------------------------------------------------
-  ! --- TRIGGERING
-  ! -------------------------------------------------------------------
-
-  ! print *,' avant triggering, iflag_con ',iflag_con
+    CALL cv_undilute1(len, nd, t1, q1, qs1, gz1, p1, nk1, icb1, icbmax, &
+                      tp1, tvp1, clw1)
+  END IF
+
+! -------------------------------------------------------------------
+! --- TRIGGERING
+! -------------------------------------------------------------------
+
+! print *,' avant triggering, iflag_con ',iflag_con
 
   IF (iflag_con==3) THEN
 
-    CALL cv3_trigger(len, nd, icb1, plcl1, p1, th1, tv1, tvp1, thnk1 & !
-                                                                       ! nd->na
-      , pbase1, buoybase1, iflag1, sig1, w01)
-
-
-    ! print*, 'IFLAG1 apres cv3_triger'
-    ! print*,'len,nd',len,nd
-    ! write(*,'(64i1)') iflag1(2:klon-1)
-
-    ! call dump2d(iim,jjm-1,sig1(2)
+    CALL cv3_trigger(len, nd, icb1, plcl1, p1, th1, tv1, tvp1, thnk1, & ! nd->na
+                      pbase1, buoybase1, iflag1, sig1, w01)
+
+
+! print*, 'IFLAG1 apres cv3_triger'
+! print*,'len,nd',len,nd
+! write(*,'(64i1)') iflag1(2:klon-1)
+
+! call dump2d(iim,jjm-1,sig1(2)
   END IF
 
@@ -745,7 +742,7 @@
 
 
-  ! =====================================================================
-  ! --- IF THIS POINT IS REACHED, MOIST CONVECTIVE ADJUSTMENT IS NECESSARY
-  ! =====================================================================
+! =====================================================================
+! --- IF THIS POINT IS REACHED, MOIST CONVECTIVE ADJUSTMENT IS NECESSARY
+! =====================================================================
 
   ncum = 0
@@ -757,78 +754,98 @@
   END DO
 
-  ! print*,'klon, ncum = ',len,ncum
+! print*,'klon, ncum = ',len,ncum
 
   IF (ncum>0) THEN
 
-    ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-    ! --- COMPRESS THE FIELDS
-    ! (-> vectorization over convective gridpoints)
-    ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+! --- COMPRESS THE FIELDS
+!       (-> vectorization over convective gridpoints)
+! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
     IF (iflag_con==3) THEN
-      ! print*,'ncum tv1 ',ncum,tv1
-      ! print*,'tvp1 ',tvp1
-      CALL cv3a_compress(len, nloc, ncum, nd, ntra, iflag1, nk1, icb1, icbs1, &
-        plcl1, tnk1, qnk1, gznk1, hnk1, unk1, vnk1, wghti1, pbase1, &
-        buoybase1, t1, q1, qs1, t1_wake, q1_wake, qs1_wake, s1_wake, u1, v1, &
-        gz1, th1, th1_wake, tra1, h1, lv1, lf1, cpn1, p1, ph1, tv1, tp1, &
-        tvp1, clw1, h1_wake, lv1_wake, lf1_wake, cpn1_wake, tv1_wake, sig1, &
-        w01, ptop21, ale1, alp1, iflag, nk, icb, icbs, plcl, tnk, qnk, gznk, &
-        hnk, unk, vnk, wghti, pbase, buoybase, t, q, qs, t_wake, q_wake, &
-        qs_wake, s_wake, u, v, gz, th, th_wake, tra, h, lv, lf, cpn, p, ph, &
-        tv, tp, tvp, clw, h_wake, lv_wake, lf_wake, cpn_wake, tv_wake, sig, &
-        w0, ptop2, ale, alp)
-
-      ! print*,'tv ',tv
-      ! print*,'tvp ',tvp
+! print*,'ncum tv1 ',ncum,tv1
+! print*,'tvp1 ',tvp1
+      CALL cv3a_compress(len, nloc, ncum, nd, ntra, &
+                         iflag1, nk1, icb1, icbs1, &
+                         plcl1, tnk1, qnk1, gznk1, hnk1, unk1, vnk1, &
+                         wghti1, pbase1, buoybase1, &
+                         t1, q1, qs1, t1_wake, q1_wake, qs1_wake, s1_wake, &
+                         u1, v1, gz1, th1, th1_wake, &
+                         tra1, &
+                         h1, lv1, lf1, cpn1, p1, ph1, tv1, tp1, tvp1, clw1, &
+                         h1_wake, lv1_wake, lf1_wake, cpn1_wake, tv1_wake, &
+                         sig1, w01, ptop21, &
+                         Ale1, Alp1, &
+                         iflag, nk, icb, icbs, &
+                         plcl, tnk, qnk, gznk, hnk, unk, vnk, &
+                         wghti, pbase, buoybase, &
+                         t, q, qs, t_wake, q_wake, qs_wake, s_wake, &
+                         u, v, gz, th, th_wake, &
+                         tra, &
+                         h, lv, lf, cpn, p, ph, tv, tp, tvp, clw, &
+                         h_wake, lv_wake, lf_wake, cpn_wake, tv_wake, &
+                         sig, w0, ptop2, &
+                         Ale, Alp)
+
+! print*,'tv ',tv
+! print*,'tvp ',tvp
 
     END IF
 
     IF (iflag_con==4) THEN
-      CALL cv_compress(len, nloc, ncum, nd, iflag1, nk1, icb1, cbmf1, plcl1, &
-        tnk1, qnk1, gznk1, t1, q1, qs1, u1, v1, gz1, h1, lv1, cpn1, p1, ph1, &
-        tv1, tp1, tvp1, clw1, iflag, nk, icb, cbmf, plcl, tnk, qnk, gznk, t, &
-        q, qs, u, v, gz, h, lv, cpn, p, ph, tv, tp, tvp, clw, dph)
-    END IF
-
-    ! -------------------------------------------------------------------
-    ! --- UNDILUTE (ADIABATIC) UPDRAFT / second part :
-    ! ---   FIND THE REST OF THE LIFTED PARCEL TEMPERATURES
-    ! ---   &
-    ! ---   COMPUTE THE PRECIPITATION EFFICIENCIES AND THE
-    ! ---   FRACTION OF PRECIPITATION FALLING OUTSIDE OF CLOUD
-    ! ---   &
-    ! ---   FIND THE LEVEL OF NEUTRAL BUOYANCY
-    ! -------------------------------------------------------------------
+      CALL cv_compress(len, nloc, ncum, nd, &
+                       iflag1, nk1, icb1, &
+                       cbmf1, plcl1, tnk1, qnk1, gznk1, &
+                       t1, q1, qs1, u1, v1, gz1, &
+                       h1, lv1, cpn1, p1, ph1, tv1, tp1, tvp1, clw1, &
+                       iflag, nk, icb, &
+                       cbmf, plcl, tnk, qnk, gznk, &
+                       t, q, qs, u, v, gz, h, lv, cpn, p, ph, tv, tp, tvp, clw, &
+                       dph)
+    END IF
+
+! -------------------------------------------------------------------
+! --- UNDILUTE (ADIABATIC) UPDRAFT / second part :
+! ---   FIND THE REST OF THE LIFTED PARCEL TEMPERATURES
+! ---   &
+! ---   COMPUTE THE PRECIPITATION EFFICIENCIES AND THE
+! ---   FRACTION OF PRECIPITATION FALLING OUTSIDE OF CLOUD
+! ---   &
+! ---   FIND THE LEVEL OF NEUTRAL BUOYANCY
+! -------------------------------------------------------------------
 
     IF (iflag_con==3) THEN
-      CALL cv3_undilute2(nloc, ncum, nd, icb, icbs, nk & !na->nd
-        , tnk, qnk, gznk, hnk, t, q, qs, gz, p, h, tv, lv, lf, pbase, &
-        buoybase, plcl, inb, tp, tvp, clw, hp, ep, sigp, buoy, frac)
+      CALL cv3_undilute2(nloc, ncum, nd, icb, icbs, nk, &              !na->nd
+                         tnk, qnk, gznk, hnk, t, q, qs, gz, &
+                         p, h, tv, lv, lf, pbase, buoybase, plcl, &
+                         inb, tp, tvp, clw, hp, ep, sigp, buoy, &
+                         frac)
 
     END IF
 
     IF (iflag_con==4) THEN
-      CALL cv_undilute2(nloc, ncum, nd, icb, nk, tnk, qnk, gznk, t, q, qs, &
-        gz, p, dph, h, tv, lv, inb, inbis, tp, tvp, clw, hp, ep, sigp, frac)
-    END IF
-
-    ! -------------------------------------------------------------------
-    ! --- MIXING(1)   (if iflag_mix .ge. 1)
-    ! -------------------------------------------------------------------
+      CALL cv_undilute2(nloc, ncum, nd, icb, nk, &
+                        tnk, qnk, gznk, t, q, qs, gz, &
+                        p, dph, h, tv, lv, &
+                        inb, inbis, tp, tvp, clw, hp, ep, sigp, frac)
+    END IF
+
+! -------------------------------------------------------------------
+! --- MIXING(1)   (if iflag_mix .ge. 1)
+! -------------------------------------------------------------------
     IF (iflag_con==3) THEN
       IF ((iflag_ice_thermo==1) .AND. (iflag_mix/=0)) THEN
-        WRITE (*, *) ' iflag_ice_thermo==1 requires iflag_mix==0', &
-          ' but iflag_mix=', iflag_mix, '. Might as well stop here.'
+        WRITE (*, *) ' iflag_ice_thermo==1 requires iflag_mix==0', ' but iflag_mix=', iflag_mix, &
+          '. Might as well stop here.'
         STOP
       END IF
       IF (iflag_mix>=1) THEN
         CALL zilch(supmax, nloc*klev)
-        CALL cv3p_mixing(nloc, ncum, nd, nd, ntra, icb, nk, inb & !
-                                                                  ! na->nd
-          , ph, t, q, qs, u, v, tra, h, lv, qnk, unk, vnk, hp, tv, tvp, ep, &
-          clw, sig, ment, qent, hent, uent, vent, nent, sigij, elij, supmax, &
-          ments, qents, traent)
-        ! print*, 'cv3p_mixing-> supmax ', (supmax(1,k), k=1,nd)
+        CALL cv3p_mixing(nloc, ncum, nd, nd, ntra, icb, nk, inb, &           ! na->nd
+                         ph, t, q, qs, u, v, tra, h, lv, qnk, &
+                         unk, vnk, hp, tv, tvp, ep, clw, sig, &
+                         ment, qent, hent, uent, vent, nent, &
+                         sigij, elij, supmax, ments, qents, traent)
+! print*, 'cv3p_mixing-> supmax ', (supmax(1,k), k=1,nd)
 
       ELSE
@@ -836,13 +853,14 @@
       END IF
     END IF
-    ! -------------------------------------------------------------------
-    ! --- CLOSURE
-    ! -------------------------------------------------------------------
+! -------------------------------------------------------------------
+! --- CLOSURE
+! -------------------------------------------------------------------
 
 
     IF (iflag_con==3) THEN
       IF (iflag_clos==0) THEN
-        CALL cv3_closure(nloc, ncum, nd, icb, inb & ! na->nd
-          , pbase, p, ph, tv, buoy, sig, w0, cape, m, iflag)
+        CALL cv3_closure(nloc, ncum, nd, icb, inb, &           ! na->nd
+                         pbase, p, ph, tv, buoy, &
+                         sig, w0, cape, m, iflag)
       END IF
 
@@ -851,15 +869,16 @@
       IF (iflag_clos==1) THEN
         PRINT *, ' pas d appel cv3p_closure'
-        ! c        CALL cv3p_closure(nloc,ncum,nd,icb,inb              !
-        ! na->nd
-        ! c    :                       ,pbase,plcl,p,ph,tv,tvp,buoy
-        ! c    :                       ,supmax
-        ! c    o                       ,sig,w0,ptop2,cape,cin,m)
+! c        CALL cv3p_closure(nloc,ncum,nd,icb,inb              ! na->nd
+! c    :                       ,pbase,plcl,p,ph,tv,tvp,buoy
+! c    :                       ,supmax
+! c    o                       ,sig,w0,ptop2,cape,cin,m)
       END IF
       IF (iflag_clos==2) THEN
-        CALL cv3p1_closure(nloc, ncum, nd, icb, inb & ! na->nd
-          , pbase, plcl, p, ph, tv, tvp, buoy, supmax, ok_inhib, ale, alp, &
-          sig, w0, ptop2, cape, cin, m, iflag, coef_clos, plim1, plim2, &
-          asupmax, supmax0, asupmaxmin, cbmf, plfc, wbeff)
+        CALL cv3p1_closure(nloc, ncum, nd, icb, inb, &         ! na->nd
+                           pbase, plcl, p, ph, tv, tvp, buoy, &
+                           supmax, ok_inhib, Ale, Alp, &
+                           sig, w0, ptop2, cape, cin, m, iflag, coef_clos, &
+                           Plim1, plim2, asupmax, supmax0, &
+                           asupmaxmin, cbmf, plfc, wbeff)
 
         PRINT *, 'cv3p1_closure-> plfc,wbeff ', plfc(1), wbeff(1)
@@ -868,21 +887,21 @@
 
     IF (iflag_con==4) THEN
-      CALL cv_closure(nloc, ncum, nd, nk, icb, tv, tvp, p, ph, dph, plcl, &
-        cpn, iflag, cbmf)
-    END IF
-
-    ! print *,'cv_closure-> cape ',cape(1)
-
-    ! -------------------------------------------------------------------
-    ! --- MIXING(2)
-    ! -------------------------------------------------------------------
+      CALL cv_closure(nloc, ncum, nd, nk, icb, &
+                         tv, tvp, p, ph, dph, plcl, cpn, &
+                         iflag, cbmf)
+    END IF
+
+! print *,'cv_closure-> cape ',cape(1)
+
+! -------------------------------------------------------------------
+! --- MIXING(2)
+! -------------------------------------------------------------------
 
     IF (iflag_con==3) THEN
       IF (iflag_mix==0) THEN
-        CALL cv3_mixing(nloc, ncum, nd, nd, ntra, icb, nk, inb & !
-                                                                 ! na->nd
-          , ph, t, q, qs, u, v, tra, h, lv, lf, frac, qnk, unk, vnk, hp, tv, &
-          tvp, ep, clw, m, sig, ment, qent, uent, vent, nent, sigij, elij, &
-          ments, qents, traent)
+        CALL cv3_mixing(nloc, ncum, nd, nd, ntra, icb, nk, inb, &             ! na->nd
+                        ph, t, q, qs, u, v, tra, h, lv, lf, frac, qnk, &
+                        unk, vnk, hp, tv, tvp, ep, clw, m, sig, &
+                        ment, qent, uent, vent, nent, sigij, elij, ments, qents, traent)
         CALL zilch(hent, nloc*klev*klev)
       ELSE
@@ -895,19 +914,20 @@
 
     IF (iflag_con==4) THEN
-      CALL cv_mixing(nloc, ncum, nd, icb, nk, inb, inbis, ph, t, q, qs, u, v, &
-        h, lv, qnk, hp, tv, tvp, ep, clw, cbmf, m, ment, qent, uent, vent, &
-        nent, sigij, elij)
-    END IF
+      CALL cv_mixing(nloc, ncum, nd, icb, nk, inb, inbis, &
+                     ph, t, q, qs, u, v, h, lv, qnk, &
+                     hp, tv, tvp, ep, clw, cbmf, &
+                     m, ment, qent, uent, vent, nent, sigij, elij)
+    END IF                                                                                         
 
     IF (debut) THEN
       PRINT *, ' cv_mixing ->'
     END IF !(debut) THEN
-    ! do i = 1,klev
-    ! print*,'cv_mixing-> i,ment ',i,(ment(1,i,j),j=1,klev)
-    ! enddo
-
-    ! -------------------------------------------------------------------
-    ! --- UNSATURATED (PRECIPITATING) DOWNDRAFTS
-    ! -------------------------------------------------------------------
+! do i = 1,klev
+! print*,'cv_mixing-> i,ment ',i,(ment(1,i,j),j=1,klev)
+! enddo
+
+! -------------------------------------------------------------------
+! --- UNSATURATED (PRECIPITATING) DOWNDRAFTS
+! -------------------------------------------------------------------
     IF (iflag_con==3) THEN
       IF (debut) THEN
@@ -915,15 +935,18 @@
       END IF !(debut) THEN
 
-      CALL cv3_unsat(nloc, ncum, nd, nd, ntra, icb, inb, iflag & !
-                                                                 ! na->nd
-        , t_wake, q_wake, qs_wake, gz, u, v, tra, p, ph, th_wake, tv_wake, &
-        lv_wake, lf_wake, cpn_wake, ep, sigp, clw, m, ment, elij, delt, plcl, &
-        coef_clos, mp, qp, up, vp, trap, wt, water, evap, fondue, ice, faci, &
-        b, sigd, wdtraina, wdtrainm) ! RomP
+      CALL cv3_unsat(nloc, ncum, nd, nd, ntra, icb, inb, iflag, &              ! na->nd
+                     t_wake, q_wake, qs_wake, gz, u, v, tra, p, ph, &
+                     th_wake, tv_wake, lv_wake, lf_wake, cpn_wake, &
+                     ep, sigp, clw, &
+                     m, ment, elij, delt, plcl, coef_clos, &
+                     mp, qp, up, vp, trap, wt, water, evap, fondue, ice, &
+                     faci, b, sigd, &
+                     wdtrainA, wdtrainM)                                       ! RomP
     END IF
 
     IF (iflag_con==4) THEN
-      CALL cv_unsat(nloc, ncum, nd, inb, t, q, qs, gz, u, v, p, ph, h, lv, &
-        ep, sigp, clw, m, ment, elij, iflag, mp, qp, up, vp, wt, water, evap)
+      CALL cv_unsat(nloc, ncum, nd, inb, t, q, qs, gz, u, v, p, ph, &
+                     h, lv, ep, sigp, clw, m, ment, elij, &
+                     iflag, mp, qp, up, vp, wt, water, evap)
     END IF
 
@@ -932,21 +955,27 @@
     END IF !(debut) THEN
 
-    ! print *,'cv_unsat-> mp ',mp
-    ! print *,'cv_unsat-> water ',water
-    ! -------------------------------------------------------------------
-    ! --- YIELD
-    ! (tendencies, precipitation, variables of interface with other
-    ! processes, etc)
-    ! -------------------------------------------------------------------
+! print *,'cv_unsat-> mp ',mp
+! print *,'cv_unsat-> water ',water
+! -------------------------------------------------------------------
+! --- YIELD
+! (tendencies, precipitation, variables of interface with other
+! processes, etc)
+! -------------------------------------------------------------------
 
     IF (iflag_con==3) THEN
 
-      CALL cv3_yield(nloc, ncum, nd, nd, ntra & ! na->nd
-        , icb, inb, delt, t, q, t_wake, q_wake, s_wake, u, v, tra, gz, p, ph, &
-        h, hp, lv, lf, cpn, th, th_wake, ep, clw, m, tp, mp, qp, up, vp, &
-        trap, wt, water, ice, evap, fondue, faci, b, sigd, ment, qent, hent, &
-        iflag_mix, uent, vent, nent, elij, traent, sig, tv, tvp, wghti, &
-        iflag, precip, vprecip, ft, fq, fu, fv, ftra, cbmf, upwd, dnwd, &
-        dnwd0, ma, mip, tls, tps, qcondc, wd, ftd, fqd)
+      CALL cv3_yield(nloc, ncum, nd, nd, ntra, ok_conserv_q, &                      ! na->nd
+                     icb, inb, delt, &
+                     t, q, t_wake, q_wake, s_wake, u, v, tra, &
+                     gz, p, ph, h, hp, lv, lf, cpn, th, th_wake, &
+                     ep, clw, m, tp, mp, qp, up, vp, trap, &
+                     wt, water, ice, evap, fondue, faci, b, sigd, &
+                     ment, qent, hent, iflag_mix, uent, vent, &
+                     nent, elij, traent, sig, &
+                     tv, tvp, wghti, &
+                     iflag, precip, vprecip, ft, fq, fu, fv, ftra, &
+                     cbmf, upwd, dnwd, dnwd0, ma, mip, &
+                     tls, tps, qcondc, wd, &
+                     ftd, fqd)
     END IF
 
@@ -956,50 +985,74 @@
 
     IF (iflag_con==4) THEN
-      CALL cv_yield(nloc, ncum, nd, nk, icb, inb, delt, t, q, u, v, gz, p, &
-        ph, h, hp, lv, cpn, ep, clw, frac, m, mp, qp, up, vp, wt, water, &
-        evap, ment, qent, uent, vent, nent, elij, tv, tvp, iflag, wd, qprime, &
-        tprime, precip, cbmf, ft, fq, fu, fv, ma, qcondc)
-    END IF
-
-    ! AC!
-    ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-    ! --- passive tracers
-    ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+      CALL cv_yield(nloc, ncum, nd, nk, icb, inb, delt, &
+                     t, q, u, v, &
+                     gz, p, ph, h, hp, lv, cpn, &
+                     ep, clw, frac, m, mp, qp, up, vp, &
+                     wt, water, evap, &
+                     ment, qent, uent, vent, nent, elij, &
+                     tv, tvp, &
+                     iflag, wd, qprime, tprime, &
+                     precip, cbmf, ft, fq, fu, fv, ma, qcondc)
+    END IF
+
+!AC!
+!^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+!--- passive tracers
+!^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
     IF (iflag_con==3) THEN
-      ! RomP >>>
-      CALL cv3_tracer(nloc, len, ncum, nd, nd, ment, sigij, da, phi, phi2, &
-        d1a, dam, ep, vprecip, elij, clw, epmlmmm, eplamm, icb, inb)
-      ! RomP <<<
-    END IF
-
-    ! AC!
-
-    ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-    ! --- UNCOMPRESS THE FIELDS
-    ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+!RomP >>>
+      CALL cv3_tracer(nloc, len, ncum, nd, nd, &
+                     ment, sigij, da, phi, phi2, d1a, dam, &
+                     ep, vprecip, elij, clw, epmlmMm, eplaMm, &
+                     icb, inb)
+!RomP <<<
+    END IF
+
+!AC!
+
+! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+! --- UNCOMPRESS THE FIELDS
+! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
 
     IF (iflag_con==3) THEN
-      CALL cv3a_uncompress(nloc, len, ncum, nd, ntra, idcum, iflag, icb, inb, &
-        precip, cbmf, plcl, plfc, wbeff, sig, w0, ptop2, ft, fq, fu, fv, &
-        ftra, sigd, ma, mip, vprecip, upwd, dnwd, dnwd0, qcondc, wd, cape, &
-        cin, tvp, ftd, fqd, plim1, plim2, asupmax, supmax0, asupmaxmin, da, &
-        phi, mp, phi2, d1a, dam, sigij & ! RomP
-        , clw, elij, evap, ep, epmlmmm, eplamm & ! RomP
-        , wdtraina, wdtrainm &     ! RomP
-        , iflag1, kbas1, ktop1, precip1, cbmf1, plcl1, plfc1, wbeff1, sig1, &
-        w01, ptop21, ft1, fq1, fu1, fv1, ftra1, sigd1, ma1, mip1, vprecip1, &
-        upwd1, dnwd1, dnwd01, qcondc1, wd1, cape1, cin1, tvp1, ftd1, fqd1, &
-        plim11, plim21, asupmax1, supmax01, asupmaxmin1, da1, phi1, mp1, &
-        phi21, d1a1, dam1, sigij1 & ! RomP
-        , clw1, elij1, evap1, ep1, epmlmmm1, eplamm1 & ! RomP
-        , wdtraina1, wdtrainm1) ! RomP
+      CALL cv3a_uncompress(nloc, len, ncum, nd, ntra, idcum, &
+                           iflag, icb, inb, &
+                           precip, cbmf, plcl, plfc, wbeff, sig, w0, ptop2, &
+                           ft, fq, fu, fv, ftra, &
+                           sigd, ma, mip, vprecip, upwd, dnwd, dnwd0, &
+                           qcondc, wd, cape, cin, &
+                           tvp, &
+                           ftd, fqd, &
+                           Plim1, plim2, asupmax, supmax0, &
+                           asupmaxmin, &
+                           da, phi, mp, phi2, d1a, dam, sigij, &         ! RomP
+                           clw, elij, evap, ep, epmlmMm, eplaMm, &       ! RomP
+                           wdtrainA, wdtrainM, &                         ! RomP
+                           iflag1, kbas1, ktop1, &
+                           precip1, cbmf1, plcl1, plfc1, wbeff1, sig1, w01, ptop21, &
+                           ft1, fq1, fu1, fv1, ftra1, &
+                           sigd1, ma1, mip1, vprecip1, upwd1, dnwd1, dnwd01, &
+                           qcondc1, wd1, cape1, cin1, &
+                           tvp1, &
+                           ftd1, fqd1, &
+                           Plim11, plim21, asupmax1, supmax01, &
+                           asupmaxmin1, &
+                           da1, phi1, mp1, phi21, d1a1, dam1, sigij1,  & ! RomP
+                           clw1, elij1, evap1, ep1, epmlmMm1, eplaMm1, & ! RomP
+                           wdtrainA1, wdtrainM1)                         ! RomP
     END IF
 
     IF (iflag_con==4) THEN
-      CALL cv_uncompress(nloc, len, ncum, nd, idcum, iflag, precip, cbmf, ft, &
-        fq, fu, fv, ma, qcondc, iflag1, precip1, cbmf1, ft1, fq1, fu1, fv1, &
-        ma1, qcondc1)
+      CALL cv_uncompress(nloc, len, ncum, nd, idcum, &
+                           iflag, &
+                           precip, cbmf, &
+                           ft, fq, fu, fv, &
+                           ma, qcondc, &
+                           iflag1, &
+                           precip1,cbmf1, &
+                           ft1, fq1, fu1, fv1, &
+                           ma1, qcondc1)
     END IF
 
@@ -1009,5 +1062,6 @@
     PRINT *, ' cv_compress -> '
     debut = .FALSE.
-  END IF !(debut) THEN
+  END IF  !(debut) THEN
+
 
   RETURN
