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

Contents of /trunk/phylmd/tlift.f90

Parent Directory Parent Directory | Revision Log Revision Log


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

  ViewVC Help
Powered by ViewVC 1.1.21