LMDZ
pppmer.F90
Go to the documentation of this file.
1 SUBROUTINE pppmer(KPROMA,KSTART,KPROF,PRPRESS,POROG,PTSTAR,PT0,PMSLPPP)
2 
3 !**** *PPPMER* - POST-PROCESS MSL PRESSURE.
4 
5 ! PURPOSE.
6 ! --------
7 ! COMPUTES MSL PRESSURE.
8 
9 !** INTERFACE.
10 ! ----------
11 
12 ! *CALL* *PPPMER(KPROMA,KSTART,KPROF,PRPRESS,POROG,PTSTAR,PT0,
13 ! S PMSLPPP)
14 
15 ! EXPLICIT ARGUMENTS
16 ! --------------------
17 
18 
19 ! KPROMA - HORIZONTAL DIMENSION. (INPUT)
20 ! KSTART - START OF WORK. (INPUT)
21 ! KPROF - DEPTH OF WORK. (INPUT)
22 ! PRPRESS(KPROMA) - SURFACE PRESSURE (INPUT)
23 ! POROG(KPROMA) - MODEL OROGRAPHY. (INPUT)
24 ! PTSTAR(KPROMA) - SURFACE TEMPERATURE (INPUT)
25 ! PT0(KPROMA) - STANDARD SURFACE TEMPERATURE (INPUT)
26 ! PMSLPPP(KPROMA) - POST-PROCESSED MSL PRESSURE (OUTPUT)
27 ! IMPLICIT ARGUMENTS : CONSTANTS FROM YOMCST,YOMGEM,YOMSTA.
28 ! --------------------
29 
30 ! METHOD.
31 ! -------
32 ! SEE DOCUMENTATION
33 
34 ! EXTERNALS. NONE
35 ! ----------
36 
37 ! REFERENCE.
38 ! ----------
39 ! ECMWF Research Department documentation of the IFS
40 
41 ! AUTHOR.
42 ! -------
43 ! MATS HAMRUD AND PHILIPPE COURTIER *ECMWF*
44 
45 ! MODIFICATIONS.
46 ! --------------
47 ! ORIGINAL : 89-01-26
48 
49 ! E. A-son, J-F Geleyn 920409 Mod. T*, T0 and alpha below surface.
50 ! M.Hamrud 01-Oct-2003 CY28 Cleaning
51 
52 ! ------------------------------------------------------------------
53 
54 ! USE PARKIND1
55 
56 ! USE YOMHOOK
57 
58 
59 !USE YOMCST, ONLY : RG, RD
60 
61 
62 
63 ! USE YOMSTA
64 
65 
66  IMPLICIT NONE
67 
68 include "YOMCST.h"
69 !IM INTEGER(KIND=JPIM),INTENT(IN) :: KPROMA
70 !IM INTEGER(KIND=JPIM),INTENT(IN) :: KSTART
71 !IM INTEGER(KIND=JPIM),INTENT(IN) :: KPROF
72  INTEGER,INTENT(IN) :: KPROMA
73  INTEGER,INTENT(IN) :: KSTART
74  INTEGER,INTENT(IN) :: KPROF
75 !IM REAL(KIND=JPRB) ,INTENT(IN) :: PRPRESS(KPROMA)
76 !IM REAL(KIND=JPRB) ,INTENT(IN) :: POROG(KPROMA)
77 !IM REAL(KIND=JPRB) ,INTENT(IN) :: PTSTAR(KPROMA)
78 !IM REAL(KIND=JPRB) ,INTENT(IN) :: PT0(KPROMA)
79 !IM REAL(KIND=JPRB) ,INTENT(OUT) :: PMSLPPP(KPROMA)
80 !IM REAL(KIND=JPRB) :: ZTSTAR(KPROMA)
81 !IM REAL(KIND=JPRB) :: ZALPHA(KPROMA)
82  REAL,INTENT(IN) :: PRPRESS(kproma)
83  REAL,INTENT(IN) :: POROG(kproma)
84  REAL,INTENT(IN) :: PTSTAR(kproma)
85  REAL,INTENT(IN) :: PT0(kproma)
86  REAL,INTENT(OUT) :: PMSLPPP(kproma)
87  REAL :: ZTSTAR(kproma)
88  REAL :: ZALPHA(kproma)
89 
90 !IM INTEGER(KIND=JPIM) :: JL
91  INTEGER :: JL
92 
93 !IM REAL(KIND=JPRB) :: ZDTDZSG, ZOROG, ZT0, ZTX, ZTY, ZX, ZY, ZY2
94 !IM REAL(KIND=JPRB) :: ZHOOK_HANDLE
95  REAL :: ZDTDZSG, ZOROG, ZT0, ZTX, ZTY, ZX, ZY, ZY2
96  REAL :: ZHOOK_HANDLE
97 !IM beg
98 REAL, PARAMETER :: RDTDZ1=-0.0065 !or USE YOMSTA
99 !IM end
100 
101 ! ------------------------------------------------------------------
102 
103 !* 1. POST-PROCESS MSL PRESSURE.
104 ! --------------------------
105 
106 !* 1.1 COMPUTATION OF MODIFIED ALPHA AND TSTAR.
107 
108 !IM IF (LHOOK) CALL DR_HOOK('PPPMER',0,ZHOOK_HANDLE)
109 !IM ZTX=290.5_JPRB
110 !IM ZTY=255.0_JPRB
111  ztx=290.5
112  zty=255.0
113  zdtdzsg=-rdtdz1/rg
114 
115  DO jl=kstart,kprof
116 
117  IF(ptstar(jl) < zty) THEN
118 !IM ZTSTAR(JL)=0.5_JPRB*(ZTY+PTSTAR(JL))
119  ztstar(jl)=0.5*(zty+ptstar(jl))
120  ELSEIF(ptstar(jl) < ztx) THEN
121  ztstar(jl)=ptstar(jl)
122  ELSE
123 !IM ZTSTAR(JL)=0.5_JPRB*(ZTX+PTSTAR(JL))
124  ztstar(jl)=0.5*(ztx+ptstar(jl))
125  ENDIF
126 
127  zt0=ztstar(jl)+zdtdzsg*porog(jl)
128  IF(ztx > ztstar(jl) .AND. zt0 > ztx) THEN
129  zt0=ztx
130  ELSEIF(ztx <= ztstar(jl) .AND. zt0 > ztstar(jl)) THEN
131  zt0=ztstar(jl)
132  ELSE
133  zt0=pt0(jl)
134  ENDIF
135 
136 !IM ZOROG=SIGN(MAX(1.0_JPRB,ABS(POROG(JL))),POROG(JL))
137  zorog=sign(max(1.0,abs(porog(jl))),porog(jl))
138  zalpha(jl)=rd*(zt0-ztstar(jl))/zorog
139  ENDDO
140 
141 !* 1.2 COMPUTATION OF MSL PRESSURE.
142 
143  DO jl=kstart,kprof
144 !IM IF (ABS(POROG(JL)) >= 0.001_JPRB) THEN
145  IF (abs(porog(jl)) >= 0.001) THEN
146  zx=porog(jl)/(rd*ztstar(jl))
147  zy=zalpha(jl)*zx
148  zy2=zy*zy
149 
150 !IM PMSLPPP(JL)=PRPRESS(JL)*EXP(ZX*(1.0_JPRB-0.5_JPRB*ZY+1.0_JPRB/3._JPRB*ZY2))
151  pmslppp(jl)=prpress(jl)*exp(zx*(1.0-0.5*zy+1.0/3.*zy2))
152  ELSE
153  pmslppp(jl)=prpress(jl)
154  ENDIF
155  ENDDO
156 
157 
158 ! ------------------------------------------------------------------
159 
160 !IM IF (LHOOK) CALL DR_HOOK('PPPMER',1,ZHOOK_HANDLE)
161  END SUBROUTINE pppmer
subroutine pppmer(KPROMA, KSTART, KPROF, PRPRESS, POROG, PTSTAR, PT0, PMSLPPP)
Definition: pppmer.F90:2
real rg
Definition: comcstphy.h:1