/[lmdze]/trunk/phylmd/CV_routines/cv_feed.f
ViewVC logotype

Contents of /trunk/phylmd/CV_routines/cv_feed.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 103 - (show annotations)
Fri Aug 29 13:00:05 2014 UTC (9 years, 8 months ago) by guez
File size: 3717 byte(s)
Renamed module cvparam to cv_param. Deleted procedure
cv_param. Changed variables of module cv_param into parameters.

In procedures cv_driver, cv_uncompress and cv3_uncompress, removed
some arguments giving dimensions and used module variables klon and
klev instead.

In procedures gradiv2, laplacien_gam and laplacien, changed
declarations of local variables because klevel is not always klev.

Removed code for nudging surface pressure.

Removed arguments pim and pjm of tau2alpha. Added assignment of false
to variable first.

Replaced real argument del of procedures foeew and FOEDE by logical
argument.

1 module cv_feed_m
2
3 implicit none
4
5 contains
6
7 SUBROUTINE cv_feed(len, nd, t, q, qs, p, hm, gz, nk, icb, icbmax, iflag, &
8 tnk, qnk, gznk, plcl)
9
10 use cv_param
11
12 ! Purpose: CONVECTIVE FEED
13
14 ! inputs:
15 integer, intent(in):: len, nd
16 real, intent(in):: t(len, nd)
17 real, intent(in):: q(len, nd), qs(len, nd), p(len, nd)
18 real hm(len, nd), gz(len, nd)
19
20 ! outputs:
21 integer iflag(len)
22 integer, intent(out):: nk(len), icb(len), icbmax
23 real tnk(len), qnk(len), gznk(len), plcl(len)
24
25 ! local variables:
26 integer i, k
27 integer ihmin(len)
28 real work(len)
29 real pnk(len), qsnk(len), rh(len), chi(len)
30
31 !-------------------------------------------------------------------
32 ! --- Find level of minimum moist static energy
33 ! --- If level of minimum moist static energy coincides with
34 ! --- or is lower than minimum allowable parcel origin level,
35 ! --- set iflag to 6.
36 !-------------------------------------------------------------------
37
38 do i=1, len
39 work(i)=1.0e12
40 ihmin(i)=nl
41 end do
42 do k=2, nlp
43 do i=1, len
44 if ((hm(i, k) < work(i)).and. &
45 (hm(i, k) < hm(i, k-1)))then
46 work(i)=hm(i, k)
47 ihmin(i)=k
48 endif
49 end do
50 end do
51 do i=1, len
52 ihmin(i) = min(ihmin(i), nlm)
53 if (ihmin(i) <= minorig) iflag(i)=6
54 end do
55
56 !-------------------------------------------------------------------
57 ! --- Find that model level below the level of minimum moist static
58 ! --- energy that has the maximum value of moist static energy
59 !-------------------------------------------------------------------
60
61 do i=1, len
62 work(i)=hm(i, minorig)
63 nk(i)=minorig
64 end do
65 do k=minorig+1, nl
66 do i=1, len
67 if ((hm(i, k) > work(i)).and.(k <= ihmin(i)))then
68 work(i)=hm(i, k)
69 nk(i)=k
70 endif
71 end do
72 end do
73 !-------------------------------------------------------------------
74 ! --- Check whether parcel level temperature and specific humidity
75 ! --- are reasonable
76 !-------------------------------------------------------------------
77 do i=1, len
78 if (((t(i, nk(i)) < 250.0).or. &
79 (q(i, nk(i)) <= 0.0).or. &
80 (p(i, ihmin(i)) < 400.0)).and. &
81 (iflag(i) == 0))iflag(i)=7
82 end do
83 !-------------------------------------------------------------------
84 ! --- Calculate lifted condensation level of air at parcel origin level
85 ! --- (Within 0.2% of formula of Bolton, MON. WEA. REV., 1980)
86 !-------------------------------------------------------------------
87 do i=1, len
88 tnk(i)=t(i, nk(i))
89 qnk(i)=q(i, nk(i))
90 gznk(i)=gz(i, nk(i))
91 pnk(i)=p(i, nk(i))
92 qsnk(i)=qs(i, nk(i))
93
94 rh(i)=qnk(i)/qsnk(i)
95 rh(i)=min(1.0, rh(i))
96 chi(i)=tnk(i)/(1669.0-122.0*rh(i)-tnk(i))
97 plcl(i)=pnk(i)*(rh(i)**chi(i))
98 if (((plcl(i) < 200.0).or.(plcl(i) >= 2000.0)) &
99 .and.(iflag(i) == 0))iflag(i)=8
100 end do
101 !-------------------------------------------------------------------
102 ! --- Calculate first level above lcl (=icb)
103 !-------------------------------------------------------------------
104 do i=1, len
105 icb(i)=nlm
106 end do
107
108 do k=minorig, nl
109 do i=1, len
110 if ((k >= (nk(i)+1)).and.(p(i, k) < plcl(i))) &
111 icb(i)=min(icb(i), k)
112 end do
113 end do
114
115 do i=1, len
116 if ((icb(i) >= nlm).and.(iflag(i) == 0))iflag(i)=9
117 end do
118
119 ! Compute icbmax.
120
121 icbmax=2
122 do i=1, len
123 icbmax=max(icbmax, icb(i))
124 end do
125
126 end SUBROUTINE cv_feed
127
128 end module cv_feed_m

  ViewVC Help
Powered by ViewVC 1.1.21