/[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 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 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        ! {ph(i, icb(i) + 1) < plcl(i) <= ph(i, icb(i))}
18    
19      integer, intent(in):: inb(:) ! (ncum)      integer, intent(in):: inb(:) ! (ncum)
20      ! first model level above the level of neutral buoyancy of the      ! first model level above the level of neutral buoyancy of the
21      ! parcel (1 <= inb <= nl - 1)      ! parcel (1 <= inb <= nl - 1)
22    
23      real, intent(in):: t(:, :), q(:, :), qs(:, :) ! (klon, klev)      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, intent(in):: p(klon, klev), ph(klon, klev + 1)      real, intent(in):: p(:, :) ! (klon, klev) pressure at full level, in hPa
27      real, intent(in):: th(klon, klev)      real, intent(in):: ph(:, :) ! (ncum, klev + 1)
28      real, intent(in):: tv(klon, klev)      real, intent(in):: th(:, :) ! (ncum, nl - 1)
29      real, intent(in):: lv(klon, klev)      real, intent(in):: tv(:, :) ! (klon, klev)
30      real, intent(in):: cpn(klon, klev)      real, intent(in):: lv(:, :) ! (klon, klev)
31      real, intent(in):: ep(:, :), sigp(:, :), clw(:, :) ! (ncum, klev)      real, intent(in):: cpn(:, :) ! (klon, klev)
32        real, intent(in):: ep(:, :) ! (ncum, klev)
33        real, intent(in):: clw(:, :) ! (ncum, klev)
34      real, intent(in):: m(:, :) ! (ncum, klev)      real, intent(in):: m(:, :) ! (ncum, klev)
35      real, intent(in):: ment(:, :, :) ! (ncum, klev, klev)      real, intent(in):: ment(:, :, :) ! (ncum, klev, klev)
36      real, intent(in):: elij(:, :, :) ! (ncum, klev, klev)      real, intent(in):: elij(:, :, :) ! (ncum, klev, klev)
37      real, intent(in):: delt      real, intent(in):: delt
38      real, intent(in):: 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 71  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  
85    
86      wdtrain = 0.      forall (il = 1:ncum) lwork(il) = ep(il, inb(il)) >= 1e-4
   
     downdraft_loop: DO i = nl - 1, 1, - 1  
        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                  else                  ! base and the surface:
234                     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)) &
235                          - 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)))
236                     qp(il, i - 1) = 0.5 * (qp(il, i - 1) + q(il, i - 1))               endif test_above_surface
237                     qp(il, i - 1) = min(qp(il, i - 1), qs(il, i - 1))  
238                     qp(il, i - 1) = max(qp(il, i - 1), 0.)               ! Find mixing ratio of precipitating downdraft
239                     afac1 = p(il, i) * (qs(il, i) - qp(il, i)) &  
240                          / (1e4 + 2000. * p(il, i) * qs(il, i))               if (i /= inb(il)) then
241                     afac2 = p(il, i - 1) * (qs(il, i - 1) - qp(il, i - 1)) &                  qp(il, i) = q(il, i)
242                          / (1e4 + 2000. * p(il, i - 1) * qs(il, i - 1))  
243                     afac = 0.5 * (afac1 + afac2)                  if (mp(il, i) > mp(il, i + 1)) then
244                  endif                     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                  if (i == inb(il)) afac = 0.                          * sigd * (ph(il, i) - ph(il, i + 1)) &
247                  afac = max(afac, 0.)                          * (evap(il, i + 1) + evap(il, i))
248                  bfac = 1. / (sigd * wt(il, i))                     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                  ! prise en compte de la variation progressive de sigt dans                          * (mp(il, i) - mp(il, i + 1))
251                  ! les couches icb et icb - 1:                     up(il, i) = up(il, i) / mp(il, i)
252                  ! pour plcl < ph(i + 1), pr1 = 0 & pr2 = 1                     vp(il, i) = vp(il, i + 1) * mp(il, i + 1) + v(il, i) &
253                  ! pour plcl > ph(i), pr1 = 1 & pr2 = 0                          * (mp(il, i) - mp(il, i + 1))
254                  ! 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  
255                  else                  else
256                     evap(il, i) = - evap(il, i + 1) + 0.02 * (wdtrain(il) &                     if (mp(il, i + 1) > 1e-16) then
257                          + sigd * wt(il, i) * water(il, i + 1)) &                        qp(il, i) = qp(il, i + 1) + 100. * ginv * 0.5 * sigd &
258                          / (sigd * (ph(il, i) - ph(il, i + 1)))                             * (ph(il, i) - ph(il, i + 1)) * (evap(il, i + 1) &
259                  end if                             + evap(il, i)) / mp(il, i + 1)
260                          up(il, i) = up(il, i + 1)
261                  ! 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  
262                     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.192  
changed lines
  Added in v.196

  ViewVC Help
Powered by ViewVC 1.1.21