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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 70 - (show annotations)
Mon Jun 24 15:39:52 2013 UTC (10 years, 10 months ago) by guez
Original Path: trunk/libf/phylmd/Conflx/flxadjtq.f90
File size: 2427 byte(s)
In procedure, "addfi" access directly the module variable "dtphys"
instead of going through an argument.

In "conflx", do not create a local variable for temperature with
reversed order of vertical levels. Instead, give an actual argument
with reversed order in "physiq".

Changed names of variables "rmd" and "rmv" from module "suphec_m" to
"md" and "mv".

In "hgardfou", print only the first temperature out of range found.

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

  ViewVC Help
Powered by ViewVC 1.1.21