source: LMDZ6/branches/Amaury_dev/libf/phylmd/tlift.F90 @ 5201

Last change on this file since 5201 was 5144, checked in by abarral, 8 weeks ago

Put YOMCST.h into modules

  • Property copyright set to
    Name of program: LMDZ
    Creation date: 1984
    Version: LMDZ5
    License: CeCILL version 2
    Holder: Laboratoire de m\'et\'eorologie dynamique, CNRS, UMR 8539
    See the license file in the root directory
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 6.1 KB
RevLine 
[524]1! $Header$
2
[1992]3SUBROUTINE tlift(p, t, rr, rs, gz, plcl, icb, nk, tvp, tpk, clw, nd, nl, &
[5144]4        dtvpdt1, dtvpdq1)
5  USE lmdz_yomcst
6
[2197]7  IMPLICIT NONE
[1992]8  ! Argument NK ajoute (jyg) = Niveau de depart de la
9  ! convection
[2197]10  INTEGER icb, nk, nd, nl
[5144]11  INTEGER, PARAMETER :: na = 60
[2197]12  REAL gz(nd), tpk(nd), clw(nd), plcl
[1992]13  REAL t(nd), rr(nd), rs(nd), tvp(nd), p(nd)
14  REAL dtvpdt1(nd), dtvpdq1(nd) ! Derivatives of parcel virtual
15  ! temperature wrt T1 and Q1
16
17  REAL clw_new(na), qi(na)
18  REAL dtpdt1(na), dtpdq1(na) ! Derivatives of parcel temperature
19  ! wrt T1 and Q1
[2197]20  REAL gravity, cpd, cpv, cl, ci, cpvmcl, clmci, eps, alv0, alf0
21  REAL cpp, cpinv, ah0, alf, tg, s, ahg, tc, denom, alv, es, esi
22  REAL qsat_new, snew
23  INTEGER icbl, i, imin, j, icb1
[1992]24
25  LOGICAL ice_conv
26
27  ! ***   ASSIGN VALUES OF THERMODYNAMIC CONSTANTS     ***
28
29  ! sb        CPD=1005.7
30  ! sb      CPV=1870.0
31  ! sb        CL=4190.0
32  ! sb        CPVMCL=2320.0
33  ! sb        RV=461.5
34  ! sb        RD=287.04
35  ! sb        EPS=RD/RV
36  ! sb        ALV0=2.501E6
37  ! cccccccccccccccccccccc
38  ! constantes coherentes avec le modele du Centre Europeen
39  ! sb      RD = 1000.0 * 1.380658E-23 * 6.0221367E+23 / 28.9644
40  ! sb      RV = 1000.0 * 1.380658E-23 * 6.0221367E+23 / 18.0153
41  ! sb      CPD = 3.5 * RD
42  ! sb      CPV = 4.0 * RV
43  ! sb      CL = 4218.0
44  ! sb      CI=2090.0
45  ! sb      CPVMCL=CL-CPV
46  ! sb      CLMCI=CL-CI
47  ! sb      EPS=RD/RV
48  ! sb      ALV0=2.5008E+06
49  ! sb      ALF0=3.34E+05
50
51  ! on utilise les constantes thermo du Centre Europeen: (SB)
52
53  gravity = rg !sb: Pr que gravite ne devienne pas humidite!
54
55  cpd = rcpd
56  cpv = rcpv
57  cl = rcw
58  ci = rcs
59  cpvmcl = cl - cpv
60  clmci = cl - ci
[5144]61  eps = rd / rv
[1992]62  alv0 = rlvtt
63  alf0 = rlmlt ! (ALF0 = RLSTT-RLVTT)
64
65  ! ccccccccccccccccccccc
66
67  ! ***  CALCULATE CERTAIN PARCEL QUANTITIES, INCLUDING STATIC ENERGY   ***
68
69  icb1 = max(icb, 2)
70  icb1 = min(icb, nl)
71
72  ! jyg1
73  ! C      CPP=CPD*(1.-RR(1))+RR(1)*CPV
[5144]74  cpp = cpd * (1. - rr(nk)) + rr(nk) * cpv
[1992]75  ! jyg2
[5144]76  cpinv = 1. / cpp
[1992]77  ! jyg1
78  ! ICB may be below condensation level
79  ! CC        DO 100 I=1,ICB1-1
80  ! CC         TPK(I)=T(1)-GZ(I)*CPINV
81  ! CC         TVP(I)=TPK(I)*(1.+RR(1)/EPS)
82  DO i = 1, icb1
83    clw(i) = 0.0
84  END DO
85
86  DO i = nk, icb1
[5144]87    tpk(i) = t(nk) - (gz(i) - gz(nk)) * cpinv
[1992]88    ! jyg1
89    ! CC         TVP(I)=TPK(I)*(1.+RR(NK)/EPS)
[5144]90    tvp(i) = tpk(i) * (1. + rr(nk) / eps - rr(nk))
[1992]91    ! jyg2
[5144]92    dtvpdt1(i) = 1. + rr(nk) / eps - rr(nk)
93    dtvpdq1(i) = tpk(i) * (1. / eps - 1.)
[1992]94
95    ! jyg2
96
97  END DO
98
99
100  ! ***  FIND LIFTED PARCEL TEMPERATURE AND MIXING RATIO    ***
101
102  ! jyg1
103  ! C        AH0=(CPD*(1.-RR(1))+CL*RR(1))*T(1)
104  ! C     $     +RR(1)*(ALV0-CPVMCL*(T(1)-273.15))
[5144]105  ah0 = (cpd * (1. - rr(nk)) + cl * rr(nk)) * t(nk) + rr(nk) * (alv0 - cpvmcl * (t(nk) - 273.15 &
106          )) + gz(nk)
[1992]107  ! jyg2
108
109  ! jyg1
110  imin = icb1
111  ! If ICB is below LCL, start loop at ICB+1
[5144]112  IF (plcl<p(icb1)) imin = min(imin + 1, nl)
[1992]113
114  ! CC        DO 300 I=ICB1,NL
115  DO i = imin, nl
116    ! jyg2
[5144]117    alv = alv0 - cpvmcl * (t(i) - 273.15)
118    alf = alf0 + clmci * (t(i) - 273.15)
[1992]119
120    rg = rs(i)
121    tg = t(i)
122    ! S=CPD+ALV*ALV*RG/(RV*T(I)*T(I))
123    ! jyg1
124    ! C        S=CPD*(1.-RR(1))+CL*RR(1)+ALV*ALV*RG/(RV*T(I)*T(I))
[5144]125    s = cpd * (1. - rr(nk)) + cl * rr(nk) + alv * alv * rg / (rv * t(i) * t(i))
[1992]126    ! jyg2
[5144]127    s = 1. / s
[1992]128
129    DO j = 1, 2
130      ! jyg1
131      ! C         AHG=CPD*TG+(CL-CPD)*RR(1)*TG+ALV*RG+GZ(I)
[5144]132      ahg = cpd * tg + (cl - cpd) * rr(nk) * tg + alv * rg + gz(i)
[1992]133      ! jyg2
[5144]134      tg = tg + s * (ah0 - ahg)
[1992]135      tc = tg - 273.15
136      denom = 243.5 + tc
137      denom = max(denom, 1.0)
138
139      ! FORMULE DE BOLTON POUR PSAT
140
[5144]141      es = 6.112 * exp(17.67 * tc / denom)
142      rg = eps * es / (p(i) - es * (1. - eps))
[1992]143
144    END DO
145
146    ! jyg1
147    ! C        TPK(I)=(AH0-GZ(I)-ALV*RG)/(CPD+(CL-CPD)*RR(1))
[5144]148    tpk(i) = (ah0 - gz(i) - alv * rg) / (cpd + (cl - cpd) * rr(nk))
[1992]149    ! jyg2
150    ! TPK(I)=(AH0-GZ(I)-ALV*RG-(CL-CPD)*T(I)*RR(1))/CPD
151
152    ! jyg1
153    ! C        CLW(I)=RR(1)-RG
154    clw(i) = rr(nk) - rg
155    ! jyg2
156    clw(i) = max(0.0, clw(i))
157    ! jyg1
158    ! CC        TVP(I)=TPK(I)*(1.+RG/EPS)
[5144]159    tvp(i) = tpk(i) * (1. + rg / eps - rr(nk))
[1992]160    ! jyg2
161
162    ! jyg1       Derivatives
163
[5144]164    dtpdt1(i) = cpd * s
165    dtpdq1(i) = alv * s
[1992]166
[5144]167    dtvpdt1(i) = dtpdt1(i) * (1. + rg / eps - rr(nk) + alv * rg / (rd * tpk(i)))
168    dtvpdq1(i) = dtpdq1(i) * (1. + rg / eps - rr(nk) + alv * rg / (rd * tpk(i))) - tpk(i)
[1992]169
170    ! jyg2
171
172  END DO
173
174  ice_conv = .FALSE.
175
176  IF (ice_conv) THEN
177
178    ! JAM
179    ! RAJOUT DE LA PROCEDURE ICEFRAC
180
181    ! sb        CALL ICEFRAC(T,CLW,CLW_NEW,QI,ND,NL)
182
183    DO i = icb1, nl
184      IF (t(i)<263.15) THEN
185        tg = tpk(i)
186        tc = tpk(i) - 273.15
187        denom = 243.5 + tc
[5144]188        es = 6.112 * exp(17.67 * tc / denom)
189        alv = alv0 - cpvmcl * (t(i) - 273.15)
190        alf = alf0 + clmci * (t(i) - 273.15)
[1992]191
192        DO j = 1, 4
[5144]193          esi = exp(23.33086 - (6111.72784 / tpk(i)) + 0.15215 * log(tpk(i)))
194          qsat_new = eps * esi / (p(i) - esi * (1. - eps))
[1992]195          ! CC        SNEW=
196          ! CPD*(1.-RR(1))+CL*RR(1)+ALV*ALV*QSAT_NEW/(RV*TPK(I)*TPK(I))
[5144]197          snew = cpd * (1. - rr(nk)) + cl * rr(nk) + alv * alv * qsat_new / (rv * tpk(i) * &
198                  tpk(i))
[1992]199
[5144]200          snew = 1. / snew
201          tpk(i) = tg + (alf * qi(i) + alv * rg * (1. - (esi / es))) * snew
[1992]202          ! @$$        PRINT*,'################################'
203          ! @$$        PRINT*,TPK(I)
204          ! @$$        PRINT*,(ALF*QI(I)+ALV*RG*(1.-(ESI/ES)))*SNEW
205        END DO
206        ! CC        CLW(I)=RR(1)-QSAT_NEW
207        clw(i) = rr(nk) - qsat_new
208        clw(i) = max(0.0, clw(i))
209        ! jyg1
210        ! CC        TVP(I)=TPK(I)*(1.+QSAT_NEW/EPS)
[5144]211        tvp(i) = tpk(i) * (1. + qsat_new / eps - rr(nk))
[1992]212        ! jyg2
213      END IF
[524]214
[1992]215    END DO
216
217  END IF
218
219
220  ! *****************************************************
221  ! * BK :  RAJOUT DE LA TEMPERATURE DES ASCENDANCES
222  ! *   NON DILUES AU  NIVEAU KLEV = ND
223  ! *   POSONS LE ENVIRON EGAL A CELUI DE KLEV-1
224  ! *******************************************************
225
[5144]226  tpk(nl + 1) = tpk(nl)
[1992]227
228  ! ******************************************************
229
230  rg = gravity ! RG redevient la gravite de YOMCST (sb)
231
232END SUBROUTINE tlift
233
234
235
236
237
238
239
240
Note: See TracBrowser for help on using the repository browser.