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

Diff of /trunk/Sources/phylmd/cv_driver.f

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

trunk/libf/phylmd/cv_driver.f revision 47 by guez, Fri Jul 1 15:00:48 2011 UTC trunk/libf/phylmd/cv_driver.f90 revision 52 by guez, Fri Sep 23 12:28:01 2011 UTC
# Line 1  Line 1 
1  !  module cv_driver_m
 ! $Header: /home/cvsroot/LMDZ4/libf/phylmd/cv_driver.F,v 1.3 2005/04/15 12:36:17 lmdzadmin Exp $  
 !  
       SUBROUTINE cv_driver(len,nd,ndp1,ntra,iflag_con,  
      &                   t1,q1,qs1,u1,v1,tra1,  
      &                   p1,ph1,iflag1,ft1,fq1,fu1,fv1,ftra1,  
      &                   precip1,VPrecip1,  
      &                   cbmf1,sig1,w01,  
      &                   icb1,inb1,  
      &                   delt,Ma1,upwd1,dnwd1,dnwd01,qcondc1,wd1,cape1,  
      &                   da1,phi1,mp1)  
 C  
       use dimens_m  
       use dimphy  
       implicit none  
 C  
 C.............................START PROLOGUE............................  
 C  
 C PARAMETERS:  
 C      Name            Type         Usage            Description  
 C   ----------      ----------     -------  ----------------------------  
 C  
 C      len           Integer        Input        first (i) dimension  
 C      nd            Integer        Input        vertical (k) dimension  
 C      ndp1          Integer        Input        nd + 1  
 C      ntra          Integer        Input        number of tracors  
 C      iflag_con     Integer        Input        version of convect (3/4)  
 C      t1            Real           Input        temperature  
 C      q1            Real           Input        specific hum  
 C      qs1           Real           Input        sat specific hum  
 C      u1            Real           Input        u-wind  
 C      v1            Real           Input        v-wind  
 C      tra1          Real           Input        tracors  
 C      p1            Real           Input        full level pressure  
 C      ph1           Real           Input        half level pressure  
 C      iflag1        Integer        Output       flag for Emanuel conditions  
 C      ft1           Real           Output       temp tend  
 C      fq1           Real           Output       spec hum tend  
 C      fu1           Real           Output       u-wind tend  
 C      fv1           Real           Output       v-wind tend  
 C      ftra1         Real           Output       tracor tend  
 C      precip1       Real           Output       precipitation  
 C      VPrecip1      Real           Output       vertical profile of precipitations  
 C      cbmf1         Real           Output       cloud base mass flux  
 C      sig1          Real           In/Out       section adiabatic updraft  
 C      w01           Real           In/Out       vertical velocity within adiab updraft  
 C      delt          Real           Input        time step  
 C      Ma1           Real           Output       mass flux adiabatic updraft  
 C      upwd1         Real           Output       total upward mass flux (adiab+mixed)  
 C      dnwd1         Real           Output       saturated downward mass flux (mixed)  
 C      dnwd01        Real           Output       unsaturated downward mass flux  
 C      qcondc1       Real           Output       in-cld mixing ratio of condensed water  
 C      wd1           Real           Output       downdraft velocity scale for sfc fluxes  
 C      cape1         Real           Output       CAPE  
 C  
 C S. Bony, Mar 2002:  
 C       * Several modules corresponding to different physical processes  
 C       * Several versions of convect may be used:  
 C               - iflag_con=3: version lmd  (previously named convect3)  
 C               - iflag_con=4: version 4.3b (vect. version, previously convect1/2)  
 C   + tard:     - iflag_con=5: version lmd with ice (previously named convectg)  
 C S. Bony, Oct 2002:  
 C       * Vectorization of convect3 (ie version lmd)  
 C  
 C..............................END PROLOGUE.............................  
 c  
 c  
   
       integer len  
       integer nd  
       integer ndp1  
       integer noff  
       integer, intent(in):: iflag_con  
       integer ntra  
       real t1(len,nd)  
       real q1(len,nd)  
       real qs1(len,nd)  
       real u1(len,nd)  
       real v1(len,nd)  
       real p1(len,nd)  
       real ph1(len,ndp1)  
       integer iflag1(len)  
       real ft1(len,nd)  
       real fq1(len,nd)  
       real fu1(len,nd)  
       real fv1(len,nd)  
       real precip1(len)  
       real cbmf1(len)  
       real VPrecip1(len,nd+1)  
       real Ma1(len,nd)  
       real upwd1(len,nd)  
       real dnwd1(len,nd)  
       real dnwd01(len,nd)  
   
       real qcondc1(len,nd)     ! cld  
       real wd1(len)            ! gust  
       real cape1(len)      
   
       real da1(len,nd),phi1(len,nd,nd),mp1(len,nd)  
       real da(len,nd),phi(len,nd,nd),mp(len,nd)  
       real, intent(in):: tra1(len,nd,ntra)  
       real ftra1(len,nd,ntra)  
   
       real, intent(in):: delt  
   
 !-------------------------------------------------------------------  
 ! --- 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.  
 !  
 !  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.  
 !  
 !  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).  
 !  
 !  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.  
 !  
 !  det:   Array of detrainment mass flux of dimension ND.  
 !  
 !-------------------------------------------------------------------  
 c  
 c  Local arrays  
 c  
   
       integer i,k,n,il,j  
       integer icbmax  
       integer nk1(klon)  
       integer icb1(klon)  
       integer inb1(klon)  
       integer icbs1(klon)  
   
       real plcl1(klon)  
       real tnk1(klon)  
       real qnk1(klon)  
       real gznk1(klon)  
       real pnk1(klon)  
       real qsnk1(klon)  
       real pbase1(klon)  
       real buoybase1(klon)  
   
       real lv1(klon,klev)  
       real cpn1(klon,klev)  
       real tv1(klon,klev)  
       real gz1(klon,klev)  
       real hm1(klon,klev)  
       real h1(klon,klev)  
       real tp1(klon,klev)  
       real tvp1(klon,klev)  
       real clw1(klon,klev)  
       real sig1(klon,klev)  
       real w01(klon,klev)  
       real th1(klon,klev)  
 c  
       integer ncum  
 c  
 c (local) compressed fields:  
 c  
       integer nloc  
       parameter (nloc=klon) ! pour l'instant  
   
       integer idcum(nloc)  
       integer iflag(nloc),nk(nloc),icb(nloc)  
       integer nent(nloc,klev)  
       integer icbs(nloc)  
       integer inb(nloc), inbis(nloc)  
   
       real cbmf(nloc),plcl(nloc),tnk(nloc),qnk(nloc),gznk(nloc)  
       real t(nloc,klev),q(nloc,klev),qs(nloc,klev)  
       real u(nloc,klev),v(nloc,klev)  
       real gz(nloc,klev),h(nloc,klev),lv(nloc,klev),cpn(nloc,klev)  
       real p(nloc,klev),ph(nloc,klev+1),tv(nloc,klev),tp(nloc,klev)  
       real clw(nloc,klev)  
       real dph(nloc,klev)  
       real pbase(nloc), buoybase(nloc), th(nloc,klev)  
       real tvp(nloc,klev)  
       real sig(nloc,klev), w0(nloc,klev)  
       real hp(nloc,klev), ep(nloc,klev), sigp(nloc,klev)  
       real frac(nloc), buoy(nloc,klev)  
       real cape(nloc)  
       real m(nloc,klev), ment(nloc,klev,klev), qent(nloc,klev,klev)  
       real uent(nloc,klev,klev), vent(nloc,klev,klev)  
       real ments(nloc,klev,klev), qents(nloc,klev,klev)  
       real sij(nloc,klev,klev), elij(nloc,klev,klev)  
       real qp(nloc,klev), up(nloc,klev), vp(nloc,klev)  
       real wt(nloc,klev), water(nloc,klev), evap(nloc,klev)  
       real b(nloc,klev), ft(nloc,klev), fq(nloc,klev)  
       real fu(nloc,klev), fv(nloc,klev)  
       real upwd(nloc,klev), dnwd(nloc,klev), dnwd0(nloc,klev)  
       real Ma(nloc,klev), mike(nloc,klev), tls(nloc,klev)  
       real tps(nloc,klev), qprime(nloc), tprime(nloc)  
       real precip(nloc)  
       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  
   
 !-------------------------------------------------------------------  
 ! --- SET CONSTANTS AND PARAMETERS  
 !-------------------------------------------------------------------  
   
 c -- set simulation flags:  
 c   (common cvflag)  
   
        CALL cv_flag  
   
 c -- set thermodynamical constants:  
 c       (common cvthermo)  
   
        CALL cv_thermo(iflag_con)  
   
 c -- set convect parameters  
 c  
 c       includes microphysical parameters and parameters that  
 c       control the rate of approach to quasi-equilibrium)  
 c       (common cvparam)  
   
       if (iflag_con.eq.3) then  
        CALL cv3_param(nd,delt)  
       endif  
