1 subroutine gdncfileopen(fileid, filename, writable, overwrite, stat, err)
17 integer,
intent(out):: fileid
18 character(len = *),
intent(in):: filename
19 logical,
intent(in),
optional:: writable
26 logical,
intent(in),
optional:: overwrite
33 logical,
intent(out),
optional:: err
34 integer,
intent(out),
optional:: stat
35 logical:: writable_required
36 logical:: overwrite_required
38 integer:: mystat, mode
39 character(len = 256):: real_filename
40 character(len = STRING):: cause_c
41 character(*),
parameter:: subname =
"GDNcFileOpen" 47 writable_required = .false.
48 overwrite_required = .false.
49 if (
present(writable)) writable_required = writable
50 if (
present(overwrite)) overwrite_required = overwrite
51 call beginsub(subname,
'writable=%y overwrite=%y file=%c', &
52 & l=(/writable_required, overwrite_required/), c1=trim(filename))
60 if ((identptr % filename == filename) &
61 & .and. (identptr % writable .or. .not. writable_required))
then 62 fileid = identptr % id
63 identptr % count = identptr % count + 1
64 if (
present(err)) err = .false.
65 if (
present(stat)) stat = nf90_noerr
70 identptr => identptr % next
71 if (.not.
associated(identptr))
exit 81 nullify(identptr % next)
82 identptr % filename = filename
83 identptr % writable = writable_required
88 real_filename = filename
89 if (real_filename(1:8) ==
'file:///')
then 90 real_filename = real_filename(8: )
91 else if (real_filename(1:5) ==
'file:' .AND. real_filename(6:6) /=
'/')
then 92 real_filename = real_filename(6: )
98 if (writable_required) mode = ior(mode, nf90_write)
100 mystat = nf90_open(real_filename, mode, identptr % id)
104 if (mystat == nf90_noerr)
then 106 if (writable_required)
then 107 if (overwrite_required)
then 111 &
'"%c" is overwritten.', c1=trim(filename), rank_mpi = -1)
114 mode = nf90_noclobber
116 &
'"%c" is opened in write-protect mode.', c1=trim(filename), rank_mpi = -1)
118 mystat = nf90_create(real_filename, mode, identptr % id)
119 if (mystat /= nf90_noerr)
then 121 if (
present(stat)) stat = mystat
130 if (.not. writable_required)
then 134 if (mystat /= nf90_noerr)
then 136 if (
present(stat)) stat = mystat
143 mystat = nf90_create(real_filename, mode, identptr % id)
144 if (mystat /= nf90_noerr)
then 146 if (
present(stat)) stat = mystat
152 fileid = identptr % id
155 if (mystat /= nf90_noerr)
then 156 if (
associated(prev))
then 157 prev%next => identptr % next
166 if (
present(stat))
then 168 if (
present(err)) err = (stat /= nf90_noerr)
174 call storeerror(mystat, subname, err, cause_c)
175 call endsub(subname,
'id=%d stat=%d', i=(/fileid, mystat/))
subroutine, public storeerror(number, where, err, cause_c, cause_i)
type(gd_nc_file_id_entry), pointer, save id_head
subroutine, public beginsub(name, fmt, i, r, d, L, n, c1, c2, c3, ca, version)
subroutine gdncfileopen(fileid, filename, writable, overwrite, stat, err)
subroutine, public endsub(name, fmt, i, r, d, L, n, c1, c2, c3, ca)
integer, parameter, public string
文字列を保持する 文字型変数の種別型パラメタ