/[lmdze]/trunk/Sources/phylmd/CV_routines/cv_closure.f
ViewVC logotype

Annotation of /trunk/Sources/phylmd/CV_routines/cv_closure.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 103 - (hide annotations)
Fri Aug 29 13:00:05 2014 UTC (9 years, 10 months ago) by guez
Original Path: trunk/phylmd/CV_routines/cv_closure.f
File size: 2656 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 guez 52 !
2     SUBROUTINE cv_closure(nloc,ncum,nd,nk,icb &
3     ,tv,tvp,p,ph,dph,plcl,cpn &
4     ,iflag,cbmf)
5     use cvthermo
6 guez 103 use cv_param
7 guez 52 implicit none
8    
9     ! inputs:
10 guez 97 integer, intent(in):: ncum, nd, nloc
11 guez 52 integer nk(nloc), icb(nloc)
12     real tv(nloc,nd), tvp(nloc,nd), p(nloc,nd), dph(nloc,nd)
13     real ph(nloc,nd+1) ! caution nd instead ndp1 to be consistent...
14     real plcl(nloc), cpn(nloc,nd)
15    
16     ! outputs:
17     integer iflag(nloc)
18     real cbmf(nloc) ! also an input
19    
20     ! local variables:
21     integer i, k, icbmax
22     real dtpbl(nloc), dtmin(nloc), tvpplcl(nloc), tvaplcl(nloc)
23     real work(nloc)
24    
25    
26     !-------------------------------------------------------------------
27     ! Compute icbmax.
28     !-------------------------------------------------------------------
29    
30     icbmax=2
31     do 230 i=1,ncum
32     icbmax=max(icbmax,icb(i))
33     230 continue
34    
35     !=====================================================================
36     ! --- CALCULATE CLOUD BASE MASS FLUX
37     !=====================================================================
38     !
39     ! tvpplcl = parcel temperature lifted adiabatically from level
40     ! icb-1 to the LCL.
41     ! tvaplcl = virtual temperature at the LCL.
42     !
43     do 610 i=1,ncum
44     dtpbl(i)=0.0
45     tvpplcl(i)=tvp(i,icb(i)-1) &
46     -rrd*tvp(i,icb(i)-1)*(p(i,icb(i)-1)-plcl(i)) &
47     /(cpn(i,icb(i)-1)*p(i,icb(i)-1))
48     tvaplcl(i)=tv(i,icb(i)) &
49     +(tvp(i,icb(i))-tvp(i,icb(i)+1))*(plcl(i)-p(i,icb(i))) &
50     /(p(i,icb(i))-p(i,icb(i)+1))
51     610 continue
52    
53     !-------------------------------------------------------------------
54     ! --- Interpolate difference between lifted parcel and
55     ! --- environmental temperatures to lifted condensation level
56     !-------------------------------------------------------------------
57     !
58     ! dtpbl = average of tvp-tv in the PBL (k=nk to icb-1).
59     !
60     do 630 k=minorig,icbmax
61     do 620 i=1,ncum
62     if((k.ge.nk(i)).and.(k.le.(icb(i)-1)))then
63     dtpbl(i)=dtpbl(i)+(tvp(i,k)-tv(i,k))*dph(i,k)
64     endif
65     620 continue
66     630 continue
67     do 640 i=1,ncum
68     dtpbl(i)=dtpbl(i)/(ph(i,nk(i))-ph(i,icb(i)))
69     dtmin(i)=tvpplcl(i)-tvaplcl(i)+dtmax+dtpbl(i)
70     640 continue
71     !
72     !-------------------------------------------------------------------
73     ! --- Adjust cloud base mass flux
74     !-------------------------------------------------------------------
75     !
76     do 650 i=1,ncum
77     work(i)=cbmf(i)
78     cbmf(i)=max(0.0,(1.0-damp)*cbmf(i)+0.1*alpha*dtmin(i))
79     if((work(i).eq.0.0).and.(cbmf(i).eq.0.0))then
80     iflag(i)=3
81     endif
82     650 continue
83    
84     return
85     end

  ViewVC Help
Powered by ViewVC 1.1.21