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

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

  ViewVC Help
Powered by ViewVC 1.1.21