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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 52 - (hide annotations)
Fri Sep 23 12:28:01 2011 UTC (12 years, 8 months ago) by guez
Original Path: trunk/libf/phylmd/Conflx/flxadjtq.f90
File size: 2353 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 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

  ViewVC Help
Powered by ViewVC 1.1.21