/[lmdze]/trunk/phylmd/cv_driver.f
ViewVC logotype

Diff of /trunk/phylmd/cv_driver.f

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 102 by guez, Wed Jul 2 18:39:15 2014 UTC revision 103 by guez, Fri Aug 29 13:00:05 2014 UTC
# Line 4  module cv_driver_m Line 4  module cv_driver_m
4    
5  contains  contains
6    
7    SUBROUTINE cv_driver(len, nd, t1, q1, qs1, u1, v1, p1, ph1, iflag1, ft1, &    SUBROUTINE cv_driver(t1, q1, qs1, u1, v1, p1, ph1, iflag1, ft1, &
8         fq1, fu1, fv1, precip1, VPrecip1, cbmf1, sig1, w01, icb1, inb1, delt, &         fq1, fu1, fv1, precip1, VPrecip1, cbmf1, sig1, w01, icb1, inb1, delt, &
9         Ma1, upwd1, dnwd1, dnwd01, qcondc1, wd1, cape1, da1, phi1, mp1)         Ma1, upwd1, dnwd1, dnwd01, qcondc1, wd1, cape1, da1, phi1, mp1)
10    
# Line 20  contains Line 20  contains
20    
21      use clesphys2, only: iflag_con      use clesphys2, only: iflag_con
22      use cv3_compress_m, only: cv3_compress      use cv3_compress_m, only: cv3_compress
23        use cv3_feed_m, only: cv3_feed
24      use cv3_mixing_m, only: cv3_mixing      use cv3_mixing_m, only: cv3_mixing
25      use cv3_param_m, only: cv3_param      use cv3_param_m, only: cv3_param
26      use cv3_prelim_m, only: cv3_prelim      use cv3_prelim_m, only: cv3_prelim
# Line 27  contains Line 28  contains
28      use cv3_uncompress_m, only: cv3_uncompress      use cv3_uncompress_m, only: cv3_uncompress
29      use cv3_unsat_m, only: cv3_unsat      use cv3_unsat_m, only: cv3_unsat
30      use cv3_yield_m, only: cv3_yield      use cv3_yield_m, only: cv3_yield
31        use cv_feed_m, only: cv_feed
32      use cv_uncompress_m, only: cv_uncompress      use cv_uncompress_m, only: cv_uncompress
33      USE dimphy, ONLY: klev, klon      USE dimphy, ONLY: klev, klon
34    
35      integer, intent(in):: len ! first dimension      real, intent(in):: t1(klon, klev) ! temperature
36      integer, intent(in):: nd ! vertical dimension      real, intent(in):: q1(klon, klev) ! specific hum
37      real, intent(in):: t1(len, nd) ! temperature      real, intent(in):: qs1(klon, klev) ! sat specific hum
38      real q1(len, nd) !           Input        specific hum      real, intent(in):: u1(klon, klev) ! u-wind
39      real qs1(len, nd)      real, intent(in):: v1(klon, klev) ! v-wind
40      !      qs1           Real           Input        sat specific hum      real, intent(in):: p1(klon, klev) ! full level pressure
41      real, intent(in):: u1(len, nd)      real, intent(in):: ph1(klon, klev + 1) ! half level pressure
42      !      u1            Real           Input        u-wind      integer, intent(out):: iflag1(klon) ! flag for Emanuel conditions
43      real, intent(in):: v1(len, nd)      real, intent(out):: ft1(klon, klev) ! temp tend
44      !      v1            Real           Input        v-wind      real, intent(out):: fq1(klon, klev) ! spec hum tend
45      real p1(len, nd)      real, intent(out):: fu1(klon, klev) ! u-wind tend
46      !      p1            Real           Input        full level pressure      real, intent(out):: fv1(klon, klev) ! v-wind tend
47      real ph1(len, nd + 1)      real, intent(out):: precip1(klon) ! precipitation
48      !      ph1           Real           Input        half level pressure  
49      integer iflag1(len)      real, intent(out):: VPrecip1(klon, klev+1)
50      !      iflag1        Integer        Output       flag for Emanuel conditions      ! vertical profile of precipitation
51      real ft1(len, nd)  
52      !      ft1           Real           Output       temp tend      real, intent(inout):: cbmf1(klon) ! cloud base mass flux
     real fq1(len, nd)  
     !      fq1           Real           Output       spec hum tend  
     real fu1(len, nd)  
     !      fu1           Real           Output       u-wind tend  
     real fv1(len, nd)  
     !      fv1           Real           Output       v-wind tend  
     real precip1(len)  
     !      precip1       Real           Output       precipitation  
     real VPrecip1(len, nd+1)  
     !      VPrecip1      Real           Output       vertical profile of precipitations  
     real cbmf1(len)  
     !      cbmf1         Real           Output       cloud base mass flux  
