/[lmdze]/trunk/Sources/phylmd/CV30_routines/cv30_closure.f
ViewVC logotype

Diff of /trunk/Sources/phylmd/CV30_routines/cv30_closure.f

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 195 by guez, Wed May 18 17:56:44 2016 UTC revision 196 by guez, Mon May 23 13:50:39 2016 UTC
# Line 16  contains Line 16  contains
16      ! input:      ! input:
17      integer, intent(in):: icb(:), inb(:) ! (ncum)      integer, intent(in):: icb(:), inb(:) ! (ncum)
18      real pbase(klon)      real pbase(klon)
19      real p(klon, klev), ph(klon, klev+1)      real p(:, :) ! (klon, klev)
20        real, intent(in):: ph(:, :)  ! (ncum, klev + 1)
21      real tv(klon, klev), buoy(klon, klev)      real tv(klon, klev), buoy(klon, klev)
22    
23      ! input/output:      ! input/output:
# Line 50  contains Line 51  contains
51    
52      do k=1, nl-1      do k=1, nl-1
53         do i=1, ncum         do i=1, ncum
54            if ((inb(i) < (nl-1)).and.(k >= (inb(i)+1)))then            if ((inb(i) < (nl-1)).and.(k >= (inb(i) + 1)))then
55               sig(i, k)=beta*sig(i, k) &               sig(i, k)=beta*sig(i, k) &
56                    +2.*alpha*buoy(i, inb(i))*ABS(buoy(i, inb(i)))                    + 2.*alpha*buoy(i, inb(i))*ABS(buoy(i, inb(i)))
57               sig(i, k)=AMAX1(sig(i, k), 0.0)               sig(i, k)=AMAX1(sig(i, k), 0.0)
58               w0(i, k)=beta*w0(i, k)               w0(i, k)=beta*w0(i, k)
59            endif            endif
# Line 109  contains Line 110  contains
110      do i=1, ncum      do i=1, ncum
111         do k=1, nl         do k=1, nl
112            do j=minorig, nl            do j=minorig, nl
113               if ((k >= (icb(i)+1)).and.(k <= inb(i)).and. &               if ((k >= (icb(i) + 1)).and.(k <= inb(i)).and. &
114                    (j >= icb(i)).and.(j <= (k-1)))then                    (j >= icb(i)).and.(j <= (k-1)))then
115                  dtmin(i, k)=AMIN1(dtmin(i, k), buoy(i, j))                  dtmin(i, k)=AMIN1(dtmin(i, k), buoy(i, j))
116               endif               endif
# Line 117  contains Line 118  contains
118         end do         end do
119      end do      end do
120    
121      ! the interval on which cape is computed starts at pbase :      ! The interval on which cape is computed starts at pbase:
122    
123      do k=1, nl      do k=1, nl
124         do i=1, ncum         do i=1, ncum
125              if ((k >= (icb(i) + 1)).and.(k <= inb(i))) then
           if ((k >= (icb(i)+1)).and.(k <= inb(i))) then  
   
126               deltap = MIN(pbase(i), ph(i, k-1))-MIN(pbase(i), ph(i, k))               deltap = MIN(pbase(i), ph(i, k-1))-MIN(pbase(i), ph(i, k))
127               cape(i)=cape(i)+rrd*buoy(i, k-1)*deltap/p(i, k-1)               cape(i)=cape(i) + rrd*buoy(i, k-1)*deltap/p(i, k-1)
128               cape(i)=AMAX1(0.0, cape(i))               cape(i)=AMAX1(0.0, cape(i))
129               sigold(i, k)=sig(i, k)               sigold(i, k)=sig(i, k)
130    
131               sig(i, k)=beta*sig(i, k)+alpha*dtmin(i, k)*ABS(dtmin(i, k))               sig(i, k)=beta*sig(i, k) + alpha*dtmin(i, k)*ABS(dtmin(i, k))
132               sig(i, k)=amax1(sig(i, k), 0.0)               sig(i, k)=amax1(sig(i, k), 0.0)
133               sig(i, k)=amin1(sig(i, k), 0.01)               sig(i, k)=amin1(sig(i, k), 0.01)
134               fac=AMIN1(((dtcrit-dtmin(i, k))/dtcrit), 1.0)               fac=AMIN1(((dtcrit-dtmin(i, k))/dtcrit), 1.0)
135               w=(1.-beta)*fac*SQRT(cape(i))+beta*w0(i, k)               w=(1.-beta)*fac*SQRT(cape(i)) + beta*w0(i, k)
136               amu=0.5*(sig(i, k)+sigold(i, k))*w               amu=0.5*(sig(i, k) + sigold(i, k))*w
137               m(i, k)=amu*0.007*p(i, k)*(ph(i, k)-ph(i, k+1))/tv(i, k)               m(i, k)=amu*0.007*p(i, k)*(ph(i, k)-ph(i, k + 1))/tv(i, k)
138               w0(i, k)=w               w0(i, k)=w
139            endif            endif
140    
# Line 143  contains Line 142  contains
142      end do      end do
143    
144      do i=1, ncum      do i=1, ncum
145         w0(i, icb(i))=0.5*w0(i, icb(i)+1)         w0(i, icb(i))=0.5*w0(i, icb(i) + 1)
146         m(i, icb(i))=0.5*m(i, icb(i)+1) &         m(i, icb(i))=0.5*m(i, icb(i) + 1) &
147              *(ph(i, icb(i))-ph(i, icb(i)+1)) &              *(ph(i, icb(i))-ph(i, icb(i) + 1)) &
148              /(ph(i, icb(i)+1)-ph(i, icb(i)+2))              /(ph(i, icb(i) + 1)-ph(i, icb(i) + 2))
149         sig(i, icb(i))=sig(i, icb(i)+1)         sig(i, icb(i))=sig(i, icb(i) + 1)
150         sig(i, icb(i)-1)=sig(i, icb(i))         sig(i, icb(i)-1)=sig(i, icb(i))
151      end do      end do
152    

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

  ViewVC Help
Powered by ViewVC 1.1.21