83 subroutine z_fileio(filename,qual,iufind,iunit,iostat)
150 character(len=*),
intent(in) :: filename
151 character(len=2),
intent(in) :: qual
152 integer,
intent(in) :: iufind
153 integer,
intent(inout) :: iunit
154 integer,
intent(out) :: iostat
194 character(len=7) :: cstat
195 character(len=11) :: cform
204 if(iufind==1) iunit = -1
209 if(iufind/=0 .and. iufind/=1)
then
210 if(
i_print >0)
write(
i_out,*)
'Z_FILEIO: Incorrect value for IUFIND:',iufind
218 if(
i_print>=1)
write(
i_out,*)
'Z_FILEIO/A:',trim(filename),
' ',qual,iunit,iostat
220 if (index(
'ORSUD',qual(1:1)) ==0 .or. index(
'FUB',qual(2:2)) ==0)
then
221 if(
i_print > 0)
write(
i_out,*)
'Incorrect file qualifier'
224 if(qual(1:1) ==
'O') cstat =
'old'
225 if(qual(1:1) ==
'R') cstat =
'replace'
226 if(qual(1:1) ==
'S') cstat =
'scratch'
227 if(qual(1:1) ==
'U') cstat =
'unknown'
228 if(qual(1:1) ==
'D') cstat =
'delete'
230 if(qual(2:2) ==
'F') cform =
'formatted'
231 if(qual(2:2) ==
'U') cform =
'unformatted'
232 if(qual(2:2) ==
'B') cform =
'binary'
233 if(qual(2:2) ==
'R') cform =
'unformatted'
237 inquire(
file=filename,exist=lexist)
238 if(
i_print >=2)
write(
i_out,*)
'Z_FILEIO file exists?:',trim(filename),
':',lexist
242 if(lexist .and. qual(1:1)==
'D')
then
243 inquire(
file=filename,opened=lopen)
245 inquire(
file=filename,number=junit)
247 if(iufind == 1)
call z_flunit(iunit,iuerr)
250 if( cform ==
'unformatted')
then
251 open(
file=filename,unit=junit,form=cform,convert=
file_endian,iostat=iostat)
253 open(
file=filename,unit=junit,form=cform,iostat=iostat)
261 close(junit,status=cstat)
268 if(
i_print >=2)
write(
i_out,*)
'Z_FILEIO: File exists:',trim(filename)
269 inquire(
file=filename,opened=lopen)
271 if(
i_print >=2)
write(
i_out,*)
'Z_FILEIO: File is opened:',trim(filename)
276 inquire(
file=filename,number=junit)
277 if(
i_print >=2)
write(
i_out,*)
'Z_FILEIO: File is connected to unit:', junit
283 if(
i_print >=2)
write(
i_out,*)
'Z_FILEIO: File is not connected to a unit number'
285 if(
i_print >=2)
write(
i_out,*)
'Z_FILEIO: Assign user defined unit number:',iunit
286 elseif(iufind==1)
then
288 if(
i_print >=2)
write(
i_out,*)
'Z_FILEIO: New unit number IUNIT:',iunit
293 if( cform ==
'unformatted')
then
294 open(
file=filename,unit=junit,form=cform,convert=
file_endian,status=cstat)
296 open(
file=filename,unit=junit,form=cform,status=cstat)
308 write(
i_out,*)
'Z_FILEIO: File does not exist !'
309 write(
i_out,*)
'Z_FILEIO: Qual:',qual(1:1)
312 if(index(
'SRU',qual(1:1)) > 0)
then
315 if(
i_print >=1)
write(
i_out,*)
'Z_FILEIO: New unit number IUNIT:',iunit
322 if( cform ==
'unformatted')
then
323 open(
file=filename,unit=junit,form=cform,convert=
file_endian,iostat=iuerr)
325 open(
file=filename,unit=junit,form=cform,iostat=iuerr)
340 elseif(
'O'==qual(1:1))
then
341 if(
i_print>=2)
write(
i_out,*)
'Z_FILEIO: File cannot be opened because it does not exist'
349 if(
i_print>=1)
write(
i_out,*)
'Z_FILEIO/Z:',trim(filename),
' ',qual,iunit,iostat
390 integer,
intent(inout) :: iunit
462 integer,
intent(out) :: iunit
463 integer,
intent(out) :: ierr
495 integer,
parameter :: lu_min=60
496 integer,
parameter :: lu_max=200
500 integer,
parameter :: lu_nr=3
501 integer lu_not(lu_nr)
511 write(
i_out,*)
'Z_FLUNIT: forbidden :',lu_not
512 write(
i_out,*)
'Z_FLUNIT: lu_min lu_max :',lu_min,lu_max
517 if(lu_min >= lu_max)
then
519 write(
i_out,*)
'Z_FLUNIT: Incorrect boundaries for LU_MIN & LU_MAX:',&
527 do while (iunit ==-1)
531 inquire(unit=junit,opened=lopen)
537 if(lu_not(i_not)==junit)
then
539 if(
i_print >= 1)
write(
i_out,*)
'Z_FLUNIT: a forbidden unit number was encountered:',junit
543 if(lopen.or.lnot)
then
548 if(junit > lu_max)
exit
552 write(
i_out,*)
'ERROR in Z_FLUNIT: No free unit number could be found'