53      real, intent(inout):: sig1(klon, klev) ! section adiabatic updraft      real, intent(inout):: sig1(klon, klev) ! section adiabatic updraft
54    
55      real, intent(inout):: w01(klon, klev)      real, intent(inout):: w01(klon, klev)
56      ! vertical velocity within adiabatic updraft      ! vertical velocity within adiabatic updraft
57    
58      integer icb1(klon)      integer, intent(out):: icb1(klon)
59      integer inb1(klon)      integer, intent(inout):: inb1(klon)
60      real, intent(in):: delt      real, intent(in):: delt ! time step
61      !      delt          Real           Input        time step      real Ma1(klon, klev)
62      real Ma1(len, nd)      ! Ma1 Real Output mass flux adiabatic updraft
63      !      Ma1           Real           Output       mass flux adiabatic updraft      real, intent(out):: upwd1(klon, klev) ! total upward mass flux (adiab+mixed)
64      real, intent(out):: upwd1(len, nd) ! total upward mass flux (adiab+mixed)      real, intent(out):: dnwd1(klon, klev) ! saturated downward mass flux (mixed)
65      real, intent(out):: dnwd1(len, nd) ! saturated downward mass flux (mixed)      real, intent(out):: dnwd01(klon, klev) ! unsaturated downward mass flux
66      real, intent(out):: dnwd01(len, nd) ! unsaturated downward mass flux  
67        real qcondc1(klon, klev) ! cld
68      real qcondc1(len, nd)     ! cld      ! qcondc1 Real Output in-cld mixing ratio of condensed water
69      !      qcondc1       Real           Output       in-cld mixing ratio of condensed water      real wd1(klon) ! gust
70      real wd1(len)            ! gust      ! wd1 Real Output downdraft velocity scale for sfc fluxes
71      !      wd1           Real           Output       downdraft velocity scale for sfc fluxes      real cape1(klon)
72      real cape1(len)      ! cape1 Real Output CAPE
     !      cape1         Real           Output       CAPE  
73    
74      real, intent(inout):: da1(len, nd), phi1(len, nd, nd), mp1(len, nd)      real, intent(inout):: da1(klon, klev), phi1(klon, klev, klev)
75        real, intent(inout):: mp1(klon, klev)
76    
     !-------------------------------------------------------------------  
77      ! --- ARGUMENTS      ! --- ARGUMENTS
     !-------------------------------------------------------------------  
     ! --- On input:  
78    
79      !  t:   Array of absolute temperature (K) of dimension ND, with first      ! --- On input:
     !       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.  
   
     !  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.  
   
     !  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.  
   
     !  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.  
   
     !  precip: Scalar convective precipitation rate (mm/day).  
   
     !  VPrecip: Vertical profile of convective precipitation (kg/m2/s).  
   
     !  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.  
