指定されたファイル ID の参照カウントを減算します。 参照カウントがゼロになると、nf90_close を使用して実際にファイルを閉じ、 内部ファイルリストから削除します。
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
id_head が初期化済みかを示すフラグ
type(gd_nc_file_id_entry), pointer, save id_head
netCDF ファイルのオープンクローズのための ID テーブル