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

Legend:
Removed from v.190  
changed lines
  Added in v.195

  ViewVC Help
Powered by ViewVC 1.1.21