80    
81      !  det:   Array of detrainment mass flux of dimension ND.      ! t: Array of absolute temperature (K) of dimension KLEV, with first
82        ! index corresponding to lowest model level. Note that this array
83        ! will be altered by the subroutine if dry convective adjustment
84        ! occurs and if IPBL is not equal to 0.
85    
86        ! q: Array of specific humidity (gm/gm) of dimension KLEV, with first
87        ! index corresponding to lowest model level. Must be defined
88        ! at same grid levels as T. Note that this array will be altered
89        ! if dry convective adjustment occurs and if IPBL is not equal to 0.
90    
91        ! qs: Array of saturation specific humidity of dimension KLEV, with first
92        ! index corresponding to lowest model level. Must be defined
93        ! at same grid levels as T. Note that this array will be altered
94        ! if dry convective adjustment occurs and if IPBL is not equal to 0.
95    
96        ! u: Array of zonal wind velocity (m/s) of dimension KLEV, witth first
97        ! index corresponding with the lowest model level. Defined at
98        ! same levels as T. Note that this array will be altered if
99        ! dry convective adjustment occurs and if IPBL is not equal to 0.
100    
101        ! v: Same as u but for meridional velocity.
102    
103        ! p: Array of pressure (mb) of dimension KLEV, with first
104        ! index corresponding to lowest model level. Must be defined
105        ! at same grid levels as T.
106    
107        ! ph: Array of pressure (mb) of dimension KLEV+1, with first index
108        ! corresponding to lowest level. These pressures are defined at
109        ! levels intermediate between those of P, T, Q and QS. The first
110        ! value of PH should be greater than (i.e. at a lower level than)
111        ! the first value of the array P.
112    
113        ! nl: The maximum number of levels to which convection can penetrate, plus 1
114        ! NL MUST be less than or equal to KLEV-1.
115    
116        ! delt: The model time step (sec) between calls to CONVECT
117    
118        ! --- On Output:
119    
120        ! iflag: An output integer whose value denotes the following:
121        ! VALUE INTERPRETATION
122        ! ----- --------------
123        ! 0 Moist convection occurs.
124        ! 1 Moist convection occurs, but a CFL condition
125        ! on the subsidence warming is violated. This
126        ! does not cause the scheme to terminate.
127        ! 2 Moist convection, but no precip because ep(inb) lt 0.0001
128        ! 3 No moist convection because new cbmf is 0 and old cbmf is 0.
129        ! 4 No moist convection; atmosphere is not
130        ! unstable
131        ! 6 No moist convection because ihmin le minorig.
132        ! 7 No moist convection because unreasonable
133        ! parcel level temperature or specific humidity.
134        ! 8 No moist convection: lifted condensation
135        ! level is above the 200 mb level.
136        ! 9 No moist convection: cloud base is higher
137        ! then the level NL-1.
138    
139        ! ft: Array of temperature tendency (K/s) of dimension KLEV, defined at same
140        ! grid levels as T, Q, QS and P.
141    
142        ! fq: Array of specific humidity tendencies ((gm/gm)/s) of dimension KLEV,
143        ! defined at same grid levels as T, Q, QS and P.
144    
145        ! fu: Array of forcing of zonal velocity (m/s^2) of dimension KLEV,
146        ! defined at same grid levels as T.
147    
148        ! fv: Same as FU, but for forcing of meridional velocity.
149    
150        ! precip: Scalar convective precipitation rate (mm/day).
151    
152        ! VPrecip: Vertical profile of convective precipitation (kg/m2/s).
153    
154        ! wd: A convective downdraft velocity scale. For use in surface
155        ! flux parameterizations. See convect.ps file for details.
156    
157        ! tprime: A convective downdraft temperature perturbation scale (K).
158        ! For use in surface flux parameterizations. See convect.ps
159        ! file for details.
160    
161        ! qprime: A convective downdraft specific humidity
162        ! perturbation scale (gm/gm).
163        ! For use in surface flux parameterizations. See convect.ps
164        ! file for details.
165    
166        ! cbmf: The cloud base mass flux ((kg/m**2)/s). THIS SCALAR VALUE MUST
167        ! BE STORED BY THE CALLING PROGRAM AND RETURNED TO CONVECT AT
168        ! ITS NEXT CALL. That is, the value of CBMF must be "remembered"
169        ! by the calling program between calls to CONVECT.
170    
171      !-------------------------------------------------------------------      ! det: Array of detrainment mass flux of dimension KLEV.
172    
173      !  Local arrays      ! Local arrays
174    
175      real da(len, nd), phi(len, nd, nd), mp(len, nd)      real da(klon, klev), phi(klon, klev, klev), mp(klon, klev)
176    
177      integer i, k, il      integer i, k, il
178      integer icbmax      integer icbmax
# Line 215  contains Line 201  contains
201    
202      ! (local) compressed fields:      ! (local) compressed fields:
203    
204      integer nloc      integer idcum(klon)
205      parameter (nloc = klon) ! pour l'instant      integer iflag(klon), nk(klon), icb(klon)
206        integer nent(klon, klev)
207      integer idcum(nloc)      integer icbs(klon)
208      integer iflag(nloc), nk(nloc), icb(nloc)      integer inb(klon), inbis(klon)
209      integer nent(nloc, klev)  
210      integer icbs(nloc)      real cbmf(klon), plcl(klon), tnk(klon), qnk(klon), gznk(klon)
211      integer inb(nloc), inbis(nloc)      real t(klon, klev), q(klon, klev), qs(klon, klev)
212        real u(klon, klev), v(klon, klev)
213      real cbmf(nloc), plcl(nloc), tnk(nloc), qnk(nloc), gznk(nloc)      real gz(klon, klev), h(klon, klev), lv(klon, klev), cpn(klon, klev)
214      real t(nloc, klev), q(nloc, klev), qs(nloc, klev)      real p(klon, klev), ph(klon, klev+1), tv(klon, klev), tp(klon, klev)
215      real u(nloc, klev), v(nloc, klev)      real clw(klon, klev)
216      real gz(nloc, klev), h(nloc, klev), lv(nloc, klev), cpn(nloc, klev)      real dph(klon, klev)
217      real p(nloc, klev), ph(nloc, klev+1), tv(nloc, klev), tp(nloc, klev)      real pbase(klon), buoybase(klon), th(klon, klev)
218      real clw(nloc, klev)      real tvp(klon, klev)
219      real dph(nloc, klev)      real sig(klon, klev), w0(klon, klev)
220      real pbase(nloc), buoybase(nloc), th(nloc, klev)      real hp(klon, klev), ep(klon, klev), sigp(klon, klev)
221      real tvp(nloc, klev)      real frac(klon), buoy(klon, klev)
222      real sig(nloc, klev), w0(nloc, klev)      real cape(klon)
223      real hp(nloc, klev), ep(nloc, klev), sigp(nloc, klev)      real m(klon, klev), ment(klon, klev, klev), qent(klon, klev, klev)
224      real frac(nloc), buoy(nloc, klev)      real uent(klon, klev, klev), vent(klon, klev, klev)
225      real cape(nloc)      real ments(klon, klev, klev), qents(klon, klev, klev)
226      real m(nloc, klev), ment(nloc, klev, klev), qent(nloc, klev, klev)      real sij(klon, klev, klev), elij(klon, klev, klev)
227      real uent(nloc, klev, klev), vent(nloc, klev, klev)      real qp(klon, klev), up(klon, klev), vp(klon, klev)
228      real ments(nloc, klev, klev), qents(nloc, klev, klev)      real wt(klon, klev), water(klon, klev), evap(klon, klev)
229      real sij(nloc, klev, klev), elij(nloc, klev, klev)      real b(klon, klev), ft(klon, klev), fq(klon, klev)
230      real qp(nloc, klev), up(nloc, klev), vp(nloc, klev)      real fu(klon, klev), fv(klon, klev)
231      real wt(nloc, klev), water(nloc, klev), evap(nloc, klev)      real upwd(klon, klev), dnwd(klon, klev), dnwd0(klon, klev)
232      real b(nloc, klev), ft(nloc, klev), fq(nloc, klev)      real Ma(klon, klev), mike(klon, klev), tls(klon, klev)
233      real fu(nloc, klev), fv(nloc, klev)      real tps(klon, klev), qprime(klon), tprime(klon)
234      real upwd(nloc, klev), dnwd(nloc, klev), dnwd0(nloc, klev)      real precip(klon)
235      real Ma(nloc, klev), mike(nloc, klev), tls(nloc, klev)      real VPrecip(klon, klev+1)
236      real tps(nloc, klev), qprime(nloc), tprime(nloc)      real qcondc(klon, klev) ! cld
237      real precip(nloc)      real wd(klon) ! gust
     real VPrecip(nloc, klev+1)  
     real qcondc(nloc, klev)  ! cld  
     real wd(nloc)           ! gust  
