/[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

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

Legend:
Removed from v.105  
changed lines
  Added in v.187

  ViewVC Help
Powered by ViewVC 1.1.21