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

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

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

trunk/libf/phylmd/Conflx/flxadjtq.f90 revision 70 by guez, Mon Jun 24 15:39:52 2013 UTC trunk/phylmd/Conflx/flxadjtq.f revision 103 by guez, Fri Aug 29 13:00:05 2014 UTC
# Line 6  contains Line 6  contains
6    
7    SUBROUTINE flxadjtq(pp, pt, pq, ldflag, kcall)    SUBROUTINE flxadjtq(pp, pt, pq, ldflag, kcall)
8    
9      ! Objet: ajustement entre T et Q      ! Objet : ajustement entre T et Q
10    
11      USE dimphy, ONLY: klon      USE dimphy, ONLY: klon
12        USE fcttre, ONLY: foede, foeew
13      USE suphec_m, ONLY: rcpd, retv, rlstt, rlvtt, rtt      USE suphec_m, ONLY: rcpd, retv, rlstt, rlvtt, rtt
14      USE yoethf_m, ONLY: r2es, r5ies, r5les      USE yoethf_m, ONLY: r2es, r5ies, r5les
     USE fcttre, ONLY: foede, foeew  
15    
16      REAL pt(klon), pq(klon), pp(klon)      REAL, intent(in):: pp(klon)
17      LOGICAL ldflag(klon)      real pt(klon), pq(klon)
18      INTEGER kcall      LOGICAL, intent(in):: ldflag(klon)
19      ! NOTE: INPUT PARAMETER kcall DEFINES CALCULATION AS      INTEGER, intent(in):: kcall
20      !        kcall=0    ENV. T AND QS IN*CUINI*      ! Defines calculation as:
21      !        kcall=1  CONDENSATION IN UPDRAFTS  (E.G. CUBASE, CUASC)      ! kcall = 0 env. T AND QS IN*CUINI*
22      !        kcall=2  EVAPORATION IN DOWNDRAFTS (E.G. CUDLFS,CUDDRAF)      ! kcall = 1 condensation in updrafts (e.g. cubase, cuasc)
23        ! kcall = 2 evaporation in downdrafts (e.g. cudlfs, cuddraf)
24    
25        ! Local:
26      REAL zcond(klon), zcond1      REAL zcond(klon), zcond1
27      REAL Z5alvcp, z5alscp, zalvdcp, zalsdcp      REAL Z5alvcp, z5alscp, zalvdcp, zalsdcp
28      REAL zdelta, zcvm5, zldcp, zqsat, zcor      logical zdelta
29        real zcvm5, zldcp, zqsat, zcor
30      INTEGER is, i      INTEGER is, i
31    
32      !---------------------------------------------------------------------      !---------------------------------------------------------------------
# Line 37  contains Line 40  contains
40         zcond(i) = 0.0         zcond(i) = 0.0
41      ENDDO      ENDDO
42    
43      DO  i =1, klon      DO i = 1, klon
44         IF (ldflag(i)) THEN         IF (ldflag(i)) THEN
45            zdelta = MAX(0.,SIGN(1.,RTT-pt(i)))            zdelta = RTT >= pt(i)
46            zcvm5 = z5alvcp*(1.-zdelta) + zdelta*z5alscp            zcvm5 = merge(z5alscp, z5alvcp, zdelta)
47            zldcp = zalvdcp*(1.-zdelta) + zdelta*zalsdcp            zldcp = merge(zalsdcp, zalvdcp, zdelta)
48            zqsat = R2ES*FOEEW(pt(i),zdelta) / pp(i)            zqsat = R2ES * FOEEW(pt(i), zdelta) / pp(i)
49            zqsat = MIN(0.5,zqsat)            zqsat = MIN(0.5, zqsat)
50            zcor = 1./(1.-RETV*zqsat)            zcor = 1./(1.-RETV*zqsat)
51            zqsat = zqsat*zcor            zqsat = zqsat*zcor
52            zcond(i) = (pq(i)-zqsat) &            zcond(i) = (pq(i)-zqsat) &
53                 / (1. + FOEDE(pt(i), zdelta, zcvm5, zqsat, zcor))                 / (1. + FOEDE(pt(i), zdelta, zcvm5, zqsat, zcor))
54            IF (kcall.EQ.1) zcond(i) = MAX(zcond(i),0.)            IF (kcall.EQ.1) zcond(i) = MAX(zcond(i), 0.)
55            IF (kcall.EQ.2) zcond(i) = MIN(zcond(i),0.)            IF (kcall.EQ.2) zcond(i) = MIN(zcond(i), 0.)
56            pt(i) = pt(i) + zldcp*zcond(i)            pt(i) = pt(i) + zldcp*zcond(i)
57            pq(i) = pq(i) - zcond(i)            pq(i) = pq(i) - zcond(i)
58         ENDIF         ENDIF
59      end DO      end DO
60    
61      is = 0      is = 0
62      DO i =1, klon      DO i = 1, klon
63         IF (zcond(i).NE.0.) is = is + 1         IF (zcond(i).NE.0.) is = is + 1
64      ENDDO      ENDDO
65      IF (is /= 0) then      IF (is /= 0) then
66         DO  i = 1, klon         DO i = 1, klon
67            IF(ldflag(i).AND.zcond(i).NE.0.) THEN            IF(ldflag(i).AND.zcond(i).NE.0.) THEN
68               zdelta = MAX(0.,SIGN(1.,RTT-pt(i)))               zdelta = RTT >= pt(i)
69               zcvm5 = z5alvcp*(1.-zdelta) + zdelta*z5alscp               zcvm5 = merge(z5alscp, z5alvcp, zdelta)
70               zldcp = zalvdcp*(1.-zdelta) + zdelta*zalsdcp               zldcp = merge(zalsdcp, zalvdcp, zdelta)
71               zqsat = R2ES* FOEEW(pt(i),zdelta) / pp(i)               zqsat = R2ES* FOEEW(pt(i), zdelta) / pp(i)
72               zqsat = MIN(0.5,zqsat)               zqsat = MIN(0.5, zqsat)
73               zcor = 1./(1.-RETV*zqsat)               zcor = 1./(1.-RETV*zqsat)
74               zqsat = zqsat*zcor               zqsat = zqsat*zcor
75               zcond1 = (pq(i)-zqsat) &               zcond1 = (pq(i)-zqsat) &
76                    / (1. + FOEDE(pt(i),zdelta,zcvm5,zqsat,zcor))                    / (1. + FOEDE(pt(i), zdelta, zcvm5, zqsat, zcor))
77               pt(i) = pt(i) + zldcp*zcond1               pt(i) = pt(i) + zldcp*zcond1
78               pq(i) = pq(i) - zcond1               pq(i) = pq(i) - zcond1
79            ENDIF            ENDIF

Legend:
Removed from v.70  
changed lines
  Added in v.103

  ViewVC Help
Powered by ViewVC 1.1.21