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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 76 - (hide annotations)
Fri Nov 15 18:45:49 2013 UTC (10 years, 6 months ago) by guez
Original Path: trunk/phylmd/Conflx/flxadjtq.f90
File size: 2427 byte(s)
Moved everything out of libf.
1 guez 70 module flxadjtq_m
2 guez 52
3 guez 70 IMPLICIT none
4 guez 52
5 guez 70 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