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
   423       & diff = interval_time, &          
   424       & 
value = hptr % interval_value, & 
   425       & unit = hptr % interval_unit, &   
   429         & gthstnml = gthstnml, & 
   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)
 
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
文字列を保持する 文字型変数の種別型パラメタ