<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) > 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 < ndims) then
+ dimTemp = dimSizes(i)
+ else
+ if (trim(dimNamesInq(i)) == 'nCells' .or. &
+ trim(dimNamesInq(i)) == 'nEdges' .or. &
+ trim(dimNamesInq(i)) == 'nVertices' &
+ ) 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>