74 & time_average, average, &
76 & origin_value, origin_unit, &
77 & terminus_value, terminus_unit, &
78 & slice_start, slice_end, slice_stride, &
80 & newfile_intvalue, newfile_intunit, &
89 use dc_date,
only: dcdifftimecreate
90 use netcdf,
only: nf90_max_dims
93 real(DP),
intent(in),
optional:: interval_value
99 character(*),
intent(in),
optional:: interval_unit
102 character(*),
intent(in),
optional:: precision
105 logical,
intent(in),
optional:: time_average
108 logical,
intent(in),
optional:: average
111 character(*),
intent(in),
optional:: fileprefix
114 real(DP),
intent(in),
optional:: origin_value
117 character(*),
intent(in),
optional:: origin_unit
120 real(DP),
intent(in),
optional:: terminus_value
123 character(*),
intent(in),
optional:: terminus_unit
126 integer,
intent(in),
optional:: slice_start(:)
129 integer,
intent(in),
optional:: slice_end(:)
132 integer,
intent(in),
optional:: slice_stride(:)
135 logical,
intent(in),
optional:: space_average(:)
138 integer,
intent(in),
optional:: newfile_intvalue
141 character(*),
intent(in),
optional:: newfile_intunit
144 logical,
intent(out),
optional:: err
163 integer:: stat, ary_size
164 character(STRING):: cause_c
165 character(*),
parameter:: subname =
'HstNmlInfoCreate'
168 & fmt =
'@interval_value=%r @interval_unit=%c @precision=%c @time_average=%y @fileprefix=%c', &
182 if ( gthstnml % initialized )
then
184 cause_c =
'GTHST_NMLINFO'
192 allocate( gthstnml % gthstnml_list )
193 nullify( gthstnml % gthstnml_list % next )
199 gthstnml % gthstnml_list % name =
''
200 gthstnml % gthstnml_list % file =
''
202 allocate( gthstnml % gthstnml_list % interval_value )
203 allocate( gthstnml % gthstnml_list % interval_unit )
204 allocate( gthstnml % gthstnml_list % precision )
205 allocate( gthstnml % gthstnml_list % time_average )
206 allocate( gthstnml % gthstnml_list % fileprefix )
208 allocate( gthstnml % gthstnml_list % origin_value )
209 allocate( gthstnml % gthstnml_list % origin_unit )
210 allocate( gthstnml % gthstnml_list % terminus_value )
211 allocate( gthstnml % gthstnml_list % terminus_unit )
212 allocate( gthstnml % gthstnml_list % slice_start (1:nf90_max_dims) )
213 allocate( gthstnml % gthstnml_list % slice_end (1:nf90_max_dims) )
214 allocate( gthstnml % gthstnml_list % slice_stride (1:nf90_max_dims) )
215 allocate( gthstnml % gthstnml_list % space_average (1:nf90_max_dims) )
216 allocate( gthstnml % gthstnml_list % newfile_intvalue )
217 allocate( gthstnml % gthstnml_list % newfile_intunit )
220 gthstnml % gthstnml_list % interval_value = -1.0
221 gthstnml % gthstnml_list % interval_unit =
'sec'
222 gthstnml % gthstnml_list % precision =
'float'
223 gthstnml % gthstnml_list % time_average = .false.
224 gthstnml % gthstnml_list % fileprefix =
''
226 gthstnml % gthstnml_list % origin_value = -1.0
227 gthstnml % gthstnml_list % origin_unit =
'sec'
228 gthstnml % gthstnml_list % terminus_value = -1.0
229 gthstnml % gthstnml_list % terminus_unit =
'sec'
230 gthstnml % gthstnml_list % slice_start = 1
231 gthstnml % gthstnml_list % slice_end = -1
232 gthstnml % gthstnml_list % slice_stride = 1
233 gthstnml % gthstnml_list % space_average = .false.
234 gthstnml % gthstnml_list % newfile_intvalue = -1
235 gthstnml % gthstnml_list % newfile_intunit =
'sec'
237 if (
present(interval_value) ) gthstnml % gthstnml_list % interval_value = &
238 & real( interval_value, kind = kind( gthstnml % gthstnml_list % interval_value ) )
239 if (
present(interval_unit) ) gthstnml % gthstnml_list % interval_unit = interval_unit
240 if (
present(precision) ) gthstnml % gthstnml_list % precision = precision
242 if (
present(average) ) gthstnml % gthstnml_list % time_average = average
243 if (
present(time_average) ) gthstnml % gthstnml_list % time_average = time_average
244 if (
present(fileprefix) ) gthstnml % gthstnml_list % fileprefix = fileprefix
246 if (
present(origin_value ) ) gthstnml % gthstnml_list % origin_value = &
247 & real( origin_value, kind = kind( gthstnml % gthstnml_list % origin_value ) )
248 if (
present(origin_unit ) ) gthstnml % gthstnml_list % origin_unit = origin_unit
249 if (
present(terminus_value ) ) gthstnml % gthstnml_list % terminus_value = &
250 & real( terminus_value, kind = kind( gthstnml % gthstnml_list % terminus_value ) )
251 if (
present(terminus_unit ) ) gthstnml % gthstnml_list % terminus_unit = terminus_unit
252 if (
present(slice_start ) )
then
253 ary_size =
size(slice_start)
254 gthstnml % gthstnml_list % slice_start(1:ary_size) = slice_start
256 if (
present(slice_end ) )
then
257 ary_size =
size(slice_end)
258 gthstnml % gthstnml_list % slice_end(1:ary_size) = slice_end
260 if (
present(slice_stride ) )
then
261 ary_size =
size(slice_stride)
262 gthstnml % gthstnml_list % slice_stride(1:ary_size) = slice_stride
264 if (
present(space_average ) )
then
265 ary_size =
size(space_average)
266 gthstnml % gthstnml_list % space_average(1:ary_size) = space_average
268 if (
present(newfile_intvalue) ) gthstnml % gthstnml_list % newfile_intvalue = newfile_intvalue
269 if (
present(newfile_intunit ) ) gthstnml % gthstnml_list % newfile_intunit = newfile_intunit
275 call dcdifftimecreate( &
276 & diff = interval_time, &
278 & real( gthstnml % gthstnml_list % interval_value, dp ), &
279 & unit = gthstnml % gthstnml_list % interval_unit, &
290 gthstnml % initialized = .true.
291 gthstnml % define_mode = .true.
293 call storeerror( stat, subname, err, cause_c )
subroutine hstnmlinfocreate(gthstnml, interval_value, interval_unit, precision, time_average, average, fileprefix, origin_value, origin_unit, terminus_value, terminus_unit, slice_start, slice_end, slice_stride, space_average, newfile_intvalue, newfile_intunit, err)