/[lmdze]/trunk/phylmd/CV30_routines/cv30_unsat.f
ViewVC logotype

Diff of /trunk/phylmd/CV30_routines/cv30_unsat.f

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

revision 189 by guez, Tue Mar 29 15:20:23 2016 UTC revision 197 by guez, Tue May 24 12:25:29 2016 UTC
# Line 5  module cv30_unsat_m Line 5  module cv30_unsat_m
5  contains  contains
6    
7    SUBROUTINE cv30_unsat(icb, inb, t, q, qs, gz, u, v, p, ph, th, tv, lv, cpn, &    SUBROUTINE cv30_unsat(icb, inb, t, q, qs, gz, u, v, p, ph, th, tv, lv, cpn, &
8         ep, sigp, clw, m, ment, elij, delt, plcl, mp, qp, up, vp, wt, water, &         ep, clw, m, ment, elij, delt, plcl, mp, qp, up, vp, wt, water, evap, b)
9         evap, b)  
10        ! Unsaturated (precipitating) downdrafts
11    
12      use cv30_param_m, only: nl, sigd      use cv30_param_m, only: nl, sigd
13      use cvthermo, only: cpd, ginv, grav      use cv_thermo_m, only: cpd, ginv, grav
14      USE dimphy, ONLY: klon, klev  
15        integer, intent(in):: icb(:) ! (ncum)
16        ! {2 <= icb <= nl - 3}
17    
18      ! inputs:      integer, intent(in):: inb(:) ! (ncum)
19      integer, intent(in):: icb(:), inb(:) ! (ncum)      ! first model level above the level of neutral buoyancy of the
20      real, intent(in):: t(:, :), q(:, :), qs(:, :) ! (klon, klev)      ! parcel (1 <= inb <= nl - 1)
21    
22        real, intent(in):: t(:, :), q(:, :), qs(:, :) ! (ncum, nl)
23      real, intent(in):: gz(:, :) ! (klon, klev)      real, intent(in):: gz(:, :) ! (klon, klev)
24      real, intent(in):: u(:, :), v(:, :) ! (klon, klev)      real, intent(in):: u(:, :), v(:, :) ! (klon, klev)
25      real p(klon, klev), ph(klon, klev + 1)      real, intent(in):: p(:, :) ! (klon, klev) pressure at full level, in hPa
26      real th(klon, klev)      real, intent(in):: ph(:, :) ! (ncum, klev + 1)
27      real tv(klon, klev)      real, intent(in):: th(:, :) ! (ncum, nl - 1)
28      real lv(klon, klev)      real, intent(in):: tv(:, :) ! (klon, klev)
29      real cpn(klon, klev)      real, intent(in):: lv(:, :) ! (klon, klev)
30      real, intent(in):: ep(klon, klev), sigp(klon, klev), clw(klon, klev)      real, intent(in):: cpn(:, :) ! (klon, klev)
31      real m(klon, klev), ment(klon, klev, klev), elij(klon, klev, klev)      real, intent(in):: ep(:, :) ! (ncum, klev)
32        real, intent(in):: clw(:, :) ! (ncum, klev)
33        real, intent(in):: m(:, :) ! (ncum, klev)
34        real, intent(in):: ment(:, :, :) ! (ncum, klev, klev)
35        real, intent(in):: elij(:, :, :) ! (ncum, klev, klev)
36      real, intent(in):: delt      real, intent(in):: delt
37      real plcl(klon)      real, intent(in):: plcl(:) ! (ncum)
38    
39      ! outputs:      real, intent(out):: mp(:, :) ! (klon, klev)
     real, intent(out):: mp(klon, klev)  
