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

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

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

  ViewVC Help
Powered by ViewVC 1.1.21