14 integer :: post_avblfldidx=-9999
15 character(len=80) :: shortname=
''
16 character(len=300) :: longname=
''
17 integer :: mass_windpoint=1
18 character(len=30) :: pdstmpl=
'tmpl4_0'
19 character(len=30) :: pname=
''
20 character(len=10) :: table_info=
''
21 character(len=80) :: stats_proc=
''
22 character(len=80) :: fixed_sfc1_type=
''
23 integer,
dimension(:),
pointer :: scale_fact_fixed_sfc1 => null()
24 real,
dimension(:),
pointer :: level => null()
25 character(len=80) :: fixed_sfc2_type=
''
26 integer,
dimension(:),
pointer :: scale_fact_fixed_sfc2 => null()
27 real,
dimension(:),
pointer :: level2 => null()
28 character(len=80) :: aerosol_type=
''
29 character(len=80) :: typ_intvl_size=
''
30 integer :: scale_fact_1st_size=0
31 real :: scale_val_1st_size=0.0
32 integer :: scale_fact_2nd_size=0
33 real :: scale_val_2nd_size=0.0
34 character(len=80) :: typ_intvl_wvlen=
''
35 integer :: scale_fact_1st_wvlen=0
36 real :: scale_val_1st_wvlen=0.0
37 integer :: scale_fact_2nd_wvlen=0
38 real :: scale_val_2nd_wvlen=0.0
39 real,
dimension(:),
pointer :: scale => null()
40 integer :: stat_miss_val=0
41 integer :: leng_time_range_prev=0
42 integer :: time_inc_betwn_succ_fld=0
43 character(len=80) :: type_of_time_inc=
''
44 character(len=20) :: stat_unit_time_key_succ=
''
45 character(len=20) :: bit_map_flag=
''
49 character(len=6) :: datset=
''
50 integer :: grid_num=255
51 character(len=20) :: sub_center=
''
52 character(len=20) :: version_no=
''
53 character(len=20) :: local_table_vers_no=
''
54 character(len=20) :: sigreftime=
''
55 character(len=20) :: prod_status=
''
56 character(len=20) :: data_type=
''
57 character(len=20) :: gen_proc_type=
''
58 character(len=30) :: time_range_unit=
''
59 character(len=50) :: orig_center=
''
60 character(len=30) :: gen_proc=
''
61 character(len=50) :: packing_method=
''
62 character(len=30) :: order_of_sptdiff=
'1st_ord_sptdiff'
63 character(len=20) :: field_datatype=
''
64 character(len=30) :: comprs_type=
''
65 character(len=50) :: type_ens_fcst=
''
66 character(len=50) :: type_derived_fcst=
''
67 type(param_t),
dimension(:),
pointer :: param => null()
71 type(param_t),
dimension(:),
pointer :: param => null()
74 type (paramset_t),
dimension(:),
pointer :: paramset
75 type (post_avblfld_t),
save :: post_avblflds
78 subroutine read_postxconfig()
80 use rqstfld_mod,
only: num_post_afld,mxlvl,lvlsxml
81 use ctlblk_mod,
only:tprec,tclod,trdlw,trdsw,tsrfc &
82 ,tmaxmin,td3d,me,filenameflat
87 integer paramset_count, param_count
91 integer level_array_count
93 integer level2_array_count
94 integer scale_array_count
98 character(len=80) testcharname
104 open(unit=22,file=trim(filenameflat), &
105 form=
"formatted", access=
"sequential", &
106 status=
"old", position=
"rewind")
109 read(22,*)paramset_count
112 allocate(paramset(paramset_count))
120 do i = paramset_count, 1, -1
121 read(22,*)param_count
123 allocate(paramset(i)%param(param_count))
127 num_post_afld = num_post_afld + param_count
131 if(
allocated(lvlsxml))
deallocate(lvlsxml)
132 allocate(lvlsxml(mxlvl,num_post_afld))
135 do i = 1, paramset_count
140 read(22,*)paramset(i)%datset
141 call filter_char_inp(paramset(i)%datset)
143 param_count =
size (paramset(i)%param)
145 read(22,*)paramset(i)%grid_num
146 read(22,*)paramset(i)%sub_center
147 call filter_char_inp(paramset(i)%sub_center)
148 read(22,*)paramset(i)%version_no
149 call filter_char_inp(paramset(i)%version_no)
150 read(22,*)paramset(i)%local_table_vers_no
151 call filter_char_inp(paramset(i)%local_table_vers_no)
152 read(22,*)paramset(i)%sigreftime
153 call filter_char_inp(paramset(i)%sigreftime)
154 read(22,*)paramset(i)%prod_status
155 call filter_char_inp(paramset(i)%prod_status)
156 read(22,*)paramset(i)%data_type
157 call filter_char_inp(paramset(i)%data_type)
158 read(22,*)paramset(i)%gen_proc_type
159 call filter_char_inp(paramset(i)%gen_proc_type)
160 read(22,*)paramset(i)%time_range_unit
161 call filter_char_inp(paramset(i)%time_range_unit)
162 read(22,*)paramset(i)%orig_center
163 call filter_char_inp(paramset(i)%orig_center)
164 read(22,*)paramset(i)%gen_proc
165 call filter_char_inp(paramset(i)%gen_proc)
166 read(22,*)paramset(i)%packing_method
167 call filter_char_inp(paramset(i)%packing_method)
168 read(22,*)paramset(i)%order_of_sptdiff
169 read(22,*)paramset(i)%field_datatype
170 call filter_char_inp(paramset(i)%field_datatype)
171 read(22,*)paramset(i)%comprs_type
172 call filter_char_inp(paramset(i)%comprs_type)
173 if(paramset(i)%gen_proc_type==
'ens_fcst')
then
174 read(22,*)paramset(i)%type_ens_fcst
175 call filter_char_inp(paramset(i)%type_ens_fcst)
185 do j = 1, param_count
186 read(22,*)paramset(i)%param(j)%post_avblfldidx
187 read(22,*)paramset(i)%param(j)%shortname
188 read(22,
'(A300)')paramset(i)%param(j)%longname
189 call filter_char_inp(paramset(i)%param(j)%longname)
191 read(22,*)paramset(i)%param(j)%mass_windpoint
192 read(22,*)paramset(i)%param(j)%pdstmpl
193 read(22,*)paramset(i)%param(j)%pname
194 call filter_char_inp(paramset(i)%param(j)%pname)
196 read(22,*)paramset(i)%param(j)%table_info
197 call filter_char_inp(paramset(i)%param(j)%table_info)
198 read(22,*)paramset(i)%param(j)%stats_proc
199 call filter_char_inp(paramset(i)%param(j)%stats_proc)
200 read(22,*)paramset(i)%param(j)%fixed_sfc1_type
201 call filter_char_inp(paramset(i)%param(j)%fixed_sfc1_type)
205 allocate( paramset(i)%param(j)%scale_fact_fixed_sfc1(1))
209 deallocate( paramset(i)%param(j)%scale_fact_fixed_sfc1)
211 allocate( paramset(i)%param(j)%scale_fact_fixed_sfc1(cc))
212 read(22,*)paramset(i)%param(j)%scale_fact_fixed_sfc1
216 paramset(i)%param(j)%scale_fact_fixed_sfc1(1)=0
221 read(22,*)level_array_count
222 allocate( paramset(i)%param(j)%level(1))
223 if (level_array_count > 0)
then
224 deallocate( paramset(i)%param(j)%level)
225 allocate( paramset(i)%param(j)%level(level_array_count))
226 read(22,*)paramset(i)%param(j)%level
228 paramset(i)%param(j)%level(1)=0
232 read(22,*)paramset(i)%param(j)%fixed_sfc2_type
233 call filter_char_inp(paramset(i)%param(j)%fixed_sfc2_type)
235 allocate( paramset(i)%param(j)%scale_fact_fixed_sfc2(1))
237 deallocate(paramset(i)%param(j)%scale_fact_fixed_sfc2)
238 allocate(paramset(i)%param(j)%scale_fact_fixed_sfc2(cv))
239 read(22,*)paramset(i)%param(j)%scale_fact_fixed_sfc2
241 paramset(i)%param(j)%scale_fact_fixed_sfc2(1)=0
245 read(22,*)level2_array_count
246 if (level2_array_count > 0)
then
247 allocate(paramset(i)%param(j)%level2(level2_array_count))
248 read(22,*)paramset(i)%param(j)%level2
253 read(22,*)paramset(i)%param(j)%aerosol_type
254 call filter_char_inp(paramset(i)%param(j)%aerosol_type)
255 read(22,*)paramset(i)%param(j)%typ_intvl_size
256 call filter_char_inp(paramset(i)%param(j)%typ_intvl_size)
258 read(22,*)paramset(i)%param(j)%scale_fact_1st_size
259 read(22,*)paramset(i)%param(j)%scale_val_1st_size
260 read(22,*)paramset(i)%param(j)%scale_fact_2nd_size
261 read(22,*)paramset(i)%param(j)%scale_val_2nd_size
262 read(22,*)paramset(i)%param(j)%typ_intvl_wvlen
263 call filter_char_inp(paramset(i)%param(j)%typ_intvl_wvlen)
265 read(22,*)paramset(i)%param(j)%scale_fact_1st_wvlen
266 read(22,*)paramset(i)%param(j)%scale_val_1st_wvlen
267 read(22,*)paramset(i)%param(j)%scale_fact_2nd_wvlen
268 read(22,*)paramset(i)%param(j)%scale_val_2nd_wvlen
269 read(22,*)scale_array_count
270 allocate(paramset(i)%param(j)%scale(1))
271 if (scale_array_count > 0)
then
272 deallocate(paramset(i)%param(j)%scale)
273 allocate(paramset(i)%param(j)%scale(scale_array_count))
274 read(22,*)paramset(i)%param(j)%scale
276 paramset(i)%param(j)%scale(1)=0
279 read(22,*)paramset(i)%param(j)%stat_miss_val
280 read(22,*)paramset(i)%param(j)%leng_time_range_prev
281 read(22,*)paramset(i)%param(j)%time_inc_betwn_succ_fld
282 read(22,*)paramset(i)%param(j)%type_of_time_inc
284 call filter_char_inp(paramset(i)%param(j)%type_of_time_inc)
285 read(22,*)paramset(i)%param(j)%stat_unit_time_key_succ
286 call filter_char_inp(paramset(i)%param(j)%stat_unit_time_key_succ)
287 read(22,*)paramset(i)%param(j)%bit_map_flag
288 call filter_char_inp(paramset(i)%param(j)%bit_map_flag)
293 post_avblflds%param => paramset(i)%param
299 end subroutine read_postxconfig
302 subroutine filter_char_inp (inpchar)
304 character,
intent(inout) :: inpchar
305 if (inpchar ==
"?")
then
308 end subroutine filter_char_inp