238    
239      !-------------------------------------------------------------------      !-------------------------------------------------------------------
240      ! --- SET CONSTANTS AND PARAMETERS      ! --- SET CONSTANTS AND PARAMETERS
     !-------------------------------------------------------------------  
241    
242      ! -- set simulation flags:      ! -- set simulation flags:
243      !   (common cvflag)      ! (common cvflag)
244    
245      CALL cv_flag      CALL cv_flag
246    
247      ! -- set thermodynamical constants:      ! -- set thermodynamical constants:
248      !     (common cvthermo)      ! (common cvthermo)
249    
250      CALL cv_thermo      CALL cv_thermo
251    
252      ! -- set convect parameters      ! -- set convect parameters
253    
254      !     includes microphysical parameters and parameters that      ! includes microphysical parameters and parameters that
255      !     control the rate of approach to quasi-equilibrium)      ! control the rate of approach to quasi-equilibrium)
256      !     (common cvparam)      ! (common cvparam)
257    
258      if (iflag_con.eq.3) then      if (iflag_con == 3) CALL cv3_param(klev, delt)
        CALL cv3_param(nd, delt)  
     endif  
259    
     if (iflag_con.eq.4) then  
        CALL cv_param(nd)  
     endif  
   
     !---------------------------------------------------------------------  
260      ! --- INITIALIZE OUTPUT ARRAYS AND PARAMETERS      ! --- INITIALIZE OUTPUT ARRAYS AND PARAMETERS
     !---------------------------------------------------------------------  
261    
262      do k = 1, nd      do k = 1, klev
263         do  i = 1, len         do i = 1, klon
264            ft1(i, k) = 0.0            ft1(i, k) = 0.0
265            fq1(i, k) = 0.0            fq1(i, k) = 0.0
266            fu1(i, k) = 0.0            fu1(i, k) = 0.0
# Line 296  contains Line 270  contains
270            clw1(i, k) = 0.0            clw1(i, k) = 0.0
271            !ym            !ym
272            clw(i, k) = 0.0            clw(i, k) = 0.0
273            gz1(i, k)  =  0.            gz1(i, k) = 0.
274            VPrecip1(i, k) = 0.            VPrecip1(i, k) = 0.
275            Ma1(i, k) = 0.0            Ma1(i, k) = 0.0
276            upwd1(i, k) = 0.0            upwd1(i, k) = 0.0
# Line 306  contains Line 280  contains
280         end do         end do
281      end do      end do
282    
283      do  i = 1, len      do i = 1, klon
284         precip1(i) = 0.0         precip1(i) = 0.0
285         iflag1(i) = 0         iflag1(i) = 0
286         wd1(i) = 0.0         wd1(i) = 0.0
287         cape1(i) = 0.0         cape1(i) = 0.0
288         VPrecip1(i, nd+1) = 0.0         VPrecip1(i, klev+1) = 0.0
289      end do      end do
290    
291      if (iflag_con.eq.3) then      if (iflag_con == 3) then
292         do il = 1, len         do il = 1, klon
293            sig1(il, nd) = sig1(il, nd) + 1.            sig1(il, klev) = sig1(il, klev) + 1.
294            sig1(il, nd)  =  min(sig1(il, nd), 12.1)            sig1(il, klev) = min(sig1(il, klev), 12.1)
295         enddo         enddo
296      endif      endif
297    
     !--------------------------------------------------------------------  
