Index: LMDZ6/branches/Optimisation_LMDZ/libf/phylmd/cv3a_driver.f90
===================================================================
--- LMDZ6/branches/Optimisation_LMDZ/libf/phylmd/cv3a_driver.f90	(revision 3761)
+++ LMDZ6/branches/Optimisation_LMDZ/libf/phylmd/cv3a_driver.f90	(revision 3762)
@@ -288,4 +288,8 @@
     CHARACTER(LEN=80) :: abort_message
 
+    INTEGER :: coef_convective(len)
+    INTEGER :: k
+    REAL, parameter :: Cin_noconv = -100000., Cape_noconv = -1
+
     INTEGER, SAVE :: igout = 1
 !$omp THREADPRIVATE(igout)
@@ -407,227 +411,298 @@
 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
-    compress = .true.
+    compress = .false.
     if (compress) then
       compress_mode = COMPRESS_MODE_COMPRESS
-    else
-      compress_mode = COMPRESS_MODE_COPY
-    endif
-
-    nloc = get_compress_size(len, (iflag1(:) == 0))
-    block
-      ! (local) compressed fields:
-      INTEGER iflag(nloc), nk(nloc), icb(nloc)
-      INTEGER nent(nloc, nd)
-      INTEGER icbs(nloc)
-      INTEGER inb(nloc)
-
-      REAL cbmf(nloc), plcl(nloc), plfc(nloc), wbeff(nloc)
-      REAL t(nloc, nd), q(nloc, nd), qs(nloc, nd)
-      REAL t_wake(nloc, nd), q_wake(nloc, nd), qs_wake(nloc, nd)
-      REAL s_wake(nloc)
-      REAL u(nloc, nd), v(nloc, nd)
-      REAL gz(nloc, nd), h(nloc, nd)
-      REAL h_wake(nloc, nd)
-      REAL lv(nloc, nd), lf(nloc, nd), cpn(nloc, nd)
-      REAL lv_wake(nloc, nd), lf_wake(nloc, nd), cpn_wake(nloc, nd)
-      REAL p(nloc, nd), ph(nloc, nd + 1), tv(nloc, nd), tp(nloc, nd)
-      REAL tv_wake(nloc, nd)
-      REAL clw(nloc, nd)
-      REAL qta(nloc, nd), qpreca(nloc, nd)
-      REAL pbase(nloc), buoybase(nloc), th(nloc, nd)
-      REAL th_wake(nloc, nd)
-      REAL tvp(nloc, nd)
-      REAL sig(nloc, nd), w0(nloc, nd), ptop2(nloc)
-      REAL hp(nloc, nd), ep(nloc, nd), sigp(nloc, nd)
-      REAL buoy(nloc, nd)
-      REAL cape(nloc)
-      REAL cin(nloc)
-      REAL m(nloc, nd)
-      REAL mm(nloc, nd)
-      REAL ment(nloc, nd, nd), sigij(nloc, nd, nd)
-      REAL qent(nloc, nd, nd)
-      REAL hent(nloc, nd, nd)
-      REAL uent(nloc, nd, nd), vent(nloc, nd, nd)
-      REAL ments(nloc, nd, nd), qents(nloc, nd, nd)
-      REAL elij(nloc, nd, nd)
-      REAL supmax(nloc, nd)
-      REAL Ale(nloc), Alp(nloc), coef_clos(nloc)
-      REAL omega(nloc, nd)
-      REAL sigd(nloc)
-      REAL, DIMENSION(nloc, nd)     :: mp, qp, up, vp
-      REAL, DIMENSION(nloc, nd)     :: wt, water, evap
-      REAL, DIMENSION(nloc, nd)     :: ice, fondue, b
-      REAL, DIMENSION(nloc, nd)     :: frac_a, frac_s, faci
-      REAL ft(nloc, nd), fq(nloc, nd)
-      REAL ftd(nloc, nd), fqd(nloc, nd)
-      REAL fu(nloc, nd), fv(nloc, nd)
-      REAL upwd(nloc, nd), dnwd(nloc, nd), dnwd0(nloc, nd)
-      REAL ma(nloc, nd), mip(nloc, nd)
-      REAL precip(nloc)
-      REAL vprecip(nloc, nd + 1)
-      REAL vprecipi(nloc, nd + 1)
-      REAL tra(nloc, nd, ntra), trap(nloc, nd, ntra)
-      REAL ftra(nloc, nd, ntra), traent(nloc, nd, nd, ntra)
-      REAL qcondc(nloc, nd)
-      REAL wd(nloc)
-      REAL Plim1(nloc), plim2(nloc)
-      REAL asupmax(nloc, nd)
-      REAL supmax0(nloc)
-      REAL asupmaxmin(nloc)
-
-      REAL tnk(nloc), qnk(nloc), gznk(nloc)
-      REAL wghti(nloc, nd)
-      REAL hnk(nloc), unk(nloc), vnk(nloc)
-
-      REAL qtc(nloc, nd)
-      REAL sigt(nloc, nd)
-
-      REAL wdtrainA(nloc, nd), wdtrainS(nloc, nd), wdtrainM(nloc, nd)
-      REAL da(nloc, nd), phi(nloc, nd, nd)
-      REAL epmlmMm(nloc, nd, nd), eplaMm(nloc, nd)
-      REAL phi2(nloc, nd, nd)
-      REAL d1a(nloc, nd), dam(nloc, nd)
-      REAL epmax_diag(nloc)
-
-      LOGICAL ok_inhib ! True => possible inhibition of convection by dryness
-      integer :: k
-
-      integer :: ncum ! Number of convective cells
-      type(compress_data_t) :: compress_data
-      type(array_list) :: cv3a_compress_list, cv3a_uncompress_list
-      logical, save :: timers_first = .true.
-      !$omp threadprivate(timers_first)
-
-      call enter_profile("cv3a_compress")
-      call driver_log('cv3a_compress')
-
-      call add_array_i1(cv3a_compress_list, iflag1, iflag)
-      call add_array_i1(cv3a_compress_list, nk1, nk)
-      call add_array_i1(cv3a_compress_list, kbas1, icb)
-      call add_array_i1(cv3a_compress_list, icbs1, icbs)
-      call add_array_r1(cv3a_compress_list, plcl1, plcl)
-      call add_array_r1(cv3a_compress_list, tnk1, tnk)
-      call add_array_r1(cv3a_compress_list, qnk1, qnk)
-      call add_array_r1(cv3a_compress_list, gznk1, gznk)
-      call add_array_r1(cv3a_compress_list, hnk1, hnk)
-      call add_array_r1(cv3a_compress_list, unk1, unk)
-      call add_array_r1(cv3a_compress_list, vnk1, vnk)
-      call add_array_r2(cv3a_compress_list, wghti1, wghti)
-      call add_array_r1(cv3a_compress_list, pbase1, pbase)
-      call add_array_r1(cv3a_compress_list, buoybase1, buoybase)
-      call add_array_r2(cv3a_compress_list, th1, th)
-      call add_array_r2(cv3a_compress_list, t1, t)
-      call add_array_r2(cv3a_compress_list, q1, q)
-      call add_array_r2(cv3a_compress_list, qs1, qs)
-      call add_array_r2(cv3a_compress_list, t1_wake, t_wake)
-      call add_array_r2(cv3a_compress_list, q1_wake, q_wake)
-      call add_array_r2(cv3a_compress_list, qs1_wake, qs_wake)
-      call add_array_r1(cv3a_compress_list, s1_wake, s_wake)
-      call add_array_r2(cv3a_compress_list, u1, u)
-      call add_array_r2(cv3a_compress_list, v1, v)
-      call add_array_r2(cv3a_compress_list, gz1, gz)
-      call add_array_r2(cv3a_compress_list, h1, h)
-      call add_array_r2(cv3a_compress_list, th1_wake, th_wake)
-      call add_array_r2(cv3a_compress_list, lv1, lv)
-      call add_array_r2(cv3a_compress_list, lf1, lf)
-      call add_array_r2(cv3a_compress_list, cpn1, cpn)
-      call add_array_r2(cv3a_compress_list, p1, p)
-      call add_array_r2(cv3a_compress_list, ph1, ph)
-      call add_array_r2(cv3a_compress_list, tv1, tv)
-      call add_array_r2(cv3a_compress_list, tp1, tp)
-      call add_array_r2(cv3a_compress_list, tvp1, tvp)
-      call add_array_r2(cv3a_compress_list, clw1, clw)
-      call add_array_r2(cv3a_compress_list, h1_wake, h_wake)
-      call add_array_r2(cv3a_compress_list, lv1_wake, lv_wake)
-      call add_array_r2(cv3a_compress_list, lf1_wake, lf_wake)
-      call add_array_r2(cv3a_compress_list, cpn1_wake, cpn_wake)
-      call add_array_r2(cv3a_compress_list, tv1_wake, tv_wake)
-      call add_array_r2(cv3a_compress_list, sig1, sig)
-      call add_array_r1(cv3a_compress_list, sig1(:, nd), sig(:, nd))
-      call add_array_r2(cv3a_compress_list, w01, w0)
-      call add_array_r1(cv3a_compress_list, Ale1, Ale)
-      call add_array_r1(cv3a_compress_list, Alp1, Alp)
-      call add_array_r2(cv3a_compress_list, omega1, omega)
-
-      call cv3a_compress(len, (iflag1 == 0), cv3a_compress_list, compress_data)
-      ncum = compress_data%ncum
-      call exit_profile("cv3a_compress")
-
+      !compress_mode = COMPRESS_MODE_COPY
+
+      nloc = get_compress_size(len, (iflag1(:) == 0))
+
+      block
+        ! (local) compressed fields:
+        INTEGER iflag(nloc), nk(nloc), icb(nloc)
+        INTEGER nent(nloc, nd)
+        INTEGER icbs(nloc)
+        INTEGER inb(nloc)
+
+        REAL cbmf(nloc), plcl(nloc), plfc(nloc), wbeff(nloc)
+        REAL t(nloc, nd), q(nloc, nd), qs(nloc, nd)
+        REAL t_wake(nloc, nd), q_wake(nloc, nd), qs_wake(nloc, nd)
+        REAL s_wake(nloc)
+        REAL u(nloc, nd), v(nloc, nd)
+        REAL gz(nloc, nd), h(nloc, nd)
+        REAL h_wake(nloc, nd)
+        REAL lv(nloc, nd), lf(nloc, nd), cpn(nloc, nd)
+        REAL lv_wake(nloc, nd), lf_wake(nloc, nd), cpn_wake(nloc, nd)
+        REAL p(nloc, nd), ph(nloc, nd + 1), tv(nloc, nd), tp(nloc, nd)
+        REAL tv_wake(nloc, nd)
+        REAL clw(nloc, nd)
+        REAL qta(nloc, nd), qpreca(nloc, nd)
+        REAL pbase(nloc), buoybase(nloc), th(nloc, nd)
+        REAL th_wake(nloc, nd)
+        REAL tvp(nloc, nd)
+        REAL sig(nloc, nd), w0(nloc, nd), ptop2(nloc)
+        REAL hp(nloc, nd), ep(nloc, nd), sigp(nloc, nd)
+        REAL buoy(nloc, nd)
+        REAL cape(nloc)
+        REAL cin(nloc)
+        REAL m(nloc, nd)
+        REAL mm(nloc, nd)
+        REAL ment(nloc, nd, nd), sigij(nloc, nd, nd)
+        REAL qent(nloc, nd, nd)
+        REAL hent(nloc, nd, nd)
+        REAL uent(nloc, nd, nd), vent(nloc, nd, nd)
+        REAL ments(nloc, nd, nd), qents(nloc, nd, nd)
+        REAL elij(nloc, nd, nd)
+        REAL supmax(nloc, nd)
+        REAL Ale(nloc), Alp(nloc), coef_clos(nloc)
+        REAL omega(nloc, nd)
+        REAL sigd(nloc)
+        REAL, DIMENSION(nloc, nd)     :: mp, qp, up, vp
+        REAL, DIMENSION(nloc, nd)     :: wt, water, evap
+        REAL, DIMENSION(nloc, nd)     :: ice, fondue, b
+        REAL, DIMENSION(nloc, nd)     :: frac_a, frac_s, faci
+        REAL ft(nloc, nd), fq(nloc, nd)
+        REAL ftd(nloc, nd), fqd(nloc, nd)
+        REAL fu(nloc, nd), fv(nloc, nd)
+        REAL upwd(nloc, nd), dnwd(nloc, nd), dnwd0(nloc, nd)
+        REAL ma(nloc, nd), mip(nloc, nd)
+        REAL precip(nloc)
+        REAL vprecip(nloc, nd + 1)
+        REAL vprecipi(nloc, nd + 1)
+        REAL tra(nloc, nd, ntra), trap(nloc, nd, ntra)
+        REAL ftra(nloc, nd, ntra), traent(nloc, nd, nd, ntra)
+        REAL qcondc(nloc, nd)
+        REAL wd(nloc)
+        REAL Plim1(nloc), plim2(nloc)
+        REAL asupmax(nloc, nd)
+        REAL supmax0(nloc)
+        REAL asupmaxmin(nloc)
+
+        REAL tnk(nloc), qnk(nloc), gznk(nloc)
+        REAL wghti(nloc, nd)
+        REAL hnk(nloc), unk(nloc), vnk(nloc)
+
+        REAL qtc(nloc, nd)
+        REAL sigt(nloc, nd)
+
+        REAL wdtrainA(nloc, nd), wdtrainS(nloc, nd), wdtrainM(nloc, nd)
+        REAL da(nloc, nd), phi(nloc, nd, nd)
+        REAL epmlmMm(nloc, nd, nd), eplaMm(nloc, nd)
+        REAL phi2(nloc, nd, nd)
+        REAL d1a(nloc, nd), dam(nloc, nd)
+        REAL epmax_diag(nloc)
+
+        LOGICAL ok_inhib ! True => possible inhibition of convection by dryness
+
+        integer :: ncum ! Number of convective cells
+        type(compress_data_t) :: compress_data
+        type(array_list) :: cv3a_compress_list, cv3a_uncompress_list
+        logical, save :: timers_first = .true.
+        !$omp threadprivate(timers_first)
+
+        call enter_profile("cv3a_compress")
+        call driver_log('cv3a_compress')
+
+        call add_array_i1(cv3a_compress_list, iflag1, iflag)
+        call add_array_i1(cv3a_compress_list, nk1, nk)
+        call add_array_i1(cv3a_compress_list, kbas1, icb)
+        call add_array_i1(cv3a_compress_list, icbs1, icbs)
+        call add_array_r1(cv3a_compress_list, plcl1, plcl)
+        call add_array_r1(cv3a_compress_list, tnk1, tnk)
+        call add_array_r1(cv3a_compress_list, qnk1, qnk)
+        call add_array_r1(cv3a_compress_list, gznk1, gznk)
+        call add_array_r1(cv3a_compress_list, hnk1, hnk)
+        call add_array_r1(cv3a_compress_list, unk1, unk)
+        call add_array_r1(cv3a_compress_list, vnk1, vnk)
+        call add_array_r2(cv3a_compress_list, wghti1, wghti)
+        call add_array_r1(cv3a_compress_list, pbase1, pbase)
+        call add_array_r1(cv3a_compress_list, buoybase1, buoybase)
+        call add_array_r2(cv3a_compress_list, th1, th)
+        call add_array_r2(cv3a_compress_list, t1, t)
+        call add_array_r2(cv3a_compress_list, q1, q)
+        call add_array_r2(cv3a_compress_list, qs1, qs)
+        call add_array_r2(cv3a_compress_list, t1_wake, t_wake)
+        call add_array_r2(cv3a_compress_list, q1_wake, q_wake)
+        call add_array_r2(cv3a_compress_list, qs1_wake, qs_wake)
+        call add_array_r1(cv3a_compress_list, s1_wake, s_wake)
+        call add_array_r2(cv3a_compress_list, u1, u)
+        call add_array_r2(cv3a_compress_list, v1, v)
+        call add_array_r2(cv3a_compress_list, gz1, gz)
+        call add_array_r2(cv3a_compress_list, h1, h)
+        call add_array_r2(cv3a_compress_list, th1_wake, th_wake)
+        call add_array_r2(cv3a_compress_list, lv1, lv)
+        call add_array_r2(cv3a_compress_list, lf1, lf)
+        call add_array_r2(cv3a_compress_list, cpn1, cpn)
+        call add_array_r2(cv3a_compress_list, p1, p)
+        call add_array_r2(cv3a_compress_list, ph1, ph)
+        call add_array_r2(cv3a_compress_list, tv1, tv)
+        call add_array_r2(cv3a_compress_list, tp1, tp)
+        call add_array_r2(cv3a_compress_list, tvp1, tvp)
+        call add_array_r2(cv3a_compress_list, clw1, clw)
+        call add_array_r2(cv3a_compress_list, h1_wake, h_wake)
+        call add_array_r2(cv3a_compress_list, lv1_wake, lv_wake)
+        call add_array_r2(cv3a_compress_list, lf1_wake, lf_wake)
+        call add_array_r2(cv3a_compress_list, cpn1_wake, cpn_wake)
+        call add_array_r2(cv3a_compress_list, tv1_wake, tv_wake)
+        call add_array_r2(cv3a_compress_list, sig1, sig)
+        call add_array_r1(cv3a_compress_list, sig1(:, nd), sig(:, nd))
+        call add_array_r2(cv3a_compress_list, w01, w0)
+        call add_array_r1(cv3a_compress_list, Ale1, Ale)
+        call add_array_r1(cv3a_compress_list, Alp1, Alp)
+        call add_array_r2(cv3a_compress_list, omega1, omega)
+
+        call cv3a_compress(len, (iflag1 == 0), cv3a_compress_list, compress_data)
+        ncum = compress_data%ncum
+        call exit_profile("cv3a_compress")
+
+        call cv3a_driver_compressed(nloc, nd, ntra, &
+                                    debut, ok_conserv_q, iflag_mix, iflag_clos, prt_level, &
+                                    ! Input fields
+                                    delt, tau_cld_cv, coefw_cld_cv, nk, icbs, tnk, qnk, gznk, hnk, unk, vnk, pbase, buoybase, s_wake, Ale, Alp, wghti, th, t, q, qs, t_wake, q_wake, qs_wake, u, v, gz, h, th_wake, lv, lf, cpn, p, tv, tp, h_wake, lv_wake, lf_wake, cpn_wake, tv_wake, omega, ph, &
+                                    ! Input/output
+                                    iflag, icb, plcl, sig, w0, tvp, clw, &
+                                    ! Output fields
+                                    inb, precip, cbmf, plfc, wbeff, ptop2, sigd, wd, cape, cin, Plim1, plim2, supmax0, asupmaxmin, epmax_diag, ft, fq, fu, fv, ma, mip, upwd, dnwd, dnwd0, qcondc, ftd, fqd, asupmax, da, mp, d1a, dam, qta,  evap, ep, eplaMm, wdtrainA, wdtrainS, wdtrainM, qtc, sigt, vprecip, vprecipi, phi, phi2, sigij, elij, epmlmMm)
+
+        ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+        ! --- UNCOMPRESS THE FIELDS
+        ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+        call enter_profile("cv3a_uncompress")
+        call driver_log('cv3a_uncompress')
+        call add_array_i1(cv3a_uncompress_list, iflag, iflag1, init=.false.)
+        call add_array_i1(cv3a_uncompress_list, icb, kbas1)
+        call add_array_i1(cv3a_uncompress_list, inb, ktop1)
+        call add_array_r1(cv3a_uncompress_list, precip, precip1)
+        call add_array_r1(cv3a_uncompress_list, cbmf, cbmf1)
+        call add_array_r1(cv3a_uncompress_list, plcl, plcl1, init=.false.)
+        call add_array_r1(cv3a_uncompress_list, plfc, plfc1)
+        call add_array_r1(cv3a_uncompress_list, wbeff, wbeff1)
+        call add_array_r2(cv3a_uncompress_list, sig, sig1)
+        call add_array_r2(cv3a_uncompress_list, w0, w01)
+        call add_array_r1(cv3a_uncompress_list, ptop2, ptop21)
+        call add_array_r2(cv3a_uncompress_list, ft, ft1)
+        call add_array_r2(cv3a_uncompress_list, fq, fq1)
+        call add_array_r2(cv3a_uncompress_list, fu, fu1)
+        call add_array_r2(cv3a_uncompress_list, fv, fv1)
+        call add_array_r1(cv3a_uncompress_list, sigd, sigd1)
+        call add_array_r2(cv3a_uncompress_list, ma, ma1)
+        call add_array_r2(cv3a_uncompress_list, mip, mip1)
+        call add_array_r2(cv3a_uncompress_list, vprecip, vprecip1)
+        call add_array_r2(cv3a_uncompress_list, vprecipi, vprecipi1)
+        call add_array_r2(cv3a_uncompress_list, upwd, upwd1)
+        call add_array_r2(cv3a_uncompress_list, dnwd, dnwd1)
+        call add_array_r2(cv3a_uncompress_list, dnwd0, dnwd01)
+        call add_array_r2(cv3a_uncompress_list, qcondc, qcondc1)
+        call add_array_r1(cv3a_uncompress_list, wd, wd1)
+        cape1(:) = Cape_noconv
+        call add_array_r1(cv3a_uncompress_list, cape, cape1, init=.false.)
+        cin1(:) = Cin_noconv
+        call add_array_r1(cv3a_uncompress_list, cin, cin1, init=.false.)
+        call add_array_r2(cv3a_uncompress_list, tvp, tvp1, init=.false.)
+        call add_array_r2(cv3a_uncompress_list, ftd, ftd1)
+        call add_array_r2(cv3a_uncompress_list, fqd, fqd1)
+        call add_array_r1(cv3a_uncompress_list, Plim1, Plim11)
+        call add_array_r1(cv3a_uncompress_list, plim2, plim21)
+        call add_array_r2(cv3a_uncompress_list, asupmax, asupmax1)
+        call add_array_r1(cv3a_uncompress_list, supmax0, supmax01)
+        call add_array_r1(cv3a_uncompress_list, asupmaxmin, asupmaxmin1)
+        call add_array_r2(cv3a_uncompress_list, da, da1)
+        call add_array_r3(cv3a_uncompress_list, phi, phi1)
+        call add_array_r2(cv3a_uncompress_list, mp, mp1)
+        call add_array_r3(cv3a_uncompress_list, phi2, phi21)
+        call add_array_r2(cv3a_uncompress_list, d1a, d1a1)
+        call add_array_r2(cv3a_uncompress_list, dam, dam1)
+        call add_array_r3(cv3a_uncompress_list, sigij, sigij1)
+        call add_array_r2(cv3a_uncompress_list, qta, qta1)
+        call add_array_r2(cv3a_uncompress_list, clw, clw1, init=.false.)
+        call add_array_r3(cv3a_uncompress_list, elij, elij1)
+        call add_array_r2(cv3a_uncompress_list, evap, evap1)
+        call add_array_r2(cv3a_uncompress_list, ep, ep1)
+        call add_array_r3(cv3a_uncompress_list, epmlmMm, epmlmMm1)
+        call add_array_r2(cv3a_uncompress_list, eplaMm, eplaMm1)
+        call add_array_r2(cv3a_uncompress_list, wdtrainA, wdtrainA1)
+        call add_array_r2(cv3a_uncompress_list, wdtrainS, wdtrainS1)
+        call add_array_r2(cv3a_uncompress_list, wdtrainM, wdtrainM1)
+        call add_array_r2(cv3a_uncompress_list, qtc, qtc1)
+        call add_array_r2(cv3a_uncompress_list, sigt, sigt1)
+        call add_array_r1(cv3a_uncompress_list, epmax_diag, epmax_diag1)
+        call add_array_r1(cv3a_uncompress_list, sig(:, nd), sig1(:, nd))
+        call cv3a_uncompress(len, compress_data, cv3a_uncompress_list)
+        call exit_profile("cv3a_uncompress")
+
+      end block
+    else !compress
+      nloc = len
+      ktop1 = 0
+      precip1 = 0
+      cbmf1 = 0
+      plfc1 = 0
+      wbeff1 = 0
+      ptop21 = 0
+      sigd1 = 0
+      wd1 = 0
+      cape1 = Cape_noconv
+      cin1 = Cin_noconv
+      Plim11 = 0
+      plim21 = 0
+      supmax01 = 0
+      asupmaxmin1 = 0
+      epmax_diag1 = 0
+      ft1 = 0
+      fq1 = 0
+      fu1 = 0
+      fv1 = 0
+      ma1 = 0
+      mip1 = 0
+      upwd1 = 0
+      dnwd1 = 0
+      dnwd01 = 0
+      qcondc1 = 0
+      ftd1 = 0
+      fqd1 = 0
+      asupmax1 = 0
+      da1 = 0
+      mp1 = 0
+      d1a1 = 0
+      dam1 = 0
+      qta1 = 0
+      evap1 = 0
+      ep1 = 0
+      eplaMm1 = 0
+      wdtrainA1 = 0
+      wdtrainS1 = 0
+      wdtrainM1 = 0
+      qtc1 = 0
+      sigt1 = 0
+      vprecip1 = 0
+      vprecipi1 = 0
+      phi1 = 0
+      phi21 = 0
+      sigij1 = 0
+      elij1 = 0
+      epmlmMm1 = 0
+      coef_convective(:) = merge(1, 0, iflag1(:) == 0)
       call cv3a_driver_compressed(nloc, nd, ntra, &
                                   debut, ok_conserv_q, iflag_mix, iflag_clos, prt_level, &
                                   ! Input fields
-                                  delt, tau_cld_cv, coefw_cld_cv, nk, icbs, tnk, qnk, gznk, hnk, unk, vnk, pbase, buoybase, s_wake, Ale, Alp, wghti, th, t, q, qs, t_wake, q_wake, qs_wake, u, v, gz, h, th_wake, lv, lf, cpn, p, tv, tp, h_wake, lv_wake, lf_wake, cpn_wake, tv_wake, omega, ph, &
+                                  delt, tau_cld_cv, coefw_cld_cv, nk1, icbs1, tnk1, qnk1, gznk1, hnk1, unk1, vnk1, pbase1, buoybase1, s1_wake, Ale1, Alp1, wghti1, th1, t1, q1, qs1, t1_wake, q1_wake, qs1_wake, u1, v1, gz1, h1, th1_wake, lv1, lf1, cpn1, p1, tv1, tp1, h1_wake, lv1_wake, lf1_wake, cpn1_wake, tv1_wake, omega1, ph1, &
                                   ! Input/output
-                                  iflag, icb, plcl, sig, w0, tvp, clw, &
+                                  iflag1, kbas1, plcl1, sig1, w01, tvp1, clw1, &
                                   ! Output fields
-                                  inb, precip, cbmf, plfc, wbeff, ptop2, sigd, wd, cape, cin, Plim1, plim2, supmax0, asupmaxmin, epmax_diag, ft, fq, fu, fv, ma, mip, upwd, dnwd, dnwd0, qcondc, ftd, fqd, asupmax, da, mp, d1a, dam, qta,  evap, ep, eplaMm, wdtrainA, wdtrainS, wdtrainM, qtc, sigt, vprecip, vprecipi, phi, phi2, sigij, elij, epmlmMm)
-
-! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-! --- UNCOMPRESS THE FIELDS
-! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-      call enter_profile("cv3a_uncompress")
-      call driver_log('cv3a_uncompress')
-      call add_array_i1(cv3a_uncompress_list, iflag, iflag1, init=.false.)
-      call add_array_i1(cv3a_uncompress_list, icb, kbas1)
-      call add_array_i1(cv3a_uncompress_list, inb, ktop1)
-      call add_array_r1(cv3a_uncompress_list, precip, precip1)
-      call add_array_r1(cv3a_uncompress_list, cbmf, cbmf1)
-      call add_array_r1(cv3a_uncompress_list, plcl, plcl1, init=.false.)
-      call add_array_r1(cv3a_uncompress_list, plfc, plfc1)
-      call add_array_r1(cv3a_uncompress_list, wbeff, wbeff1)
-      call add_array_r2(cv3a_uncompress_list, sig, sig1)
-      call add_array_r2(cv3a_uncompress_list, w0, w01)
-      call add_array_r1(cv3a_uncompress_list, ptop2, ptop21)
-      call add_array_r2(cv3a_uncompress_list, ft, ft1)
-      call add_array_r2(cv3a_uncompress_list, fq, fq1)
-      call add_array_r2(cv3a_uncompress_list, fu, fu1)
-      call add_array_r2(cv3a_uncompress_list, fv, fv1)
-      call add_array_r1(cv3a_uncompress_list, sigd, sigd1)
-      call add_array_r2(cv3a_uncompress_list, ma, ma1)
-      call add_array_r2(cv3a_uncompress_list, mip, mip1)
-      call add_array_r2(cv3a_uncompress_list, vprecip, vprecip1)
-      call add_array_r2(cv3a_uncompress_list, vprecipi, vprecipi1)
-      call add_array_r2(cv3a_uncompress_list, upwd, upwd1)
-      call add_array_r2(cv3a_uncompress_list, dnwd, dnwd1)
-      call add_array_r2(cv3a_uncompress_list, dnwd0, dnwd01)
-      call add_array_r2(cv3a_uncompress_list, qcondc, qcondc1)
-      call add_array_r1(cv3a_uncompress_list, wd, wd1)
-      cape1(:) = -1.
-      call add_array_r1(cv3a_uncompress_list, cape, cape1, init=.false.)
-      cin1(:) = -100000.
-      call add_array_r1(cv3a_uncompress_list, cin, cin1, init=.false.)
-      call add_array_r2(cv3a_uncompress_list, tvp, tvp1, init=.false.)
-      call add_array_r2(cv3a_uncompress_list, ftd, ftd1)
-      call add_array_r2(cv3a_uncompress_list, fqd, fqd1)
-      call add_array_r1(cv3a_uncompress_list, Plim1, Plim11)
-      call add_array_r1(cv3a_uncompress_list, plim2, plim21)
-      call add_array_r2(cv3a_uncompress_list, asupmax, asupmax1)
-      call add_array_r1(cv3a_uncompress_list, supmax0, supmax01)
-      call add_array_r1(cv3a_uncompress_list, asupmaxmin, asupmaxmin1)
-      call add_array_r2(cv3a_uncompress_list, da, da1)
-      call add_array_r3(cv3a_uncompress_list, phi, phi1)
-      call add_array_r2(cv3a_uncompress_list, mp, mp1)
-      call add_array_r3(cv3a_uncompress_list, phi2, phi21)
-      call add_array_r2(cv3a_uncompress_list, d1a, d1a1)
-      call add_array_r2(cv3a_uncompress_list, dam, dam1)
-      call add_array_r3(cv3a_uncompress_list, sigij, sigij1)
-      call add_array_r2(cv3a_uncompress_list, qta, qta1)
-      call add_array_r2(cv3a_uncompress_list, clw, clw1, init=.false.)
-      call add_array_r3(cv3a_uncompress_list, elij, elij1)
-      call add_array_r2(cv3a_uncompress_list, evap, evap1)
-      call add_array_r2(cv3a_uncompress_list, ep, ep1)
-      call add_array_r3(cv3a_uncompress_list, epmlmMm, epmlmMm1)
-      call add_array_r2(cv3a_uncompress_list, eplaMm, eplaMm1)
-      call add_array_r2(cv3a_uncompress_list, wdtrainA, wdtrainA1)
-      call add_array_r2(cv3a_uncompress_list, wdtrainS, wdtrainS1)
-      call add_array_r2(cv3a_uncompress_list, wdtrainM, wdtrainM1)
-      call add_array_r2(cv3a_uncompress_list, qtc, qtc1)
-      call add_array_r2(cv3a_uncompress_list, sigt, sigt1)
-      call add_array_r1(cv3a_uncompress_list, epmax_diag, epmax_diag1)
-      call add_array_r1(cv3a_uncompress_list, sig(:, nd), sig1(:, nd))
-      call cv3a_uncompress(len, compress_data, cv3a_uncompress_list)
-      call exit_profile("cv3a_uncompress")
-
-    end block
+                                  ktop1, precip1, cbmf1, plfc1, wbeff1, ptop21, sigd1, wd1, cape1, cin1, Plim11, plim21, supmax01, asupmaxmin1, epmax_diag1, ft1, fq1, fu1, fv1, ma1, mip1, upwd1, dnwd1, dnwd01, qcondc1, ftd1, fqd1, asupmax1, da1, mp1, d1a1, dam1, qta1,  evap1, ep1, eplaMm1, wdtrainA1, wdtrainS1, wdtrainM1, qtc1, sigt1, vprecip1, vprecipi1, phi1, phi21, sigij1, elij1, epmlmMm1)
+      !  Reset Cin1 and Cape1 to their default values for non-convective grid-points.
+      Cin1(:) = Cin1(:)*coef_convective(:) + Cin_noconv*(1.-coef_convective(:))
+      Cape1(:) = Cape1(:)*coef_convective(:) + Cape_noconv*(1.-coef_convective(:))
+      precip1(:) = precip1(:)*coef_convective(:)
+      kbas1(:) = kbas1(:)*coef_convective(:)
+      ktop1(:) = ktop1(:)*coef_convective(:)
+      sigd1(:) = sigd1(:)*coef_convective(:)
+      wbeff1(:) = wbeff1(:)*coef_convective(:)
+      DO k = 1, nd
+        qcondc1(:, k) = qcondc1(:, k)*coef_convective(:)
+        vprecip1(:, k) = vprecip1(:, k)*coef_convective(:)
+        vprecipi1(:, k) = vprecipi1(:, k)*coef_convective(:)
+      ENDDO
+    endif
 
     IF (prt_level >= 10) THEN
