source: LMDZ6/trunk/libf/phylmd/pppmer.f90 @ 5274

Last change on this file since 5274 was 5274, checked in by abarral, 31 hours ago

Replace yomcst.h by existing module

File size: 5.8 KB
Line 
1SUBROUTINE 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!<http://intra.cnrm.meteo.fr/eac/ARPCLI5.2/doci/code/arpcli5.2/xrd/module/parkind1.F90.php#parkind1>  ,ONLY : JPIM     ,JPRB
56! USE YOMHOOK
57!<http://intra.cnrm.meteo.fr/eac/ARPCLI5.2/doci/code/arpcli5.2/xrd/module/yomhook.F90.php#yomhook>   ,ONLY : LHOOK,   DR_HOOK
58
59!USE YOMCST, ONLY : RG, RD
60!<http://intra.cnrm.meteo.fr/eac/ARPCLI5.2/doci/code/arpcli5.2/arp/module/yomcst.F90.php#yomcst>   , ONLY : RG
61
62!<http://intra.cnrm.meteo.fr/eac/ARPCLI5.2/doci/code/arpcli5.2/xrd/support/rg.F.php#rg>       ,RD
63! USE YOMSTA
64!<http://intra.cnrm.meteo.fr/eac/ARPCLI5.2/doci/code/arpcli5.2/arp/module/yomsta.F90.php#yomsta>   , ONLY : RDTDZ1
65
66  USE yomcst_mod_h, ONLY: RPI, RCLUM, RHPLA, RKBOL, RNAVO                   &
67          , RDAY, REA, REPSM, RSIYEA, RSIDAY, ROMEGA                  &
68          , R_ecc, R_peri, R_incl                                      &
69          , RA, RG, R1SA                                         &
70          , RSIGMA                                                     &
71          , R, RMD, RMV, RD, RV, RCPD                    &
72          , RMO3, RMCO2, RMC, RMCH4, RMN2O, RMCFC11, RMCFC12        &
73          , RCPV, RCVD, RCVV, RKAPPA, RETV, eps_w                    &
74          , RCW, RCS                                                 &
75          , RLVTT, RLSTT, RLMLT, RTT, RATM                           &
76          , RESTT, RALPW, RBETW, RGAMW, RALPS, RBETS, RGAMS            &
77          , RALPD, RBETD, RGAMD
78IMPLICIT NONE
79
80
81!IM INTEGER(KIND=JPIM),INTENT(IN)    :: KPROMA
82!IM INTEGER(KIND=JPIM),INTENT(IN)    :: KSTART
83!IM INTEGER(KIND=JPIM),INTENT(IN)    :: KPROF
84 INTEGER,INTENT(IN)    :: KPROMA
85 INTEGER,INTENT(IN)    :: KSTART
86 INTEGER,INTENT(IN)    :: KPROF
87!IM REAL(KIND=JPRB)   ,INTENT(IN)    :: PRPRESS(KPROMA)
88!IM REAL(KIND=JPRB)   ,INTENT(IN)    :: POROG(KPROMA)
89!IM REAL(KIND=JPRB)   ,INTENT(IN)    :: PTSTAR(KPROMA)
90!IM REAL(KIND=JPRB)   ,INTENT(IN)    :: PT0(KPROMA)
91!IM REAL(KIND=JPRB)   ,INTENT(OUT)   :: PMSLPPP(KPROMA)
92!IM REAL(KIND=JPRB) :: ZTSTAR(KPROMA)
93!IM REAL(KIND=JPRB) :: ZALPHA(KPROMA)
94 REAL,INTENT(IN)    :: PRPRESS(KPROMA)
95 REAL,INTENT(IN)    :: POROG(KPROMA)
96 REAL,INTENT(IN)    :: PTSTAR(KPROMA)
97 REAL,INTENT(IN)    :: PT0(KPROMA)
98 REAL,INTENT(OUT)   :: PMSLPPP(KPROMA)
99 REAL :: ZTSTAR(KPROMA)
100 REAL :: ZALPHA(KPROMA)
101
102!IM INTEGER(KIND=JPIM) :: JL
103 INTEGER :: JL
104
105!IM REAL(KIND=JPRB) :: ZDTDZSG, ZOROG, ZT0, ZTX, ZTY, ZX, ZY, ZY2
106!IM REAL(KIND=JPRB) :: ZHOOK_HANDLE
107 REAL :: ZDTDZSG, ZOROG, ZT0, ZTX, ZTY, ZX, ZY, ZY2
108 REAL :: ZHOOK_HANDLE
109!IM beg
110REAL, PARAMETER                  :: RDTDZ1=-0.0065 !or USE YOMSTA
111!IM end
112
113!     ------------------------------------------------------------------
114
115!*       1.    POST-PROCESS MSL PRESSURE.
116!              --------------------------
117
118!*       1.1   COMPUTATION OF MODIFIED ALPHA AND TSTAR.
119
120!IM IF (LHOOK) CALL DR_HOOK('PPPMER',0,ZHOOK_HANDLE)
121!IM ZTX=290.5_JPRB
122!IM ZTY=255.0_JPRB
123 ZTX=290.5
124 ZTY=255.0
125 ZDTDZSG=-RDTDZ1/RG
126!<http://intra.cnrm.meteo.fr/eac/ARPCLI5.2/doci/code/arpcli5.2/xrd/support/rg.F.php#rg>
127 DO JL=KSTART,KPROF
128
129   IF(PTSTAR(JL) < ZTY) THEN
130!IM  ZTSTAR(JL)=0.5_JPRB*(ZTY+PTSTAR(JL))
131     ZTSTAR(JL)=0.5*(ZTY+PTSTAR(JL))
132   ELSEIF(PTSTAR(JL) < ZTX) THEN
133     ZTSTAR(JL)=PTSTAR(JL)
134   ELSE
135!IM    ZTSTAR(JL)=0.5_JPRB*(ZTX+PTSTAR(JL))
136     ZTSTAR(JL)=0.5*(ZTX+PTSTAR(JL))
137   ENDIF
138
139   ZT0=ZTSTAR(JL)+ZDTDZSG*POROG(JL)
140   IF(ZTX > ZTSTAR(JL) .AND. ZT0 > ZTX) THEN
141     ZT0=ZTX
142   ELSEIF(ZTX <= ZTSTAR(JL) .AND. ZT0 > ZTSTAR(JL)) THEN
143     ZT0=ZTSTAR(JL)
144   ELSE
145     ZT0=PT0(JL)
146   ENDIF
147
148!IM  ZOROG=SIGN(MAX(1.0_JPRB,ABS(POROG(JL))),POROG(JL))
149   ZOROG=SIGN(MAX(1.0,ABS(POROG(JL))),POROG(JL))
150   ZALPHA(JL)=RD*(ZT0-ZTSTAR(JL))/ZOROG
151 ENDDO
152
153!*       1.2   COMPUTATION OF MSL PRESSURE.
154
155 DO JL=KSTART,KPROF
156!IM  IF (ABS(POROG(JL)) >= 0.001_JPRB) THEN
157   IF (ABS(POROG(JL)) >= 0.001) THEN
158     ZX=POROG(JL)/(RD*ZTSTAR(JL))
159     ZY=ZALPHA(JL)*ZX
160     ZY2=ZY*ZY
161
162!IM    PMSLPPP(JL)=PRPRESS(JL)*EXP(ZX*(1.0_JPRB-0.5_JPRB*ZY+1.0_JPRB/3._JPRB*ZY2))
163     PMSLPPP(JL)=PRPRESS(JL)*EXP(ZX*(1.0-0.5*ZY+1.0/3.*ZY2))
164   ELSE
165     PMSLPPP(JL)=PRPRESS(JL)
166   ENDIF
167 ENDDO
168
169
170!     ------------------------------------------------------------------
171
172!IM IF (LHOOK) CALL DR_HOOK('PPPMER',1,ZHOOK_HANDLE)
173 END SUBROUTINE PPPMER
Note: See TracBrowser for help on using the repository browser.