/[lmdze]/trunk/phylmd/Conflx/flxbase.f
ViewVC logotype

Annotation of /trunk/phylmd/Conflx/flxbase.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 78 - (hide annotations)
Wed Feb 5 17:51:07 2014 UTC (10 years, 4 months ago) by guez
Original Path: trunk/phylmd/Conflx/flxbase.f90
File size: 2462 byte(s)
Moved procedure inigeom into module comgeom.

In disvert, renamed s_sampling to vert_sampling, following
LMDZ. Removed choice strato1. In case read, read ap and bp instead of
s (following LMDZ).

Added argument phis to start_init_orog and start_init_dyn, and removed
variable phis of module start_init_orog_m. In etat0 and
start_init_orog, renamed relief to zmea_2d. In start_init_dyn, renamed
psol to ps.

In start_init_orog, renamed relief_hi to relief. No need to set
phis(iim + 1, :) = phis(1, :), already done in grid_noro.

Documentation for massbar out of SVN, in massbar.txt. Documentation
was duplicated in massdair, but not relevant in massdair.

In conflx, no need to initialize pen_[ud] and pde_[ud]. In flxasc,
used intermediary variable fact (following LMDZ).

In grid_noro, added local variable zmea0 for zmea not smoothed and
computed zphi from zmea instead of zmea0 (following LMDZ). This
changes the results of ce0l.

Removed arguments pen_u and pde_d of phytrac and nflxtr, which were
not used.

1 guez 78 module flxbase_m
2    
3     IMPLICIT none
4    
5     contains
6    
7     SUBROUTINE flxbase(ptenh, pqenh, pgeoh, paph, ptu, pqu, plu, ldcum, kcbot, &
8     klab)
9    
10     ! This routine calculates cloud base values (T and Q).
11     ! Input are environmental values of T, q, p, Phi at half levels.
12     ! It returns cloud base values and flags as follows:
13     ! klab = 1 for subcloud levels
14     ! klab = 2 for condensation level
15    
16     ! Lift surface air dry-adiabatically to cloud base
17     ! (non entraining plume, i. e. constant massflux)
18    
19     USE dimphy, ONLY: klev, klon
20     USE flxadjtq_m, ONLY: flxadjtq
21     USE suphec_m, ONLY: rcpd, retv
22    
23     REAL ptenh(klon, klev), pqenh(klon, klev)
24     REAL, intent(in):: pgeoh(klon, klev), paph(klon, klev+1)
25     REAL ptu(klon, klev), pqu(klon, klev), plu(klon, klev)
26     LOGICAL ldcum(klon)
27     INTEGER kcbot(klon), klab(klon, klev)
28    
29     ! Local:
30     LOGICAL llflag(klon)
31     INTEGER i, k, icall, is
32     REAL zbuo, zqold(klon)
33    
34     !----------------------------------------------------------------------
35    
36     ! INITIALIZE VALUES AT LIFTING LEVEL
37     DO i = 1, klon
38     klab(i, klev) = 1
39     kcbot(i) = klev-1
40     ldcum(i) = .FALSE.
41     ENDDO
42    
43     ! DO ASCENT IN SUBCLOUD LAYER,
44     ! CHECK FOR EXISTENCE OF CONDENSATION LEVEL,
45     ! ADJUST T, Q AND L ACCORDINGLY
46     ! CHECK FOR BUOYANCY AND SET FLAGS
47    
48     DO k = klev-1, 2, -1
49     is = 0
50     DO i = 1, klon
51     IF (klab(i, k+1).EQ.1) is = is + 1
52     llflag(i) = .FALSE.
53     IF (klab(i, k+1).EQ.1) llflag(i) = .TRUE.
54     ENDDO
55    
56     IF (is.EQ.0) cycle
57    
58     DO i = 1, klon
59     IF(llflag(i)) THEN
60     pqu(i, k) = pqu(i, k+1)
61     ptu(i, k) = ptu(i, k+1)+(pgeoh(i, k+1)-pgeoh(i, k))/RCPD
62     zbuo = ptu(i, k)*(1.+RETV*pqu(i, k))- &
63     ptenh(i, k)*(1.+RETV*pqenh(i, k))+0.5
64     IF (zbuo.GT.0.) klab(i, k) = 1
65     zqold(i) = pqu(i, k)
66     ENDIF
67     ENDDO
68    
69     icall = 1
70     CALL flxadjtq(paph(:, k), ptu(1, k), pqu(1, k), llflag, icall)
71    
72     DO i = 1, klon
73     IF (llflag(i).AND.pqu(i, k).NE.zqold(i)) THEN
74     klab(i, k) = 2
75     plu(i, k) = plu(i, k) + zqold(i)-pqu(i, k)
76     zbuo = ptu(i, k)*(1.+RETV*pqu(i, k))- &
77     ptenh(i, k)*(1.+RETV*pqenh(i, k))+0.5
78     IF (zbuo.GT.0.) kcbot(i) = k
79     IF (zbuo.GT.0.) ldcum(i) = .TRUE.
80     ENDIF
81     ENDDO
82     end DO
83    
84     END SUBROUTINE flxbase
85    
86     end module flxbase_m

  ViewVC Help
Powered by ViewVC 1.1.21