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

Legend:
Removed from v.188  
changed lines
  Added in v.193

  ViewVC Help
Powered by ViewVC 1.1.21