12 & interval_value, interval_unit, &
14 & time_average, average, &
16 & origin_value, origin_unit, &
17 & terminus_value, terminus_unit, &
18 & slice_start, slice_end, slice_stride, &
20 & newfile_intvalue, newfile_intunit, &
60 use dc_date, only: dcdifftimecreate,
operator(>),
operator(<)
64 use netcdf
, only: nf90_max_dims
67 character(*),
intent(in),
optional:: name
92 character(*),
intent(in),
optional:: file
95 real(DP),
intent(in),
optional:: interval_value
101 character(*),
intent(in),
optional:: interval_unit
104 character(*),
intent(in),
optional:: precision
107 logical,
intent(in),
optional:: time_average
110 logical,
intent(in),
optional:: average
113 character(*),
intent(in),
optional:: fileprefix
116 real(DP),
intent(in),
optional:: origin_value
119 character(*),
intent(in),
optional:: origin_unit
122 real(DP),
intent(in),
optional:: terminus_value
125 character(*),
intent(in),
optional:: terminus_unit
128 integer,
intent(in),
optional:: slice_start(:)
131 integer,
intent(in),
optional:: slice_end(:)
134 integer,
intent(in),
optional:: slice_stride(:)
137 logical,
intent(in),
optional:: space_average(:)
140 integer,
intent(in),
optional:: newfile_intvalue
143 character(*),
intent(in),
optional:: newfile_intunit
146 logical,
intent(out),
optional:: err
167 character(TOKEN),
pointer:: varnames_array(:) =>null()
168 integer:: i, vnmax, ary_size
170 character(STRING):: cause_c
171 character(*),
parameter:: subname =
'HstNmlInfoAdd' 174 & fmt =
'@name=%a @file=%a @interval_value=%r @interval_unit=%a @precision=%a @time_average=%y @fileprefix=%a', &
191 if ( .not. gthstnml % initialized )
then 193 cause_c =
'GTHST_NMLINFO' 197 if ( .not. gthstnml % define_mode )
then 209 call dbgmessage(
'multiple entries (%c) will be created', c1 = trim(name) )
213 & carray = varnames_array )
214 vnmax =
size( varnames_array )
218 & gthstnml = gthstnml, &
219 & name = varnames_array(i), &
221 & interval_value = interval_value, &
222 & interval_unit = interval_unit, &
223 & precision = precision, &
224 & time_average = time_average, &
225 & average = average, &
226 & origin_value = origin_value, &
227 & origin_unit = origin_unit, &
228 & terminus_value = terminus_value, &
229 & terminus_unit = terminus_unit, &
230 & slice_start = slice_start, &
231 & slice_end = slice_end, &
232 & slice_stride = slice_stride, &
233 & space_average = space_average, &
234 & newfile_intvalue = newfile_intvalue, &
235 & newfile_intunit = newfile_intunit, &
238 deallocate( varnames_array )
243 deallocate( varnames_array )
253 if (
present(interval_value) ) gthstnml % gthstnml_list % interval_value = interval_value
254 if (
present(interval_unit) ) gthstnml % gthstnml_list % interval_unit = interval_unit
255 if (
present(precision) ) gthstnml % gthstnml_list % precision = precision
256 if (
present(average) ) gthstnml % gthstnml_list % time_average = average
257 if (
present(time_average) ) gthstnml % gthstnml_list % time_average = time_average
258 if (
present(fileprefix) ) gthstnml % gthstnml_list % fileprefix = fileprefix
260 if (
present(origin_value ) ) gthstnml % gthstnml_list % origin_value = origin_value
261 if (
present(origin_unit ) ) gthstnml % gthstnml_list % origin_unit = origin_unit
262 if (
present(terminus_value ) ) gthstnml % gthstnml_list % terminus_value = terminus_value
263 if (
present(terminus_unit ) ) gthstnml % gthstnml_list % terminus_unit = terminus_unit
264 if (
present(slice_start ) )
then 265 ary_size =
size(slice_start)
266 gthstnml % gthstnml_list % slice_start(1:ary_size) = slice_start
268 if (
present(slice_end ) )
then 269 ary_size =
size(slice_end)
270 gthstnml % gthstnml_list % slice_end(1:ary_size) = slice_end
272 if (
present(slice_stride ) )
then 273 ary_size =
size(slice_stride)
274 gthstnml % gthstnml_list % slice_stride(1:ary_size) = slice_stride
276 if (
present(space_average ) )
then 277 ary_size =
size(space_average)
278 gthstnml % gthstnml_list % space_average(1:ary_size) = space_average
280 if (
present(newfile_intvalue) ) gthstnml % gthstnml_list % newfile_intvalue = newfile_intvalue
281 if (
present(newfile_intunit ) ) gthstnml % gthstnml_list % newfile_intunit = newfile_intunit
284 hptr => gthstnml % gthstnml_list
287 hptr => gthstnml % gthstnml_list
290 if ( .not.
associated(hptr) )
then 291 call dbgmessage(
'new entry (%c) is created', c1 = trim( adjustl( name ) ) )
293 hptr_last => gthstnml % gthstnml_list
294 call listlast( gthstnml_list = hptr_last )
297 nullify( hptr % next )
299 hptr % interval_value => gthstnml % gthstnml_list % interval_value
300 hptr % interval_unit => gthstnml % gthstnml_list % interval_unit
301 hptr % precision => gthstnml % gthstnml_list % precision
302 hptr % time_average => gthstnml % gthstnml_list % time_average
303 hptr % fileprefix => gthstnml % gthstnml_list % fileprefix
305 hptr % origin_value => gthstnml % gthstnml_list % origin_value
306 hptr % origin_unit => gthstnml % gthstnml_list % origin_unit
307 hptr % terminus_value => gthstnml % gthstnml_list % terminus_value
308 hptr % terminus_unit => gthstnml % gthstnml_list % terminus_unit
309 hptr % slice_start => gthstnml % gthstnml_list % slice_start
310 hptr % slice_end => gthstnml % gthstnml_list % slice_end
311 hptr % slice_stride => gthstnml % gthstnml_list % slice_stride
312 hptr % space_average => gthstnml % gthstnml_list % space_average
313 hptr % newfile_intvalue => gthstnml % gthstnml_list % newfile_intvalue
314 hptr % newfile_intunit => gthstnml % gthstnml_list % newfile_intunit
316 hptr_last % next => hptr
318 call dbgmessage(
'entry (%c) is overwritten', c1 = trim( adjustl( name ) ) )
321 hptr % name = adjustl( name )
324 nullify( hptr % fileprefix )
325 allocate( hptr % fileprefix )
326 hptr % fileprefix =
'' 328 hptr % file = trim( adjustl(name) ) //
'.nc' 331 if (
present(interval_value) )
then 332 nullify( hptr % interval_value )
333 allocate( hptr % interval_value )
334 hptr % interval_value = interval_value
336 if (
present(interval_unit) )
then 337 nullify( hptr % interval_unit )
338 allocate( hptr % interval_unit )
339 hptr % interval_unit = interval_unit
341 if (
present(precision) )
then 342 nullify( hptr % precision )
343 allocate( hptr % precision )
344 hptr % precision = precision
346 if (
present(average) )
then 347 nullify( hptr % time_average )
348 allocate( hptr % time_average )
349 hptr % time_average = average
351 if (
present(time_average) )
then 352 nullify( hptr % time_average )
353 allocate( hptr % time_average )
354 hptr % time_average = time_average
357 if (
present(origin_value) )
then 358 nullify( hptr % origin_value )
359 allocate( hptr % origin_value )
360 hptr % origin_value = origin_value
362 if (
present(origin_unit) )
then 363 nullify( hptr % origin_unit )
364 allocate( hptr % origin_unit )
365 hptr % origin_unit = origin_unit
367 if (
present(terminus_value) )
then 368 nullify( hptr % terminus_value )
369 allocate( hptr % terminus_value )
370 hptr % terminus_value = terminus_value
372 if (
present(terminus_unit) )
then 373 nullify( hptr % terminus_unit )
374 allocate( hptr % terminus_unit )
375 hptr % terminus_unit = terminus_unit
377 if (
present(slice_start) )
then 378 ary_size =
size( slice_start )
379 nullify( hptr % slice_start )
380 allocate( hptr % slice_start(1:nf90_max_dims) )
381 hptr % slice_start = 1
382 hptr % slice_start(1:ary_size) = slice_start
384 if (
present(slice_end) )
then 385 ary_size =
size( slice_end )
386 nullify( hptr % slice_end )
387 allocate( hptr % slice_end(1:nf90_max_dims) )
388 hptr % slice_end = -1
389 hptr % slice_end(1:ary_size) = slice_end
391 if (
present(slice_stride) )
then 392 ary_size =
size( slice_stride )
393 nullify( hptr % slice_stride )
394 allocate( hptr % slice_stride(1:nf90_max_dims) )
395 hptr % slice_stride = 1
396 hptr % slice_stride(1:ary_size) = slice_stride
398 if (
present(space_average) )
then 399 ary_size =
size( space_average )
400 nullify( hptr % space_average )
401 allocate( hptr % space_average(1:nf90_max_dims) )
402 hptr % space_average = .false.
403 hptr % space_average(1:ary_size) = space_average
405 if (
present(newfile_intvalue) )
then 406 nullify( hptr % newfile_intvalue )
407 allocate( hptr % newfile_intvalue )
408 hptr % newfile_intvalue = newfile_intvalue
410 if (
present(newfile_intunit) )
then 411 nullify( hptr % newfile_intunit )
412 allocate( hptr % newfile_intunit )
413 hptr % newfile_intunit = newfile_intunit
422 call dcdifftimecreate( &
423 & diff = interval_time, &
424 &
value = hptr % interval_value, &
425 & unit = hptr % interval_unit, &
429 & gthstnml = gthstnml, &
439 call dcdifftimecreate( &
440 & diff = newfileint_time, &
441 &
value =
real( hptr % newfile_intvalue ), &
442 & unit = hptr % newfile_intunit, &
446 & gthstnml = gthstnml, &
452 if ( ( hptr % newfile_intvalue > 0 ) &
453 & .and. .not. ( newfileint_time > interval_time ) )
then 455 &
'newfile_int=%d [%c] must be greater than interval=%r [%c]', &
456 & i = (/ hptr % newfile_intvalue /), &
457 & r = (/ hptr % interval_value /), &
458 & c1 = trim( hptr % newfile_intunit ), &
459 & c2 = trim( hptr % interval_unit ) )
462 & gthstnml = gthstnml, &
465 cause_c =
cprintf(
'%d [%c]', &
466 & i = (/ hptr % newfile_intvalue /), c1 = trim( hptr % newfile_intunit ) )
477 call storeerror( stat, subname, err, cause_c )
integer, parameter, public dc_earglack
integer, parameter, public usr_errno
integer, parameter, public hst_enotindefine
integer, parameter, public dc_enotinit
integer, parameter, public token
単語やキーワードを保持する文字型変数の種別型パラメタ
logical function, public present_and_true(arg)
character(1), parameter, public name_delimiter
subroutine, public storeerror(number, where, err, cause_c, cause_i)
integer, parameter, public dc_noerr
character(string) function, public joinchar(carray, expr)
recursive subroutine hstnmlinfoadd(gthstnml, name, file, 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)
integer, parameter, public hst_ebadnewfileint
integer, parameter, public dp
倍精度実数型変数
subroutine, public dbgmessage(fmt, i, r, d, L, n, c1, c2, c3, ca)
logical function, public present_and_not_empty(arg)
subroutine, public beginsub(name, fmt, i, r, d, L, n, c1, c2, c3, ca, version)
integer, parameter, public stdout
標準出力の装置番号
subroutine, public endsub(name, fmt, i, r, d, L, n, c1, c2, c3, ca)
integer, parameter, public string
文字列を保持する 文字型変数の種別型パラメタ