<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 =&gt; 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, &amp;
+                         MPAS_STREAM_NOT_INITIALIZED    = -1, &amp;
+                         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>