111     use netcdf
, only: nf90_emaxvars, nf90_max_dims
   117     character(*), 
intent(in):: varname
   119     character(*), 
intent(in):: dims(:)
   126     character(*), 
intent(in):: longname
   130     character(*), 
intent(in):: 
units   134     character(*), 
intent(in), 
optional:: xtype
   154     character(*), 
intent(in), 
optional:: time_units
   157     logical, 
intent(in), 
optional:: time_average
   166     character(*), 
intent(in), 
optional:: file
   170     real(DP), 
intent(in), 
optional:: origin
   182     real(DP), 
intent(in), 
optional:: terminus
   194     real(DP), 
intent(in), 
optional:: interval
   206     integer, 
intent(in), 
optional:: slice_start(:)
   216     integer, 
intent(in), 
optional:: slice_end(:)
   226     integer, 
intent(in), 
optional:: slice_stride(:)
   236     logical, 
intent(in), 
optional:: space_average(:)
   249     integer, 
intent(in), 
optional:: newfile_interval
   264     character(TOKEN):: interval_unit_work
   267     character(TOKEN):: origin_unit_work
   270     character(TOKEN):: terminus_unit_work
   273     character(TOKEN):: newfile_intunit_work
   277     real(DP):: interval_value
   280     real(DP):: origin_value
   283     real(DP):: terminus_value
   286     integer:: newfile_intvalue
   289     character(TOKEN):: time_name
   292     character(STRING), 
allocatable:: dims_work(:)
   295     character(TOKEN):: precision
   298     logical:: time_average_work
   301     logical:: space_average_work(1:
numdims-1)
   302     integer:: slice_start_work(1:
numdims-1)
   305     integer:: slice_end_work(1:
numdims-1)
   308     integer:: slice_stride_work(1:
numdims-1)
   312     logical:: define_mode, varname_not_found
   313     integer:: cause_i, stat, i, j, k, cnt, cnt2, dim_size
   314     character(TOKEN), 
pointer:: dims_noavr(:) =>null(), dims_avr(:) =>null()
   315     character(STRING):: longname_avrmsg
   316     character(STRING):: name, cause_c
   317     character(*), 
parameter:: subname = 
"HistoryAutoAddVariable1"   329       cause_c = 
'gtool_historyauto'   338         & 
'"HistoryAutoAddVariable" (varname = %c) must be called before "HistoryAutoAllVarFix"', &
   339         & c1 = trim(varname) )
   341       cause_c = 
'HistoryAutoAllVarFix'   352       if ( trim(varname) == trim(name) ) 
then   374     if ( 
size(dims) > 0 ) 
then   376         if ( trim( dims(
size(dims)) ) == trim( time_name ) ) 
then   377           allocate( dims_work(
size(dims)) )
   380           allocate( dims_work(
size(dims)) )
   383             if ( trim( dims(i) ) /= trim( time_name ) ) 
then   384               dims_work( cnt ) = dims( i )
   388           dims_work(
size(dims)) = time_name
   391             & 
'last entity of "dims=<%c>" must be time dimension (varname=<%c>). ' // &
   392             & 
' "dims" are resequenced forcibly => <%c>', &
   393             & c1 = trim( 
joinchar(dims, 
',') ), c2 = trim( varname ), &
   394             & c3 = trim( 
joinchar(dims_work, 
',') ) )
   398         allocate( dims_work(
size(dims)+1) )
   399         dims_work(1:
size(dims)) = dims
   400         dims_work(
size(dims)+1) = time_name
   402           & 
'time dimension is not found in "dims=<%c>" (varname=<%c>). ' // &
   403           & 
' time dimension "%c" is appended to "dims" forcibly.', &
   404           & c1 = trim( 
joinchar(dims, 
',') ), c2 = trim( varname ), &
   405           & c3 = trim( time_name ) )
   408       allocate( dims_work(1) )
   409       dims_work(1) = time_name
   411         & 
'time dimension is not found (varname=<%c>). ' // &
   412         & 
' time dimension "%c" is appended to "dims" forcibly.', &
   413         & c1 = trim( varname ), &
   414         & c2 = trim( time_name ) )
   422         & 
'number of dimensions' // &
   423         & 
