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, public endsub(name, fmt, i, r, d, L, n, c1, c2, c3, ca)
 
integer, parameter, public string
文字列を保持する 文字型変数の種別型パラメタ