<p><b>duda</b> 2012-03-21 10:26:35 -0600 (Wed, 21 Mar 2012)</p><p>BRANCH COMMIT<br>
<br>
Implement subroutines for opening and closing a stream, and for<br>
reading and writing global attributes.<br>
<br>
<br>
M src/framework/mpas_io_streams.F<br>
</p><hr noshade><pre><font color="gray">Modified: branches/omp_blocks/io/src/framework/mpas_io_streams.F
===================================================================
--- branches/omp_blocks/io/src/framework/mpas_io_streams.F        2012-03-20 21:16:18 UTC (rev 1692)
+++ branches/omp_blocks/io/src/framework/mpas_io_streams.F        2012-03-21 16:26:35 UTC (rev 1693)
@@ -5,7 +5,9 @@
use mpas_io
type MPAS_Stream_type
- type (att_list_type), pointer :: attList
+ logical :: isInitialized = .false.
+ type (MPAS_IO_Handle_type) :: fileHandle
+ type (att_list_type), pointer :: attList => null()
end type MPAS_Stream_type
@@ -15,13 +17,26 @@
interface MPAS_readStreamAtt
module procedure MPAS_readStreamAtt_0dInteger
+ module procedure MPAS_readStreamAtt_1dInteger
+ module procedure MPAS_readStreamAtt_0dReal
+ module procedure MPAS_readStreamAtt_1dReal
+ module procedure MPAS_readStreamAtt_text
end interface MPAS_readStreamAtt
interface MPAS_writeStreamAtt
module procedure MPAS_writeStreamAtt_0dInteger
+ module procedure MPAS_writeStreamAtt_1dInteger
+ module procedure MPAS_writeStreamAtt_0dReal
+ module procedure MPAS_writeStreamAtt_1dReal
+ module procedure MPAS_writeStreamAtt_text
end interface MPAS_writeStreamAtt
+ ! Error codes
+ integer, parameter :: MPAS_STREAM_NOERR = 0, &
+ MPAS_STREAM_NOT_INITIALIZED = -1, &
+ MPAS_IO_ERR = -2
+
contains
@@ -36,8 +51,16 @@
integer, intent(in) :: framesPerFile
integer, intent(out), optional :: ierr
- if (present(ierr)) ierr = 0
+ integer :: io_err
+ if (present(ierr)) ierr = MPAS_STREAM_NOERR
+
+ stream % fileHandle = MPAS_io_open(fileName, ioDirection, ioFormat, io_err)
+ call MPAS_io_err_mesg(io_err, .false.)
+ if (io_err /= MPAS_IO_NOERR .and. present(ierr)) ierr = MPAS_IO_ERR
+
+ stream % isInitialized = .true.
+
end subroutine MPAS_createStream
@@ -49,8 +72,16 @@
type (field1DInteger), intent(in) :: field
integer, intent(out), optional :: ierr
- if (present(ierr)) ierr = 0
+ if (present(ierr)) ierr = MPAS_STREAM_NOERR
+ !
+ ! Sanity checks
+ !
+ if (.not. stream % isInitialized) then
+ if (present(ierr)) ierr = MPAS_STREAM_NOT_INITIALIZED
+ return
+ end if
+
end subroutine MPAS_streamAddField_1dInteger
@@ -62,8 +93,16 @@
integer, intent(in) :: frame
integer, intent(out), optional :: ierr
- if (present(ierr)) ierr = 0
+ if (present(ierr)) ierr = MPAS_STREAM_NOERR
+ !
+ ! Sanity checks
+ !
+ if (.not. stream % isInitialized) then
+ if (present(ierr)) ierr = MPAS_STREAM_NOT_INITIALIZED
+ return
+ end if
+
end subroutine MPAS_readStream
@@ -75,8 +114,16 @@
integer, intent(in) :: frame
integer, intent(out), optional :: ierr
- if (present(ierr)) ierr = 0
+ if (present(ierr)) ierr = MPAS_STREAM_NOERR
+ !
+ ! Sanity checks
+ !
+ if (.not. stream % isInitialized) then
+ if (present(ierr)) ierr = MPAS_STREAM_NOT_INITIALIZED
+ return
+ end if
+
end subroutine MPAS_writeStream
@@ -89,11 +136,137 @@
integer, intent(out) :: attValue
integer, intent(out), optional :: ierr
- if (present(ierr)) ierr = 0
+ integer :: io_err
+ if (present(ierr)) ierr = MPAS_STREAM_NOERR
+
+ !
+ ! Sanity checks
+ !
+ if (.not. stream % isInitialized) then
+ if (present(ierr)) ierr = MPAS_STREAM_NOT_INITIALIZED
+ return
+ end if
+
+ call MPAS_io_get_att(stream % fileHandle, attName, attValue, ierr=io_err)
+ call MPAS_io_err_mesg(io_err, .false.)
+ if (io_err /= MPAS_IO_NOERR .and. present(ierr)) ierr = MPAS_IO_ERR
+
end subroutine MPAS_readStreamAtt_0dInteger
+ subroutine MPAS_readStreamAtt_1dInteger(stream, attName, attValue, ierr)
+
+ implicit none
+
+ type (MPAS_Stream_type), intent(inout) :: stream
+ character (len=*), intent(in) :: attName
+ integer, dimension(:), pointer :: attValue
+ integer, intent(out), optional :: ierr
+
+ integer :: io_err
+
+ if (present(ierr)) ierr = MPAS_STREAM_NOERR
+
+ !
+ ! Sanity checks
+ !
+ if (.not. stream % isInitialized) then
+ if (present(ierr)) ierr = MPAS_STREAM_NOT_INITIALIZED
+ return
+ end if
+
+ call MPAS_io_get_att(stream % fileHandle, attName, attValue, ierr=io_err)
+ call MPAS_io_err_mesg(io_err, .false.)
+ if (io_err /= MPAS_IO_NOERR .and. present(ierr)) ierr = MPAS_IO_ERR
+
+ end subroutine MPAS_readStreamAtt_1dInteger
+
+
+ subroutine MPAS_readStreamAtt_0dReal(stream, attName, attValue, ierr)
+
+ implicit none
+
+ type (MPAS_Stream_type), intent(inout) :: stream
+ character (len=*), intent(in) :: attName
+ real (kind=RKIND), intent(out) :: attValue
+ integer, intent(out), optional :: ierr
+
+ integer :: io_err
+
+ if (present(ierr)) ierr = MPAS_STREAM_NOERR
+
+ !
+ ! Sanity checks
+ !
+ if (.not. stream % isInitialized) then
+ if (present(ierr)) ierr = MPAS_STREAM_NOT_INITIALIZED
+ return
+ end if
+
+ call MPAS_io_get_att(stream % fileHandle, attName, attValue, ierr=io_err)
+ call MPAS_io_err_mesg(io_err, .false.)
+ if (io_err /= MPAS_IO_NOERR .and. present(ierr)) ierr = MPAS_IO_ERR
+
+ end subroutine MPAS_readStreamAtt_0dReal
+
+
+ subroutine MPAS_readStreamAtt_1dReal(stream, attName, attValue, ierr)
+
+ implicit none
+
+ type (MPAS_Stream_type), intent(inout) :: stream
+ character (len=*), intent(in) :: attName
+ real (kind=RKIND), dimension(:), pointer :: attValue
+ integer, intent(out), optional :: ierr
+
+ integer :: io_err
+
+ if (present(ierr)) ierr = MPAS_STREAM_NOERR
+
+ !
+ ! Sanity checks
+ !
+ if (.not. stream % isInitialized) then
+ if (present(ierr)) ierr = MPAS_STREAM_NOT_INITIALIZED
+ return
+ end if
+
+ call MPAS_io_get_att(stream % fileHandle, attName, attValue, ierr=io_err)
+ call MPAS_io_err_mesg(io_err, .false.)
+ if (io_err /= MPAS_IO_NOERR .and. present(ierr)) ierr = MPAS_IO_ERR
+
+ end subroutine MPAS_readStreamAtt_1dReal
+
+
+ subroutine MPAS_readStreamAtt_text(stream, attName, attValue, ierr)
+
+ implicit none
+
+ type (MPAS_Stream_type), intent(inout) :: stream
+ character (len=*), intent(in) :: attName
+ character (len=*), intent(out) :: attValue
+ integer, intent(out), optional :: ierr
+
+ integer :: io_err
+
+ if (present(ierr)) ierr = MPAS_STREAM_NOERR
+
+ !
+ ! Sanity checks
+ !
+ if (.not. stream % isInitialized) then
+ if (present(ierr)) ierr = MPAS_STREAM_NOT_INITIALIZED
+ return
+ end if
+
+ call MPAS_io_get_att(stream % fileHandle, attName, attValue, ierr=io_err)
+ call MPAS_io_err_mesg(io_err, .false.)
+ if (io_err /= MPAS_IO_NOERR .and. present(ierr)) ierr = MPAS_IO_ERR
+
+ end subroutine MPAS_readStreamAtt_text
+
+
subroutine MPAS_writeStreamAtt_0dInteger(stream, attName, attValue, ierr)
implicit none
@@ -103,11 +276,137 @@
integer, intent(in) :: attValue
integer, intent(out), optional :: ierr
- if (present(ierr)) ierr = 0
+ integer :: io_err
+ if (present(ierr)) ierr = MPAS_STREAM_NOERR
+
+ !
+ ! Sanity checks
+ !
+ if (.not. stream % isInitialized) then
+ if (present(ierr)) ierr = MPAS_STREAM_NOT_INITIALIZED
+ return
+ end if
+
+ call MPAS_io_put_att(stream % fileHandle, attName, attValue, ierr=io_err)
+ call MPAS_io_err_mesg(io_err, .false.)
+ if (io_err /= MPAS_IO_NOERR .and. present(ierr)) ierr = MPAS_IO_ERR
+
end subroutine MPAS_writeStreamAtt_0dInteger
+ subroutine MPAS_writeStreamAtt_1dInteger(stream, attName, attValue, ierr)
+
+ implicit none
+
+ type (MPAS_Stream_type), intent(inout) :: stream
+ character (len=*), intent(in) :: attName
+ integer, dimension(:), intent(in) :: attValue
+ integer, intent(out), optional :: ierr
+
+ integer :: io_err
+
+ if (present(ierr)) ierr = MPAS_STREAM_NOERR
+
+ !
+ ! Sanity checks
+ !
+ if (.not. stream % isInitialized) then
+ if (present(ierr)) ierr = MPAS_STREAM_NOT_INITIALIZED
+ return
+ end if
+
+ call MPAS_io_put_att(stream % fileHandle, attName, attValue, ierr=io_err)
+ call MPAS_io_err_mesg(io_err, .false.)
+ if (io_err /= MPAS_IO_NOERR .and. present(ierr)) ierr = MPAS_IO_ERR
+
+ end subroutine MPAS_writeStreamAtt_1dInteger
+
+
+ subroutine MPAS_writeStreamAtt_0dReal(stream, attName, attValue, ierr)
+
+ implicit none
+
+ type (MPAS_Stream_type), intent(inout) :: stream
+ character (len=*), intent(in) :: attName
+ real (kind=RKIND), intent(in) :: attValue
+ integer, intent(out), optional :: ierr
+
+ integer :: io_err
+
+ if (present(ierr)) ierr = MPAS_STREAM_NOERR
+
+ !
+ ! Sanity checks
+ !
+ if (.not. stream % isInitialized) then
+ if (present(ierr)) ierr = MPAS_STREAM_NOT_INITIALIZED
+ return
+ end if
+
+ call MPAS_io_put_att(stream % fileHandle, attName, attValue, ierr=io_err)
+ call MPAS_io_err_mesg(io_err, .false.)
+ if (io_err /= MPAS_IO_NOERR .and. present(ierr)) ierr = MPAS_IO_ERR
+
+ end subroutine MPAS_writeStreamAtt_0dReal
+
+
+ subroutine MPAS_writeStreamAtt_1dReal(stream, attName, attValue, ierr)
+
+ implicit none
+
+ type (MPAS_Stream_type), intent(inout) :: stream
+ character (len=*), intent(in) :: attName
+ real (kind=RKIND), dimension(:), intent(in) :: attValue
+ integer, intent(out), optional :: ierr
+
+ integer :: io_err
+
+ if (present(ierr)) ierr = MPAS_STREAM_NOERR
+
+ !
+ ! Sanity checks
+ !
+ if (.not. stream % isInitialized) then
+ if (present(ierr)) ierr = MPAS_STREAM_NOT_INITIALIZED
+ return
+ end if
+
+ call MPAS_io_put_att(stream % fileHandle, attName, attValue, ierr=io_err)
+ call MPAS_io_err_mesg(io_err, .false.)
+ if (io_err /= MPAS_IO_NOERR .and. present(ierr)) ierr = MPAS_IO_ERR
+
+ end subroutine MPAS_writeStreamAtt_1dReal
+
+
+ subroutine MPAS_writeStreamAtt_text(stream, attName, attValue, ierr)
+
+ implicit none
+
+ type (MPAS_Stream_type), intent(inout) :: stream
+ character (len=*), intent(in) :: attName
+ character (len=*), intent(in) :: attValue
+ integer, intent(out), optional :: ierr
+
+ integer :: io_err
+
+ if (present(ierr)) ierr = MPAS_STREAM_NOERR
+
+ !
+ ! Sanity checks
+ !
+ if (.not. stream % isInitialized) then
+ if (present(ierr)) ierr = MPAS_STREAM_NOT_INITIALIZED
+ return
+ end if
+
+ call MPAS_io_put_att(stream % fileHandle, attName, attValue, ierr=io_err)
+ call MPAS_io_err_mesg(io_err, .false.)
+ if (io_err /= MPAS_IO_NOERR .and. present(ierr)) ierr = MPAS_IO_ERR
+
+ end subroutine MPAS_writeStreamAtt_text
+
+
subroutine MPAS_closeStream(stream, ierr)
implicit none
@@ -115,8 +414,24 @@
type (MPAS_Stream_type), intent(inout) :: stream
integer, intent(out), optional :: ierr
- if (present(ierr)) ierr = 0
+ integer :: io_err
+ if (present(ierr)) ierr = MPAS_STREAM_NOERR
+
+ !
+ ! Sanity checks
+ !
+ if (.not. stream % isInitialized) then
+ if (present(ierr)) ierr = MPAS_STREAM_NOT_INITIALIZED
+ return
+ end if
+
+ call MPAS_io_close(stream % fileHandle, io_err)
+ call MPAS_io_err_mesg(io_err, .false.)
+ if (io_err /= MPAS_IO_NOERR .and. present(ierr)) ierr = MPAS_IO_ERR
+
+ stream % isInitialized = .false.
+
end subroutine MPAS_closeStream
end module mpas_io_streams
</font>
</pre>