/[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 190 by guez, Thu Apr 14 15:15:56 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      ! inputs:      integer, intent(in):: icb(:) ! (ncum)
16      integer, intent(in):: icb(:), inb(:) ! (ncum)      ! {2 <= icb <= nl - 3}
17      real, intent(in):: t(:, :), q(:, :), qs(:, :) ! (klon, klev)      ! {ph(i, icb(i) + 1) < plcl(i) <= ph(i, icb(i))}
18    
19        integer, intent(in):: inb(:) ! (ncum)
20        ! first model level above the level of neutral buoyancy of the
21        ! 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  
   
           ! find rain water and evaporation using provisional  
           ! estimates of qp(i) and qp(i - 1)  
211    
212            do il = 1, ncum                     mp(il, i) = max(0., mp(il, i))
              if (i <= inb(il) .and. lwork(il)) then  
                 wt(il, i) = 45.  
   
                 if (i < inb(il)) then  
                    qp(il, i) = qp(il, i + 1) + (cpd * (t(il, i + 1) &  
                         - t(il, i)) + gz(il, i + 1) - gz(il, i)) / lv(il, i)  
                    qp(il, i) = 0.5 * (qp(il, i) + q(il, i))  
                 endif  
   
                 qp(il, i) = max(qp(il, i), 0.)  
                 qp(il, i) = min(qp(il, i), qs(il, i))  
                 qp(il, inb(il)) = q(il, inb(il))  
213    
214                  if (i == 1) then                     ! Il y a vraisemblablement une erreur dans la
215                     afac = p(il, 1) * (qs(il, 1) - qp(il, 1)) &                     ! ligne suivante : il faut diviser par (mp(il,
216                          / (1e4 + 2000. * p(il, 1) * qs(il, 1))                     ! i) * sigd * grav) et non par (mp(il, i) + sigd
217                  else                     ! * 0.1).  Et il faut bien revoir les facteurs
218                     qp(il, i - 1) = qp(il, i) + (cpd * (t(il, i) &                     ! 100.
219                          - t(il, i - 1)) + gz(il, i) - gz(il, i - 1)) / lv(il, i)                     b(il, i - 1) = b(il, i) + 100. * (p(il, i - 1) - p(il, i)) &
220                     qp(il, i - 1) = 0.5 * (qp(il, i - 1) + q(il, i - 1))                          * tevap / (mp(il, i) + sigd * 0.1) - 10. * (th(il, i) &
221                     qp(il, i - 1) = min(qp(il, i - 1), qs(il, i - 1))                          - th(il, i - 1)) * t(il, i) / (lvcp(il, i) * sigd &
222                     qp(il, i - 1) = max(qp(il, i - 1), 0.)                          * th(il, i))
223                     afac1 = p(il, i) * (qs(il, i) - qp(il, i)) &                     b(il, i - 1) = max(b(il, i - 1), 0.)
                         / (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)  
224                  endif                  endif
225    
226                  if (i == inb(il)) afac = 0.                  ! Limit magnitude of mp(i) to meet CFL condition:
227                  afac = max(afac, 0.)                  ampmax = 2. * (ph(il, i) - ph(il, i + 1)) * delti
228                  bfac = 1. / (sigd * wt(il, i))                  amp2 = 2. * (ph(il, i - 1) - ph(il, i)) * delti
229                    ampmax = min(ampmax, amp2)
230                  ! prise en compte de la variation progressive de sigt dans                  mp(il, i) = min(mp(il, i), ampmax)
231                  ! les couches icb et icb - 1:  
232                  ! pour plcl < ph(i + 1), pr1 = 0 & pr2 = 1                  ! Force mp to decrease linearly to zero between cloud
233                  ! pour plcl > ph(i), pr1 = 1 & pr2 = 0                  ! base and the surface:
234                  ! pour ph(i + 1) < plcl < ph(i), pr1 est la proportion a cheval                  if (p(il, i) > p(il, icb(il))) mp(il, i) = mp(il, icb(il)) &
235                  ! sur le nuage, et pr2 est la proportion sous la base du                       * (p(il, 1) - p(il, i)) / (p(il, 1) - p(il, icb(il)))
236                  ! nuage.               endif test_above_surface
237                  pr1 = (plcl(il) - ph(il, i + 1)) / (ph(il, i) - ph(il, i + 1))  
238                  pr1 = max(0., min(1., pr1))               ! Find mixing ratio of precipitating downdraft
239                  pr2 = (ph(il, i) - plcl(il)) / (ph(il, i) - ph(il, i + 1))  
240                  pr2 = max(0., min(1., pr2))               if (i /= inb(il)) then
241                  sigt = sigp(il, i) * pr1 + pr2                  qp(il, i) = q(il, i)
242    
243                  b6 = bfac * 50. * sigd * (ph(il, i) - ph(il, i + 1)) * sigt &                  if (mp(il, i) > mp(il, i + 1)) then
244                       * afac                     qp(il, i) = qp(il, i + 1) * mp(il, i + 1) + q(il, i) &
245                  c6 = water(il, i + 1) + bfac * wdtrain(il) - 50. * sigd * bfac &                          * (mp(il, i) - mp(il, i + 1)) + 100. * ginv * 0.5 &
246                       * (ph(il, i) - ph(il, i + 1)) * evap(il, i + 1)                          * sigd * (ph(il, i) - ph(il, i + 1)) &
247                  if (c6 > 0.) then                          * (evap(il, i + 1) + evap(il, i))
248                     revap = 0.5 * (- b6 + sqrt(b6 * b6 + 4. * c6))                     qp(il, i) = qp(il, i) / mp(il, i)
249                     evap(il, i) = sigt * afac * revap                     up(il, i) = up(il, i + 1) * mp(il, i + 1) + u(il, i) &
250                     water(il, i) = revap * revap                          * (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                     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.)  
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.190  
changed lines
  Added in v.196

  ViewVC Help
Powered by ViewVC 1.1.21