298      ! --- CALCULATE ARRAYS OF GEOPOTENTIAL, HEAT CAPACITY & STATIC ENERGY      ! --- CALCULATE ARRAYS OF GEOPOTENTIAL, HEAT CAPACITY & STATIC ENERGY
     !--------------------------------------------------------------------  
299    
300      if (iflag_con.eq.3) then      if (iflag_con == 3) then
301         CALL cv3_prelim(len, nd, nd + 1, t1, q1, p1, ph1, lv1, cpn1, tv1, gz1, &         CALL cv3_prelim(klon, klev, klev + 1, t1, q1, p1, ph1, lv1, cpn1, tv1, &
302              h1, hm1, th1)              gz1, h1, hm1, th1)
303        else
304           ! iflag_con == 4
305           CALL cv_prelim(klon, klev, klev + 1, t1, q1, p1, ph1, lv1, cpn1, tv1, &
306                gz1, h1, hm1)
307      endif      endif
308    
     if (iflag_con.eq.4) then  
        CALL cv_prelim(len, nd, nd + 1, t1, q1, p1, ph1 &  
             , lv1, cpn1, tv1, gz1, h1, hm1)  
     endif  
   
     !--------------------------------------------------------------------  
309      ! --- CONVECTIVE FEED      ! --- CONVECTIVE FEED
     !--------------------------------------------------------------------  
310    
311      if (iflag_con.eq.3) then      if (iflag_con == 3) then
312         CALL cv3_feed(len, nd, t1, q1, qs1, p1, ph1, hm1, gz1            &         CALL cv3_feed(klon, klev, t1, q1, qs1, p1, ph1, hm1, gz1, nk1, icb1, &
313              , nk1, icb1, icbmax, iflag1, tnk1, qnk1, gznk1, plcl1) ! nd->na              icbmax, iflag1, tnk1, qnk1, gznk1, plcl1) ! klev->na
314        else
315           ! iflag_con == 4
316           CALL cv_feed(klon, klev, t1, q1, qs1, p1, hm1, gz1, nk1, icb1, icbmax, &
317                iflag1, tnk1, qnk1, gznk1, plcl1)
318      endif      endif
319    
     if (iflag_con.eq.4) then  
        CALL cv_feed(len, nd, t1, q1, qs1, p1, hm1, gz1 &  
             , nk1, icb1, icbmax, iflag1, tnk1, qnk1, gznk1, plcl1)  
     endif  
   
     !--------------------------------------------------------------------  
320      ! --- UNDILUTE (ADIABATIC) UPDRAFT / 1st part      ! --- UNDILUTE (ADIABATIC) UPDRAFT / 1st part
321      ! (up through ICB for convect4, up through ICB+1 for convect3)      ! (up through ICB for convect4, up through ICB+1 for convect3)
322      !     Calculates the lifted parcel virtual temperature at nk, the      ! Calculates the lifted parcel virtual temperature at nk, the
323      !     actual temperature, and the adiabatic liquid water content.      ! actual temperature, and the adiabatic liquid water content.
     !--------------------------------------------------------------------  
   
     if (iflag_con.eq.3) then  
        CALL cv3_undilute1(len, nd, t1, q1, qs1, gz1, plcl1, p1, nk1, icb1   &  
             , tp1, tvp1, clw1, icbs1) ! nd->na  
     endif  
324    
325      if (iflag_con.eq.4) then      if (iflag_con == 3) then
326         CALL cv_undilute1(len, nd, t1, q1, qs1, gz1, p1, nk1, icb1, icbmax &         CALL cv3_undilute1(klon, klev, t1, q1, qs1, gz1, plcl1, p1, nk1, icb1, &
327              , tp1, tvp1, clw1)              tp1, tvp1, clw1, icbs1) ! klev->na
328        else
329           ! iflag_con == 4
330           CALL cv_undilute1(klon, klev, t1, q1, qs1, gz1, p1, nk1, icb1, icbmax, &
331                tp1, tvp1, clw1)
332      endif      endif
333    
     !-------------------------------------------------------------------  
334      ! --- TRIGGERING      ! --- TRIGGERING
     !-------------------------------------------------------------------  
