27 use dc_trace,
only: beginsub, endsub
28 use dc_string,
only: putline, printf, split, strinclude, stoa, joinchar
31 use netcdf,
only: nf90_max_vars
34 character(TOKEN),
pointer:: varnames_ary(:)
35 logical,
intent(out),
optional:: err
54 integer:: varnums, ary_size
55 character(TOKEN),
allocatable:: varnames_ary_tmp1(:), varnames_ary_tmp2(:)
57 character(STRING):: cause_c
58 character(*),
parameter:: subname =
'HstNmlInfoNames'
60 call beginsub( subname )
70 if ( .not. gthstnml % initialized )
then
72 cause_c =
'GTHST_NMLINFO'
80 if (
associated(varnames_ary) )
deallocate(varnames_ary)
81 allocate( varnames_ary_tmp1(1:nf90_max_vars) )
87 hptr => gthstnml % gthstnml_list
88 do while (
associated( hptr % next ) )
89 call listnext( gthstnml_list = hptr )
91 ary_size =
size( varnames_ary_tmp1 )
92 if ( varnums > ary_size )
then
93 allocate( varnames_ary_tmp2(1:ary_size) )
94 varnames_ary_tmp2(1:ary_size) = varnames_ary_tmp1(1:ary_size)
95 deallocate( varnames_ary_tmp1 )
96 allocate( varnames_ary_tmp1(1:varnums*2) )
97 varnames_ary_tmp1(1:ary_size) = varnames_ary_tmp2(1:ary_size)
98 deallocate( varnames_ary_tmp2 )
101 varnames_ary_tmp1(varnums) = adjustl( hptr % name )
104 if ( varnums > 0 )
then
105 allocate( varnames_ary(1:varnums) )
106 varnames_ary(1:varnums) = varnames_ary_tmp1(1:varnums)
108 allocate( varnames_ary(1:1) )
118 call storeerror( stat, subname, err, cause_c )
119 call endsub( subname )