93 if (.not.
allocated(gdnctab))
then
94 allocate(gdnctab(gdnctab_init_size), stat=result)
95 if (result /= 0)
goto 999
96 do, i = 1, gdnctab_init_size
100 gdnctab(i)%attrid = 0
101 nullify(gdnctab(i)%dimids)
105 do, i = 1,
size(gdnctab)
106 if (gdnctab(i)%fileid == entry%fileid &
107 & .and. gdnctab(i)%varid == entry%varid &
108 & .and. gdnctab(i)%dimid == entry%dimid)
then
111 call dbgmessage(
'gtdata_netcdf_internal.add: found %d', i=(/i/))
118 do, i = 1,
size(gdnctab)
119 if (gdnctab(i)%fileid == 0)
then
124 if (var%id == -1)
then
127 allocate(tmp_table(n), stat=result)
128 if (result /= 0)
goto 999
129 tmp_table(:) = gdnctab(:)
130 deallocate(gdnctab, stat=result)
131 if (result /= 0)
goto 999
132 allocate(gdnctab(n * 2), stat=result)
133 if (result /= 0)
goto 999
134 gdnctab(1:n) = tmp_table(1:n)
135 deallocate(tmp_table, stat=result)
136 if (result /= 0)
goto 999
138 gdnctab(n+2)%fileid = 0
139 gdnctab(n+2)%varid = 0
140 gdnctab(n+2)%dimid = 0
141 gdnctab(n+2)%attrid = 0
142 nullify(gdnctab(n+2)%dimids)
143 gdnctab(n+3: n*2) = gdnctab(n+2)
147 gdnctab(var%id)%fileid = entry%fileid
148 gdnctab(var%id)%varid = entry%varid
149 gdnctab(var%id)%dimid = entry%dimid
152 call internal_build_dimids(gdnctab(var%id), result)
153 if (result /= nf90_noerr)
goto 999
156 call dbgmessage(
'gtdata_netcdf_internal.add: added %d', i=(/var%id/))
166 subroutine internal_build_dimids(ent, stat)
170 integer,
intent(out):: stat
172 if (ent%varid > 0)
then
173 stat = nf90_inquire_variable(ent%fileid, ent%varid, ndims = ndims)
174 if (stat /= nf90_noerr)
return
175 if ((ent%dimid > 0) .and. (ndims /= 1))
goto 100
181 allocate(ent%dimids(ndims), stat=stat)
186 stat = nf90_inquire_variable(ent%fileid, ent%varid, dimids = ent%dimids)
187 if (stat /= nf90_noerr)
return
188 if ((ent%dimid > 0) .and. (ent%dimids(1) /= ent%dimid))
then
189 deallocate(ent%dimids)
193 allocate(ent%dimids(1), stat=stat)
198 ent%dimids(1) = ent%dimid
205 allocate(ent%dimids(1))
206 ent%dimids(1) = ent%dimid
207 end subroutine internal_build_dimids
230 if (.not.
allocated(gdnctab))
goto 999
231 if (var%id <= 0 .or. var%id >
size(gdnctab))
goto 999
232 if (gdnctab(var%id)%fileid == 0)
goto 999
233 result = gdnctab(var%id)%fileid
234 gdnctab(var%id)%fileid = 0
235 gdnctab(var%id)%varid = 0
236 gdnctab(var%id)%dimid = 0
237 gdnctab(var%id)%attrid = 0
238 if (
associated(gdnctab(var%id)%dimids)) &
239 &
deallocate(gdnctab(var%id)%dimids)
240 call dbgmessage(
'gtdata_netcdf_internal.delete: delete %d', i=(/var%id/))
244 result = nf90_enotvar
subroutine, public dbgmessage(fmt, i, r, d, l, n, c1, c2, c3, ca)