[1262] | 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 |
---|