/[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 192 by guez, Thu May 12 13:00:07 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 cv_thermo_m, only: cpd, ginv, grav      use cv_thermo_m, only: cpd, ginv, grav
     USE dimphy, ONLY: klon, klev  
14    
15      integer, intent(in):: icb(:) ! (ncum)      integer, intent(in):: icb(:) ! (ncum)
16        ! {2 <= icb <= nl - 3}
17    
18      integer, intent(in):: inb(:) ! (ncum)      integer, intent(in):: inb(:) ! (ncum)
19      ! first model level above the level of neutral buoyancy of the      ! first model level above the level of neutral buoyancy of the
20      ! parcel (1 <= inb <= nl - 1)      ! parcel (1 <= inb <= nl - 1)
21    
22      real, intent(in):: t(:, :), q(:, :), qs(:, :) ! (klon, klev)      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, intent(in):: p(klon, klev), ph(klon, klev + 1)      real, intent(in):: p(:, :) ! (klon, klev) pressure at full level, in hPa
26      real, intent(in):: th(klon, klev)      real, intent(in):: ph(:, :) ! (ncum, klev + 1)
27      real, intent(in):: tv(klon, klev)      real, intent(in):: th(:, :) ! (ncum, nl - 1)
28      real, intent(in):: lv(klon, klev)      real, intent(in):: tv(:, :) ! (klon, klev)
29      real, intent(in):: cpn(klon, klev)      real, intent(in):: lv(:, :) ! (klon, klev)
30      real, intent(in):: ep(:, :), sigp(:, :), clw(:, :) ! (ncum, klev)      real, intent(in):: cpn(:, :) ! (klon, klev)
31        real, intent(in):: ep(:, :) ! (ncum, klev)
32        real, intent(in):: clw(:, :) ! (ncum, klev)
33      real, intent(in):: m(:, :) ! (ncum, klev)      real, intent(in):: m(:, :) ! (ncum, klev)
34      real, intent(in):: ment(:, :, :) ! (ncum, klev, klev)      real, intent(in):: ment(:, :, :) ! (ncum, klev, klev)
35      real, intent(in):: elij(:, :, :) ! (ncum, klev, klev)      real, intent(in):: elij(:, :, :) ! (ncum, klev, klev)
36      real, intent(in):: delt      real, intent(in):: delt
37      real, intent(in):: 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 71  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  
84    
85      wdtrain = 0.      forall (il = 1:ncum) lwork(il) = ep(il, inb(il)) >= 1e-4
   
     downdraft_loop: DO i = nl - 1, 1, - 1  
        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                  else                  ! base and the surface:
235                     qp(il, i - 1) = qp(il, i) + (cpd * (t(il, i) &                  if (p(il, i) > p(il, icb(il))) mp(il, i) = mp(il, icb(il)) &
236                          - t(il, i - 1)) + gz(il, i) - gz(il, i - 1)) / lv(il, i)                       * (p(il, 1) - p(il, i)) / (p(il, 1) - p(il, icb(il)))
237                     qp(il, i - 1) = 0.5 * (qp(il, i - 1) + q(il, i - 1))               endif test_above_surface
238                     qp(il, i - 1) = min(qp(il, i - 1), qs(il, i - 1))  
239                     qp(il, i - 1) = max(qp(il, i - 1), 0.)               ! Find mixing ratio of precipitating downdraft
240                     afac1 = p(il, i) * (qs(il, i) - qp(il, i)) &  
241                          / (1e4 + 2000. * p(il, i) * qs(il, i))               if (i /= inb(il)) then
242                     afac2 = p(il, i - 1) * (qs(il, i - 1) - qp(il, i - 1)) &                  qp(il, i) = q(il, i)
243                          / (1e4 + 2000. * p(il, i - 1) * qs(il, i - 1))  
244                     afac = 0.5 * (afac1 + afac2)                  if (mp(il, i) > mp(il, i + 1)) then
245                  endif                     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                  if (i == inb(il)) afac = 0.                          * sigd * (ph(il, i) - ph(il, i + 1)) &
248                  afac = max(afac, 0.)                          * (evap(il, i + 1) + evap(il, i))
249                  bfac = 1. / (sigd * wt(il, i))                     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                  ! prise en compte de la variation progressive de sigt dans                          * (mp(il, i) - mp(il, i + 1))
252                  ! les couches icb et icb - 1:                     up(il, i) = up(il, i) / mp(il, i)
253                  ! pour plcl < ph(i + 1), pr1 = 0 & pr2 = 1                     vp(il, i) = vp(il, i + 1) * mp(il, i + 1) + v(il, i) &
254                  ! pour plcl > ph(i), pr1 = 1 & pr2 = 0                          * (mp(il, i) - mp(il, i + 1))
255                  ! pour ph(i + 1) < plcl < ph(i), pr1 est la proportion a cheval                     vp(il, i) = vp(il, i) / mp(il, i)
                 ! 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  
256                  else                  else
257                     evap(il, i) = - evap(il, i + 1) + 0.02 * (wdtrain(il) &                     if (mp(il, i + 1) > 1e-16) then
258                          + sigd * wt(il, i) * water(il, i + 1)) &                        qp(il, i) = qp(il, i + 1) + 100. * ginv * 0.5 * sigd &
259                          / (sigd * (ph(il, i) - ph(il, i + 1)))                             * (ph(il, i) - ph(il, i + 1)) * (evap(il, i + 1) &
260                  end if                             + evap(il, i)) / mp(il, i + 1)
261                          up(il, i) = up(il, i + 1)
262                  ! calculate precipitating downdraft mass flux under                        vp(il, i) = vp(il, i + 1)
                 ! 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.)  
                    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  
263                     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.192  
changed lines
  Added in v.197

  ViewVC Help
Powered by ViewVC 1.1.21