1 |
SUBROUTINE TLIFT(P,T,RR,RS,GZ,PLCL,ICB,NK, & |
SUBROUTINE TLIFT(P,T,RR,RS,GZ,PLCL,ICB,NK, TVP,TPK,CLW,ND,NL, DTVPDT1,DTVPDQ1) |
2 |
TVP,TPK,CLW,ND,NL, & |
|
|
DTVPDT1,DTVPDQ1) |
|
|
! |
|
3 |
! From phylmd/tlift.F, v 1.1.1.1 2004/05/19 12:53:08 |
! 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 |
! Argument NK ajoute (jyg) = Niveau de depart de la convection |
6 |
! convection |
|
7 |
! |
use YOMCST, only: rcpd, RCPV, rcw, rcs, rv, rd, rlvtt, RLMLT |
|
use YOMCST, only: rg, rcpd, RCPV, rcw, rcs, rv, rd, rlvtt, RLMLT |
|
8 |
|
|
9 |
implicit none |
implicit none |
10 |
|
|
13 |
real plcl |
real plcl |
14 |
REAL GZ(ND),TPK(ND),CLW(ND) |
REAL GZ(ND),TPK(ND),CLW(ND) |
15 |
REAL T(ND),RR(ND),RS(ND),TVP(ND),P(ND) |
REAL T(ND),RR(ND),RS(ND),TVP(ND),P(ND) |
16 |
REAL DTVPDT1(ND),DTVPDQ1(ND) ! Derivatives of parcel virtual |
|
17 |
! temperature wrt T1 and Q1 |
REAL DTVPDT1(ND),DTVPDQ1(ND) |
18 |
! |
! Derivatives of parcel virtual temperature with regard to T1 and Q1 |
19 |
|
|
20 |
REAL QI(NA) |
REAL QI(NA) |
21 |
REAL DTPDT1(NA),DTPDQ1(NA) ! Derivatives of parcel temperature |
|
22 |
! wrt T1 and Q1 |
REAL DTPDT1(NA),DTPDQ1(NA) |
23 |
|
! Derivatives of parcel temperature with regard to T1 and Q1 |
24 |
|
|
25 |
LOGICAL ICE_CONV |
LOGICAL ICE_CONV |
26 |
real gravity, cpd, cpv, cl, ci, CPVMCL, CLMCI, EPS, alv0, alf0, CPP, cpinv |
real gravity, cpd, cpv, cl, ci, CPVMCL, CLMCI, EPS, alv0, alf0, CPP, cpinv |
29 |
|
|
30 |
!-------------------------------------------------------------- |
!-------------------------------------------------------------- |
31 |
|
|
32 |
! *** ASSIGN VALUES OF THERMODYNAMIC CONSTANTS *** |
! *** ASSIGN VALUES OF THERMODYNAMIC CONSTANTS *** |
33 |
! on utilise les constantes thermo du Centre Europeen: (SB) |
! on utilise les constantes thermo du Centre Europeen: (SB) |
34 |
! |
|
|
GRAVITY = RG !sb: Pr que gravite ne devienne pas humidite! |
|
|
! |
|
35 |
CPD = RCPD |
CPD = RCPD |
36 |
CPV = RCPV |
CPV = RCPV |
37 |
CL = RCW |
CL = RCW |
41 |
EPS = RD/RV |
EPS = RD/RV |
42 |
ALV0 = RLVTT |
ALV0 = RLVTT |
43 |
ALF0 = RLMLT ! (ALF0 = RLSTT-RLVTT) |
ALF0 = RLMLT ! (ALF0 = RLSTT-RLVTT) |
44 |
! |
|
45 |
!ccccccccccccccccccccc |
! *** CALCULATE CERTAIN PARCEL QUANTITIES, INCLUDING STATIC ENERGY *** |
46 |
! |
|
|
! *** CALCULATE CERTAIN PARCEL QUANTITIES, INCLUDING STATIC ENERGY *** |
|
|
! |
|
|
ICB1=MAX(ICB,2) |
|
47 |
ICB1=MIN(ICB,NL) |
ICB1=MIN(ICB,NL) |
48 |
! |
|
|
!jyg1 |
|
|
!C CPP=CPD*(1.-RR(1))+RR(1)*CPV |
|
49 |
CPP=CPD*(1.-RR(NK))+RR(NK)*CPV |
CPP=CPD*(1.-RR(NK))+RR(NK)*CPV |
|
!jyg2 |
|
50 |
CPINV=1./CPP |
CPINV=1./CPP |
51 |
!jyg1 |
|
52 |
! ICB may be below condensation level |
! ICB may be below condensation level |
53 |
DO I=1,ICB1 |
DO I=1,ICB1 |
54 |
CLW(I)=0.0 |
CLW(I)=0.0 |
55 |
end DO |
end DO |
56 |
! |
|
57 |
DO I=NK,ICB1 |
DO I=NK,ICB1 |
58 |
TPK(I)=T(NK)-(GZ(I) - GZ(NK))*CPINV |
TPK(I)=T(NK)-(GZ(I) - GZ(NK))*CPINV |
|
!jyg1 |
|
|
!CC TVP(I)=TPK(I)*(1.+RR(NK)/EPS) |
|
59 |
TVP(I)=TPK(I)*(1.+RR(NK)/EPS-RR(NK)) |
TVP(I)=TPK(I)*(1.+RR(NK)/EPS-RR(NK)) |
|
!jyg2 |
|
60 |
DTVPDT1(I) = 1.+RR(NK)/EPS-RR(NK) |
DTVPDT1(I) = 1.+RR(NK)/EPS-RR(NK) |
61 |
DTVPDQ1(I) = TPK(I)*(1./EPS-1.) |
DTVPDQ1(I) = TPK(I)*(1./EPS-1.) |
|
! |
|
|
!jyg2 |
|
|
|
|
62 |
end DO |
end DO |
63 |
|
|
|
! |
|
64 |
! *** FIND LIFTED PARCEL TEMPERATURE AND MIXING RATIO *** |
! *** FIND LIFTED PARCEL TEMPERATURE AND MIXING RATIO *** |
65 |
! |
|
|
!jyg1 |
|
|
!C AH0=(CPD*(1.-RR(1))+CL*RR(1))*T(1) |
|
|
!C $ +RR(1)*(ALV0-CPVMCL*(T(1)-273.15)) |
|
66 |
AH0=(CPD*(1.-RR(NK))+CL*RR(NK))*T(NK) & |
AH0=(CPD*(1.-RR(NK))+CL*RR(NK))*T(NK) & |
67 |
+RR(NK)*(ALV0-CPVMCL*(T(NK)-273.15)) + GZ(NK) |
+RR(NK)*(ALV0-CPVMCL*(T(NK)-273.15)) + GZ(NK) |
|
!jyg2 |
|
|
! |
|
|
!jyg1 |
|
68 |
IMIN = ICB1 |
IMIN = ICB1 |
69 |
! If ICB is below LCL, start loop at ICB+1 |
! If ICB is below LCL, start loop at ICB+1 |
70 |
IF (PLCL .LT. P(ICB1)) IMIN = MIN(IMIN+1,NL) |
IF (PLCL .LT. P(ICB1)) IMIN = MIN(IMIN+1,NL) |
71 |
! |
|
72 |
DO I=IMIN,NL |
DO I=IMIN,NL |
|
!jyg2 |
|
73 |
ALV=ALV0-CPVMCL*(T(I)-273.15) |
ALV=ALV0-CPVMCL*(T(I)-273.15) |
74 |
ALF=ALF0+CLMCI*(T(I)-273.15) |
ALF=ALF0+CLMCI*(T(I)-273.15) |
75 |
|
|
76 |
RG=RS(I) |
GRAVITY=RS(I) |
77 |
TG=T(I) |
TG=T(I) |
78 |
S=CPD*(1.-RR(NK))+CL*RR(NK)+ALV*ALV*RG/(RV*T(I)*T(I)) |
S=CPD*(1.-RR(NK))+CL*RR(NK)+ALV*ALV*GRAVITY/(RV*T(I)*T(I)) |
79 |
!jyg2 |
|
80 |
S=1./S |
S=1./S |
81 |
|
|
82 |
DO J=1,2 |
DO J=1,2 |
83 |
!jyg1 |
AHG=CPD*TG+(CL-CPD)*RR(NK)*TG+ALV*GRAVITY+GZ(I) |
84 |
AHG=CPD*TG+(CL-CPD)*RR(NK)*TG+ALV*RG+GZ(I) |
|
|
!jyg2 |
|
85 |
TG=TG+S*(AH0-AHG) |
TG=TG+S*(AH0-AHG) |
86 |
TC=TG-273.15 |
TC=TG-273.15 |
87 |
DENOM=243.5+TC |
DENOM=243.5+TC |
88 |
DENOM=MAX(DENOM,1.0) |
DENOM=MAX(DENOM,1.0) |
89 |
! |
|
90 |
! FORMULE DE BOLTON POUR PSAT |
! FORMULE DE BOLTON POUR PSAT |
|
! |
|
91 |
ES=6.112*EXP(17.67*TC/DENOM) |
ES=6.112*EXP(17.67*TC/DENOM) |
92 |
RG=EPS*ES/(P(I)-ES*(1.-EPS)) |
GRAVITY=EPS*ES/(P(I)-ES*(1.-EPS)) |
|
|
|
|
|
|
93 |
end DO |
end DO |
94 |
|
|
95 |
!jyg1 |
TPK(I)=(AH0-GZ(I)-ALV*GRAVITY)/(CPD+(CL-CPD)*RR(NK)) |
96 |
TPK(I)=(AH0-GZ(I)-ALV*RG)/(CPD+(CL-CPD)*RR(NK)) |
CLW(I)=RR(NK)-GRAVITY |
|
!jyg2 |
|
|
|
|
|
CLW(I)=RR(NK)-RG |
|
|
!jyg2 |
|
97 |
CLW(I)=MAX(0.0,CLW(I)) |
CLW(I)=MAX(0.0,CLW(I)) |
98 |
!jyg1 |
TVP(I)=TPK(I)*(1.+GRAVITY/EPS-RR(NK)) |
99 |
TVP(I)=TPK(I)*(1.+RG/EPS-RR(NK)) |
|
|
!jyg2 |
|
|
! |
|
100 |
!jyg1 Derivatives |
!jyg1 Derivatives |
|
! |
|
101 |
DTPDT1(I) = CPD*S |
DTPDT1(I) = CPD*S |
102 |
DTPDQ1(I) = ALV*S |
DTPDQ1(I) = ALV*S |
|
! |
|
|
DTVPDT1(I) = DTPDT1(I)*(1. + RG/EPS - & |
|
|
RR(NK) + ALV*RG/(RD*TPK(I)) ) |
|
|
DTVPDQ1(I) = DTPDQ1(I)*(1. + RG/EPS - & |
|
|
RR(NK) + ALV*RG/(RD*TPK(I)) ) - TPK(I) |
|
|
! |
|
|
!jyg2 |
|
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 |
end DO |
109 |
! |
|
110 |
ICE_CONV = .FALSE. |
ICE_CONV = .FALSE. |
111 |
|
|
112 |
IF (ICE_CONV) THEN |
IF (ICE_CONV) THEN |
125 |
|
|
126 |
SNEW= CPD*(1.-RR(NK))+CL*RR(NK) & |
SNEW= CPD*(1.-RR(NK))+CL*RR(NK) & |
127 |
+ALV*ALV*QSAT_NEW/(RV*TPK(I)*TPK(I)) |
+ALV*ALV*QSAT_NEW/(RV*TPK(I)*TPK(I)) |
128 |
! |
|
129 |
SNEW=1./SNEW |
SNEW=1./SNEW |
130 |
TPK(I)=TG+(ALF*QI(I)+ALV*RG*(1.-(ESI/ES)))*SNEW |
TPK(I)=TG+(ALF*QI(I)+ALV*GRAVITY*(1.-(ESI/ES)))*SNEW |
131 |
ENDDO |
ENDDO |
|
!CC CLW(I)=RR(1)-QSAT_NEW |
|
132 |
CLW(I)=RR(NK)-QSAT_NEW |
CLW(I)=RR(NK)-QSAT_NEW |
133 |
CLW(I)=MAX(0.0,CLW(I)) |
CLW(I)=MAX(0.0,CLW(I)) |
|
!jyg1 |
|
|
!CC TVP(I)=TPK(I)*(1.+QSAT_NEW/EPS) |
|
134 |
TVP(I)=TPK(I)*(1.+QSAT_NEW/EPS-RR(NK)) |
TVP(I)=TPK(I)*(1.+QSAT_NEW/EPS-RR(NK)) |
|
!jyg2 |
|
|
ELSE |
|
|
CONTINUE |
|
135 |
ENDIF |
ENDIF |
|
|
|
136 |
end DO |
end DO |
|
! |
|
137 |
ENDIF |
ENDIF |
|
! |
|
138 |
|
|
139 |
!* BK : RAJOUT DE LA TEMPERATURE DES ASCENDANCES |
!* BK : RAJOUT DE LA TEMPERATURE DES ASCENDANCES |
140 |
!* NON DILUES AU NIVEAU KLEV = ND |
!* NON DILUES AU NIVEAU KLEV = ND |
141 |
!* POSONS LE ENVIRON EGAL A CELUI DE KLEV-1 |
!* POSONS LE ENVIRON EGAL A CELUI DE KLEV-1 |
142 |
TPK(NL+1)=TPK(NL) |
TPK(NL+1)=TPK(NL) |
143 |
|
|
|
RG = GRAVITY ! RG redevient la gravite de YOMCST (sb) |
|
|
|
|
144 |
END SUBROUTINE TLIFT |
END SUBROUTINE TLIFT |