652     character(*), 
intent(in):: varname
   655     real(DP), 
intent(in):: time
   658     character(TOKEN):: interval_unit
   661     real(DP):: origin_value
   664     character(TOKEN):: origin_unit
   668     real(DP):: origin_sec
   669     integer:: newfile_intvalue
   670     real(DP):: newfile_intvalued
   673     character(TOKEN):: newfile_intunit
   677     character(STRING):: file, file_base, file_suffix, file_newfile_time, file_rank
   680     integer:: stat, 
i, j, k, vnum, numdims_slice, dim_size, cnt
   681     character(STRING):: name, 
units, longname, cause_c, wgt_name
   682     character(TOKEN):: xtype
   687     real(DP):: wgt_sum, wgt_sum_s
   688     logical:: slice_valid
   689     integer:: slice_start(1:
numdims-1)
   692     integer:: slice_end(1:
numdims-1)
   695     integer:: slice_stride(1:
numdims-1)
   699     character(*), 
parameter:: subname = 
"HstFileCreate"   701     call beginsub(subname, 
'varname=%c', c1 = trim(varname) )
   711         & varinfo = gthst_vars(
i), &  
   713       if ( trim(varname) == trim(name) ) vnum = 
i   716     if ( vnum == 0 ) 
then   733       & gthstnml = gthstnml, &                 
   736       & interval_unit  = interval_unit )       
   741       & 
units = trim(interval_unit) // 
' ' // &
   742       &         trim(time_unit_suffix) ) 
   748       & gthstnml = gthstnml, &         
   750       & slice_start = slice_start, &   
   751       & slice_end = slice_end, &       
   752       & slice_stride = slice_stride )  
   759       if (       all( slice_start  == (/ ( 1, 
i = 1, 
numdims -1 ) /) ) &
   760         &  .and. all( slice_end    <  (/ ( 1, 
i = 1, 
numdims -1 ) /) ) &
   761         &  .and. all( slice_stride == (/ ( 1, 
i = 1, 
numdims -1 ) /) )  ) 
then   763         allocate( gthst_axes_slices(1:
numdims) )
   767         data_axes_slices               => data_axes
   768         data_weights_slices            => data_weights
   769         slice_valid = .false.
   772         allocate( gthst_axes_slices(1:
numdims) )
   773         allocate( data_axes_slices(1:
numdims) )
   774         allocate( data_weights_slices(1:
numdims) )
   781           if ( slice_start(
i) < 1 ) 
then   783             cause_c = 
cprintf(
'slice_start=%d', &
   784               &         
i = (/ slice_start(
i) /) )
   788           if ( slice_stride(
i) < 1 ) 
then   790             cause_c = 
cprintf(
'slice_stride=%d', &
   791               &         
i = (/ slice_stride(
i) /) )
   798           if (       ( slice_start(
i)  == 1 ) &
   799             &  .and. ( slice_end(
i)    <  1 ) &
   800             &  .and. ( slice_stride(
i) == 1 )  ) 
then   803               & axis_dest = gthst_axes_slices(
i) , &  
   806             data_axes_slices(
i) = data_axes(
i)
   818             & longname = longname, &   
   823           if ( slice_end(
i) < 1 ) slice_end(
i) = dim_size
   824           if ( slice_end(
i) > dim_size ) 
then   826               & 
'slice options to (%c) are undesirable ' // &
   827               & 
'(@slice_end=%d). @slice_end is corrected forcibly to (%d) ', &
   829               & 
i = (/ slice_end(
i), dim_size /) )
   831             slice_end(
i) = dim_size
   835           if ( slice_start(
i) > slice_end(
i) ) 
then   837             cause_c = 
cprintf(
'slice_start=%d, slice_end=%d', &
   838               &         
i = (/ slice_start(
i), slice_end(
i) /) )
   842           numdims_slice = 
int( ( slice_end(
i) - slice_start(
i) + 1 ) / slice_stride(
i) )
   845           if ( numdims_slice < 1 ) 
then   847               & 
'slice options to (%c) are invalid. ' // &
   848               & 
'(@slice_start=%d @slice_end=%d @slice_stride=%d)', &
   850               & 
i = (/ slice_start(
i), slice_end(
i), slice_stride(
i) /) )
   852             cause_c = 
cprintf(
'slice_start=%d, slice_end=%d, slice_stride=%d', &
   853               &         
i = (/ slice_start(
i), slice_end(
i), slice_stride(
i) /) )
   858             & axis = gthst_axes_slices(
i), &  
   860             & 
