/[lmdze]/trunk/libf/phylmd/CV_routines/cv_undilute1.f90
ViewVC logotype

Contents of /trunk/libf/phylmd/CV_routines/cv_undilute1.f90

Parent Directory Parent Directory | Revision Log Revision Log


Revision 52 - (show annotations)
Fri Sep 23 12:28:01 2011 UTC (12 years, 7 months ago) by guez
File size: 3201 byte(s)
Split "conflx.f" into single-procedure files in directory "Conflx".

Split "cv_routines.f" into single-procedure files in directory
"CV_routines". Made module "cvparam" from included file
"cvparam.h". No included file other than "netcdf.inc" left in LMDZE.

1
2 SUBROUTINE cv_undilute1(len,nd,t,q,qs,gz,p,nk,icb,icbmax &
3 ,tp,tvp,clw)
4 use cvthermo
5 use cvparam
6 implicit none
7
8
9 ! inputs:
10 integer len, nd
11 integer nk(len), icb(len), icbmax
12 real, intent(in):: t(len,nd)
13 real q(len,nd), qs(len,nd), gz(len,nd)
14 real p(len,nd)
15
16 ! outputs:
17 real tp(len,nd), tvp(len,nd), clw(len,nd)
18
19 ! local variables:
20 integer i, k
21 real tg, qg, alv, s, ahg, tc, denom, es, rg
22 real ah0(len), cpp(len)
23 real tnk(len), qnk(len), gznk(len), ticb(len), gzicb(len)
24
25 !-------------------------------------------------------------------
26 ! --- Calculates the lifted parcel virtual temperature at nk,
27 ! --- the actual temperature, and the adiabatic
28 ! --- liquid water content. The procedure is to solve the equation.
29 ! cp*tp+L*qp+phi=cp*tnk+L*qnk+gznk.
30 !-------------------------------------------------------------------
31
32 do 320 i=1,len
33 tnk(i)=t(i,nk(i))
34 qnk(i)=q(i,nk(i))
35 gznk(i)=gz(i,nk(i))
36 ticb(i)=t(i,icb(i))
37 gzicb(i)=gz(i,icb(i))
38 320 continue
39 !
40 ! *** Calculate certain parcel quantities, including static energy ***
41 !
42 do 330 i=1,len
43 ah0(i)=(cpd*(1.-qnk(i))+cl*qnk(i))*tnk(i) &
44 +qnk(i)*(lv0-clmcpv*(tnk(i)-273.15))+gznk(i)
45 cpp(i)=cpd*(1.-qnk(i))+qnk(i)*cpv
46 330 continue
47 !
48 ! *** Calculate lifted parcel quantities below cloud base ***
49 !
50 do 350 k=minorig,icbmax-1
51 do 340 i=1,len
52 tp(i,k)=tnk(i)-(gz(i,k)-gznk(i))/cpp(i)
53 tvp(i,k)=tp(i,k)*(1.+qnk(i)*epsi)
54 340 continue
55 350 continue
56 !
57 ! *** Find lifted parcel quantities above cloud base ***
58 !
59 do 360 i=1,len
60 tg=ticb(i)
61 qg=qs(i,icb(i))
62 alv=lv0-clmcpv*(ticb(i)-t0)
63 !
64 ! First iteration.
65 !
66 s=cpd+alv*alv*qg/(rrv*ticb(i)*ticb(i))
67 s=1./s
68 ahg=cpd*tg+(cl-cpd)*qnk(i)*ticb(i)+alv*qg+gzicb(i)
69 tg=tg+s*(ah0(i)-ahg)
70 tg=max(tg,35.0)
71 tc=tg-t0
72 denom=243.5+tc
73 if(tc.ge.0.0)then
74 es=6.112*exp(17.67*tc/denom)
75 else
76 es=exp(23.33086-6111.72784/tg+0.15215*log(tg))
77 endif
78 qg=eps*es/(p(i,icb(i))-es*(1.-eps))
79 !
80 ! Second iteration.
81 !
82 s=cpd+alv*alv*qg/(rrv*ticb(i)*ticb(i))
83 s=1./s
84 ahg=cpd*tg+(cl-cpd)*qnk(i)*ticb(i)+alv*qg+gzicb(i)
85 tg=tg+s*(ah0(i)-ahg)
86 tg=max(tg,35.0)
87 tc=tg-t0
88 denom=243.5+tc
89 if(tc.ge.0.0)then
90 es=6.112*exp(17.67*tc/denom)
91 else
92 es=exp(23.33086-6111.72784/tg+0.15215*log(tg))
93 end if
94 qg=eps*es/(p(i,icb(i))-es*(1.-eps))
95 !
96 alv=lv0-clmcpv*(ticb(i)-273.15)
97 tp(i,icb(i))=(ah0(i)-(cl-cpd)*qnk(i)*ticb(i) &
98 -gz(i,icb(i))-alv*qg)/cpd
99 clw(i,icb(i))=qnk(i)-qg
100 clw(i,icb(i))=max(0.0,clw(i,icb(i)))
101 rg=qg/(1.-qnk(i))
102 tvp(i,icb(i))=tp(i,icb(i))*(1.+rg*epsi)
103 360 continue
104 !
105 do 380 k=minorig,icbmax
106 do 370 i=1,len
107 tvp(i,k)=tvp(i,k)-tp(i,k)*qnk(i)
108 370 continue
109 380 continue
110 !
111 return
112 end

  ViewVC Help
Powered by ViewVC 1.1.21