1 |
|
1 |
SUBROUTINE GPPRE(KPROMA,KSTART,KPROF,KFLEV,PVAH,PVBH,PRESH,PRESF) |
2 |
|
|
|
3 |
|
|
!**** *GPPRE* - Computes half and full level pressure |
4 |
|
|
|
5 |
|
|
! Purpose. |
6 |
|
|
! -------- |
7 |
|
|
! Computes pressures at half and full model levels. |
8 |
|
|
|
9 |
|
|
!** Interface. |
10 |
|
|
! ---------- |
11 |
|
|
! *CALL* *GPPRE(KPROMA,KSTART,KPROF,KFLEV,PVAH,PVBH,PRESH,PRESF) |
12 |
|
|
|
13 |
|
|
! Explicit arguments : |
14 |
|
|
! -------------------- |
15 |
|
|
! KPROMA : dimensioning |
16 |
|
|
! KSTART : start of work |
17 |
|
|
! KPROF : depth of work |
18 |
|
|
! KFLEV : vert. dimensioning |
19 |
|
|
! PRESH(KPROMA,0:KFLEV) - HALF LEVEL PRESSURE |
20 |
|
|
! PRESF(KPROMA,KFLEV) - FULL LEVEL PRESSURE |
21 |
|
|
! PVAH(KFLEV),PVBH(KFLEV)- vertical coordinate |
22 |
|
|
! Implicit arguments : NONE. |
23 |
|
|
! -------------------- |
24 |
|
|
|
25 |
|
|
! Method. |
26 |
|
|
! ------- |
27 |
|
|
! See documentation |
28 |
|
|
|
29 |
|
|
! Externals. None. |
30 |
|
|
! ---------- |
31 |
|
|
|
32 |
|
|
! Reference. |
33 |
|
|
! ---------- |
34 |
|
|
! ECMWF Research Department documentation of the IFS |
35 |
|
|
! Half level P: PHk = Ak + Bk * Ps |
36 |
|
|
|
37 |
|
|
! PHk*ln(PHk) - PHk-1*ln(PHk-1) |
38 |
|
|
! Full level P: ln(PFk) = [ ------------------------------- - 1. ] |
39 |
|
|
! PHk - PHk-1 |
40 |
|
|
|
41 |
|
|
! Author. |
42 |
|
|
! ------- |
43 |
|
|
! Mats Hamrud and Philippe Courtier *ECMWF* |
44 |
|
|
|
45 |
|
|
! Modifications. |
46 |
|
|
! -------------- |
47 |
|
|
! Original : 88-02-04 |
48 |
|
|
! Erik Andersson 920326: Altered computation of full level pressure |
49 |
|
|
! Erik Andersson 930225: Use GPPREH/F. |
50 |
|
|
! M.Hamrud 01-Oct-2003 CY28 Cleaning |
51 |
|
|
! ------------------------------------------------------------------ |
52 |
|
|
|
53 |
|
|
USE PARKIND1 ,ONLY : JPIM ,JPRB |
54 |
|
|
USE YOMHOOK ,ONLY : LHOOK, DR_HOOK |
55 |
|
|
|
56 |
|
|
USE YOMGEM , ONLY : VC ,VDELB |
57 |
|
|
|
58 |
|
|
IMPLICIT NONE |
59 |
|
|
|
60 |
|
|
INTEGER(KIND=JPIM),INTENT(IN) :: KPROMA |
61 |
|
|
INTEGER(KIND=JPIM),INTENT(IN) :: KFLEV |
62 |
|
|
INTEGER(KIND=JPIM),INTENT(IN) :: KSTART |
63 |
|
|
INTEGER(KIND=JPIM),INTENT(IN) :: KPROF |
64 |
|
|
REAL(KIND=JPRB) ,INTENT(IN) :: PVAH(0:KFLEV) |
65 |
|
|
REAL(KIND=JPRB) ,INTENT(IN) :: PVBH(0:KFLEV) |
66 |
|
|
REAL(KIND=JPRB) ,INTENT(INOUT) :: PRESH(KPROMA,0:KFLEV) |
67 |
|
|
REAL(KIND=JPRB) ,INTENT(OUT) :: PRESF(KPROMA,KFLEV) |
68 |
|
2 |
REAL(KIND=JPRB) :: ZLNPR(KPROMA,KFLEV) , ZALPH (KPROMA,KFLEV) |
69 |
|
2 |
REAL(KIND=JPRB) :: ZDELP(KPROMA,KFLEV) , ZRDELP(KPROMA,KFLEV) |
70 |
|
2 |
REAL(KIND=JPRB) :: ZRTGR(KPROMA,KFLEV) , ZRPRES(KPROMA,KFLEV) |
71 |
|
2 |
REAL(KIND=JPRB) :: ZRPP (KPROMA,KFLEV) |
72 |
|
|
REAL(KIND=JPRB) :: ZHOOK_HANDLE |
73 |
|
|
|
74 |
|
|
#include "gppref.intfb.h" |
75 |
|
|
#include "gppreh.intfb.h" |
76 |
|
|
#include "gpxyb.intfb.h" |
77 |
|
|
|
78 |
|
|
! ------------------------------------------------------------------ |
79 |
|
|
|
80 |
|
|
!* 1. COMPUTES HALF AND FULL LEVEL PRESSURES |
81 |
|
|
! -------------------------------------- |
82 |
|
|
|
83 |
✓✗ |
1 |
IF (LHOOK) CALL DR_HOOK('GPPRE',0,ZHOOK_HANDLE) |
84 |
|
1 |
CALL GPPREH(KPROMA,KSTART,KPROF,KFLEV,PVAH,PVBH,PRESH) |
85 |
|
|
CALL GPXYB(KPROMA,KSTART,KPROF,KFLEV,VDELB,VC,PRESH,ZDELP,& |
86 |
|
1 |
& ZRDELP,ZLNPR,ZALPH,ZRTGR,ZRPRES,ZRPP) |
87 |
|
1 |
CALL GPPREF(KPROMA,KSTART,KPROF,KFLEV,PVAH,PVBH,ZALPH,PRESH,PRESF) |
88 |
|
|
|
89 |
|
|
! ------------------------------------------------------------------ |
90 |
|
|
|
91 |
✓✗ |
1 |
IF (LHOOK) CALL DR_HOOK('GPPRE',1,ZHOOK_HANDLE) |
92 |
|
1 |
END SUBROUTINE GPPRE |