size = numdims_slice, &         
   861             & longname = longname, &          
   869           allocate( data_axes_slices(
i) % a_axis( numdims_slice ) )
   871           do j = slice_start(
i), slice_end(
i), slice_stride(
i)
   872             data_axes_slices(
i) % a_axis( cnt ) = data_axes(
i) % a_axis( j )
   881               & varinfo = gthst_weights(j), & 
   884             if ( trim(name) // wgtsuf == trim(wgt_name) ) 
then   889               wgt_sum = sum( data_weights(j) % a_axis )
   891               allocate( data_weights_slices(j) % a_axis( numdims_slice ) )
   893               do k = slice_start(
i), slice_end(
i), slice_stride(
i)
   894                 data_weights_slices(j) % a_axis( cnt ) = data_weights(j) % a_axis( k )
   898               wgt_sum_s = sum( data_weights_slices(j) % a_axis )
   899               data_weights_slices(j) % a_axis = data_weights_slices(j) % a_axis * ( wgt_sum / wgt_sum_s )
   911           if ( .not. 
associated( data_weights_slices(
i) % a_axis ) ) 
then   912             allocate( data_weights_slices(
i) % a_axis( 
size(data_weights(
i) % a_axis ) ) )
   913             data_weights_slices(
i) % a_axis = data_weights(
i) % a_axis
   920         gthst_axes_slices(
numdims) = gthst_axes_time
   929         & gthstnml = gthstnml, &                 
   932         & origin_value   = origin_value, &       
   933         & origin_unit    = origin_unit, &        
   934         & interval_unit  = interval_unit, &      
   935         & newfile_intvalue = newfile_intvalue, & 
   936         & newfile_intunit = newfile_intunit )    
   943         &   
real( origin_value, DP ), origin_unit, 
'sec', cal_save )
   951       if ( newfile_intvalue < 1 ) 
then   954           & origin_sec, 
'sec', interval_unit, cal_save )
   968       if ( len_trim( file ) - index(file, 
'.nc', .true.) == 2 ) 
then   969         file_base = file(1:len_trim( file ) - 3)
   975       if ( trim(rank_save) == 
'' ) 
then   978         file_rank = 
'_rank' // trim( adjustl(rank_save) )
   980       if ( newfile_intvalue > 0 ) 
then   981         newfile_intvalued = &
   984         file_newfile_time = &
   985           & 
cprintf( 
'_time%08d', 
i = (/ 
int( newfile_intvalued ) /) )
   988         file_newfile_time = 
''   991       file = trim(file_base) // trim(file_rank) // trim(file_newfile_time) // trim(file_suffix)
   997         & history = gthist, &                                     
   998         & file = file, title = title_save, &                      
   999         & source = source_save, institution = institution_save, & 
  1000         & axes = gthst_axes_slices(1:
numdims), &                  
  1001         & origind = origin_value, &                               
  1002         & conventions = conventions_save, &                       
  1003         & gt_version = gt_version_save, &                         
  1004         & flag_mpi_split = save_mpi_split, &                      
  1005         & flag_mpi_gather = save_mpi_gather )                     
  1012           & axis = gthst_axes_slices(
i), &  
  1015           & history = gthist, &                    
  1017           & array = data_axes_slices(
i) % a_axis ) 
  1023       if ( save_mpi_gather ) 
then  1026             & axis = gthst_axes_slices(
i), &  
  1031               & 
'data of axis (%c) in whole area is lack. ' // &
  1032               & 
'Specify the data by "HistoryAutoPutAxisMPI" explicitly.', &
  1039             & history = gthist, &                   
  1048       if ( slice_valid ) 
then  1049         deallocate( gthst_axes_slices )
  1050         deallocate( data_axes_slices )
  1052         deallocate( gthst_axes_slices )
  1053         nullify( data_axes_slices )
  1061           & history = gthist, &           
  1062           & varinfo = gthst_weights(
i) )  
  1064           & varinfo = gthst_weights(
i), &  
  1067           & history = gthist, &                       
  1069           & array = data_weights_slices(
i) % a_axis ) 
  1072       if ( slice_valid ) 
then  1073         deallocate( data_weights_slices )
  1075         nullify( data_weights_slices )
  1086       & varinfo = gthst_vars(vnum), &  
  1087       & history = gthist )             
  1090     call storeerror(stat, subname, cause_c = cause_c)
 
integer, parameter, public hst_empinoaxisdata
 
subroutine, public storeerror(number, where, err, cause_c, cause_i)
 
type(gt_history_axis_data), dimension(1:nf90_max_dims), target, save, public data_axes_whole
 
integer, parameter, public dc_noerr
 
integer, parameter, public hst_ebadvarname
 
character(string) function, public joinchar(carray, expr)
 
integer, parameter, public hst_ebadslice
 
type(gt_history_axis), dimension(1:nf90_max_dims), target, save, public gthst_axes
 
subroutine, public beginsub(name, fmt, i, r, d, L, n, c1, c2, c3, ca, version)
 
integer, save, public numdims
 
subroutine, public endsub(name, fmt, i, r, d, L, n, c1, c2, c3, ca)