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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 76 - (hide annotations)
Fri Nov 15 18:45:49 2013 UTC (10 years, 7 months ago) by guez
Original Path: trunk/phylmd/Conflx/flxddraf.f90
File size: 3948 byte(s)
Moved everything out of libf.
1 guez 52 SUBROUTINE flxddraf(ptenh, pqenh, pgeoh, paph, prfl, &
2     ptd, pqd, pmfd, pmfds, pmfdq, pdmfdp, &
3     lddraf, pen_d, pde_d)
4     use dimens_m
5     use dimphy
6 guez 70 use flxadjtq_m, only: flxadjtq
7 guez 52 use SUPHEC_M
8     use yoethf_m
9     use yoecumf
10     IMPLICIT none
11     !
12     !----------------------------------------------------------------------
13     ! THIS ROUTINE CALCULATES CUMULUS DOWNDRAFT DESCENT
14     !
15     ! TO PRODUCE THE VERTICAL PROFILES FOR CUMULUS DOWNDRAFTS
16     ! (I.E. T,Q,U AND V AND FLUXES)
17     !
18     ! INPUT IS T,Q,P,PHI,U,V AT HALF LEVELS.
19     ! IT RETURNS FLUXES OF S,Q AND EVAPORATION RATE
20     ! AND U,V AT LEVELS WHERE DOWNDRAFT OCCURS
21     !
22     ! CALCULATE MOIST DESCENT FOR ENTRAINING/DETRAINING PLUME BY
23     ! A) MOVING AIR DRY-ADIABATICALLY TO NEXT LEVEL BELOW AND
24     ! B) CORRECTING FOR EVAPORATION TO OBTAIN SATURATED STATE.
25     !
26     !----------------------------------------------------------------------
27     !
28     REAL ptenh(klon,klev), pqenh(klon,klev)
29     REAL pgeoh(klon,klev), paph(klon,klev+1)
30     !
31     REAL ptd(klon,klev), pqd(klon,klev)
32     REAL pmfd(klon,klev), pmfds(klon,klev), pmfdq(klon,klev)
33     REAL pdmfdp(klon,klev)
34     REAL prfl(klon)
35     LOGICAL lddraf(klon)
36     !
37     REAL pen_d(klon,klev), pde_d(klon,klev), zcond(klon)
38     LOGICAL llo2(klon), llo1
39     INTEGER i, k, is, icall, itopde
40     REAL zentr, zseen, zqeen, zsdde, zqdde, zmfdsk, zmfdqk, zdmfdp
41     REAL zbuo
42     !----------------------------------------------------------------------
43     ! CALCULATE MOIST DESCENT FOR CUMULUS DOWNDRAFT BY
44     ! (A) CALCULATING ENTRAINMENT RATES, ASSUMING
45     ! LINEAR DECREASE OF MASSFLUX IN PBL
46     ! (B) DOING MOIST DESCENT - EVAPORATIVE COOLING
47     ! AND MOISTENING IS CALCULATED IN *flxadjtq*
48     ! (C) CHECKING FOR NEGATIVE BUOYANCY AND
49     ! SPECIFYING FINAL T,Q,U,V AND DOWNWARD FLUXES
50     !
51     DO 180 k = 3, klev
52     !
53     is = 0
54     DO i = 1, klon
55     llo2(i)=lddraf(i).AND.pmfd(i,k-1).LT.0.
56     IF (llo2(i)) is = is + 1
57     ENDDO
58     IF (is.EQ.0) GOTO 180
59     !
60     DO i = 1, klon
61     IF (llo2(i)) THEN
62     zentr = ENTRDD*pmfd(i,k-1)*RD*ptenh(i,k-1)/ &
63     (RG*paph(i,k-1))*(paph(i,k)-paph(i,k-1))
64     pen_d(i,k) = zentr
65     pde_d(i,k) = zentr
66     ENDIF
67     ENDDO
68     !
69     itopde = klev-2
70     IF (k.GT.itopde) THEN
71     DO i = 1, klon
72     IF (llo2(i)) THEN
73     pen_d(i,k)=0.
74     pde_d(i,k)=pmfd(i,itopde)* &
75     (paph(i,k)-paph(i,k-1))/(paph(i,klev+1)-paph(i,itopde))
76     ENDIF
77     ENDDO
78     ENDIF
79     !
80     DO i = 1, klon
81     IF (llo2(i)) THEN
82     pmfd(i,k) = pmfd(i,k-1)+pen_d(i,k)-pde_d(i,k)
83     zseen = (RCPD*ptenh(i,k-1)+pgeoh(i,k-1))*pen_d(i,k)
84     zqeen = pqenh(i,k-1)*pen_d(i,k)
85     zsdde = (RCPD*ptd(i,k-1)+pgeoh(i,k-1))*pde_d(i,k)
86     zqdde = pqd(i,k-1)*pde_d(i,k)
87     zmfdsk = pmfds(i,k-1)+zseen-zsdde
88     zmfdqk = pmfdq(i,k-1)+zqeen-zqdde
89     pqd(i,k) = zmfdqk*(1./MIN(-CMFCMIN,pmfd(i,k)))
90     ptd(i,k) = (zmfdsk*(1./MIN(-CMFCMIN,pmfd(i,k)))- &
91     pgeoh(i,k))/RCPD
92     ptd(i,k) = MIN(400.,ptd(i,k))
93     ptd(i,k) = MAX(100.,ptd(i,k))
94     zcond(i) = pqd(i,k)
95     ENDIF
96     ENDDO
97     !
98     icall = 2
99     CALL flxadjtq(paph(1,k), ptd(1,k), pqd(1,k), llo2, icall)
100     !
101     DO i = 1, klon
102     IF (llo2(i)) THEN
103     zcond(i) = zcond(i)-pqd(i,k)
104     zbuo = ptd(i,k)*(1.+RETV *pqd(i,k))- &
105     ptenh(i,k)*(1.+RETV *pqenh(i,k))
106     llo1 = zbuo.LT.0..AND.(prfl(i)-pmfd(i,k)*zcond(i).GT.0.)
107     IF (.not.llo1) pmfd(i,k) = 0.0
108     pmfds(i,k) = (RCPD*ptd(i,k)+pgeoh(i,k))*pmfd(i,k)
109     pmfdq(i,k) = pqd(i,k)*pmfd(i,k)
110     zdmfdp = -pmfd(i,k)*zcond(i)
111     pdmfdp(i,k-1) = zdmfdp
112     prfl(i) = prfl(i)+zdmfdp
113     ENDIF
114     ENDDO
115     !
116     180 CONTINUE
117     RETURN
118     END

  ViewVC Help
Powered by ViewVC 1.1.21