/[lmdze]/trunk/libf/phylmd/Conflx/flxadjtq.f90
ViewVC logotype

Contents of /trunk/libf/phylmd/Conflx/flxadjtq.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: 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 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