/[lmdze]/trunk/phylmd/CV30_routines/cv30_unsat.f
ViewVC logotype

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

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

  ViewVC Help
Powered by ViewVC 1.1.21