' on which one variable depends must not be greater than %d (varname=<%c>, dims=<%c>). ', &
   425         & c1 = trim( varname ), c2 = trim( 
joinchar(dims_work, 
',') ) )
   427       cause_i = 
size( dims_work )
   437         & err = varname_not_found )               
   438       if ( varname_not_found ) 
then   444           & interval_unit   = interval_unit_work, &  
   445           & origin_unit     = origin_unit_work  , &  
   446           & terminus_unit   = terminus_unit_work, &  
   447           & newfile_intunit = newfile_intunit_work ) 
   452         if ( 
present( interval ) ) 
then   454           if ( 
present(time_units) ) interval_unit_work = time_units
   456         if ( 
present( origin ) ) 
then   458           if ( 
present(time_units) ) origin_unit_work   = time_units
   460         if ( 
present( terminus ) ) 
then   462           if ( 
present(time_units) ) terminus_unit_work = time_units
   464         if ( 
present( newfile_interval ) ) 
then   466           if ( 
present(time_units) ) newfile_intunit_work = time_units
   473           & precision      = xtype, &                   
   474           & interval_value = interval, &                
   475           & interval_unit  = interval_unit_work, &      
   476           & origin_value   = origin, &                  
   477           & origin_unit    = origin_unit_work, &        
   478           & terminus_value = terminus, &                
   479           & terminus_unit  = terminus_unit_work, &      
   480           & slice_start    = slice_start, &             
   481           & slice_end      = slice_end, &               
   482           & slice_stride   = slice_stride, &            
   483           & time_average   = time_average, &            
   484           & space_average  = space_average, &           
   485           & newfile_intvalue = newfile_interval, &      
   486           & newfile_intunit = newfile_intunit_work )    
   497       & precision = precision, &                
   498       & time_average = time_average_work, &     
   499       & space_average = space_average_work, &   
   500       & slice_start = slice_start_work, &       
   501       & slice_end = slice_end_work, &           
   502       & slice_stride = slice_stride_work, &     
   503       & err = varname_not_found )               
   504     if ( varname_not_found ) 
then   507         & precision = precision, &                
   508         & time_average = time_average_work, &     
   509         & space_average = space_average_work, &   
   510         & slice_start = slice_start_work, &       
   511         & slice_end = slice_end_work, &           
   512         & slice_stride = slice_stride_work )      
   519     do i = 1, 
size( dims_work ) - 1
   524         if ( trim(dims_work(i)) == trim(name) ) 
then   533       dims_noavr = dims_work
   538       do i = 1, 
size( dims_work ) - 1
   540           dims_noavr( cnt ) = dims_work( i )
   543           dims_avr( cnt2 ) = dims_work( i )
   547       dims_noavr( cnt ) = dims_work( 
size ( dims_work ) )
   549       longname_avrmsg = 
' averaged in ' // trim( 
joinchar( dims_avr, 
',' ) ) // 
'-direction'   550       deallocate( dims_avr )
   566     if ( 
size(dims_work) > 1 ) 
then   567       slice_subscript_search: 
do i = 1, 
size( dims_work ) - 1
   573           if ( slice_end_work(j) < 1 ) slice_end_work(j) = dim_size
   574           if ( trim(dims_work(i)) == trim(name) ) 