40      real, intent(out):: qp(:, :), up(:, :), vp(:, :) ! (ncum, nl)      real, intent(out):: qp(:, :), up(:, :), vp(:, :) ! (ncum, nl)
41      real wt(klon, klev), water(klon, klev), evap(klon, klev)      real, intent(out):: wt(:, :) ! (ncum, nl)
42        real, intent(out):: water(:, :), evap(:, :) ! (ncum, nl)
43      real, intent(out):: b(:, :) ! (ncum, nl - 1)      real, intent(out):: b(:, :) ! (ncum, nl - 1)
44    
45      ! Local:      ! Local:
46    
47        real, parameter:: sigp = 0.15
48        ! fraction of precipitation falling outside of cloud, \sig_s in
49        ! Emanuel (1991 928)
50    
51      integer ncum      integer ncum
52      integer i, j, il, num1      integer i, il, imax
53      real tinv, delti      real tinv, delti
54      real awat, afac, afac1, afac2, bfac      real afac, afac1, afac2, bfac
55      real pr1, pr2, sigt, b6, c6, revap, tevap, delth      real pr1, sigt, b6, c6, revap, tevap, delth
56      real amfac, amp2, xf, tf, fac2, ur, sru, fac, d, af, bf      real amfac, amp2, xf, tf, fac2, ur, sru, fac, d, af, bf
57      real ampmax      real ampmax
58      real lvcp(klon, klev)      real lvcp(size(icb), nl) ! (ncum, nl)
59      real wdtrain(size(icb))      real wdtrain(size(icb)) ! (ncum)
60      logical lwork(size(icb))      logical lwork(size(icb)) ! (ncum)
61    
62      !------------------------------------------------------      !------------------------------------------------------
63    
# Line 65  contains Line 79  contains
79         enddo         enddo
80      enddo      enddo
81    
82      ! check whether ep(inb) = 0, if so, skip precipitating      ! Check whether ep(inb) = 0. If so, skip precipitating downdraft
83      ! downdraft calculation      ! calculation.
     forall (il = 1:ncum) lwork(il) = ep(il, inb(il)) >= 1e-4  
   
     wdtrain = 0.  
84    
85      downdraft_loop: DO i = nl - 1, 1, - 1      forall (il = 1:ncum) lwork(il) = ep(il, inb(il)) >= 1e-4
        num1 = 0  
86    
87         do il = 1, ncum      imax = nl - 1
88            if (i <= inb(il) .and. lwork(il)) num1 = num1 + 1      do while (.not. any(inb >= imax .and. lwork) .and. imax >= 1)
89         enddo         imax = imax - 1
90        end do
91    
92        downdraft_loop: DO i = imax, 1, - 1
93           ! Integrate liquid water equation to find condensed water
94           ! and condensed water flux
95    
96           ! Calculate detrained precipitation
97           forall (il = 1:ncum, inb(il) >= i .and. lwork(il)) wdtrain(il) = grav &
98                * (ep(il, i) * m(il, i) * clw(il, i) &
99                + sum(max(elij(il, :i - 1, i) - (1. - ep(il, i)) * clw(il, i), 0.) &
100                * ment(il, :i - 1, i)))
101    
102           ! Find rain water and evaporation using provisional
103           ! estimates of qp(i) and qp(i - 1)
104    
105           loop_horizontal: do il = 1, ncum
106              if (i <= inb(il) .and. lwork(il)) then
107                 wt(il, i) = 45.
108    
109                 if (i < inb(il)) then
110                    qp(il, i) = qp(il, i + 1) + (cpd * (t(il, i + 1) - t(il, i)) &
111                         + gz(il, i + 1) - gz(il, i)) / lv(il, i)
112                    qp(il, i) = 0.5 * (qp(il, i) + q(il, i))
113                 endif
114    
115         if (num1 > 0) then               qp(il, i) = max(qp(il, i), 0.)
116            ! integrate liquid water equation to find condensed water               qp(il, i) = min(qp(il, i), qs(il, i))
117            ! and condensed water flux               qp(il, inb(il)) = q(il, inb(il))
118    
119            ! calculate detrained precipitation               if (i == 1) then
120                    afac = p(il, 1) * (qs(il, 1) - qp(il, 1)) &
121            do il = 1, ncum                       / (1e4 + 2000. * p(il, 1) * qs(il, 1))
122               if (i <= inb(il) .and. lwork(il)) then               else
123                  wdtrain(il) = grav * ep(il, i) * m(il, i) * clw(il, i)                  qp(il, i - 1) = qp(il, i) + (cpd * (t(il, i) - t(il, i - 1)) &
124                         + gz(il, i) - gz(il, i - 1)) / lv(il, i)
125                    qp(il, i - 1) = 0.5 * (qp(il, i - 1) + q(il, i - 1))
126                    qp(il, i - 1) = min(qp(il, i - 1), qs(il, i - 1))
127                    qp(il, i - 1) = max(qp(il, i - 1), 0.)
128                    afac1 = p(il, i) * (qs(il, i) - qp(il, i)) &
129                         / (1e4 + 2000. * p(il, i) * qs(il, i))
130                    afac2 = p(il, i - 1) * (qs(il, i - 1) - qp(il, i - 1)) &
131                         / (1e4 + 2000. * p(il, i - 1) * qs(il, i - 1))
132                    afac = 0.5 * (afac1 + afac2)
133               endif               endif
           enddo  
