11
12
13
14
15
16
17
18
19
20
21
22
23
24
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
32 implicit none
33 type(GTHST_NMLINFO), intent(in):: gthstnml
34 character(TOKEN), pointer:: varnames_ary(:)
35 logical, intent(out), optional:: err
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53 type(GTHST_NMLINFO_ENTRY), pointer:: hptr =>null()
54 integer:: varnums, ary_size
55 character(TOKEN), allocatable:: varnames_ary_tmp1(:), varnames_ary_tmp2(:)
56 integer:: stat
57 character(STRING):: cause_c
58 character(*), parameter:: subname = 'HstNmlInfoNames'
59 continue
60 call beginsub( subname )
62 cause_c = ''
63
64 varnums = 0
65
66
67
68
69
70 if ( .not. gthstnml % initialized ) then
72 cause_c = 'GTHST_NMLINFO'
73 goto 999
74 end if
75
76
77
78
79
80 if ( associated(varnames_ary) ) deallocate(varnames_ary)
81 allocate( varnames_ary_tmp1(1:nf90_max_vars) )
82
83
84
85
86
87 hptr => gthstnml % gthstnml_list
88 do while ( associated( hptr % next ) )
89 call listnext( gthstnml_list = hptr )
90 varnums = varnums + 1
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 )
99 end if
100
101 varnames_ary_tmp1(varnums) = adjustl( hptr % name )
102 end do
103
104 if ( varnums > 0 ) then
105 allocate( varnames_ary(1:varnums) )
106 varnames_ary(1:varnums) = varnames_ary_tmp1(1:varnums)
107 else
108 allocate( varnames_ary(1:1) )
109 varnames_ary = ''
110 end if
111
112
113
114
115
116999 continue
117 nullify( hptr )
118 call storeerror( stat, subname, err, cause_c )
119 call endsub( subname )
subroutine, public storeerror(number, where, err, cause_c, cause_i)
integer, parameter, public dc_enotinit
integer, parameter, public dc_noerr
Provides kind type parameter values.
integer, parameter, public stdout
Unit number for Standard OUTPUT
integer, parameter, public token
Character length for word, token
integer, parameter, public dp
Double Precision Real number
integer, parameter, public string
Character length for string