then   578             cycle slice_subscript_search
   581       end do slice_subscript_search
   593     if ( 
size(dims_work) >= 1 ) 
then   599         if ( trim(dims_work(1)) == trim(name) ) 
then   607             if ( trim(dims_work(1)) // 
wgtsuf == trim(name) ) 
then   623     if ( 
size(dims_work) >= 2 ) 
then   629         if ( trim(dims_work(2)) == trim(name) ) 
then   637             if ( trim(dims_work(2)) // 
wgtsuf == trim(name) ) 
then   653     if ( 
size(dims_work) >= 3 ) 
then   659         if ( trim(dims_work(3)) == trim(name) ) 
then   667             if ( trim(dims_work(3)) // 
wgtsuf == trim(name) ) 
then   683     if ( 
size(dims_work) >= 4 ) 
then   689         if ( trim(dims_work(4)) == trim(name) ) 
then   697             if ( trim(dims_work(4)) // 
wgtsuf == trim(name) ) 
then   713     if ( 
size(dims_work) >= 5 ) 
then   719         if ( trim(dims_work(5)) == trim(name) ) 
then   727             if ( trim(dims_work(5)) // 
wgtsuf == trim(name) ) 
then   743     if ( 
size(dims_work) >= 6 ) 
then   749         if ( trim(dims_work(6)) == trim(name) ) 
then   757             if ( trim(dims_work(6)) // 
wgtsuf == trim(name) ) 
then   773     if ( 
size(dims_work) >= 7 ) 
then   779         if ( trim(dims_work(7)) == trim(name) ) 
then   787             if ( trim(dims_work(7)) // 
wgtsuf == trim(name) ) 
then   810       & name = varname, dims = dims_noavr, &              
   811       & longname = trim(longname) // longname_avrmsg , &  
   813       & time_average = time_average_work )                
   816     deallocate( dims_noavr )
   817     deallocate( dims_work )
   835         & interval_value   = interval_value, &      
   836         & interval_unit    = interval_unit_work, &  
   837         & origin_value     = origin_value, &        
   838         & origin_unit      = origin_unit_work, &    
   839         & terminus_value   = terminus_value, &      
   840         & terminus_unit    = terminus_unit_work, &  
   841         & newfile_intvalue = newfile_intvalue, &    
   842         & newfile_intunit  = newfile_intunit_work ) 
   908     call storeerror(stat, subname, cause_c = cause_c, cause_i = cause_i)
   909     call endsub(subname, 
'stat=%d', i = (/stat/) )
 
logical, save, public all_output_save
 
type(slice_info), dimension(1:max_vars), target, save, public slice_vars
 
integer, parameter, public dc_enotinit
 
real(dp), dimension(1:max_vars), save, public newfile_inttime_vars
 
integer, parameter, public hst_eindivisible
 
integer, save, public numvars
 
real(dp), dimension(1:max_vars), save, public interval_time_vars
 
logical, save, public flag_allvarfixed
 
integer, parameter, public max_dims_depended_by_var
 
type(space_avr_info), dimension(1:max_vars), target, save, public space_avr_vars
 
character(*), parameter, public wgtsuf
 
integer, parameter, public token
単語やキーワードを保持する文字型変数の種別型パラメタ 
 
real(dp), dimension(1:max_vars), save, public terminus_time_vars
 
type(gt_history_axis_data), dimension(1:nf90_max_dims), target, save, public data_weights
 
integer, parameter, public hst_emaxdimsdepended
 
integer, parameter, public hst_ealreadyregvarfix
 
integer, parameter, public hst_evarinuse
 
type(gt_history_varinfo), dimension(1:max_vars), save, public gthst_vars
 
subroutine, public storeerror(number, where, err, cause_c, cause_i)
 
integer, parameter, public dc_noerr
 
type(gt_history_varinfo), dimension(1:nf90_max_dims), save, public gthst_weights
 
character(string) function, public joinchar(carray, expr)
 
real(dp), dimension(1:max_vars), save, public origin_time_vars
 
type(gt_history_axis), dimension(1:nf90_max_dims), target, save, public gthst_axes
 
integer, parameter, public dp
倍精度実数型変数 
 
subroutine, public beginsub(name, fmt, i, r, d, L, n, c1, c2, c3, ca, version)
 
integer, dimension(1:max_vars), save, public interval_unitsym_vars
 
character(token), dimension(1:max_vars), save, public varname_vars
 
character(token), save, public time_unit_bycreate
 
integer, save, public numdims
 
integer, parameter, public max_vars
 
integer, save, public numwgts
 
type(gthst_nmlinfo), save, public gthstnml
 
subroutine, public endsub(name, fmt, i, r, d, L, n, c1, c2, c3, ca)
 
logical, dimension(1:max_vars), save, public tavr_vars
 
type(dc_cal), save, public cal_save
 
type(axes_weight), dimension(1:max_vars), target, save, public weight_vars
 
logical, dimension(1:max_vars), save, public output_valid_vars
 
type(gt_history_multi), dimension(1:max_vars), save, public gthst_history_vars
 
character(*), parameter, public version
 
integer, parameter, public string
文字列を保持する 文字型変数の種別型パラメタ