335    
336      if (iflag_con.eq.3) then      if (iflag_con == 3) then
337         CALL cv3_trigger(len, nd, icb1, plcl1, p1, th1, tv1, tvp1, pbase1, &         CALL cv3_trigger(klon, klev, icb1, plcl1, p1, th1, tv1, tvp1, pbase1, &
338              buoybase1, iflag1, sig1, w01) ! nd->na              buoybase1, iflag1, sig1, w01) ! klev->na
339      endif      else
340           ! iflag_con == 4
341      if (iflag_con.eq.4) then         CALL cv_trigger(klon, klev, icb1, cbmf1, tv1, tvp1, iflag1)
342         CALL cv_trigger(len, nd, icb1, cbmf1, tv1, tvp1, iflag1)      end if
     endif  
343    
344      ! --- IF THIS POINT IS REACHED, MOIST CONVECTIVE ADJUSTMENT IS NECESSARY      ! --- IF THIS POINT IS REACHED, MOIST CONVECTIVE ADJUSTMENT IS NECESSARY
345    
346      ncum = 0      ncum = 0
347      do  i = 1, len      do i = 1, klon
348         if(iflag1(i).eq.0)then         if(iflag1(i) == 0)then
349            ncum = ncum+1            ncum = ncum+1
350            idcum(ncum) = i            idcum(ncum) = i
351         endif         endif
352      end do      end do
353    
354      IF (ncum.gt.0) THEN      IF (ncum > 0) THEN
   
        !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  
355         ! --- COMPRESS THE FIELDS         ! --- COMPRESS THE FIELDS
356         !        (-> vectorization over convective gridpoints)         ! (-> vectorization over convective gridpoints)
        !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  
357    
358         if (iflag_con.eq.3) then         if (iflag_con == 3) then
359            CALL cv3_compress(len, nloc, ncum, nd, iflag1, nk1, icb1, icbs1, &            CALL cv3_compress(klon, klon, ncum, klev, iflag1, nk1, icb1, icbs1, &
360                 plcl1, tnk1, qnk1, gznk1, pbase1, buoybase1, t1, q1, qs1, u1, &                 plcl1, tnk1, qnk1, gznk1, pbase1, buoybase1, t1, q1, qs1, u1, &
361                 v1, gz1, th1, h1, lv1, cpn1, p1, ph1, tv1, tp1, tvp1, clw1, &                 v1, gz1, th1, h1, lv1, cpn1, p1, ph1, tv1, tp1, tvp1, clw1, &
362                 sig1, w01, iflag, nk, icb, icbs, plcl, tnk, qnk, gznk, pbase, &                 sig1, w01, iflag, nk, icb, icbs, plcl, tnk, qnk, gznk, pbase, &
363                 buoybase, t, q, qs, u, v, gz, th, h, lv, cpn, p, ph, tv, tp, &                 buoybase, t, q, qs, u, v, gz, th, h, lv, cpn, p, ph, tv, tp, &
364                 tvp, clw, sig, w0)                 tvp, clw, sig, w0)
365           else
366              ! iflag_con == 4
367              CALL cv_compress(klon, klon, ncum, klev, iflag1, nk1, icb1, cbmf1, &
368                   plcl1, tnk1, qnk1, gznk1, t1, q1, qs1, u1, v1, gz1, h1, lv1, &
369                   cpn1, p1, ph1, tv1, tp1, tvp1, clw1, iflag, nk, icb, cbmf, &
370                   plcl, tnk, qnk, gznk, t, q, qs, u, v, gz, h, lv, cpn, p, ph, &
371                   tv, tp, tvp, clw, dph)
372         endif         endif
373    
        if (iflag_con.eq.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 )  
        endif  
   
        !-------------------------------------------------------------------  
374         ! --- UNDILUTE (ADIABATIC) UPDRAFT / second part :         ! --- UNDILUTE (ADIABATIC) UPDRAFT / second part :
375         ! ---   FIND THE REST OF THE LIFTED PARCEL TEMPERATURES         ! --- FIND THE REST OF THE LIFTED PARCEL TEMPERATURES
376         ! ---   &         ! --- &
377         ! ---   COMPUTE THE PRECIPITATION EFFICIENCIES AND THE         ! --- COMPUTE THE PRECIPITATION EFFICIENCIES AND THE
378         ! ---   FRACTION OF PRECIPITATION FALLING OUTSIDE OF CLOUD         ! --- FRACTION OF PRECIPITATION FALLING OUTSIDE OF CLOUD
379         ! ---   &         ! --- &
380         ! ---   FIND THE LEVEL OF NEUTRAL BUOYANCY         ! --- FIND THE LEVEL OF NEUTRAL BUOYANCY
381         !-------------------------------------------------------------------  
382           if (iflag_con == 3) then
383         if (iflag_con.eq.3) then            CALL cv3_undilute2(klon, ncum, klev, icb, icbs, nk, tnk, qnk, gznk, &
384            CALL cv3_undilute2(nloc, ncum, nd, icb, icbs, nk         &                 t, q, qs, gz, p, h, tv, lv, pbase, buoybase, plcl, inb, tp, &
385                 , tnk, qnk, gznk, t, q, qs, gz &                 tvp, clw, hp, ep, sigp, buoy) !na->klev
386                 , p, h, tv, lv, pbase, buoybase, plcl &         else
387                 , inb, tp, tvp, clw, hp, ep, sigp, buoy) !na->nd            ! iflag_con == 4
388         endif            CALL cv_undilute2(klon, ncum, klev, icb, nk, tnk, qnk, gznk, t, q, &
389                   qs, gz, p, dph, h, tv, lv, inb, inbis, tp, tvp, clw, hp, ep, &
390         if (iflag_con.eq.4) then                 sigp, frac)
           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)  
