1 |
guez |
52 |
SUBROUTINE flxadjtq(pp, pt, pq, ldflag, kcall) |
2 |
|
|
use dimens_m |
3 |
|
|
use dimphy |
4 |
|
|
use SUPHEC_M |
5 |
|
|
use yoethf_m |
6 |
|
|
use fcttre |
7 |
|
|
IMPLICIT none |
8 |
|
|
!====================================================================== |
9 |
|
|
! Objet: ajustement entre T et Q |
10 |
|
|
!====================================================================== |
11 |
|
|
! NOTE: INPUT PARAMETER kcall DEFINES CALCULATION AS |
12 |
|
|
! kcall=0 ENV. T AND QS IN*CUINI* |
13 |
|
|
! kcall=1 CONDENSATION IN UPDRAFTS (E.G. CUBASE, CUASC) |
14 |
|
|
! kcall=2 EVAPORATION IN DOWNDRAFTS (E.G. CUDLFS,CUDDRAF) |
15 |
|
|
! |
16 |
|
|
! |
17 |
|
|
REAL pt(klon), pq(klon), pp(klon) |
18 |
|
|
LOGICAL ldflag(klon) |
19 |
|
|
INTEGER kcall |
20 |
|
|
! |
21 |
|
|
REAL zcond(klon), zcond1 |
22 |
|
|
REAL Z5alvcp, z5alscp, zalvdcp, zalsdcp |
23 |
|
|
REAL zdelta, zcvm5, zldcp, zqsat, zcor |
24 |
|
|
INTEGER is, i |
25 |
|
|
! |
26 |
|
|
z5alvcp = r5les*RLVTT/RCPD |
27 |
|
|
z5alscp = r5ies*RLSTT/RCPD |
28 |
|
|
zalvdcp = rlvtt/RCPD |
29 |
|
|
zalsdcp = rlstt/RCPD |
30 |
|
|
! |
31 |
|
|
|
32 |
|
|
DO i = 1, klon |
33 |
|
|
zcond(i) = 0.0 |
34 |
|
|
ENDDO |
35 |
|
|
|
36 |
|
|
DO 210 i =1, klon |
37 |
|
|
IF (ldflag(i)) THEN |
38 |
|
|
zdelta = MAX(0.,SIGN(1.,RTT-pt(i))) |
39 |
|
|
zcvm5 = z5alvcp*(1.-zdelta) + zdelta*z5alscp |
40 |
|
|
zldcp = zalvdcp*(1.-zdelta) + zdelta*zalsdcp |
41 |
|
|
zqsat = R2ES*FOEEW(pt(i),zdelta) / pp(i) |
42 |
|
|
zqsat = MIN(0.5,zqsat) |
43 |
|
|
zcor = 1./(1.-RETV*zqsat) |
44 |
|
|
zqsat = zqsat*zcor |
45 |
|
|
zcond(i) = (pq(i)-zqsat) & |
46 |
|
|
/ (1. + FOEDE(pt(i), zdelta, zcvm5, zqsat, zcor)) |
47 |
|
|
IF (kcall.EQ.1) zcond(i) = MAX(zcond(i),0.) |
48 |
|
|
IF (kcall.EQ.2) zcond(i) = MIN(zcond(i),0.) |
49 |
|
|
pt(i) = pt(i) + zldcp*zcond(i) |
50 |
|
|
pq(i) = pq(i) - zcond(i) |
51 |
|
|
ENDIF |
52 |
|
|
210 CONTINUE |
53 |
|
|
! |
54 |
|
|
is = 0 |
55 |
|
|
DO i =1, klon |
56 |
|
|
IF (zcond(i).NE.0.) is = is + 1 |
57 |
|
|
ENDDO |
58 |
|
|
IF (is.EQ.0) GOTO 230 |
59 |
|
|
! |
60 |
|
|
DO 220 i = 1, klon |
61 |
|
|
IF(ldflag(i).AND.zcond(i).NE.0.) THEN |
62 |
|
|
zdelta = MAX(0.,SIGN(1.,RTT-pt(i))) |
63 |
|
|
zcvm5 = z5alvcp*(1.-zdelta) + zdelta*z5alscp |
64 |
|
|
zldcp = zalvdcp*(1.-zdelta) + zdelta*zalsdcp |
65 |
|
|
zqsat = R2ES* FOEEW(pt(i),zdelta) / pp(i) |
66 |
|
|
zqsat = MIN(0.5,zqsat) |
67 |
|
|
zcor = 1./(1.-RETV*zqsat) |
68 |
|
|
zqsat = zqsat*zcor |
69 |
|
|
zcond1 = (pq(i)-zqsat) & |
70 |
|
|
/ (1. + FOEDE(pt(i),zdelta,zcvm5,zqsat,zcor)) |
71 |
|
|
pt(i) = pt(i) + zldcp*zcond1 |
72 |
|
|
pq(i) = pq(i) - zcond1 |
73 |
|
|
ENDIF |
74 |
|
|
220 CONTINUE |
75 |
|
|
! |
76 |
|
|
230 CONTINUE |
77 |
|
|
RETURN |
78 |
|
|
END |