<p><b>duda</b> 2012-04-10 16:08:32 -0600 (Tue, 10 Apr 2012)</p><p>BRANCH COMMIT<br>
<br>
Two fixes in mpas_io_stream module:<br>
 - In MPAS_seekStream(), inquire about the 'xtime' variable just in case it isn't being read as part of the stream<br>
 - When reading a stream, don't read fields whose dimensions in the file differ from the declared dimensions in the IO layer<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-04-10 00:56:10 UTC (rev 1765)
+++ branches/omp_blocks/io/src/framework/mpas_io_streams.F        2012-04-10 22:08:32 UTC (rev 1766)
@@ -165,11 +165,20 @@
 
 write(0,*) 'Found ', timeDim, ' times in file' 
 
+      call MPAS_io_inq_var(stream % fileHandle, 'xtime', ierr=io_err)
+      if (io_err /= MPAS_IO_NOERR) then
+         if (present(ierr)) ierr = MPAS_IO_ERR
+         return
+      end if
+
+write(0,*) 'Found xtime variable'
+
       allocate(xtimes(timeDim))
 
       do i=1,timeDim
          call MPAS_io_set_frame(stream % fileHandle, i, io_err)
          call MPAS_io_get_var(stream % fileHandle, 'xtime', xtimes(i), io_err)
+write(0,*) '... just read in xtime='//xtimes(i)
       end do
 
       if (len(seekTime) &gt; 32) then
@@ -182,6 +191,7 @@
 
       do i=1,timeDim
          write(strTemp, '(a)') trim(xtimes(i)(1:32))
+write(0,*) '... converted strTemp='//strTemp
          call mpas_set_time(curr_time=sliceTime, dateTimeString=strTemp)
          if (seekPosition == MPAS_STREAM_EXACT_TIME) then
             if (sliceTime == startTime) then
@@ -1101,8 +1111,10 @@
       integer :: i
       integer :: idim
       integer :: ndims
+      integer :: dimTemp
       character (len=64), dimension(5) :: dimNamesLocal
       character (len=64), dimension(:), pointer :: dimNamesInq
+      integer, dimension(:), pointer :: dimSizesInq
       type (field_list_type), pointer :: field_list_cursor
       type (field_list_type), pointer :: new_field_list_node
 
@@ -1190,7 +1202,7 @@
       else if (stream % ioDirection == MPAS_IO_READ) then
 write(0,*) '... inquiring about'
 
-         call MPAS_io_inq_var(stream % fileHandle, trim(fieldName), dimnames=dimNamesInq, ierr=io_err)
+         call MPAS_io_inq_var(stream % fileHandle, trim(fieldName), dimnames=dimNamesInq, dimsizes=dimSizesInq, ierr=io_err)
          call MPAS_io_err_mesg(io_err, .false.)
          if (io_err /= MPAS_IO_NOERR) then
             if (present(ierr)) ierr = MPAS_IO_ERR
@@ -1199,9 +1211,38 @@
          end if
 
 ! Here, we should probably do a check to make sure the file agrees with what MPAS expects for the field
-!         do i=1,ndims
-!write(0,*) 'Comparing '//trim(dimNames(i))//' '//trim(dimNamesInq(i))
-!         end do 
+         do i=1,ndims
+write(0,*) 'Comparing '//trim(dimNames(i))//' '//trim(dimNamesInq(i))
+            if (trim(dimNames(i)) /= trim(dimNamesInq(i))) then
+write(0,*) 'Mismatched dimension name in field'
+               if (present(ierr)) ierr = MPAS_IO_ERR
+               deallocate(new_field_list_node)
+               deallocate(dimNamesInq)
+               deallocate(dimSizesInq)
+               return
+            end if
+            if (i &lt; ndims) then
+               dimTemp = dimSizes(i)
+            else
+               if (trim(dimNamesInq(i)) == 'nCells' .or. &amp;
+                   trim(dimNamesInq(i)) == 'nEdges' .or. &amp;
+                   trim(dimNamesInq(i)) == 'nVertices'   &amp;
+                  ) then
+                  dimTemp = globalDimSize
+               else
+                  dimTemp = dimSizes(i)
+               end if
+            end if
+write(0,*) 'Comparing ', dimTemp, ' ', dimSizesInq(i)
+            if (dimTemp /= dimSizesInq(i)) then
+write(0,*) 'Mismatched dimension size in field'
+               if (present(ierr)) ierr = MPAS_IO_ERR
+               deallocate(new_field_list_node)
+               deallocate(dimNamesInq)
+               deallocate(dimSizesInq)
+               return
+            end if
+         end do 
 
          ! Set outer dimension sizes depending on whether the field is decomposed
          if (isDecomposed) then
@@ -1213,6 +1254,7 @@
          new_field_list_node % isDecomposed = isDecomposed
 
          deallocate(dimNamesInq)
+         deallocate(dimSizesInq)
 
       end if
 

</font>
</pre>