/[lmdze]/trunk/phylmd/tlift.f90
ViewVC logotype

Annotation of /trunk/phylmd/tlift.f90

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3 - (hide annotations)
Wed Feb 27 13:16:39 2008 UTC (16 years, 3 months ago) by guez
Original Path: trunk/libf/phylmd/tlift.f90
File size: 4660 byte(s)
Initial import
1 guez 3 SUBROUTINE TLIFT(P,T,RR,RS,GZ,PLCL,ICB,NK, &
2     TVP,TPK,CLW,ND,NL, &
3     DTVPDT1,DTVPDQ1)
4     !
5     ! From phylmd/tlift.F, v 1.1.1.1 2004/05/19 12:53:08
6    
7     ! Argument NK ajoute (jyg) = Niveau de depart de la
8     ! convection
9     !
10     use YOMCST, only: rg, rcpd, RCPV, rcw, rcs, rv, rd, rlvtt, RLMLT
11    
12     implicit none
13    
14     integer, PARAMETER:: NA=60
15     integer nd, icb, nk, nl
16     real plcl
17     REAL GZ(ND),TPK(ND),CLW(ND)
18     REAL T(ND),RR(ND),RS(ND),TVP(ND),P(ND)
19     REAL DTVPDT1(ND),DTVPDQ1(ND) ! Derivatives of parcel virtual
20     ! temperature wrt T1 and Q1
21     !
22     REAL QI(NA)
23     REAL DTPDT1(NA),DTPDQ1(NA) ! Derivatives of parcel temperature
24     ! wrt T1 and Q1
25    
26     LOGICAL ICE_CONV
27     real gravity, cpd, cpv, cl, ci, CPVMCL, CLMCI, EPS, alv0, alf0, CPP, cpinv
28     real ah0, alv, alf, tg, s, ahg, tc, denom, es, esi, qsat_new, snew
29     integer icb1, i, IMIN, j
30    
31     !--------------------------------------------------------------
32    
33     ! *** ASSIGN VALUES OF THERMODYNAMIC CONSTANTS ***
34     ! on utilise les constantes thermo du Centre Europeen: (SB)
35     !
36     GRAVITY = RG !sb: Pr que gravite ne devienne pas humidite!
37     !
38     CPD = RCPD
39     CPV = RCPV
40     CL = RCW
41     CI = RCS
42     CPVMCL = CL-CPV
43     CLMCI = CL-CI
44     EPS = RD/RV
45     ALV0 = RLVTT
46     ALF0 = RLMLT ! (ALF0 = RLSTT-RLVTT)
47     !
48     !ccccccccccccccccccccc
49     !
50     ! *** CALCULATE CERTAIN PARCEL QUANTITIES, INCLUDING STATIC ENERGY ***
51     !
52     ICB1=MAX(ICB,2)
53     ICB1=MIN(ICB,NL)
54     !
55     !jyg1
56     !C CPP=CPD*(1.-RR(1))+RR(1)*CPV
57     CPP=CPD*(1.-RR(NK))+RR(NK)*CPV
58     !jyg2
59     CPINV=1./CPP
60     !jyg1
61     ! ICB may be below condensation level
62     DO I=1,ICB1
63     CLW(I)=0.0
64     end DO
65     !
66     DO I=NK,ICB1
67     TPK(I)=T(NK)-(GZ(I) - GZ(NK))*CPINV
68     !jyg1
69     !CC TVP(I)=TPK(I)*(1.+RR(NK)/EPS)
70     TVP(I)=TPK(I)*(1.+RR(NK)/EPS-RR(NK))
71     !jyg2
72     DTVPDT1(I) = 1.+RR(NK)/EPS-RR(NK)
73     DTVPDQ1(I) = TPK(I)*(1./EPS-1.)
74     !
75     !jyg2
76    
77     end DO
78    
79     !
80     ! *** FIND LIFTED PARCEL TEMPERATURE AND MIXING RATIO ***
81     !
82     !jyg1
83     !C AH0=(CPD*(1.-RR(1))+CL*RR(1))*T(1)
84     !C $ +RR(1)*(ALV0-CPVMCL*(T(1)-273.15))
85     AH0=(CPD*(1.-RR(NK))+CL*RR(NK))*T(NK) &
86     +RR(NK)*(ALV0-CPVMCL*(T(NK)-273.15)) + GZ(NK)
87     !jyg2
88     !
89     !jyg1
90     IMIN = ICB1
91     ! If ICB is below LCL, start loop at ICB+1
92     IF (PLCL .LT. P(ICB1)) IMIN = MIN(IMIN+1,NL)
93     !
94     DO I=IMIN,NL
95     !jyg2
96     ALV=ALV0-CPVMCL*(T(I)-273.15)
97     ALF=ALF0+CLMCI*(T(I)-273.15)
98    
99     RG=RS(I)
100     TG=T(I)
101     S=CPD*(1.-RR(NK))+CL*RR(NK)+ALV*ALV*RG/(RV*T(I)*T(I))
102     !jyg2
103     S=1./S
104    
105     DO J=1,2
106     !jyg1
107     AHG=CPD*TG+(CL-CPD)*RR(NK)*TG+ALV*RG+GZ(I)
108     !jyg2
109     TG=TG+S*(AH0-AHG)
110     TC=TG-273.15
111     DENOM=243.5+TC
112     DENOM=MAX(DENOM,1.0)
113     !
114     ! FORMULE DE BOLTON POUR PSAT
115     !
116     ES=6.112*EXP(17.67*TC/DENOM)
117     RG=EPS*ES/(P(I)-ES*(1.-EPS))
118    
119    
120     end DO
121    
122     !jyg1
123     TPK(I)=(AH0-GZ(I)-ALV*RG)/(CPD+(CL-CPD)*RR(NK))
124     !jyg2
125    
126     CLW(I)=RR(NK)-RG
127     !jyg2
128     CLW(I)=MAX(0.0,CLW(I))
129     !jyg1
130     TVP(I)=TPK(I)*(1.+RG/EPS-RR(NK))
131     !jyg2
132     !
133     !jyg1 Derivatives
134     !
135     DTPDT1(I) = CPD*S
136     DTPDQ1(I) = ALV*S
137     !
138     DTVPDT1(I) = DTPDT1(I)*(1. + RG/EPS - &
139     RR(NK) + ALV*RG/(RD*TPK(I)) )
140     DTVPDQ1(I) = DTPDQ1(I)*(1. + RG/EPS - &
141     RR(NK) + ALV*RG/(RD*TPK(I)) ) - TPK(I)
142     !
143     !jyg2
144    
145     end DO
146     !
147     ICE_CONV = .FALSE.
148    
149     IF (ICE_CONV) THEN
150     DO I=ICB1,NL
151     IF (T(I).LT.263.15) THEN
152     TG=TPK(I)
153     TC=TPK(I)-273.15
154     DENOM=243.5+TC
155     ES=6.112*EXP(17.67*TC/DENOM)
156     ALV=ALV0-CPVMCL*(T(I)-273.15)
157     ALF=ALF0+CLMCI*(T(I)-273.15)
158    
159     DO J=1,4
160     ESI=EXP(23.33086-(6111.72784/TPK(I))+0.15215*LOG(TPK(I)))
161     QSAT_NEW=EPS*ESI/(P(I)-ESI*(1.-EPS))
162    
163     SNEW= CPD*(1.-RR(NK))+CL*RR(NK) &
164     +ALV*ALV*QSAT_NEW/(RV*TPK(I)*TPK(I))
165     !
166     SNEW=1./SNEW
167     TPK(I)=TG+(ALF*QI(I)+ALV*RG*(1.-(ESI/ES)))*SNEW
168     ENDDO
169     !CC CLW(I)=RR(1)-QSAT_NEW
170     CLW(I)=RR(NK)-QSAT_NEW
171     CLW(I)=MAX(0.0,CLW(I))
172     !jyg1
173     !CC TVP(I)=TPK(I)*(1.+QSAT_NEW/EPS)
174     TVP(I)=TPK(I)*(1.+QSAT_NEW/EPS-RR(NK))
175     !jyg2
176     ELSE
177     CONTINUE
178     ENDIF
179    
180     end DO
181     !
182     ENDIF
183     !
184    
185     !* BK : RAJOUT DE LA TEMPERATURE DES ASCENDANCES
186     !* NON DILUES AU NIVEAU KLEV = ND
187     !* POSONS LE ENVIRON EGAL A CELUI DE KLEV-1
188     TPK(NL+1)=TPK(NL)
189    
190     RG = GRAVITY ! RG redevient la gravite de YOMCST (sb)
191    
192     END SUBROUTINE TLIFT

  ViewVC Help
Powered by ViewVC 1.1.21