UPP  V11.0.0
 All Data Structures Files Functions Pages
ICAOHEIGHT.f
1  SUBROUTINE icaoheight(MAXWP, & !input
2  maxwicaoz) ! output
3 
4 ! SUBPROGRAM: ICAOHEIGHT
5 ! PRGRMMR: CHUANG ORG: W/NP2 DATE: 09-05-08
6 !
7 ! ABSTRACT:
8 ! THIS ROUTINE CONVERT PRESSURE FIELDS TO ICAO HEIGHT
9 !
10 
11 ! Description:
12 ! Convert pressure (Pa) to height (m) using ICAO standard atmosphere
13 ! adpt code from uk
14 ! Method:
15 !
16 !
17 ! Code Description:
18 ! Language: Fortran 90
19 ! Software Standards: UMDP3 v6
20 
21 use ctlblk_mod, only: jsta, jend, spval, im, ista, iend
22 use physcons_post, only: con_g, con_rd
23 IMPLICIT None
24 
25 ! Subroutine Arguments:
26 !REAL, INTENT(IN) :: SPVAL
27 REAL, INTENT(IN) :: maxwp(ista:iend,jsta:jend) !P field for conversion
28 
29 REAL, INTENT(INOUT) :: maxwicaoz(ista:iend,jsta:jend) !ICAO height in m
30 !INTEGER, INTENT(INOUT) :: ErrorStatus
31 
32 ! Local Constants:
33 REAL, PARAMETER :: g_over_r = con_g / con_rd
34 REAL, PARAMETER :: lapse_ratel = 6.5e-03 ! For levels below 11,000 gpm
35 REAL, PARAMETER :: lapse_rateu = -1.0e-03 ! For levels above 11,000 gpm
36 REAL, PARAMETER :: press_bot = 101325. ! ICAO std: surface pressure
37 REAL, PARAMETER :: press_mid = 22632. ! pressure @ 11,000 gpm
38 REAL, PARAMETER :: press_top = 5474.87 ! pressure @ 20,000 gpm
39 REAL, PARAMETER :: temp_bot = 288.15 ! Surface temperature
40 REAL, PARAMETER :: temp_top = 216.65 ! Temperature of isotherm
41 REAL, PARAMETER :: gpm1 = 11000.0 ! Ht limit (gpm) for std lower
42  ! lapse rate
43 REAL, PARAMETER :: gpm2 = 20000.0 ! Ht (gpm) of top of isothermal layer
44 REAL, PARAMETER :: zp1 = lapse_ratel/g_over_r ! Exponents used for
45 REAL, PARAMETER :: zp2 = lapse_rateu/g_over_r ! calculation
46 
47 ! Local Variables:
48 INTEGER :: i,j ! loop counters
49 REAL :: pressure ! Local pressure
50 
51 ! End of header --------------------------------------------------------
52 
53 !IF ( ErrorStatus /= StatusOK ) THEN
54  ! Previous error - do not proceed
55 ! GO TO 9999
56 !END IF
57 
58 !IF ( ASSOCIATED( IHField % RData ) ) THEN
59 ! DEALLOCATE( IHField % RData )
60 !END IF
61 
62 
63 
64 DO j=jsta,jend
65  DO i=ista,iend
66  pressure = maxwp(i,j)
67  IF ( (pressure <= 1000.) .AND. (pressure >= 0.) ) THEN
68  pressure = 1000.
69  print*,'lower ICAO pressure to 10 mb'
70  END IF
71  IF ( pressure > press_bot .and. pressure<spval) THEN
72  pressure = press_bot
73  END IF
74 
75  IF (pressure == spval) THEN
76  maxwicaoz(i,j) = spval
77  ELSE IF (pressure > press_mid) THEN ! Hts up to 11,000 GPM
78  pressure = pressure/press_bot
79  pressure = 1.0 - pressure**zp1
80  maxwicaoz(i,j) = pressure*temp_bot/lapse_ratel
81 
82  ELSE IF (pressure > press_top) THEN ! Hts between 11,000
83  ! and 20,000 GPM
84  pressure = pressure/press_mid
85  pressure = -alog(pressure)
86  maxwicaoz(i,j) = gpm1 + pressure*temp_top/g_over_r
87 
88  ELSE ! Hts above 20,000 GPM
89  pressure = pressure/press_top
90  pressure = 1.0 - pressure**zp2
91  maxwicaoz(i,j) = gpm2 + pressure*temp_top/lapse_rateu
92 
93  END IF
94 
95  ENDDO
96 ENDDO
97 
98 
99 !9999 CONTINUE
100 
101 END SUBROUTINE icaoheight
102 
103 
Definition: physcons.f:1