1 | ! FORMAT_INPUT: Procedures to prepare data for input to the simulator |
---|
2 | ! Compiled/Modified: |
---|
3 | ! 08/28/2006 John Haynes (haynes@atmos.colostate.edu) |
---|
4 | ! |
---|
5 | ! irreg_to_grid (subroutine) |
---|
6 | ! order_data (subroutine) |
---|
7 | |
---|
8 | module format_input |
---|
9 | |
---|
10 | contains |
---|
11 | |
---|
12 | ! ---------------------------------------------------------------------------- |
---|
13 | ! SUBROUTINE IRREG_TO_GRID |
---|
14 | ! ---------------------------------------------------------------------------- |
---|
15 | subroutine irreg_to_grid(hgt_matrix,t_matrix,p_matrix,rh_matrix, & |
---|
16 | env_hgt_matrix,env_t_matrix,env_p_matrix,env_rh_matrix) |
---|
17 | use array_lib |
---|
18 | implicit none |
---|
19 | |
---|
20 | ! Purpose: |
---|
21 | ! Linearly interpolate sounding-level data to the hydrometeor-level |
---|
22 | ! resolution |
---|
23 | ! |
---|
24 | ! Inputs: |
---|
25 | ! [hgt_matrix] hydrometeor-level heights |
---|
26 | ! [env_hgt_matrix] sounding-level heights |
---|
27 | ! [env_t_matrix] sounding-level temperatures |
---|
28 | ! [env_p_matrix] sounding-level pressures |
---|
29 | ! [env_rh_matrix] sounding-level relative humidities |
---|
30 | ! |
---|
31 | ! Outputs: |
---|
32 | ! [t_matrix] hydrometeor-level temperatures |
---|
33 | ! [p_matrix] hydrometeor-level pressures |
---|
34 | ! [rh_matrix] hydrometeor-level relative humidities |
---|
35 | ! |
---|
36 | ! Created: |
---|
37 | ! 08/28/2006 John Haynes (haynes@atmos.colostate.edu) |
---|
38 | |
---|
39 | ! ----- INPUTS ----- |
---|
40 | real*8, dimension(:,:), intent(in) :: & |
---|
41 | hgt_matrix,env_hgt_matrix,env_t_matrix,env_p_matrix,env_rh_matrix |
---|
42 | |
---|
43 | ! ----- OUTPUTS ----- |
---|
44 | real*8, dimension(:,:), intent(out) :: & |
---|
45 | t_matrix,p_matrix,rh_matrix |
---|
46 | |
---|
47 | ! ----- INTERNAL ----- |
---|
48 | integer :: nprof, i |
---|
49 | integer,parameter :: KR8 = selected_real_kind(15,300) |
---|
50 | |
---|
51 | nprof = size(hgt_matrix,1) |
---|
52 | do i=1,nprof |
---|
53 | call lin_interpolate(env_t_matrix(i,:),env_hgt_matrix(i,:), & |
---|
54 | t_matrix(i,:),hgt_matrix(i,:),1000._KR8) |
---|
55 | call lin_interpolate(env_p_matrix(i,:),env_hgt_matrix(i,:), & |
---|
56 | p_matrix(i,:),hgt_matrix(i,:),1000._KR8) |
---|
57 | call lin_interpolate(env_rh_matrix(i,:),env_hgt_matrix(i,:), & |
---|
58 | rh_matrix(i,:),hgt_matrix(i,:),1000._KR8) |
---|
59 | enddo |
---|
60 | |
---|
61 | end subroutine irreg_to_grid |
---|
62 | |
---|
63 | ! ---------------------------------------------------------------------------- |
---|
64 | ! SUBROUTINE ORDER_DATA |
---|
65 | ! ---------------------------------------------------------------------------- |
---|
66 | subroutine order_data(hgt_matrix,hm_matrix,p_matrix,t_matrix, & |
---|
67 | rh_matrix,sfc_radar,hgt_reversed) |
---|
68 | implicit none |
---|
69 | |
---|
70 | ! Purpose: |
---|
71 | ! Ensure that input data is in top-down order/bottom-up order, |
---|
72 | ! for space-based/surface based radars, respectively |
---|
73 | ! |
---|
74 | ! Inputs: |
---|
75 | ! [hgt_matrix] heights |
---|
76 | ! [hm_matrix] mixing ratios |
---|
77 | ! [t_matrix] temperatures |
---|
78 | ! [p_matrix] pressures |
---|
79 | ! [rh_matrix] relative humidities |
---|
80 | ! [sfc_radar] 1=surface radar, 0=spaceborne |
---|
81 | ! |
---|
82 | ! Outputs: |
---|
83 | ! [hgt_matrix],[hm_matrix],[p_matrix,[t_matrix],[rh_matrix] in proper |
---|
84 | ! order for input to the radar simulator routine |
---|
85 | ! [hgt_reversed] T=heights were reordered,F=heights were not reordered |
---|
86 | ! |
---|
87 | ! Note: |
---|
88 | ! The order for all profiles is assumed to the same as the first profile. |
---|
89 | ! |
---|
90 | ! Created: |
---|
91 | ! 08/28/2006 John Haynes (haynes@atmos.colostate.edu) |
---|
92 | |
---|
93 | ! ----- INPUTS ----- |
---|
94 | integer, intent(in) :: sfc_radar |
---|
95 | |
---|
96 | ! ----- OUTPUTS ----- |
---|
97 | real*8, dimension(:,:), intent(inout) :: & |
---|
98 | hgt_matrix,p_matrix,t_matrix,rh_matrix |
---|
99 | real*8, dimension(:,:,:), intent(inout) :: & |
---|
100 | hm_matrix |
---|
101 | logical, intent(out) :: hgt_reversed |
---|
102 | |
---|
103 | ! ----- INTERNAL ----- |
---|
104 | integer :: ngate |
---|
105 | logical :: hgt_descending |
---|
106 | |
---|
107 | |
---|
108 | ngate = size(hgt_matrix,2) |
---|
109 | hgt_descending = hgt_matrix(1,1) > hgt_matrix(1,ngate) |
---|
110 | |
---|
111 | ! :: surface: heights must be ascending |
---|
112 | ! :: space-based: heights must be descending |
---|
113 | if ( & |
---|
114 | (sfc_radar == 1 .and. hgt_descending) .or. & |
---|
115 | (sfc_radar == 0 .and. (.not. hgt_descending)) & |
---|
116 | ) & |
---|
117 | then |
---|
118 | |
---|
119 | hgt_matrix(:,:) = hgt_matrix(:,ngate:1:-1) |
---|
120 | hm_matrix(:,:,:) = hm_matrix(:,:,ngate:1:-1) |
---|
121 | p_matrix(:,:) = p_matrix(:,ngate:1:-1) |
---|
122 | t_matrix(:,:) = t_matrix(:,ngate:1:-1) |
---|
123 | rh_matrix(:,:) = rh_matrix(:,ngate:1:-1) |
---|
124 | |
---|
125 | hgt_reversed = .true. |
---|
126 | else |
---|
127 | hgt_reversed = .false. |
---|
128 | endif |
---|
129 | |
---|
130 | end subroutine order_data |
---|
131 | |
---|
132 | end module format_input |
---|