134    
135            if (i > 1) then               if (i == inb(il)) afac = 0.
136               do j = 1, i - 1               afac = max(afac, 0.)
137                  do il = 1, ncum               bfac = 1. / (sigd * wt(il, i))
138                     if (i <= inb(il) .and. lwork(il)) then  
139                        awat = elij(il, j, i) - (1. - ep(il, i)) * clw(il, i)               if (i <= icb(il)) then
140                        awat = max(awat, 0.)                  ! Prise en compte de la variation progressive de sigt dans
141                        wdtrain(il) = wdtrain(il) + grav * awat * ment(il, j, i)                  ! les couches icb et icb - 1 :
142                    ! pour plcl <= ph(i + 1), pr1 = 0
143                    ! pour plcl >= ph(i), pr1 = 1
144                    ! pour ph(i + 1) < plcl < ph(i), pr1 est la proportion
145                    ! \`a cheval sur le nuage.
146                    pr1 = max(0., min(1., &
147                         (plcl(il) - ph(il, i + 1)) / (ph(il, i) - ph(il, i + 1))))
148                    sigt = sigp * pr1 + 1. - pr1
149                 else
150                    ! {i >= icb(il) + 1}
151                    sigt = sigp
152                 end if
153    
154                 b6 = bfac * 50. * sigd * (ph(il, i) - ph(il, i + 1)) * sigt * afac
155                 c6 = water(il, i + 1) + bfac * wdtrain(il) - 50. * sigd * bfac &
156                      * (ph(il, i) - ph(il, i + 1)) * evap(il, i + 1)
157    
158                 if (c6 > 0.) then
159                    revap = 0.5 * (- b6 + sqrt(b6 * b6 + 4. * c6))
160                    evap(il, i) = sigt * afac * revap
161                    water(il, i) = revap * revap
162                 else
163                    evap(il, i) = - evap(il, i + 1) + 0.02 * (wdtrain(il) + sigd &
164                         * wt(il, i) * water(il, i + 1)) / (sigd * (ph(il, i) &
165                         - ph(il, i + 1)))
166                 end if
167    
168                 ! Calculate precipitating downdraft mass flux under
169                 ! hydrostatic approximation
170    
171                 test_above_surface: if (i /= 1) then
172                    tevap = max(0., evap(il, i))
173                    delth = max(0.001, (th(il, i) - th(il, i - 1)))
174                    mp(il, i) = 100. * ginv * lvcp(il, i) * sigd * tevap &
175                         * (p(il, i - 1) - p(il, i)) / delth
176    
177                    ! If hydrostatic assumption fails, solve cubic
178                    ! difference equation for downdraft theta and mass
179                    ! flux from two simultaneous differential equations
180    
181                    amfac = sigd * sigd * 70. * ph(il, i) &
182                         * (p(il, i - 1) - p(il, i)) &
183                         * (th(il, i) - th(il, i - 1)) / (tv(il, i) * th(il, i))
184                    amp2 = abs(mp(il, i + 1) * mp(il, i + 1) - mp(il, i) &
185                         * mp(il, i))
186    
187                    if (amp2 > 0.1 * amfac) then
188                       xf = 100. * sigd * sigd * sigd * (ph(il, i) - ph(il, i + 1))
189                       tf = b(il, i) - 5. * (th(il, i) - th(il, i - 1)) &
190                            * t(il, i) / (lvcp(il, i) * sigd * th(il, i))
191                       af = xf * tf + mp(il, i + 1) * mp(il, i + 1) * tinv
192                       bf = 2. * (tinv * mp(il, i + 1))**3 + tinv &
193                            * mp(il, i + 1) * xf * tf + 50. * (p(il, i - 1) &
194                            - p(il, i)) * xf * tevap
195                       fac2 = 1.
196                       if (bf < 0.) fac2 = - 1.
197                       bf = abs(bf)
198                       ur = 0.25 * bf * bf - af * af * af * tinv * tinv * tinv
199    
200                       if (ur >= 0.) then
201                          sru = sqrt(ur)
202                          fac = 1.
203                          if ((0.5 * bf - sru) < 0.) fac = - 1.
204                          mp(il, i) = mp(il, i + 1) * tinv + (0.5 * bf &
205                               + sru)**tinv + fac * (abs(0.5 * bf - sru))**tinv
206                       else
207                          d = atan(2. * sqrt(- ur) / (bf + 1e-28))
208                          if (fac2 < 0.)d = 3.14159 - d
209                          mp(il, i) = mp(il, i + 1) * tinv + 2. * sqrt(af * tinv) &
210                               * cos(d * tinv)
211                     endif                     endif
                 enddo  
              end do  
           endif  
212    
213            ! find rain water and evaporation using provisional                     mp(il, i) = max(0., mp(il, i))
           ! estimates of qp(i) and qp(i - 1)  
214    
215            do il = 1, ncum                     ! Il y a vraisemblablement une erreur dans la
216               if (i <= inb(il) .and. lwork(il)) then                     ! ligne suivante : il faut diviser par (mp(il,
217                  wt(il, i) = 45.                     ! i) * sigd * grav) et non par (mp(il, i) + sigd
218                       ! * 0.1).  Et il faut bien revoir les facteurs
219                  if (i < inb(il)) then                     ! 100.
220                     qp(il, i) = qp(il, i + 1) + (cpd * (t(il, i + 1) &                     b(il, i - 1) = b(il, i) + 100. * (p(il, i - 1) - p(il, i)) &
221                          - t(il, i)) + gz(il, i + 1) - gz(il, i)) / lv(il, i)                          * tevap / (mp(il, i) + sigd * 0.1) - 10. * (th(il, i) &
222                     qp(il, i) = 0.5 * (qp(il, i) + q(il, i))                          - th(il, i - 1)) * t(il, i) / (lvcp(il, i) * sigd &
223                            * th(il, i))
224                       b(il, i - 1) = max(b(il, i - 1), 0.)
225                  endif                  endif
226    
227                  qp(il, i) = max(qp(il, i), 0.)                  ! Limit magnitude of mp(i) to meet CFL condition:
228                  qp(il, i) = min(qp(il, i), qs(il, i))                  ampmax = 2. * (ph(il, i) - ph(il, i + 1)) * delti
229                  qp(il, inb(il)) = q(il, inb(il))                  amp2 = 2. * (ph(il, i - 1) - ph(il, i)) * delti
230                    ampmax = min(ampmax, amp2)
231                  if (i == 1) then                  mp(il, i) = min(mp(il, i), ampmax)
232                     afac = p(il, 1) * (qs(il, 1) - qp(il, 1)) &  
233                          / (1e4 + 2000. * p(il, 1) * qs(il, 1))                  ! Force mp to decrease linearly to zero between cloud
234                    ! base and the surface:
235                    if (p(il, i) > p(il, icb(il))) mp(il, i) = mp(il, icb(il)) &
236                         * (p(il, 1) - p(il, i)) / (p(il, 1) - p(il, icb(il)))
237                 endif test_above_surface
238    
239                 ! Find mixing ratio of precipitating downdraft
240    
241                 if (i /= inb(il)) then
242                    qp(il, i) = q(il, i)
243    
244                    if (mp(il, i) > mp(il, i + 1)) then
245                       qp(il, i) = qp(il, i + 1) * mp(il, i + 1) + q(il, i) &
246                            * (mp(il, i) - mp(il, i + 1)) + 100. * ginv * 0.5 &
247                            * sigd * (ph(il, i) - ph(il, i + 1)) &
248                            * (evap(il, i + 1) + evap(il, i))
249                       qp(il, i) = qp(il, i) / mp(il, i)
250                       up(il, i) = up(il, i + 1) * mp(il, i + 1) + u(il, i) &
251                            * (mp(il, i) - mp(il, i + 1))
252                       up(il, i) = up(il, i) / mp(il, i)
253                       vp(il, i) = vp(il, i + 1) * mp(il, i + 1) + v(il, i) &
254                            * (mp(il, i) - mp(il, i + 1))
255                       vp(il, i) = vp(il, i) / mp(il, i)
256                  else                  else
257                     qp(il, i - 1) = qp(il, i) + (cpd * (t(il, i) &                     if (mp(il, i + 1) > 1e-16) then
258                          - t(il, i - 1)) + gz(il, i) - gz(il, i - 1)) / lv(il, i)                        qp(il, i) = qp(il, i + 1) + 100. * ginv * 0.5 * sigd &
259                     qp(il, i - 1) = 0.5 * (qp(il, i - 1) + q(il, i - 1))                             * (ph(il, i) - ph(il, i + 1)) * (evap(il, i + 1) &
260                     qp(il, i - 1) = min(qp(il, i - 1), qs(il, i - 1))                             + evap(il, i)) / mp(il, i + 1)
261                     qp(il, i - 1) = max(qp(il, i - 1), 0.)                        up(il, i) = up(il, i + 1)
262                     afac1 = p(il, i) * (qs(il, i) - qp(il, i)) &                        vp(il, i) = vp(il, i + 1)
                         / (1e4 + 2000. * p(il, i) * qs(il, i))  
                    afac2 = p(il, i - 1) * (qs(il, i - 1) - qp(il, i - 1)) &  
                         / (1e4 + 2000. * p(il, i - 1) * qs(il, i - 1))  
                    afac = 0.5 * (afac1 + afac2)  
                 endif  
   
                 if (i == inb(il)) afac = 0.  
                 afac = max(afac, 0.)  
                 bfac = 1. / (sigd * wt(il, i))  
   
                 ! prise en compte de la variation progressive de sigt dans  
                 ! les couches icb et icb - 1:  
                 ! pour plcl < ph(i + 1), pr1 = 0 & pr2 = 1  
                 ! pour plcl > ph(i), pr1 = 1 & pr2 = 0  
                 ! pour ph(i + 1) < plcl < ph(i), pr1 est la proportion a cheval  
                 ! sur le nuage, et pr2 est la proportion sous la base du  
                 ! nuage.  
                 pr1 = (plcl(il) - ph(il, i + 1)) / (ph(il, i) - ph(il, i + 1))  
                 pr1 = max(0., min(1., pr1))  
                 pr2 = (ph(il, i) - plcl(il)) / (ph(il, i) - ph(il, i + 1))  
                 pr2 = max(0., min(1., pr2))  
                 sigt = sigp(il, i) * pr1 + pr2  
   
                 b6 = bfac * 50. * sigd * (ph(il, i) - ph(il, i + 1)) * sigt &  
                      * afac  
                 c6 = water(il, i + 1) + bfac * wdtrain(il) - 50. * sigd * bfac &  
                      * (ph(il, i) - ph(il, i + 1)) * evap(il, i + 1)  
                 if (c6 > 0.) then  
                    revap = 0.5 * (- b6 + sqrt(b6 * b6 + 4. * c6))  
                    evap(il, i) = sigt * afac * revap  
                    water(il, i) = revap * revap  
                 else  
                    evap(il, i) = - evap(il, i + 1) + 0.02 * (wdtrain(il) &  
                         + sigd * wt(il, i) * water(il, i + 1)) &  
                         / (sigd * (ph(il, i) - ph(il, i + 1)))  
                 end if  
   
                 ! calculate precipitating downdraft mass flux under  
                 ! hydrostatic approximation  
   
                 if (i /= 1) then  
                    tevap = max(0., evap(il, i))  
                    delth = max(0.001, (th(il, i) - th(il, i - 1)))  
                    mp(il, i) = 100. * ginv * lvcp(il, i) * sigd * tevap &  
                         * (p(il, i - 1) - p(il, i)) / delth  
   
                    ! If hydrostatic assumption fails, solve cubic  
                    ! difference equation for downdraft theta and mass  
                    ! flux from two simultaneous differential equations  
   
                    amfac = sigd * sigd * 70. * ph(il, i) &  
                         * (p(il, i - 1) - p(il, i)) &  
                         * (th(il, i) - th(il, i - 1)) / (tv(il, i) * th(il, i))  
                    amp2 = abs(mp(il, i + 1) * mp(il, i + 1) - mp(il, i) &  
                         * mp(il, i))  
   
                    if (amp2 > 0.1 * amfac) then  
                       xf = 100. * sigd * sigd * sigd * (ph(il, i) &  
                            - ph(il, i + 1))  
                       tf = b(il, i) - 5. * (th(il, i) - th(il, i - 1)) &  
                            * t(il, i) / (lvcp(il, i) * sigd * th(il, i))  
                       af = xf * tf + mp(il, i + 1) * mp(il, i + 1) * tinv  
                       bf = 2. * (tinv * mp(il, i + 1))**3 + tinv &  
                            * mp(il, i + 1) * xf * tf + 50. * (p(il, i - 1) &  
                            - p(il, i)) * xf * tevap  
                       fac2 = 1.  
                       if (bf < 0.) fac2 = - 1.  
                       bf = abs(bf)  
                       ur = 0.25 * bf * bf - af * af * af * tinv * tinv * tinv  
   
                       if (ur >= 0.) then  
                          sru = sqrt(ur)  
                          fac = 1.  
                          if ((0.5 * bf - sru) < 0.) fac = - 1.  
                          mp(il, i) = mp(il, i + 1) * tinv &  
                               + (0.5 * bf + sru)**tinv &  
                               + fac * (abs(0.5 * bf - sru))**tinv  
                       else  
                          d = atan(2. * sqrt(- ur) / (bf + 1e-28))  
                          if (fac2 < 0.)d = 3.14159 - d  
                          mp(il, i) = mp(il, i + 1) * tinv + 2. &  
                               * sqrt(af * tinv) * cos(d * tinv)  
                       endif  
   
                       mp(il, i) = max(0., mp(il, i))  
   
                       ! Il y a vraisemblablement une erreur dans la  
                       ! ligne suivante : il faut diviser par (mp(il,  
                       ! i) * sigd * grav) et non par (mp(il, i) + sigd  
                       ! * 0.1).  Et il faut bien revoir les facteurs  
                       ! 100.  
                       b(il, i - 1) = b(il, i) + 100. * (p(il, i - 1) &  
                            - p(il, i)) * tevap / (mp(il, i) + sigd * 0.1) &  
                            - 10. * (th(il, i) - th(il, i - 1)) * t(il, i) &  
                            / (lvcp(il, i) * sigd * th(il, i))  
                       b(il, i - 1) = max(b(il, i - 1), 0.)  
263                     endif                     endif
   
                    ! limit magnitude of mp(i) to meet cfl condition  
                    ampmax = 2. * (ph(il, i) - ph(il, i + 1)) * delti  
                    amp2 = 2. * (ph(il, i - 1) - ph(il, i)) * delti  
                    ampmax = min(ampmax, amp2)  
                    mp(il, i) = min(mp(il, i), ampmax)  
   
                    ! force mp to decrease linearly to zero  
                    ! between cloud base and the surface  
                    if (p(il, i) > p(il, icb(il))) mp(il, i) = mp(il, icb(il)) &  
                         * (p(il, 1) - p(il, i)) / (p(il, 1) - p(il, icb(il)))  
                 endif ! i == 1  
   
                 ! find mixing ratio of precipitating downdraft  
   
                 if (i /= inb(il)) then  
                    qp(il, i) = q(il, i)  
   
                    if (mp(il, i) > mp(il, i + 1)) then  
                       qp(il, i) = qp(il, i + 1) * mp(il, i + 1) + q(il, i) &  
                            * (mp(il, i) - mp(il, i + 1)) + 100. * ginv &  
                            * 0.5 * sigd * (ph(il, i) - ph(il, i + 1)) &  
                            * (evap(il, i + 1) + evap(il, i))  
                       qp(il, i) = qp(il, i) / mp(il, i)  
                       up(il, i) = up(il, i + 1) * mp(il, i + 1) + u(il, i) &  
                            * (mp(il, i) - mp(il, i + 1))  
                       up(il, i) = up(il, i) / mp(il, i)  
                       vp(il, i) = vp(il, i + 1) * mp(il, i + 1) + v(il, i) &  
                            * (mp(il, i) - mp(il, i + 1))  
                       vp(il, i) = vp(il, i) / mp(il, i)  
                    else  
                       if (mp(il, i + 1) > 1e-16) then  
                          qp(il, i) = qp(il, i + 1) + 100. * ginv * 0.5 * sigd &  
                               * (ph(il, i) - ph(il, i + 1)) &  
                               * (evap(il, i + 1) + evap(il, i)) / mp(il, i + 1)  
                          up(il, i) = up(il, i + 1)  
                          vp(il, i) = vp(il, i + 1)  
                       endif  
                    endif  
   
                    qp(il, i) = min(qp(il, i), qs(il, i))  
                    qp(il, i) = max(qp(il, i), 0.)  
264                  endif                  endif
265    
266                    qp(il, i) = min(qp(il, i), qs(il, i))
267                    qp(il, i) = max(qp(il, i), 0.)
268               endif               endif
269            end do            endif
270         end if         end do loop_horizontal
271      end DO downdraft_loop      end DO downdraft_loop
272    
273    end SUBROUTINE cv30_unsat    end SUBROUTINE cv30_unsat

Legend:
Removed from v.189  
changed lines
  Added in v.197

  ViewVC Help
Powered by ViewVC 1.1.21