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

Legend:
Removed from v.186  
changed lines
  Added in v.194

  ViewVC Help
Powered by ViewVC 1.1.21