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

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

  ViewVC Help
Powered by ViewVC 1.1.21