Changeset 1992 for LMDZ5/trunk/libf/phylmd/tlift.F90
- Timestamp:
- Mar 5, 2014, 2:19:12 PM (11 years ago)
- File:
-
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
LMDZ5/trunk/libf/phylmd/tlift.F90
r1988 r1992 1 ! 1 2 2 ! $Header$ 3 ! 4 SUBROUTINE TLIFT(P,T,RR,RS,GZ,PLCL,ICB,NK, 5 . TVP,TPK,CLW,ND,NL, 6 . DTVPDT1,DTVPDQ1) 7 C 8 C Argument NK ajoute (jyg) = Niveau de depart de la 9 C convection 10 C 11 PARAMETER (NA=60) 12 REAL GZ(ND),TPK(ND),CLW(ND) 13 REAL T(ND),RR(ND),RS(ND),TVP(ND),P(ND) 14 REAL DTVPDT1(ND),DTVPDQ1(ND) ! Derivatives of parcel virtual 15 C temperature wrt T1 and Q1 16 C 17 REAL CLW_NEW(NA),QI(NA) 18 REAL DTPDT1(NA),DTPDQ1(NA) ! Derivatives of parcel temperature 19 C wrt T1 and Q1 20 21 C 22 LOGICAL ICE_CONV 23 C 24 C *** ASSIGN VALUES OF THERMODYNAMIC CONSTANTS *** 25 C 26 c sb CPD=1005.7 27 c sb CPV=1870.0 28 c sb CL=4190.0 29 c sb CPVMCL=2320.0 30 c sb RV=461.5 31 c sb RD=287.04 32 c sb EPS=RD/RV 33 c sb ALV0=2.501E6 34 ccccccccccccccccccccccc 35 c constantes coherentes avec le modele du Centre Europeen 36 c sb RD = 1000.0 * 1.380658E-23 * 6.0221367E+23 / 28.9644 37 c sb RV = 1000.0 * 1.380658E-23 * 6.0221367E+23 / 18.0153 38 c sb CPD = 3.5 * RD 39 c sb CPV = 4.0 * RV 40 c sb CL = 4218.0 41 c sb CI=2090.0 42 c sb CPVMCL=CL-CPV 43 c sb CLMCI=CL-CI 44 c sb EPS=RD/RV 45 c sb ALV0=2.5008E+06 46 c sb ALF0=3.34E+05 47 48 cccccccccccc 49 c on utilise les constantes thermo du Centre Europeen: (SB) 50 c 51 #include "YOMCST.h" 52 GRAVITY = RG !sb: Pr que gravite ne devienne pas humidite! 53 c 54 CPD = RCPD 55 CPV = RCPV 56 CL = RCW 57 CI = RCS 58 CPVMCL = CL-CPV 59 CLMCI = CL-CI 60 EPS = RD/RV 61 ALV0 = RLVTT 62 ALF0 = RLMLT ! (ALF0 = RLSTT-RLVTT) 63 c 64 cccccccccccccccccccccc 65 C 66 C *** CALCULATE CERTAIN PARCEL QUANTITIES, INCLUDING STATIC ENERGY *** 67 C 68 ICB1=MAX(ICB,2) 69 ICB1=MIN(ICB,NL) 70 C 71 Cjyg1 72 CC CPP=CPD*(1.-RR(1))+RR(1)*CPV 73 CPP=CPD*(1.-RR(NK))+RR(NK)*CPV 74 Cjyg2 75 CPINV=1./CPP 76 Cjyg1 77 C ICB may be below condensation level 78 CCC DO 100 I=1,ICB1-1 79 CCC TPK(I)=T(1)-GZ(I)*CPINV 80 CCC TVP(I)=TPK(I)*(1.+RR(1)/EPS) 81 DO 50 I=1,ICB1 82 CLW(I)=0.0 83 50 CONTINUE 84 C 85 DO 100 I=NK,ICB1 86 TPK(I)=T(NK)-(GZ(I) - GZ(NK))*CPINV 87 Cjyg1 88 CCC TVP(I)=TPK(I)*(1.+RR(NK)/EPS) 89 TVP(I)=TPK(I)*(1.+RR(NK)/EPS-RR(NK)) 90 Cjyg2 91 DTVPDT1(I) = 1.+RR(NK)/EPS-RR(NK) 92 DTVPDQ1(I) = TPK(I)*(1./EPS-1.) 93 C 94 Cjyg2 95 96 100 CONTINUE 97 98 C 99 C *** FIND LIFTED PARCEL TEMPERATURE AND MIXING RATIO *** 100 C 101 Cjyg1 102 CC AH0=(CPD*(1.-RR(1))+CL*RR(1))*T(1) 103 CC $ +RR(1)*(ALV0-CPVMCL*(T(1)-273.15)) 104 AH0=(CPD*(1.-RR(NK))+CL*RR(NK))*T(NK) 105 $ +RR(NK)*(ALV0-CPVMCL*(T(NK)-273.15)) + GZ(NK) 106 Cjyg2 107 C 108 Cjyg1 109 IMIN = ICB1 110 C If ICB is below LCL, start loop at ICB+1 111 IF (PLCL .LT. P(ICB1)) IMIN = MIN(IMIN+1,NL) 112 C 113 CCC DO 300 I=ICB1,NL 114 DO 300 I=IMIN,NL 115 Cjyg2 116 ALV=ALV0-CPVMCL*(T(I)-273.15) 117 ALF=ALF0+CLMCI*(T(I)-273.15) 118 119 RG=RS(I) 120 TG=T(I) 121 C S=CPD+ALV*ALV*RG/(RV*T(I)*T(I)) 122 Cjyg1 123 CC S=CPD*(1.-RR(1))+CL*RR(1)+ALV*ALV*RG/(RV*T(I)*T(I)) 124 S=CPD*(1.-RR(NK))+CL*RR(NK)+ALV*ALV*RG/(RV*T(I)*T(I)) 125 Cjyg2 126 S=1./S 127 128 DO 200 J=1,2 129 Cjyg1 130 CC AHG=CPD*TG+(CL-CPD)*RR(1)*TG+ALV*RG+GZ(I) 131 AHG=CPD*TG+(CL-CPD)*RR(NK)*TG+ALV*RG+GZ(I) 132 Cjyg2 133 TG=TG+S*(AH0-AHG) 134 TC=TG-273.15 135 DENOM=243.5+TC 136 DENOM=MAX(DENOM,1.0) 137 C 138 C FORMULE DE BOLTON POUR PSAT 139 C 140 ES=6.112*EXP(17.67*TC/DENOM) 141 RG=EPS*ES/(P(I)-ES*(1.-EPS)) 142 143 144 200 CONTINUE 145 146 Cjyg1 147 CC TPK(I)=(AH0-GZ(I)-ALV*RG)/(CPD+(CL-CPD)*RR(1)) 148 TPK(I)=(AH0-GZ(I)-ALV*RG)/(CPD+(CL-CPD)*RR(NK)) 149 Cjyg2 150 C TPK(I)=(AH0-GZ(I)-ALV*RG-(CL-CPD)*T(I)*RR(1))/CPD 151 152 Cjyg1 153 CC CLW(I)=RR(1)-RG 154 CLW(I)=RR(NK)-RG 155 Cjyg2 156 CLW(I)=MAX(0.0,CLW(I)) 157 Cjyg1 158 CCC TVP(I)=TPK(I)*(1.+RG/EPS) 159 TVP(I)=TPK(I)*(1.+RG/EPS-RR(NK)) 160 Cjyg2 161 C 162 Cjyg1 Derivatives 163 C 164 DTPDT1(I) = CPD*S 165 DTPDQ1(I) = ALV*S 166 C 167 DTVPDT1(I) = DTPDT1(I)*(1. + RG/EPS - 168 . RR(NK) + ALV*RG/(RD*TPK(I)) ) 169 DTVPDQ1(I) = DTPDQ1(I)*(1. + RG/EPS - 170 . RR(NK) + ALV*RG/(RD*TPK(I)) ) - TPK(I) 171 C 172 Cjyg2 173 174 300 CONTINUE 175 C 176 ICE_CONV = .FALSE. 177 178 IF (ICE_CONV) THEN 179 C 180 CJAM 181 C RAJOUT DE LA PROCEDURE ICEFRAC 182 C 183 c sb CALL ICEFRAC(T,CLW,CLW_NEW,QI,ND,NL) 184 185 DO 400 I=ICB1,NL 186 IF (T(I).LT.263.15) THEN 187 TG=TPK(I) 188 TC=TPK(I)-273.15 189 DENOM=243.5+TC 190 ES=6.112*EXP(17.67*TC/DENOM) 191 ALV=ALV0-CPVMCL*(T(I)-273.15) 192 ALF=ALF0+CLMCI*(T(I)-273.15) 193 194 DO J=1,4 195 ESI=EXP(23.33086-(6111.72784/TPK(I))+0.15215*LOG(TPK(I))) 196 QSAT_NEW=EPS*ESI/(P(I)-ESI*(1.-EPS)) 197 CCC SNEW= CPD*(1.-RR(1))+CL*RR(1)+ALV*ALV*QSAT_NEW/(RV*TPK(I)*TPK(I)) 198 SNEW= CPD*(1.-RR(NK))+CL*RR(NK) 199 . +ALV*ALV*QSAT_NEW/(RV*TPK(I)*TPK(I)) 200 C 201 SNEW=1./SNEW 202 TPK(I)=TG+(ALF*QI(I)+ALV*RG*(1.-(ESI/ES)))*SNEW 203 c@$$ PRINT*,'################################' 204 c@$$ PRINT*,TPK(I) 205 c@$$ PRINT*,(ALF*QI(I)+ALV*RG*(1.-(ESI/ES)))*SNEW 206 ENDDO 207 CCC CLW(I)=RR(1)-QSAT_NEW 208 CLW(I)=RR(NK)-QSAT_NEW 209 CLW(I)=MAX(0.0,CLW(I)) 210 Cjyg1 211 CCC TVP(I)=TPK(I)*(1.+QSAT_NEW/EPS) 212 TVP(I)=TPK(I)*(1.+QSAT_NEW/EPS-RR(NK)) 213 Cjyg2 214 ELSE 3 4 SUBROUTINE tlift(p, t, rr, rs, gz, plcl, icb, nk, tvp, tpk, clw, nd, nl, & 5 dtvpdt1, dtvpdq1) 6 7 ! Argument NK ajoute (jyg) = Niveau de depart de la 8 ! convection 9 10 PARAMETER (na=60) 11 REAL gz(nd), tpk(nd), clw(nd) 12 REAL t(nd), rr(nd), rs(nd), tvp(nd), p(nd) 13 REAL dtvpdt1(nd), dtvpdq1(nd) ! Derivatives of parcel virtual 14 ! temperature wrt T1 and Q1 15 16 REAL clw_new(na), qi(na) 17 REAL dtpdt1(na), dtpdq1(na) ! Derivatives of parcel temperature 18 ! wrt T1 and Q1 19 20 21 LOGICAL ice_conv 22 23 ! *** ASSIGN VALUES OF THERMODYNAMIC CONSTANTS *** 24 25 ! sb CPD=1005.7 26 ! sb CPV=1870.0 27 ! sb CL=4190.0 28 ! sb CPVMCL=2320.0 29 ! sb RV=461.5 30 ! sb RD=287.04 31 ! sb EPS=RD/RV 32 ! sb ALV0=2.501E6 33 ! cccccccccccccccccccccc 34 ! constantes coherentes avec le modele du Centre Europeen 35 ! sb RD = 1000.0 * 1.380658E-23 * 6.0221367E+23 / 28.9644 36 ! sb RV = 1000.0 * 1.380658E-23 * 6.0221367E+23 / 18.0153 37 ! sb CPD = 3.5 * RD 38 ! sb CPV = 4.0 * RV 39 ! sb CL = 4218.0 40 ! sb CI=2090.0 41 ! sb CPVMCL=CL-CPV 42 ! sb CLMCI=CL-CI 43 ! sb EPS=RD/RV 44 ! sb ALV0=2.5008E+06 45 ! sb ALF0=3.34E+05 46 47 ! ccccccccccc 48 ! on utilise les constantes thermo du Centre Europeen: (SB) 49 50 include "YOMCST.h" 51 gravity = rg !sb: Pr que gravite ne devienne pas humidite! 52 53 cpd = rcpd 54 cpv = rcpv 55 cl = rcw 56 ci = rcs 57 cpvmcl = cl - cpv 58 clmci = cl - ci 59 eps = rd/rv 60 alv0 = rlvtt 61 alf0 = rlmlt ! (ALF0 = RLSTT-RLVTT) 62 63 ! ccccccccccccccccccccc 64 65 ! *** CALCULATE CERTAIN PARCEL QUANTITIES, INCLUDING STATIC ENERGY *** 66 67 icb1 = max(icb, 2) 68 icb1 = min(icb, nl) 69 70 ! jyg1 71 ! C CPP=CPD*(1.-RR(1))+RR(1)*CPV 72 cpp = cpd*(1.-rr(nk)) + rr(nk)*cpv 73 ! jyg2 74 cpinv = 1./cpp 75 ! jyg1 76 ! ICB may be below condensation level 77 ! CC DO 100 I=1,ICB1-1 78 ! CC TPK(I)=T(1)-GZ(I)*CPINV 79 ! CC TVP(I)=TPK(I)*(1.+RR(1)/EPS) 80 DO i = 1, icb1 81 clw(i) = 0.0 82 END DO 83 84 DO i = nk, icb1 85 tpk(i) = t(nk) - (gz(i)-gz(nk))*cpinv 86 ! jyg1 87 ! CC TVP(I)=TPK(I)*(1.+RR(NK)/EPS) 88 tvp(i) = tpk(i)*(1.+rr(nk)/eps-rr(nk)) 89 ! jyg2 90 dtvpdt1(i) = 1. + rr(nk)/eps - rr(nk) 91 dtvpdq1(i) = tpk(i)*(1./eps-1.) 92 93 ! jyg2 94 95 END DO 96 97 98 ! *** FIND LIFTED PARCEL TEMPERATURE AND MIXING RATIO *** 99 100 ! jyg1 101 ! C AH0=(CPD*(1.-RR(1))+CL*RR(1))*T(1) 102 ! C $ +RR(1)*(ALV0-CPVMCL*(T(1)-273.15)) 103 ah0 = (cpd*(1.-rr(nk))+cl*rr(nk))*t(nk) + rr(nk)*(alv0-cpvmcl*(t(nk)-273.15 & 104 )) + gz(nk) 105 ! jyg2 106 107 ! jyg1 108 imin = icb1 109 ! If ICB is below LCL, start loop at ICB+1 110 IF (plcl<p(icb1)) imin = min(imin+1, nl) 111 112 ! CC DO 300 I=ICB1,NL 113 DO i = imin, nl 114 ! jyg2 115 alv = alv0 - cpvmcl*(t(i)-273.15) 116 alf = alf0 + clmci*(t(i)-273.15) 117 118 rg = rs(i) 119 tg = t(i) 120 ! S=CPD+ALV*ALV*RG/(RV*T(I)*T(I)) 121 ! jyg1 122 ! C S=CPD*(1.-RR(1))+CL*RR(1)+ALV*ALV*RG/(RV*T(I)*T(I)) 123 s = cpd*(1.-rr(nk)) + cl*rr(nk) + alv*alv*rg/(rv*t(i)*t(i)) 124 ! jyg2 125 s = 1./s 126 127 DO j = 1, 2 128 ! jyg1 129 ! C AHG=CPD*TG+(CL-CPD)*RR(1)*TG+ALV*RG+GZ(I) 130 ahg = cpd*tg + (cl-cpd)*rr(nk)*tg + alv*rg + gz(i) 131 ! jyg2 132 tg = tg + s*(ah0-ahg) 133 tc = tg - 273.15 134 denom = 243.5 + tc 135 denom = max(denom, 1.0) 136 137 ! FORMULE DE BOLTON POUR PSAT 138 139 es = 6.112*exp(17.67*tc/denom) 140 rg = eps*es/(p(i)-es*(1.-eps)) 141 142 143 END DO 144 145 ! jyg1 146 ! C TPK(I)=(AH0-GZ(I)-ALV*RG)/(CPD+(CL-CPD)*RR(1)) 147 tpk(i) = (ah0-gz(i)-alv*rg)/(cpd+(cl-cpd)*rr(nk)) 148 ! jyg2 149 ! TPK(I)=(AH0-GZ(I)-ALV*RG-(CL-CPD)*T(I)*RR(1))/CPD 150 151 ! jyg1 152 ! C CLW(I)=RR(1)-RG 153 clw(i) = rr(nk) - rg 154 ! jyg2 155 clw(i) = max(0.0, clw(i)) 156 ! jyg1 157 ! CC TVP(I)=TPK(I)*(1.+RG/EPS) 158 tvp(i) = tpk(i)*(1.+rg/eps-rr(nk)) 159 ! jyg2 160 161 ! jyg1 Derivatives 162 163 dtpdt1(i) = cpd*s 164 dtpdq1(i) = alv*s 165 166 dtvpdt1(i) = dtpdt1(i)*(1.+rg/eps-rr(nk)+alv*rg/(rd*tpk(i))) 167 dtvpdq1(i) = dtpdq1(i)*(1.+rg/eps-rr(nk)+alv*rg/(rd*tpk(i))) - tpk(i) 168 169 ! jyg2 170 171 END DO 172 173 ice_conv = .FALSE. 174 175 IF (ice_conv) THEN 176 177 ! JAM 178 ! RAJOUT DE LA PROCEDURE ICEFRAC 179 180 ! sb CALL ICEFRAC(T,CLW,CLW_NEW,QI,ND,NL) 181 182 DO i = icb1, nl 183 IF (t(i)<263.15) THEN 184 tg = tpk(i) 185 tc = tpk(i) - 273.15 186 denom = 243.5 + tc 187 es = 6.112*exp(17.67*tc/denom) 188 alv = alv0 - cpvmcl*(t(i)-273.15) 189 alf = alf0 + clmci*(t(i)-273.15) 190 191 DO j = 1, 4 192 esi = exp(23.33086-(6111.72784/tpk(i))+0.15215*log(tpk(i))) 193 qsat_new = eps*esi/(p(i)-esi*(1.-eps)) 194 ! CC SNEW= 195 ! CPD*(1.-RR(1))+CL*RR(1)+ALV*ALV*QSAT_NEW/(RV*TPK(I)*TPK(I)) 196 snew = cpd*(1.-rr(nk)) + cl*rr(nk) + alv*alv*qsat_new/(rv*tpk(i)* & 197 tpk(i)) 198 199 snew = 1./snew 200 tpk(i) = tg + (alf*qi(i)+alv*rg*(1.-(esi/es)))*snew 201 ! @$$ PRINT*,'################################' 202 ! @$$ PRINT*,TPK(I) 203 ! @$$ PRINT*,(ALF*QI(I)+ALV*RG*(1.-(ESI/ES)))*SNEW 204 END DO 205 ! CC CLW(I)=RR(1)-QSAT_NEW 206 clw(i) = rr(nk) - qsat_new 207 clw(i) = max(0.0, clw(i)) 208 ! jyg1 209 ! CC TVP(I)=TPK(I)*(1.+QSAT_NEW/EPS) 210 tvp(i) = tpk(i)*(1.+qsat_new/eps-rr(nk)) 211 ! jyg2 212 ELSE 215 213 CONTINUE 216 ENDIF217 218 400 CONTINUE219 C 220 ENDIF221 C 222 223 ******************************************************224 ** BK : RAJOUT DE LA TEMPERATURE DES ASCENDANCES225 ** NON DILUES AU NIVEAU KLEV = ND226 ** POSONS LE ENVIRON EGAL A CELUI DE KLEV-1227 ********************************************************228 229 TPK(NL+1)=TPK(NL)230 231 *******************************************************232 233 RG = GRAVITY! RG redevient la gravite de YOMCST (sb)234 235 236 237 END 238 239 240 241 242 243 244 245 214 END IF 215 216 END DO 217 218 END IF 219 220 221 ! ***************************************************** 222 ! * BK : RAJOUT DE LA TEMPERATURE DES ASCENDANCES 223 ! * NON DILUES AU NIVEAU KLEV = ND 224 ! * POSONS LE ENVIRON EGAL A CELUI DE KLEV-1 225 ! ******************************************************* 226 227 tpk(nl+1) = tpk(nl) 228 229 ! ****************************************************** 230 231 rg = gravity ! RG redevient la gravite de YOMCST (sb) 232 233 234 RETURN 235 END SUBROUTINE tlift 236 237 238 239 240 241 242 243
Note: See TracChangeset
for help on using the changeset viewer.