Decrements the reference count of the specified file ID. When the reference count reaches zero, the file is actually closed using nf90_close and removed from the internal file list.
40 use netcdf, only: nf90_close, nf90_enotnc, nf90_noerr
43 integer, intent(in):: fileid
44 logical, intent(out), optional:: err
45 type(GD_NC_FILE_ID_ENTRY), pointer:: identptr, prev
46 integer:: stat
47 character(*), parameter:: subname = "GDNcFileClose"
48continue
50 stat = nf90_enotnc
53 nullify(prev)
54 do
55 if (.not. associated(identptr)) goto 999
56 if (identptr % id == fileid) exit
57 prev => identptr
58 identptr => identptr % next
59 enddo
60 identptr % count = identptr % count - 1
61 if (identptr % count <= 0) then
62 stat = nf90_close(fileid)
63 if (associated(prev)) then
64 prev%next => identptr % next
65 else
68 endif
69 call dbgmessage(subname //
': <%c> closed', c1=trim(identptr % filename))
70 deallocate(identptr)
71 else
72 call dbgmessage(subname //
': %d<%c> skipped for refcount=%d', &
73 & c1=trim(identptr % filename), i=(/fileid, identptr % count/))
74 stat = nf90_noerr
75 endif
76999 continue
subroutine, public storeerror(number, where, err, cause_c, cause_i)
subroutine, public dbgmessage(fmt, i, r, d, l, n, c1, c2, c3, ca)
subroutine, public beginsub(name, fmt, i, r, d, l, n, c1, c2, c3, ca, version)
subroutine, public endsub(name, fmt, i, r, d, l, n, c1, c2, c3, ca)
logical, save id_used
Flag indicating whether id_head has been initialized
type(gd_nc_file_id_entry), pointer, save id_head
ID table for open/close of netCDF files