source: LMDZ6/branches/Amaury_dev/libf/phylmd/pppmer.F90 @ 5441

Last change on this file since 5441 was 5144, checked in by abarral, 5 months ago

Put YOMCST.h into modules

File size: 5.3 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 lmdz_yomcst
67
68  IMPLICIT NONE
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
99  REAL, 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)
162END SUBROUTINE PPPMER
Note: See TracBrowser for help on using the repository browser.