2    
3        if (iflag_con.eq.4) then    implicit none
4    
5    contains
6    
7      SUBROUTINE cv_driver(len, nd, ndp1, ntra, iflag_con, t1, q1, qs1, u1, v1, &
8           tra1, p1, ph1, iflag1, ft1, fq1, fu1, fv1, ftra1, precip1, VPrecip1, &
9           cbmf1, sig1, w01, icb1, inb1, delt, Ma1, upwd1, dnwd1, dnwd01, &
10           qcondc1, wd1, cape1, da1, phi1, mp1)
11    
12        ! From LMDZ4/libf/phylmd/cv_driver.F, version 1.3 2005/04/15 12:36:17
13    
14        use dimens_m
15        use dimphy
16        !
17        ! PARAMETERS:
18        !      Name            Type         Usage            Description
19        !   ----------      ----------     -------  ----------------------------
20        !
21        !      len           Integer        Input        first (i) dimension
22        !      nd            Integer        Input        vertical (k) dimension
23        !      ndp1          Integer        Input        nd + 1
24        !      ntra          Integer        Input        number of tracors
25        !      iflag_con     Integer        Input        version of convect (3/4)
26        !      t1            Real           Input        temperature
27        !      q1            Real           Input        specific hum
28        !      qs1           Real           Input        sat specific hum
29        !      u1            Real           Input        u-wind
30        !      v1            Real           Input        v-wind
31        !      tra1          Real           Input        tracors
32        !      p1            Real           Input        full level pressure
33        !      ph1           Real           Input        half level pressure
34        !      iflag1        Integer        Output       flag for Emanuel conditions
35        !      ft1           Real           Output       temp tend
36        !      fq1           Real           Output       spec hum tend
37        !      fu1           Real           Output       u-wind tend
38        !      fv1           Real           Output       v-wind tend
39        !      ftra1         Real           Output       tracor tend
40        !      precip1       Real           Output       precipitation
41        !      VPrecip1      Real           Output       vertical profile of precipitations
42        !      cbmf1         Real           Output       cloud base mass flux
43        !      sig1          Real           In/Out       section adiabatic updraft
44        !      w01           Real           In/Out       vertical velocity within adiab updraft
45        !      delt          Real           Input        time step
46        !      Ma1           Real           Output       mass flux adiabatic updraft
47        !      upwd1         Real           Output       total upward mass flux (adiab+mixed)
48        !      dnwd1         Real           Output       saturated downward mass flux (mixed)
49        !      dnwd01        Real           Output       unsaturated downward mass flux
50        !      qcondc1       Real           Output       in-cld mixing ratio of condensed water
51        !      wd1           Real           Output       downdraft velocity scale for sfc fluxes
52        !      cape1         Real           Output       CAPE
53        !
54        ! S. Bony, Mar 2002:
55        !     * Several modules corresponding to different physical processes
56        !     * Several versions of convect may be used:
57        !        - iflag_con=3: version lmd  (previously named convect3)
58        !        - iflag_con=4: version 4.3b (vect. version, previously convect1/2)
59        !   + tard:    - iflag_con=5: version lmd with ice (previously named convectg)
60        ! S. Bony, Oct 2002:
61        !     * Vectorization of convect3 (ie version lmd)
62        !
63        !..............................END PROLOGUE.............................
64        !
65        !
66    
67        integer len
68        integer nd
69        integer ndp1
70        integer noff
71        integer, intent(in):: iflag_con
72        integer ntra
73        real, intent(in):: t1(len, nd)
74        real q1(len, nd)
75        real qs1(len, nd)
76        real u1(len, nd)
77        real v1(len, nd)
78        real p1(len, nd)
79        real ph1(len, ndp1)
80        integer iflag1(len)
81        real ft1(len, nd)
82        real fq1(len, nd)
83        real fu1(len, nd)
84        real fv1(len, nd)
85        real precip1(len)
86        real cbmf1(len)
87        real VPrecip1(len, nd+1)
88        real Ma1(len, nd)
89        real upwd1(len, nd)
90        real dnwd1(len, nd)
91        real dnwd01(len, nd)
92    
93        real qcondc1(len, nd)     ! cld
94        real wd1(len)            ! gust
95        real cape1(len)
96    
97        real da1(len, nd), phi1(len, nd, nd), mp1(len, nd)
98        real da(len, nd), phi(len, nd, nd), mp(len, nd)
99        real, intent(in):: tra1(len, nd, ntra)
100        real ftra1(len, nd, ntra)
101    
102        real, intent(in):: delt
103    
104        !-------------------------------------------------------------------
105        ! --- ARGUMENTS
106        !-------------------------------------------------------------------
107        ! --- On input:
108        !
109        !  t:   Array of absolute temperature (K) of dimension ND, with first
110        !       index corresponding to lowest model level. Note that this array
111        !       will be altered by the subroutine if dry convective adjustment
112        !       occurs and if IPBL is not equal to 0.
113        !
114        !  q:   Array of specific humidity (gm/gm) of dimension ND, with first
115        !       index corresponding to lowest model level. Must be defined
116        !       at same grid levels as T. Note that this array will be altered
117        !       if dry convective adjustment occurs and if IPBL is not equal to 0.
118        !
119        !  qs:  Array of saturation specific humidity of dimension ND, with first
120        !       index corresponding to lowest model level. Must be defined
121        !       at same grid levels as T. Note that this array will be altered
122        !       if dry convective adjustment occurs and if IPBL is not equal to 0.
123        !
124        !  u:   Array of zonal wind velocity (m/s) of dimension ND, witth first
125        !       index corresponding with the lowest model level. Defined at
126        !       same levels as T. Note that this array will be altered if
127        !       dry convective adjustment occurs and if IPBL is not equal to 0.
128        !
129        !  v:   Same as u but for meridional velocity.
130        !
131        !  tra: Array of passive tracer mixing ratio, of dimensions (ND, NTRA),
132        !       where NTRA is the number of different tracers. If no
133        !       convective tracer transport is needed, define a dummy
134        !       input array of dimension (ND, 1). Tracers are defined at
135        !       same vertical levels as T. Note that this array will be altered
136        !       if dry convective adjustment occurs and if IPBL is not equal to 0.
137        !
138        !  p:   Array of pressure (mb) of dimension ND, with first
139        !       index corresponding to lowest model level. Must be defined
140        !       at same grid levels as T.
141        !
142        !  ph:  Array of pressure (mb) of dimension ND+1, with first index
143        !       corresponding to lowest level. These pressures are defined at
144        !       levels intermediate between those of P, T, Q and QS. The first
145        !       value of PH should be greater than (i.e. at a lower level than)
146        !       the first value of the array P.
147        !
148        !  nl:  The maximum number of levels to which convection can penetrate, plus 1.
149        !       NL MUST be less than or equal to ND-1.
150        !
151        !  delt: The model time step (sec) between calls to CONVECT
152        !
153        !----------------------------------------------------------------------------
154        ! ---   On Output:
155        !
156        !  iflag: An output integer whose value denotes the following:
157        !       VALUE   INTERPRETATION
158        !       -----   --------------
159        !         0     Moist convection occurs.
160        !         1     Moist convection occurs, but a CFL condition
161        !               on the subsidence warming is violated. This
162        !               does not cause the scheme to terminate.
163        !         2     Moist convection, but no precip because ep(inb) lt 0.0001
164        !         3     No moist convection because new cbmf is 0 and old cbmf is 0.
165        !         4     No moist convection; atmosphere is not
166        !               unstable
167        !         6     No moist convection because ihmin le minorig.
168        !         7     No moist convection because unreasonable
169        !               parcel level temperature or specific humidity.
170        !         8     No moist convection: lifted condensation
171        !               level is above the 200 mb level.
172        !         9     No moist convection: cloud base is higher
173        !               then the level NL-1.
174        !
175        !  ft:   Array of temperature tendency (K/s) of dimension ND, defined at same
176        !        grid levels as T, Q, QS and P.
177        !
178        !  fq:   Array of specific humidity tendencies ((gm/gm)/s) of dimension ND,
179        !        defined at same grid levels as T, Q, QS and P.
180        !
181        !  fu:   Array of forcing of zonal velocity (m/s^2) of dimension ND,
182        !        defined at same grid levels as T.
183        !
184        !  fv:   Same as FU, but for forcing of meridional velocity.
185        !
186        !  ftra: Array of forcing of tracer content, in tracer mixing ratio per
187        !        second, defined at same levels as T. Dimensioned (ND, NTRA).
188        !
189        !  precip: Scalar convective precipitation rate (mm/day).
190        !
191        !  VPrecip: Vertical profile of convective precipitation (kg/m2/s).
192        !
193        !  wd:   A convective downdraft velocity scale. For use in surface
194        !        flux parameterizations. See convect.ps file for details.
195        !
196        !  tprime: A convective downdraft temperature perturbation scale (K).
197        !          For use in surface flux parameterizations. See convect.ps
198        !          file for details.
199        !
200        !  qprime: A convective downdraft specific humidity
201        !          perturbation scale (gm/gm).
202        !          For use in surface flux parameterizations. See convect.ps
203        !          file for details.
204        !
205        !  cbmf: The cloud base mass flux ((kg/m**2)/s). THIS SCALAR VALUE MUST
206        !        BE STORED BY THE CALLING PROGRAM AND RETURNED TO CONVECT AT
207        !        ITS NEXT CALL. That is, the value of CBMF must be "remembered"
208        !        by the calling program between calls to CONVECT.
209        !
210        !  det:   Array of detrainment mass flux of dimension ND.
211        !
212        !-------------------------------------------------------------------
213        !
214        !  Local arrays
215        !
216    
217        integer i, k, n, il, j
218        integer icbmax
219        integer nk1(klon)
220        integer icb1(klon)
221        integer inb1(klon)
222        integer icbs1(klon)
223    
224        real plcl1(klon)
225        real tnk1(klon)
226        real qnk1(klon)
227        real gznk1(klon)
228        real pnk1(klon)
229        real qsnk1(klon)
230        real pbase1(klon)
231        real buoybase1(klon)
232    
233        real lv1(klon, klev)
234        real cpn1(klon, klev)
235        real tv1(klon, klev)
236        real gz1(klon, klev)
237        real hm1(klon, klev)
238        real h1(klon, klev)
239        real tp1(klon, klev)
240        real tvp1(klon, klev)
241        real clw1(klon, klev)
242        real sig1(klon, klev)
243        real w01(klon, klev)
244        real th1(klon, klev)
245        !
246        integer ncum
247        !
248        ! (local) compressed fields:
249        !
250        integer nloc
251        parameter (nloc=klon) ! pour l'instant
252    
253        integer idcum(nloc)
254        integer iflag(nloc), nk(nloc), icb(nloc)
255        integer nent(nloc, klev)
256        integer icbs(nloc)
257        integer inb(nloc), inbis(nloc)
258    
259        real cbmf(nloc), plcl(nloc), tnk(nloc), qnk(nloc), gznk(nloc)
260        real t(nloc, klev), q(nloc, klev), qs(nloc, klev)
261        real u(nloc, klev), v(nloc, klev)
262        real gz(nloc, klev), h(nloc, klev), lv(nloc, klev), cpn(nloc, klev)
263        real p(nloc, klev), ph(nloc, klev+1), tv(nloc, klev), tp(nloc, klev)
264        real clw(nloc, klev)
265        real dph(nloc, klev)
266        real pbase(nloc), buoybase(nloc), th(nloc, klev)
267        real tvp(nloc, klev)
268        real sig(nloc, klev), w0(nloc, klev)
269        real hp(nloc, klev), ep(nloc, klev), sigp(nloc, klev)
270        real frac(nloc), buoy(nloc, klev)
271        real cape(nloc)
272        real m(nloc, klev), ment(nloc, klev, klev), qent(nloc, klev, klev)
273        real uent(nloc, klev, klev), vent(nloc, klev, klev)
274        real ments(nloc, klev, klev), qents(nloc, klev, klev)
275        real sij(nloc, klev, klev), elij(nloc, klev, klev)
276        real qp(nloc, klev), up(nloc, klev), vp(nloc, klev)
277        real wt(nloc, klev), water(nloc, klev), evap(nloc, klev)
278        real b(nloc, klev), ft(nloc, klev), fq(nloc, klev)
279        real fu(nloc, klev), fv(nloc, klev)
280        real upwd(nloc, klev), dnwd(nloc, klev), dnwd0(nloc, klev)
281        real Ma(nloc, klev), mike(nloc, klev), tls(nloc, klev)
282        real tps(nloc, klev), qprime(nloc), tprime(nloc)
283        real precip(nloc)
284        real VPrecip(nloc, klev+1)
285        real tra(nloc, klev, ntra), trap(nloc, klev, ntra)
286        real ftra(nloc, klev, ntra), traent(nloc, klev, klev, ntra)
287        real qcondc(nloc, klev)  ! cld
288        real wd(nloc)           ! gust
289    
290        !-------------------------------------------------------------------
291        ! --- SET CONSTANTS AND PARAMETERS
292        !-------------------------------------------------------------------
293    
294        ! -- set simulation flags:
295        !   (common cvflag)
296    
297        CALL cv_flag
298    
299        ! -- set thermodynamical constants:
300        !     (common cvthermo)
301    
302        CALL cv_thermo(iflag_con)
303    
304        ! -- set convect parameters
305        !
306        !     includes microphysical parameters and parameters that
307        !     control the rate of approach to quasi-equilibrium)
308        !     (common cvparam)
309    
310        if (iflag_con.eq.3) then
311           CALL cv3_param(nd, delt)
312        endif
313    
314        if (iflag_con.eq.4) then
315         CALL cv_param(nd)         CALL cv_param(nd)
316        endif      endif
317    
318  !---------------------------------------------------------------------      !---------------------------------------------------------------------
319  ! --- INITIALIZE OUTPUT ARRAYS AND PARAMETERS      ! --- INITIALIZE OUTPUT ARRAYS AND PARAMETERS
320  !---------------------------------------------------------------------      !---------------------------------------------------------------------
321    
322        do 20 k=1,nd      do k=1, nd
323          do 10 i=1,len         do  i=1, len
324           ft1(i,k)=0.0            ft1(i, k)=0.0
325           fq1(i,k)=0.0            fq1(i, k)=0.0
326           fu1(i,k)=0.0            fu1(i, k)=0.0
327           fv1(i,k)=0.0            fv1(i, k)=0.0
328           tvp1(i,k)=0.0            tvp1(i, k)=0.0
329           tp1(i,k)=0.0            tp1(i, k)=0.0
330           clw1(i,k)=0.0            clw1(i, k)=0.0
331  cym            !ym
332           clw(i,k)=0.0                clw(i, k)=0.0
333           gz1(i,k) = 0.            gz1(i, k) = 0.
334           VPrecip1(i,k) = 0.            VPrecip1(i, k) = 0.
335           Ma1(i,k)=0.0            Ma1(i, k)=0.0
336           upwd1(i,k)=0.0            upwd1(i, k)=0.0
337           dnwd1(i,k)=0.0            dnwd1(i, k)=0.0
338           dnwd01(i,k)=0.0            dnwd01(i, k)=0.0
339           qcondc1(i,k)=0.0            qcondc1(i, k)=0.0
340   10     continue         end do
341   20   continue      end do
342    
343        do 30 j=1,ntra      do  j=1, ntra
344         do 31 k=1,nd         do  k=1, nd
345          do 32 i=1,len            do  i=1, len
346           ftra1(i,k,j)=0.0               ftra1(i, k, j)=0.0
347   32     continue                end do
348   31    continue             end do
349   30   continue          end do
350    
351        do 60 i=1,len      do  i=1, len
352          precip1(i)=0.0         precip1(i)=0.0
353          iflag1(i)=0         iflag1(i)=0
354          wd1(i)=0.0         wd1(i)=0.0
355          cape1(i)=0.0         cape1(i)=0.0
356          VPrecip1(i,nd+1)=0.0         VPrecip1(i, nd+1)=0.0
357   60   continue      end do
358    
359        if (iflag_con.eq.3) then      if (iflag_con.eq.3) then
360          do il=1,len         do il=1, len
361           sig1(il,nd)=sig1(il,nd)+1.            sig1(il, nd)=sig1(il, nd)+1.
362           sig1(il,nd)=amin1(sig1(il,nd),12.1)            sig1(il, nd)=amin1(sig1(il, nd), 12.1)
363          enddo         enddo
364        endif      endif
365    
366  !--------------------------------------------------------------------      !--------------------------------------------------------------------
367  ! --- CALCULATE ARRAYS OF GEOPOTENTIAL, HEAT CAPACITY & STATIC ENERGY      ! --- CALCULATE ARRAYS OF GEOPOTENTIAL, HEAT CAPACITY & STATIC ENERGY
368  !--------------------------------------------------------------------      !--------------------------------------------------------------------
369    
370        if (iflag_con.eq.3) then      if (iflag_con.eq.3) then
371         CALL cv3_prelim(len,nd,ndp1,t1,q1,p1,ph1            ! nd->na         CALL cv3_prelim(len, nd, ndp1, t1, q1, p1, ph1, lv1, cpn1, tv1, gz1, &
372       o               ,lv1,cpn1,tv1,gz1,h1,hm1,th1)              h1, hm1, th1)! nd->na
373        endif      endif
374    
375        if (iflag_con.eq.4) then      if (iflag_con.eq.4) then
376         CALL cv_prelim(len,nd,ndp1,t1,q1,p1,ph1         CALL cv_prelim(len, nd, ndp1, t1, q1, p1, ph1 &
377       o               ,lv1,cpn1,tv1,gz1,h1,hm1)              , lv1, cpn1, tv1, gz1, h1, hm1)
378        endif      endif
379    
380  !--------------------------------------------------------------------      !--------------------------------------------------------------------
381  ! --- CONVECTIVE FEED      ! --- CONVECTIVE FEED
382  !--------------------------------------------------------------------      !--------------------------------------------------------------------
383    
384        if (iflag_con.eq.3) then      if (iflag_con.eq.3) then
385         CALL cv3_feed(len,nd,t1,q1,qs1,p1,ph1,hm1,gz1           ! nd->na         CALL cv3_feed(len, nd, t1, q1, qs1, p1, ph1, hm1, gz1            &
386       o         ,nk1,icb1,icbmax,iflag1,tnk1,qnk1,gznk1,plcl1)              , nk1, icb1, icbmax, iflag1, tnk1, qnk1, gznk1, plcl1) ! nd->na
387        endif      endif
388    
389        if (iflag_con.eq.4) then      if (iflag_con.eq.4) then
390         CALL cv_feed(len,nd,t1,q1,qs1,p1,hm1,gz1         CALL cv_feed(len, nd, t1, q1, qs1, p1, hm1, gz1 &
391       o         ,nk1,icb1,icbmax,iflag1,tnk1,qnk1,gznk1,plcl1)              , nk1, icb1, icbmax, iflag1, tnk1, qnk1, gznk1, plcl1)
392        endif      endif
393    
394  !--------------------------------------------------------------------      !--------------------------------------------------------------------
395  ! --- UNDILUTE (ADIABATIC) UPDRAFT / 1st part      ! --- UNDILUTE (ADIABATIC) UPDRAFT / 1st part
396  ! (up through ICB for convect4, up through ICB+1 for convect3)      ! (up through ICB for convect4, up through ICB+1 for convect3)
397  !     Calculates the lifted parcel virtual temperature at nk, the      !     Calculates the lifted parcel virtual temperature at nk, the
398  !     actual temperature, and the adiabatic liquid water content.      !     actual temperature, and the adiabatic liquid water content.
399  !--------------------------------------------------------------------      !--------------------------------------------------------------------
400    
401        if (iflag_con.eq.3) then      if (iflag_con.eq.3) then
402         CALL cv3_undilute1(len,nd,t1,q1,qs1,gz1,plcl1,p1,nk1,icb1  ! nd->na         CALL cv3_undilute1(len, nd, t1, q1, qs1, gz1, plcl1, p1, nk1, icb1   &
403       o                        ,tp1,tvp1,clw1,icbs1)              , tp1, tvp1, clw1, icbs1) ! nd->na
404        endif      endif
405    
406        if (iflag_con.eq.4) then      if (iflag_con.eq.4) then
407         CALL cv_undilute1(len,nd,t1,q1,qs1,gz1,p1,nk1,icb1,icbmax         CALL cv_undilute1(len, nd, t1, q1, qs1, gz1, p1, nk1, icb1, icbmax &
408       :                        ,tp1,tvp1,clw1)              , tp1, tvp1, clw1)
409        endif      endif
410    
411  !-------------------------------------------------------------------      !-------------------------------------------------------------------
412  ! --- TRIGGERING      ! --- TRIGGERING
413  !-------------------------------------------------------------------      !-------------------------------------------------------------------
414    
415        if (iflag_con.eq.3) then      if (iflag_con.eq.3) then
416         CALL cv3_trigger(len,nd,icb1,plcl1,p1,th1,tv1,tvp1      ! nd->na         CALL cv3_trigger(len, nd, icb1, plcl1, p1, th1, tv1, tvp1       &
417       o                 ,pbase1,buoybase1,iflag1,sig1,w01)              , pbase1, buoybase1, iflag1, sig1, w01) ! nd->na
418        endif      endif
419    
420        if (iflag_con.eq.4) then      if (iflag_con.eq.4) then
421         CALL cv_trigger(len,nd,icb1,cbmf1,tv1,tvp1,iflag1)         CALL cv_trigger(len, nd, icb1, cbmf1, tv1, tvp1, iflag1)
422        endif      endif
423    
424  !=====================================================================      !=====================================================================
425  ! --- IF THIS POINT IS REACHED, MOIST CONVECTIVE ADJUSTMENT IS NECESSARY      ! --- IF THIS POINT IS REACHED, MOIST CONVECTIVE ADJUSTMENT IS NECESSARY
426  !=====================================================================      !=====================================================================
427    
428        ncum=0      ncum=0
429        do 400 i=1,len      do  i=1, len
430          if(iflag1(i).eq.0)then         if(iflag1(i).eq.0)then
431             ncum=ncum+1            ncum=ncum+1
432             idcum(ncum)=i            idcum(ncum)=i
433          endif         endif
434   400  continue      end do
435    
436  c       print*,'klon, ncum = ',len,ncum      !       print*, 'klon, ncum = ', len, ncum
437    
438        IF (ncum.gt.0) THEN      IF (ncum.gt.0) THEN
439    
440  !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^         !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
441  ! --- COMPRESS THE FIELDS         ! --- COMPRESS THE FIELDS
442  !               (-> vectorization over convective gridpoints)         !        (-> vectorization over convective gridpoints)
443  !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^         !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
444    
445        if (iflag_con.eq.3) then         if (iflag_con.eq.3) then
446         CALL cv3_compress( len,nloc,ncum,nd,ntra            CALL cv3_compress( len, nloc, ncum, nd, ntra &
447       :    ,iflag1,nk1,icb1,icbs1                 , iflag1, nk1, icb1, icbs1 &
448       :    ,plcl1,tnk1,qnk1,gznk1,pbase1,buoybase1                 , plcl1, tnk1, qnk1, gznk1, pbase1, buoybase1 &
449       :    ,t1,q1,qs1,u1,v1,gz1,th1                 , t1, q1, qs1, u1, v1, gz1, th1 &
450       :    ,tra1                 , tra1 &
451       :    ,h1,lv1,cpn1,p1,ph1,tv1,tp1,tvp1,clw1                 , h1, lv1, cpn1, p1, ph1, tv1, tp1, tvp1, clw1  &
452       :    ,sig1,w01                 , sig1, w01 &
453       o    ,iflag,nk,icb,icbs                 , iflag, nk, icb, icbs &
454       o    ,plcl,tnk,qnk,gznk,pbase,buoybase                 , plcl, tnk, qnk, gznk, pbase, buoybase &
455       o    ,t,q,qs,u,v,gz,th                 , t, q, qs, u, v, gz, th &
456       o    ,tra                 , tra &
457       o    ,h,lv,cpn,p,ph,tv,tp,tvp,clw                 , h, lv, cpn, p, ph, tv, tp, tvp, clw  &
458       o    ,sig,w0  )                 , sig, w0  )
459        endif         endif
460    
461        if (iflag_con.eq.4) then         if (iflag_con.eq.4) then
462         CALL cv_compress( len,nloc,ncum,nd            CALL cv_compress( len, nloc, ncum, nd &
463       :    ,iflag1,nk1,icb1                 , iflag1, nk1, icb1 &
464       :    ,cbmf1,plcl1,tnk1,qnk1,gznk1                 , cbmf1, plcl1, tnk1, qnk1, gznk1 &
465       :    ,t1,q1,qs1,u1,v1,gz1                 , t1, q1, qs1, u1, v1, gz1 &
466       :    ,h1,lv1,cpn1,p1,ph1,tv1,tp1,tvp1,clw1                 , h1, lv1, cpn1, p1, ph1, tv1, tp1, tvp1, clw1 &
467       o    ,iflag,nk,icb                 , iflag, nk, icb &
468       o    ,cbmf,plcl,tnk,qnk,gznk                 , cbmf, plcl, tnk, qnk, gznk &
469       o    ,t,q,qs,u,v,gz,h,lv,cpn,p,ph,tv,tp,tvp,clw                 , t, q, qs, u, v, gz, h, lv, cpn, p, ph, tv, tp, tvp, clw  &
470       o    ,dph )                 , dph )
471        endif         endif
472    
473  !-------------------------------------------------------------------         !-------------------------------------------------------------------
474  ! --- UNDILUTE (ADIABATIC) UPDRAFT / second part :         ! --- UNDILUTE (ADIABATIC) UPDRAFT / second part :
475  ! ---   FIND THE REST OF THE LIFTED PARCEL TEMPERATURES         ! ---   FIND THE REST OF THE LIFTED PARCEL TEMPERATURES
476  ! ---   &         ! ---   &
477  ! ---   COMPUTE THE PRECIPITATION EFFICIENCIES AND THE         ! ---   COMPUTE THE PRECIPITATION EFFICIENCIES AND THE
478  ! ---   FRACTION OF PRECIPITATION FALLING OUTSIDE OF CLOUD         ! ---   FRACTION OF PRECIPITATION FALLING OUTSIDE OF CLOUD
479  ! ---   &         ! ---   &
480  ! ---   FIND THE LEVEL OF NEUTRAL BUOYANCY         ! ---   FIND THE LEVEL OF NEUTRAL BUOYANCY
481  !-------------------------------------------------------------------         !-------------------------------------------------------------------
482    
483        if (iflag_con.eq.3) then         if (iflag_con.eq.3) then
484         CALL cv3_undilute2(nloc,ncum,nd,icb,icbs,nk        !na->nd            CALL cv3_undilute2(nloc, ncum, nd, icb, icbs, nk         &
485       :                        ,tnk,qnk,gznk,t,q,qs,gz                 , tnk, qnk, gznk, t, q, qs, gz &
486       :                        ,p,h,tv,lv,pbase,buoybase,plcl                 , p, h, tv, lv, pbase, buoybase, plcl &
487       o                        ,inb,tp,tvp,clw,hp,ep,sigp,buoy)                 , inb, tp, tvp, clw, hp, ep, sigp, buoy) !na->nd
488        endif         endif
489    
490        if (iflag_con.eq.4) then         if (iflag_con.eq.4) then
491         CALL cv_undilute2(nloc,ncum,nd,icb,nk            CALL cv_undilute2(nloc, ncum, nd, icb, nk &
492       :                        ,tnk,qnk,gznk,t,q,qs,gz                 , tnk, qnk, gznk, t, q, qs, gz &
493       :                        ,p,dph,h,tv,lv                 , p, dph, h, tv, lv &
494       o             ,inb,inbis,tp,tvp,clw,hp,ep,sigp,frac)                 , inb, inbis, tp, tvp, clw, hp, ep, sigp, frac)
495        endif         endif
496    
497  !-------------------------------------------------------------------         !-------------------------------------------------------------------
498  ! --- CLOSURE         ! --- CLOSURE
499  !-------------------------------------------------------------------         !-------------------------------------------------------------------
500    
501        if (iflag_con.eq.3) then         if (iflag_con.eq.3) then
502         CALL cv3_closure(nloc,ncum,nd,icb,inb              ! na->nd            CALL cv3_closure(nloc, ncum, nd, icb, inb               &
503       :                       ,pbase,p,ph,tv,buoy                 , pbase, p, ph, tv, buoy &
504       o                       ,sig,w0,cape,m)                 , sig, w0, cape, m) ! na->nd
505        endif         endif
506    
507        if (iflag_con.eq.4) then         if (iflag_con.eq.4) then
508         CALL cv_closure(nloc,ncum,nd,nk,icb            CALL cv_closure(nloc, ncum, nd, nk, icb &
509       :                ,tv,tvp,p,ph,dph,plcl,cpn                 , tv, tvp, p, ph, dph, plcl, cpn &
510       o                ,iflag,cbmf)                 , iflag, cbmf)
511        endif         endif
512    
513  !-------------------------------------------------------------------         !-------------------------------------------------------------------
514  ! --- MIXING         ! --- MIXING
515  !-------------------------------------------------------------------         !-------------------------------------------------------------------
516    
517        if (iflag_con.eq.3) then         if (iflag_con.eq.3) then
518         CALL cv3_mixing(nloc,ncum,nd,nd,ntra,icb,nk,inb    ! na->nd            CALL cv3_mixing(nloc, ncum, nd, nd, ntra, icb, nk, inb     &
519       :                     ,ph,t,q,qs,u,v,tra,h,lv,qnk                 , ph, t, q, qs, u, v, tra, h, lv, qnk &
520       :                     ,hp,tv,tvp,ep,clw,m,sig                 , hp, tv, tvp, ep, clw, m, sig &
521       o ,ment,qent,uent,vent, nent,sij,elij,ments,qents,traent)                 , ment, qent, uent, vent, nent, sij, elij, ments, qents, traent)! na->nd
522        endif         endif
523    
524        if (iflag_con.eq.4) then         if (iflag_con.eq.4) then
525         CALL cv_mixing(nloc,ncum,nd,icb,nk,inb,inbis            CALL cv_mixing(nloc, ncum, nd, icb, nk, inb, inbis &
526       :                     ,ph,t,q,qs,u,v,h,lv,qnk                 , ph, t, q, qs, u, v, h, lv, qnk &
527       :                     ,hp,tv,tvp,ep,clw,cbmf                 , hp, tv, tvp, ep, clw, cbmf &
528       o                     ,m,ment,qent,uent,vent,nent,sij,elij)                 , m, ment, qent, uent, vent, nent, sij, elij)
529        endif         endif
530    
531  !-------------------------------------------------------------------         !-------------------------------------------------------------------
532  ! --- UNSATURATED (PRECIPITATING) DOWNDRAFTS         ! --- UNSATURATED (PRECIPITATING) DOWNDRAFTS
533  !-------------------------------------------------------------------         !-------------------------------------------------------------------
534    
535        if (iflag_con.eq.3) then         if (iflag_con.eq.3) then
536         CALL cv3_unsat(nloc,ncum,nd,nd,ntra,icb,inb    ! na->nd            CALL cv3_unsat(nloc, ncum, nd, nd, ntra, icb, inb     &
537       :               ,t,q,qs,gz,u,v,tra,p,ph                 , t, q, qs, gz, u, v, tra, p, ph &
538       :               ,th,tv,lv,cpn,ep,sigp,clw                 , th, tv, lv, cpn, ep, sigp, clw &
539       :               ,m,ment,elij,delt,plcl                 , m, ment, elij, delt, plcl &
540       o          ,mp,qp,up,vp,trap,wt,water,evap,b)                 , mp, qp, up, vp, trap, wt, water, evap, b)! na->nd
541        endif         endif
542    
543        if (iflag_con.eq.4) then         if (iflag_con.eq.4) then
544         CALL cv_unsat(nloc,ncum,nd,inb,t,q,qs,gz,u,v,p,ph            CALL cv_unsat(nloc, ncum, nd, inb, t, q, qs, gz, u, v, p, ph &
545       :                   ,h,lv,ep,sigp,clw,m,ment,elij                 , h, lv, ep, sigp, clw, m, ment, elij &
546       o                   ,iflag,mp,qp,up,vp,wt,water,evap)                 , iflag, mp, qp, up, vp, wt, water, evap)
547        endif         endif
548    
549  !-------------------------------------------------------------------         !-------------------------------------------------------------------
550  ! --- YIELD         ! --- YIELD
551  !     (tendencies, precipitation, variables of interface with other         !     (tendencies, precipitation, variables of interface with other
552  !      processes, etc)         !      processes, etc)
553  !-------------------------------------------------------------------         !-------------------------------------------------------------------
554    
555        if (iflag_con.eq.3) then         if (iflag_con.eq.3) then
556         CALL cv3_yield(nloc,ncum,nd,nd,ntra            ! na->nd            CALL cv3_yield(nloc, ncum, nd, nd, ntra             &
557       :                     ,icb,inb,delt                 , icb, inb, delt &
558       :                     ,t,q,u,v,tra,gz,p,ph,h,hp,lv,cpn,th                 , t, q, u, v, tra, gz, p, ph, h, hp, lv, cpn, th &
559       :                     ,ep,clw,m,tp,mp,qp,up,vp,trap                 , ep, clw, m, tp, mp, qp, up, vp, trap &
560       :                     ,wt,water,evap,b                 , wt, water, evap, b &
561       :                     ,ment,qent,uent,vent,nent,elij,traent,sig                 , ment, qent, uent, vent, nent, elij, traent, sig &
562       :                     ,tv,tvp                 , tv, tvp &
563       o                     ,iflag,precip,VPrecip,ft,fq,fu,fv,ftra                 , iflag, precip, VPrecip, ft, fq, fu, fv, ftra &
564       o                     ,upwd,dnwd,dnwd0,ma,mike,tls,tps,qcondc,wd)                 , upwd, dnwd, dnwd0, ma, mike, tls, tps, qcondc, wd)! na->nd
565        endif         endif
566    
567        if (iflag_con.eq.4) then         if (iflag_con.eq.4) then
568         CALL cv_yield(nloc,ncum,nd,nk,icb,inb,delt            CALL cv_yield(nloc, ncum, nd, nk, icb, inb, delt &
569       :              ,t,q,u,v,gz,p,ph,h,hp,lv,cpn                 , t, q, u, v, gz, p, ph, h, hp, lv, cpn &
570       :              ,ep,clw,frac,m,mp,qp,up,vp                 , ep, clw, frac, m, mp, qp, up, vp &
571       :              ,wt,water,evap                 , wt, water, evap &
572       :              ,ment,qent,uent,vent,nent,elij                 , ment, qent, uent, vent, nent, elij &
573       :              ,tv,tvp                 , tv, tvp &
574       o              ,iflag,wd,qprime,tprime                 , iflag, wd, qprime, tprime &
575       o              ,precip,cbmf,ft,fq,fu,fv,Ma,qcondc)                 , precip, cbmf, ft, fq, fu, fv, Ma, qcondc)
576        endif         endif
577    
578  !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^         !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
579  ! --- passive tracers         ! --- passive tracers
580  !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^         !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
581    
582        if (iflag_con.eq.3) then         if (iflag_con.eq.3) then
583         CALL cv3_tracer(nloc,len,ncum,nd,nd,            CALL cv3_tracer(nloc, len, ncum, nd, nd, &
584       :                  ment,sij,da,phi)                 ment, sij, da, phi)
585        endif         endif
586    
587  !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^         !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
588  ! --- UNCOMPRESS THE FIELDS         ! --- UNCOMPRESS THE FIELDS
589  !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^         !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
590  c set iflag1 =42 for non convective points         ! set iflag1 =42 for non convective points
591        do  i=1,len         do  i=1, len
592          iflag1(i)=42            iflag1(i)=42
593        end do         end do
594  c         !
595        if (iflag_con.eq.3) then         if (iflag_con.eq.3) then
596         CALL cv3_uncompress(nloc,len,ncum,nd,ntra,idcum            CALL cv3_uncompress(nloc, len, ncum, nd, ntra, idcum &
597       :          ,iflag                 , iflag &
598       :          ,precip,VPrecip,sig,w0                 , precip, VPrecip, sig, w0 &
599       :          ,ft,fq,fu,fv,ftra                 , ft, fq, fu, fv, ftra &
600       :          ,inb                 , inb  &
601       :          ,Ma,upwd,dnwd,dnwd0,qcondc,wd,cape                 , Ma, upwd, dnwd, dnwd0, qcondc, wd, cape &
602       :          ,da,phi,mp                 , da, phi, mp &
603       o          ,iflag1                 , iflag1 &
604       o          ,precip1,VPrecip1,sig1,w01                 , precip1, VPrecip1, sig1, w01 &
605       o          ,ft1,fq1,fu1,fv1,ftra1                 , ft1, fq1, fu1, fv1, ftra1 &
606       o          ,inb1                 , inb1 &
607       o          ,Ma1,upwd1,dnwd1,dnwd01,qcondc1,wd1,cape1                 , Ma1, upwd1, dnwd1, dnwd01, qcondc1, wd1, cape1  &
608       o          ,da1,phi1,mp1)                 , da1, phi1, mp1)
609        endif         endif
610    
611        if (iflag_con.eq.4) then         if (iflag_con.eq.4) then
612         CALL cv_uncompress(nloc,len,ncum,nd,idcum            CALL cv_uncompress(nloc, len, ncum, nd, idcum &
613       :          ,iflag                 , iflag &
614       :          ,precip,cbmf                 , precip, cbmf &
615       :          ,ft,fq,fu,fv                 , ft, fq, fu, fv &
616       :          ,Ma,qcondc                             , Ma, qcondc             &
617       o          ,iflag1                 , iflag1 &
618       o          ,precip1,cbmf1                 , precip1, cbmf1 &
619       o          ,ft1,fq1,fu1,fv1                 , ft1, fq1, fu1, fv1 &
620       o          ,Ma1,qcondc1 )                           , Ma1, qcondc1 )
621        endif         endif
622        ENDIF ! ncum>0
       ENDIF ! ncum>0  
   
 9999  continue  
   
       return  
       end  
   
 !==================================================================  
       SUBROUTINE cv_flag  
             use cvflag  
       implicit none  
   
   
 c -- si .TRUE., on rend la gravite plus explicite et eventuellement  
 c differente de 10.0 dans convect3:  
       cvflag_grav = .TRUE.  
   
       return  
       end  
   
 !==================================================================  
       SUBROUTINE cv_thermo(iflag_con)  
       use SUPHEC_M  
             use cvthermo  
           implicit none  
   
 c-------------------------------------------------------------  
 c Set thermodynamical constants for convectL  
 c-------------------------------------------------------------  
   
   
       integer, intent(in):: iflag_con  
   
   
 c original set from convect:  
       if (iflag_con.eq.4) then  
        cpd=1005.7  
        cpv=1870.0  
        cl=4190.0  
        rrv=461.5  
        rrd=287.04  
        lv0=2.501E6  
        g=9.8  
        t0=273.15  
        grav=g  
       endif  
   
 c constants consistent with LMDZ:  
       if (iflag_con.eq.3) then  
        cpd = RCPD  
        cpv = RCPV  
        cl  = RCW  
        rrv = RV  
        rrd = RD  
        lv0 = RLVTT  
        g   = RG     ! not used in convect3  
 c ori      t0  = RTT  
        t0  = 273.15 ! convect3 (RTT=273.16)  
 c maf       grav= 10.    ! implicitely or explicitely used in convect3  
        grav= g    ! implicitely or explicitely used in convect3  
       endif  
   
       rowl=1000.0 !(a quelle variable de SUPHEC_M cela correspond-il?)  
   
       clmcpv=cl-cpv  
       clmcpd=cl-cpd  
       cpdmcp=cpd-cpv  
       cpvmcpd=cpv-cpd  
       cpvmcl=cl-cpv ! for convect3  
       eps=rrd/rrv  
       epsi=1.0/eps  
       epsim1=epsi-1.0  
 c      ginv=1.0/g  
       ginv=1.0/grav  
       hrd=0.5*rrd  
623    
624        return    end SUBROUTINE cv_driver
       end  
625    
626    end module cv_driver_m

Legend:
Removed from v.47  
changed lines
  Added in v.52

  ViewVC Help
Powered by ViewVC 1.1.21