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

Legend:
Removed from v.192  
changed lines
  Added in v.199

  ViewVC Help
Powered by ViewVC 1.1.21