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

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

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

revision 145 by guez, Tue Jun 16 15:23:29 2015 UTC revision 180 by guez, Tue Mar 15 17:07:47 2016 UTC
# Line 7  contains Line 7  contains
7    SUBROUTINE cv3_feed(len, nd, t, q, qs, p, ph, gz, nk, icb, icbmax, iflag, &    SUBROUTINE cv3_feed(len, nd, t, q, qs, p, ph, gz, nk, icb, icbmax, iflag, &
8         tnk, qnk, gznk, plcl)         tnk, qnk, gznk, plcl)
9    
10      ! Purpose: CONVECTIVE FEED      ! Purpose: convective feed
11    
12      ! Main differences with cv_feed:      ! Main differences with cv_feed:
13      ! - ph added in input      ! - ph added in input
14      ! - here, nk(i)=minorig      ! - here, nk(i) = minorig
15      ! - icb defined differently (plcl compared with ph instead of p)      ! - icb defined differently (plcl compared with ph instead of p)
16    
17      ! Main differences with convect3:      use cv3_param_m, only: minorig, nl, nlm
     ! - we do not compute dplcldt and dplcldr of CLIFT anymore  
     ! - values iflag different (but tests identical)  
     ! - A, B explicitely defined (!)  
18    
     use cv3_param_m  
   
     ! inputs:  
19      integer, intent(in):: len, nd      integer, intent(in):: len, nd
20      real, intent(in):: t(len, nd)      real, intent(in):: t(len, nd)
21      real, intent(in):: q(len, nd), qs(len, nd), p(len, nd)      real, intent(in):: q(len, nd), qs(len, nd), p(len, nd)
     real gz(len, nd)  
22      real, intent(in):: ph(len, nd+1)      real, intent(in):: ph(len, nd+1)
23        real, intent(in):: gz(len, nd)
24    
25      ! outputs:      ! outputs:
     integer iflag(len)  
26      integer, intent(out):: nk(len), icb(len), icbmax      integer, intent(out):: nk(len), icb(len), icbmax
27      real tnk(len), qnk(len), gznk(len), plcl(len)      integer, intent(inout):: iflag(len)
28        real tnk(len), qnk(len), gznk(len)
29        real, intent(out):: plcl(len)
30    
31      ! local variables:      ! Local:
32      integer i, k      integer i, k
33      real pnk(len), qsnk(len), rh(len), chi(len)      real pnk(len), qsnk(len), rh(len), chi(len)
34      real A, B ! convect3      real, parameter:: A = 1669., B = 122.
35    
36      !--------------------------------------------------------------------      !--------------------------------------------------------------------
37    
38      plcl=0.0      plcl = 0.
39    
40      ! --- Origin level of ascending parcels for convect3:      ! Origin level of ascending parcels
41    
42      do i=1, len      do i = 1, len
43         nk(i)=minorig         nk(i) = minorig
44      end do      end do
45    
46      ! --- Check whether parcel level temperature and specific humidity      ! Check whether parcel level temperature and specific humidity
47      ! --- are reasonable      ! are reasonable
48    
49      do i=1, len      do i = 1, len
50         if ((t(i, nk(i)) < 250. .or. q(i, nk(i)) <= 0.) .and. iflag(i) == 0) &         if ((t(i, nk(i)) < 250. .or. q(i, nk(i)) <= 0.) .and. iflag(i) == 0) &
51              iflag(i)=7              iflag(i) = 7
52      end do      end do
53    
54      ! --- Calculate lifted condensation level of air at parcel origin level      ! Calculate lifted condensation level of air at parcel origin level
55      ! --- (Within 0.2% of formula of Bolton, MON. WEA. REV., 1980)      ! (within 0.2% of formula of Bolton, Mon. Wea. Rev., 1980)
   
     A = 1669.0 ! convect3  
     B = 122.0 ! convect3  
56    
57      do i=1, len      do i = 1, len
58         if (iflag(i).ne.7) then         if (iflag(i) /= 7) then
59            tnk(i)=t(i, nk(i))            tnk(i) = t(i, nk(i))
60            qnk(i)=q(i, nk(i))            qnk(i) = q(i, nk(i))
61            gznk(i)=gz(i, nk(i))            gznk(i) = gz(i, nk(i))
62            pnk(i)=p(i, nk(i))            pnk(i) = p(i, nk(i))
63            qsnk(i)=qs(i, nk(i))            qsnk(i) = qs(i, nk(i))
64    
65            rh(i)=qnk(i)/qsnk(i)            rh(i) = qnk(i)/qsnk(i)
66            chi(i)=tnk(i)/(A-B*rh(i)-tnk(i)) ! convect3            chi(i) = tnk(i)/(A-B*rh(i)-tnk(i))
67            plcl(i)=pnk(i)*(rh(i)**chi(i))            plcl(i) = pnk(i)*(rh(i)**chi(i))
68            if ((plcl(i) < 200. .or. plcl(i) >= 2000.) .and. iflag(i) == 0) &            if ((plcl(i) < 200. .or. plcl(i) >= 2000.) .and. iflag(i) == 0) &
69                 iflag(i) = 8                 iflag(i) = 8
70         endif         endif
71      end do      end do
72    
73      ! --- Calculate first level above lcl (=icb)      ! Calculate first level above lcl (= icb)
74    
75      do i=1, len      do i = 1, len
76         icb(i)=nlm         icb(i) = nlm
77      end do      end do
78    
79      ! la modification consiste a comparer plcl a ph et non a p:      ! La modification consiste \`a comparer plcl \`a ph et non \`a p:
80      ! icb est defini par : ph(icb) < plcl < ph(icb - 1)      ! icb est d\'efini par : ph(icb) < plcl < ph(icb - 1)
81      do k=3, nl-1 ! modification pour que icb soit supérieur ou égal à 2      do k = 3, nl-1 ! modification pour que icb soit supérieur ou égal à 2
82         do i=1, len         do i = 1, len
83            if(ph(i, k) < plcl(i)) icb(i) = min(icb(i), k)            if (ph(i, k) < plcl(i)) icb(i) = min(icb(i), k)
84         end do         end do
85      end do      end do
86    
87      do i=1, len      do i = 1, len
88         if((icb(i) == nlm).and.(iflag(i) == 0))iflag(i)=9         if ((icb(i) == nlm).and.(iflag(i) == 0)) iflag(i) = 9
89      end do      end do
90    
91      do i=1, len      do i = 1, len
92         icb(i) = icb(i)-1 ! icb sup ou egal a 2         icb(i) = icb(i)-1 ! icb >= 2
93      end do      end do
94    
95      ! Compute icbmax.      ! Compute icbmax
96    
97        icbmax = 2
98    
99      icbmax=2      do i = 1, len
100      do i=1, len         if (iflag(i) < 7) icbmax = max(icbmax, icb(i))
        if (iflag(i) < 7) icbmax=max(icbmax, icb(i)) ! sb Jun7th02  
101      end do      end do
102    
103    end SUBROUTINE cv3_feed    end SUBROUTINE cv3_feed

Legend:
Removed from v.145  
changed lines
  Added in v.180

  ViewVC Help
Powered by ViewVC 1.1.21