Opens a file
MPI-I/O mapping mpi_file_open
STREAM-I/O mapping OPEN
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(mp_comm_type), | intent(in) | :: | groupid |
message passing environment identifier |
||
type(mp_file_type), | intent(out) | :: | fh |
file handle (file storage unit) |
||
character(len=*), | intent(in) | :: | filepath |
path to the file |
||
integer, | intent(in) | :: | amode_status |
access mode |
||
type(mp_info_type), | intent(in), | optional | :: | info |
info object |
SUBROUTINE mp_file_open(groupid, fh, filepath, amode_status, info) !! Opens a file !! !! MPI-I/O mapping mpi_file_open !! !! STREAM-I/O mapping OPEN TYPE(mp_comm_type), INTENT(IN) :: groupid !! message passing environment identifier TYPE(mp_file_type), INTENT(OUT) :: fh !! file handle (file storage unit) CHARACTER(LEN=*), INTENT(IN) :: filepath !! path to the file INTEGER, INTENT(IN) :: amode_status !! access mode TYPE(mp_info_type), INTENT(IN), OPTIONAL :: info !! info object INTEGER :: ierr, istat #if defined(__parallel) MPI_INFO_TYPE :: my_info #else CHARACTER(LEN=10) :: fstatus, fposition INTEGER :: amode, file_handle LOGICAL :: exists, is_open #endif ierr = 0 istat = 0 #if defined(__parallel) my_info = mpi_info_null IF (PRESENT(info)) my_info = info%handle CALL mpi_file_open(groupid%handle, filepath, amode_status, my_info, fh%handle, ierr) CALL mpi_file_set_errhandler(fh%handle, MPI_ERRORS_RETURN, ierr) IF (ierr .NE. 0) CALL mp_stop(ierr, "mpi_file_set_errhandler @ mp_file_open") #else MARK_USED(groupid) MARK_USED(info) amode = amode_status IF (amode .GT. file_amode_append) THEN fposition = "APPEND" amode = amode - file_amode_append ELSE fposition = "REWIND" END IF IF ((amode .EQ. file_amode_create) .OR. & (amode .EQ. file_amode_create + file_amode_wronly) .OR. & (amode .EQ. file_amode_create + file_amode_wronly + file_amode_excl)) THEN fstatus = "UNKNOWN" ELSE fstatus = "OLD" END IF ! Get a new unit number DO file_handle = 1, 999 INQUIRE (UNIT=file_handle, EXIST=exists, OPENED=is_open, IOSTAT=istat) IF (exists .AND. (.NOT. is_open) .AND. (istat == 0)) EXIT END DO fh%handle = file_handle OPEN (UNIT=fh%handle, FILE=filepath, STATUS=fstatus, ACCESS="STREAM", POSITION=fposition) #endif END SUBROUTINE mp_file_open