391         endif         endif
392    
        !-------------------------------------------------------------------  
393         ! --- CLOSURE         ! --- CLOSURE
        !-------------------------------------------------------------------  
   
        if (iflag_con.eq.3) then  
           CALL cv3_closure(nloc, ncum, nd, icb, inb               &  
                , pbase, p, ph, tv, buoy &  
                , sig, w0, cape, m) ! na->nd  
        endif  
394    
395         if (iflag_con.eq.4) then         if (iflag_con == 3) then
396            CALL cv_closure(nloc, ncum, nd, nk, icb &            CALL cv3_closure(klon, ncum, klev, icb, inb, pbase, p, ph, tv, &
397                 , tv, tvp, p, ph, dph, plcl, cpn &                 buoy, sig, w0, cape, m) ! na->klev
398                 , iflag, cbmf)         else
399              ! iflag_con == 4
400              CALL cv_closure(klon, ncum, klev, nk, icb, tv, tvp, p, ph, dph, &
401                   plcl, cpn, iflag, cbmf)
402         endif         endif
403    
        !-------------------------------------------------------------------  
404         ! --- MIXING         ! --- MIXING
        !-------------------------------------------------------------------  
405    
406         if (iflag_con.eq.3) then         if (iflag_con == 3) then
407            CALL cv3_mixing(nloc, ncum, nd, nd, icb, nk, inb, ph, t, q, &            CALL cv3_mixing(klon, ncum, klev, klev, icb, nk, inb, ph, t, q, &
408                 qs, u, v, h, lv, qnk, hp, tv, tvp, ep, clw, m, sig, ment, &                 qs, u, v, h, lv, qnk, hp, tv, tvp, ep, clw, m, sig, ment, &
409                 qent, uent, vent, nent, sij, elij, ments, qents)                 qent, uent, vent, nent, sij, elij, ments, qents)
410           else
411              ! iflag_con == 4
412              CALL cv_mixing(klon, ncum, klev, icb, nk, inb, inbis, ph, t, q, qs, &
413                   u, v, h, lv, qnk, hp, tv, tvp, ep, clw, cbmf, m, ment, qent, &
414                   uent, vent, nent, sij, elij)
415         endif         endif
416    
        if (iflag_con.eq.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, sij, elij)  
        endif  
   
        !-------------------------------------------------------------------  
417         ! --- UNSATURATED (PRECIPITATING) DOWNDRAFTS         ! --- UNSATURATED (PRECIPITATING) DOWNDRAFTS
        !-------------------------------------------------------------------  
418    
419         if (iflag_con.eq.3) then         if (iflag_con == 3) then
420            CALL cv3_unsat(nloc, ncum, nd, nd, icb, inb     &            CALL cv3_unsat(klon, ncum, klev, klev, icb, inb, t, q, qs, gz, u, &
421                 , t, q, qs, gz, u, v, p, ph &                 v, p, ph, th, tv, lv, cpn, ep, sigp, clw, m, ment, elij, delt, &
422                 , th, tv, lv, cpn, ep, sigp, clw &                 plcl, mp, qp, up, vp, wt, water, evap, b)! na->klev
423                 , m, ment, elij, delt, plcl &         else
424                 , mp, qp, up, vp, wt, water, evap, b)! na->nd            ! iflag_con == 4
425              CALL cv_unsat(klon, ncum, klev, inb, t, q, qs, gz, u, v, p, ph, h, &
426                   lv, ep, sigp, clw, m, ment, elij, iflag, mp, qp, up, vp, wt, &
427                   water, evap)
428         endif         endif
429    
        if (iflag_con.eq.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)  
        endif  
   
        !-------------------------------------------------------------------  
