/[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

revision 76 by guez, Fri Nov 15 18:45:49 2013 UTC revision 78 by guez, Wed Feb 5 17:51:07 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      REAL zdelta, zcvm5, zldcp, zqsat, zcor
# Line 37  contains Line 39  contains
39         zcond(i) = 0.0         zcond(i) = 0.0
40      ENDDO      ENDDO
41    
42      DO  i =1, klon      DO i = 1, klon
43         IF (ldflag(i)) THEN         IF (ldflag(i)) THEN
44            zdelta = MAX(0.,SIGN(1.,RTT-pt(i)))            zdelta = MAX(0., SIGN(1., RTT-pt(i)))
45            zcvm5 = z5alvcp*(1.-zdelta) + zdelta*z5alscp            zcvm5 = z5alvcp*(1.-zdelta) + zdelta*z5alscp
46            zldcp = zalvdcp*(1.-zdelta) + zdelta*zalsdcp            zldcp = zalvdcp*(1.-zdelta) + zdelta*zalsdcp
47            zqsat = R2ES*FOEEW(pt(i),zdelta) / pp(i)            zqsat = R2ES * FOEEW(pt(i), zdelta) / pp(i)
48            zqsat = MIN(0.5,zqsat)            zqsat = MIN(0.5, zqsat)
49            zcor = 1./(1.-RETV*zqsat)            zcor = 1./(1.-RETV*zqsat)
50            zqsat = zqsat*zcor            zqsat = zqsat*zcor
51            zcond(i) = (pq(i)-zqsat) &            zcond(i) = (pq(i)-zqsat) &
52                 / (1. + FOEDE(pt(i), zdelta, zcvm5, zqsat, zcor))                 / (1. + FOEDE(pt(i), zdelta, zcvm5, zqsat, zcor))
53            IF (kcall.EQ.1) zcond(i) = MAX(zcond(i),0.)            IF (kcall.EQ.1) zcond(i) = MAX(zcond(i), 0.)
54            IF (kcall.EQ.2) zcond(i) = MIN(zcond(i),0.)            IF (kcall.EQ.2) zcond(i) = MIN(zcond(i), 0.)
55            pt(i) = pt(i) + zldcp*zcond(i)            pt(i) = pt(i) + zldcp*zcond(i)
56            pq(i) = pq(i) - zcond(i)            pq(i) = pq(i) - zcond(i)
57         ENDIF         ENDIF
58      end DO      end DO
59    
60      is = 0      is = 0
61      DO i =1, klon      DO i = 1, klon
62         IF (zcond(i).NE.0.) is = is + 1         IF (zcond(i).NE.0.) is = is + 1
63      ENDDO      ENDDO
64      IF (is /= 0) then      IF (is /= 0) then
65         DO  i = 1, klon         DO i = 1, klon
66            IF(ldflag(i).AND.zcond(i).NE.0.) THEN            IF(ldflag(i).AND.zcond(i).NE.0.) THEN
67               zdelta = MAX(0.,SIGN(1.,RTT-pt(i)))               zdelta = MAX(0., SIGN(1., RTT-pt(i)))
68               zcvm5 = z5alvcp*(1.-zdelta) + zdelta*z5alscp               zcvm5 = z5alvcp*(1.-zdelta) + zdelta*z5alscp
69               zldcp = zalvdcp*(1.-zdelta) + zdelta*zalsdcp               zldcp = zalvdcp*(1.-zdelta) + zdelta*zalsdcp
70               zqsat = R2ES* FOEEW(pt(i),zdelta) / pp(i)               zqsat = R2ES* FOEEW(pt(i), zdelta) / pp(i)
71               zqsat = MIN(0.5,zqsat)               zqsat = MIN(0.5, zqsat)
72               zcor = 1./(1.-RETV*zqsat)               zcor = 1./(1.-RETV*zqsat)
73               zqsat = zqsat*zcor               zqsat = zqsat*zcor
74               zcond1 = (pq(i)-zqsat) &               zcond1 = (pq(i)-zqsat) &
75                    / (1. + FOEDE(pt(i),zdelta,zcvm5,zqsat,zcor))                    / (1. + FOEDE(pt(i), zdelta, zcvm5, zqsat, zcor))
76               pt(i) = pt(i) + zldcp*zcond1               pt(i) = pt(i) + zldcp*zcond1
77               pq(i) = pq(i) - zcond1               pq(i) = pq(i) - zcond1
78            ENDIF            ENDIF

Legend:
Removed from v.76  
changed lines
  Added in v.78

  ViewVC Help
Powered by ViewVC 1.1.21