source: LMDZ6/branches/contrails/libf/phylmd/pppmer.f90 @ 5452

Last change on this file since 5452 was 5285, checked in by abarral, 2 months ago

As discussed internally, remove generic ONLY: ... for new _mod_h modules

File size: 5.0 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
67IMPLICIT NONE
68
69
70!IM INTEGER(KIND=JPIM),INTENT(IN)    :: KPROMA
71!IM INTEGER(KIND=JPIM),INTENT(IN)    :: KSTART
72!IM INTEGER(KIND=JPIM),INTENT(IN)    :: KPROF
73 INTEGER,INTENT(IN)    :: KPROMA
74 INTEGER,INTENT(IN)    :: KSTART
75 INTEGER,INTENT(IN)    :: KPROF
76!IM REAL(KIND=JPRB)   ,INTENT(IN)    :: PRPRESS(KPROMA)
77!IM REAL(KIND=JPRB)   ,INTENT(IN)    :: POROG(KPROMA)
78!IM REAL(KIND=JPRB)   ,INTENT(IN)    :: PTSTAR(KPROMA)
79!IM REAL(KIND=JPRB)   ,INTENT(IN)    :: PT0(KPROMA)
80!IM REAL(KIND=JPRB)   ,INTENT(OUT)   :: PMSLPPP(KPROMA)
81!IM REAL(KIND=JPRB) :: ZTSTAR(KPROMA)
82!IM REAL(KIND=JPRB) :: ZALPHA(KPROMA)
83 REAL,INTENT(IN)    :: PRPRESS(KPROMA)
84 REAL,INTENT(IN)    :: POROG(KPROMA)
85 REAL,INTENT(IN)    :: PTSTAR(KPROMA)
86 REAL,INTENT(IN)    :: PT0(KPROMA)
87 REAL,INTENT(OUT)   :: PMSLPPP(KPROMA)
88 REAL :: ZTSTAR(KPROMA)
89 REAL :: ZALPHA(KPROMA)
90
91!IM INTEGER(KIND=JPIM) :: JL
92 INTEGER :: JL
93
94!IM REAL(KIND=JPRB) :: ZDTDZSG, ZOROG, ZT0, ZTX, ZTY, ZX, ZY, ZY2
95!IM REAL(KIND=JPRB) :: ZHOOK_HANDLE
96 REAL :: ZDTDZSG, ZOROG, ZT0, ZTX, ZTY, ZX, ZY, ZY2
97 REAL :: ZHOOK_HANDLE
98!IM beg
99REAL, PARAMETER                  :: RDTDZ1=-0.0065 !or USE YOMSTA
100!IM end
101
102!     ------------------------------------------------------------------
103
104!*       1.    POST-PROCESS MSL PRESSURE.
105!              --------------------------
106
107!*       1.1   COMPUTATION OF MODIFIED ALPHA AND TSTAR.
108
109!IM IF (LHOOK) CALL DR_HOOK('PPPMER',0,ZHOOK_HANDLE)
110!IM ZTX=290.5_JPRB
111!IM ZTY=255.0_JPRB
112 ZTX=290.5
113 ZTY=255.0
114 ZDTDZSG=-RDTDZ1/RG
115!<http://intra.cnrm.meteo.fr/eac/ARPCLI5.2/doci/code/arpcli5.2/xrd/support/rg.F.php#rg>
116 DO JL=KSTART,KPROF
117
118   IF(PTSTAR(JL) < ZTY) THEN
119!IM  ZTSTAR(JL)=0.5_JPRB*(ZTY+PTSTAR(JL))
120     ZTSTAR(JL)=0.5*(ZTY+PTSTAR(JL))
121   ELSEIF(PTSTAR(JL) < ZTX) THEN
122     ZTSTAR(JL)=PTSTAR(JL)
123   ELSE
124!IM    ZTSTAR(JL)=0.5_JPRB*(ZTX+PTSTAR(JL))
125     ZTSTAR(JL)=0.5*(ZTX+PTSTAR(JL))
126   ENDIF
127
128   ZT0=ZTSTAR(JL)+ZDTDZSG*POROG(JL)
129   IF(ZTX > ZTSTAR(JL) .AND. ZT0 > ZTX) THEN
130     ZT0=ZTX
131   ELSEIF(ZTX <= ZTSTAR(JL) .AND. ZT0 > ZTSTAR(JL)) THEN
132     ZT0=ZTSTAR(JL)
133   ELSE
134     ZT0=PT0(JL)
135   ENDIF
136
137!IM  ZOROG=SIGN(MAX(1.0_JPRB,ABS(POROG(JL))),POROG(JL))
138   ZOROG=SIGN(MAX(1.0,ABS(POROG(JL))),POROG(JL))
139   ZALPHA(JL)=RD*(ZT0-ZTSTAR(JL))/ZOROG
140 ENDDO
141
142!*       1.2   COMPUTATION OF MSL PRESSURE.
143
144 DO JL=KSTART,KPROF
145!IM  IF (ABS(POROG(JL)) >= 0.001_JPRB) THEN
146   IF (ABS(POROG(JL)) >= 0.001) THEN
147     ZX=POROG(JL)/(RD*ZTSTAR(JL))
148     ZY=ZALPHA(JL)*ZX
149     ZY2=ZY*ZY
150
151!IM    PMSLPPP(JL)=PRPRESS(JL)*EXP(ZX*(1.0_JPRB-0.5_JPRB*ZY+1.0_JPRB/3._JPRB*ZY2))
152     PMSLPPP(JL)=PRPRESS(JL)*EXP(ZX*(1.0-0.5*ZY+1.0/3.*ZY2))
153   ELSE
154     PMSLPPP(JL)=PRPRESS(JL)
155   ENDIF
156 ENDDO
157
158
159!     ------------------------------------------------------------------
160
161!IM IF (LHOOK) CALL DR_HOOK('PPPMER',1,ZHOOK_HANDLE)
162 END SUBROUTINE PPPMER
Note: See TracBrowser for help on using the repository browser.