430         ! --- YIELD         ! --- YIELD
431         !     (tendencies, precipitation, variables of interface with other         ! (tendencies, precipitation, variables of interface with other
432         !      processes, etc)         ! processes, etc)
        !-------------------------------------------------------------------  
   
        if (iflag_con.eq.3) then  
           CALL cv3_yield(nloc, ncum, nd, nd             &  
                , icb, inb, delt &  
                , t, q, u, v, gz, p, ph, h, hp, lv, cpn, th &  
                , ep, clw, m, tp, mp, qp, up, vp &  
                , wt, water, evap, b &  
                , ment, qent, uent, vent, nent, elij, sig &  
                , tv, tvp &  
                , iflag, precip, VPrecip, ft, fq, fu, fv &  
                , upwd, dnwd, dnwd0, ma, mike, tls, tps, qcondc, wd)! na->nd  
        endif  
433    
434         if (iflag_con.eq.4) then         if (iflag_con == 3) then
435            CALL cv_yield(nloc, ncum, nd, nk, icb, inb, delt &            CALL cv3_yield(klon, ncum, klev, klev, icb, inb, delt, t, q, u, v, &
436                 , t, q, u, v, gz, p, ph, h, hp, lv, cpn &                 gz, p, ph, h, hp, lv, cpn, th, ep, clw, m, tp, mp, qp, up, vp, &
437                 , ep, clw, frac, m, mp, qp, up, vp &                 wt, water, evap, b, ment, qent, uent, vent, nent, elij, sig, &
438                 , wt, water, evap &                 tv, tvp, iflag, precip, VPrecip, ft, fq, fu, fv, upwd, dnwd, &
439                 , ment, qent, uent, vent, nent, elij &                 dnwd0, ma, mike, tls, tps, qcondc, wd)! na->klev
440                 , tv, tvp &         else
441                 , iflag, wd, qprime, tprime &            ! iflag_con == 4
442                 , precip, cbmf, ft, fq, fu, fv, Ma, qcondc)            CALL cv_yield(klon, ncum, klev, nk, icb, inb, delt, t, q, u, v, gz, &
443                   p, ph, h, hp, lv, cpn, ep, clw, frac, m, mp, qp, up, vp, wt, &
444                   water, evap, ment, qent, uent, vent, nent, elij, tv, tvp, &
445                   iflag, wd, qprime, tprime, precip, cbmf, ft, fq, fu, fv, Ma, &
446                   qcondc)
447         endif         endif
448    
        !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  
449         ! --- passive tracers         ! --- passive tracers
        !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  
450    
451         if (iflag_con.eq.3) then         if (iflag_con == 3) CALL cv3_tracer(klon, klon, ncum, klev, klev, &
452            CALL cv3_tracer(nloc, len, ncum, nd, nd, &              ment, sij, da, phi)
                ment, sij, da, phi)  
        endif  
453    
        !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  
454         ! --- UNCOMPRESS THE FIELDS         ! --- UNCOMPRESS THE FIELDS
455         !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  
456         ! set iflag1  = 42 for non convective points         ! set iflag1 = 42 for non convective points
457         do  i = 1, len         do i = 1, klon
458            iflag1(i) = 42            iflag1(i) = 42
459         end do         end do
460    
461         if (iflag_con.eq.3) then         if (iflag_con == 3) then
462            CALL cv3_uncompress(nloc, len, ncum, nd, idcum, iflag, precip, &            CALL cv3_uncompress(idcum(:ncum), iflag, precip, VPrecip, sig, w0, &
463                 VPrecip, sig, w0, ft, fq, fu, fv, inb, Ma, upwd, dnwd, dnwd0, &                 ft, fq, fu, fv, inb, Ma, upwd, dnwd, dnwd0, qcondc, wd, cape, &
464                 qcondc, wd, cape, da, phi, mp, iflag1, precip1, VPrecip1, &                 da, phi, mp, iflag1, precip1, VPrecip1, sig1, w01, ft1, fq1, &
465                 sig1, w01, ft1, fq1, fu1, fv1, inb1, Ma1, upwd1, dnwd1, &                 fu1, fv1, inb1, Ma1, upwd1, dnwd1, dnwd01, qcondc1, wd1, &
466                 dnwd01, qcondc1, wd1, cape1, da1, phi1, mp1)                 cape1, da1, phi1, mp1)
467         endif         else
468              ! iflag_con == 4
469         if (iflag_con.eq.4) then            CALL cv_uncompress(idcum(:ncum), iflag, precip, cbmf, ft, fq, fu, &
470            CALL cv_uncompress(nloc, len, ncum, nd, idcum &                 fv, Ma, qcondc, iflag1, precip1, cbmf1, ft1, fq1, fu1, fv1, &
471                 , iflag &                 Ma1, qcondc1)
                , precip, cbmf &  
                , ft, fq, fu, fv &  
                , Ma, qcondc             &  
                , iflag1 &  
                , precip1, cbmf1 &  
                , ft1, fq1, fu1, fv1 &  
                , Ma1, qcondc1 )  
472         endif         endif
473      ENDIF ! ncum>0      ENDIF ! ncum>0
474    

Legend:
Removed from v.102  
changed lines
  Added in v.103

  ViewVC Help
Powered by ViewVC 1.1.21