Directory: | ./ |
---|---|
File: | rad/gppre.f90 |
Date: | 2022-01-11 19:19:34 |
Exec | Total | Coverage | |
---|---|---|---|
Lines: | 11 | 11 | 100.0% |
Branches: | 2 | 4 | 50.0% |
Line | Branch | Exec | Source |
---|---|---|---|
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 | INTERFACE | ||
75 | SUBROUTINE GPPREF(KPROMA,KSTART,KPROF,KFLEV,PVAH,PVBH,PALPH,PRESH,PRESF) | ||
76 | USE PARKIND1 ,ONLY : JPIM ,JPRB | ||
77 | INTEGER(KIND=JPIM),INTENT(IN) :: KPROMA | ||
78 | INTEGER(KIND=JPIM),INTENT(IN) :: KFLEV | ||
79 | INTEGER(KIND=JPIM),INTENT(IN) :: KSTART | ||
80 | INTEGER(KIND=JPIM),INTENT(IN) :: KPROF | ||
81 | REAL(KIND=JPRB) :: PVAH(0:KFLEV) | ||
82 | REAL(KIND=JPRB) :: PVBH(0:KFLEV) | ||
83 | REAL(KIND=JPRB) ,INTENT(IN) :: PALPH(KPROMA,KFLEV) | ||
84 | REAL(KIND=JPRB) ,INTENT(IN) :: PRESH(KPROMA,0:KFLEV) | ||
85 | REAL(KIND=JPRB) ,INTENT(OUT) :: PRESF(KPROMA,KFLEV) | ||
86 | END SUBROUTINE GPPREF | ||
87 | END INTERFACE | ||
88 | INTERFACE | ||
89 | SUBROUTINE GPPREH(KPROMA,KSTART,KPROF,KFLEV,PVAH,PVBH,PRESH) | ||
90 | USE PARKIND1 ,ONLY : JPIM ,JPRB | ||
91 | INTEGER(KIND=JPIM),INTENT(IN) :: KPROMA | ||
92 | INTEGER(KIND=JPIM),INTENT(IN) :: KFLEV | ||
93 | INTEGER(KIND=JPIM),INTENT(IN) :: KSTART | ||
94 | INTEGER(KIND=JPIM),INTENT(IN) :: KPROF | ||
95 | REAL(KIND=JPRB) ,INTENT(IN) :: PVAH(0:KFLEV) | ||
96 | REAL(KIND=JPRB) ,INTENT(IN) :: PVBH(0:KFLEV) | ||
97 | REAL(KIND=JPRB) ,INTENT(INOUT) :: PRESH(KPROMA,0:KFLEV) | ||
98 | END SUBROUTINE GPPREH | ||
99 | END INTERFACE | ||
100 | INTERFACE | ||
101 | SUBROUTINE GPXYB(KPROMA,KSTART,KPROF,KFLEV,PVDELB,PVC,& | ||
102 | & PRES,PDELP,PRDELP,PLNPR,PALPH,PRTGR,& | ||
103 | & PRPRES,PRPP) | ||
104 | USE PARKIND1 ,ONLY : JPIM ,JPRB | ||
105 | INTEGER(KIND=JPIM),INTENT(IN) :: KPROMA | ||
106 | INTEGER(KIND=JPIM),INTENT(IN) :: KFLEV | ||
107 | INTEGER(KIND=JPIM),INTENT(IN) :: KSTART | ||
108 | INTEGER(KIND=JPIM),INTENT(IN) :: KPROF | ||
109 | REAL(KIND=JPRB) ,INTENT(IN) :: PVDELB(KFLEV) | ||
110 | REAL(KIND=JPRB) ,INTENT(IN) :: PVC(KFLEV) | ||
111 | REAL(KIND=JPRB) ,INTENT(IN) :: PRES(KPROMA,0:KFLEV) | ||
112 | REAL(KIND=JPRB) ,INTENT(INOUT) :: PDELP(KPROMA,KFLEV) | ||
113 | REAL(KIND=JPRB) ,INTENT(INOUT) :: PRDELP(KPROMA,KFLEV) | ||
114 | REAL(KIND=JPRB) ,INTENT(INOUT) :: PLNPR(KPROMA,KFLEV) | ||
115 | REAL(KIND=JPRB) ,INTENT(OUT) :: PALPH(KPROMA,KFLEV) | ||
116 | REAL(KIND=JPRB) ,INTENT(OUT) :: PRTGR(KPROMA,KFLEV) | ||
117 | REAL(KIND=JPRB) ,INTENT(OUT) :: PRPRES(KPROMA,KFLEV) | ||
118 | REAL(KIND=JPRB) ,INTENT(INOUT) :: PRPP(KPROMA,KFLEV) | ||
119 | END SUBROUTINE GPXYB | ||
120 | END INTERFACE | ||
121 | |||
122 | ! ------------------------------------------------------------------ | ||
123 | |||
124 | !* 1. COMPUTES HALF AND FULL LEVEL PRESSURES | ||
125 | ! -------------------------------------- | ||
126 | |||
127 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | IF (LHOOK) CALL DR_HOOK('GPPRE',0,ZHOOK_HANDLE) |
128 | 1 | CALL GPPREH(KPROMA,KSTART,KPROF,KFLEV,PVAH,PVBH,PRESH) | |
129 | CALL GPXYB(KPROMA,KSTART,KPROF,KFLEV,VDELB,VC,PRESH,ZDELP,& | ||
130 | 1 | & ZRDELP,ZLNPR,ZALPH,ZRTGR,ZRPRES,ZRPP) | |
131 | 1 | CALL GPPREF(KPROMA,KSTART,KPROF,KFLEV,PVAH,PVBH,ZALPH,PRESH,PRESF) | |
132 | |||
133 | ! ------------------------------------------------------------------ | ||
134 | |||
135 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | IF (LHOOK) CALL DR_HOOK('GPPRE',1,ZHOOK_HANDLE) |
136 | 1 | END SUBROUTINE GPPRE | |
137 |