[cig-commits] r18493 - in short/3D/PyLith/trunk: libsrc/pylith/meshio unittests/libtests/meshio

brad at geodynamics.org brad at geodynamics.org
Mon May 30 14:40:35 PDT 2011


Author: brad
Date: 2011-05-30 14:40:35 -0700 (Mon, 30 May 2011)
New Revision: 18493

Modified:
   short/3D/PyLith/trunk/libsrc/pylith/meshio/DataWriterHDF5Ext.cc
   short/3D/PyLith/trunk/libsrc/pylith/meshio/HDF5.cc
   short/3D/PyLith/trunk/unittests/libtests/meshio/TestHDF5.cc
   short/3D/PyLith/trunk/unittests/libtests/meshio/TestHDF5.hh
Log:
Added more HDF5 unit tests. Improved HDF5 chunking.

Modified: short/3D/PyLith/trunk/libsrc/pylith/meshio/DataWriterHDF5Ext.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/pylith/meshio/DataWriterHDF5Ext.cc	2011-05-30 21:03:22 UTC (rev 18492)
+++ short/3D/PyLith/trunk/libsrc/pylith/meshio/DataWriterHDF5Ext.cc	2011-05-30 21:40:35 UTC (rev 18493)
@@ -598,7 +598,7 @@
     // Create dataset
     // Dataset has unknown size.
     hsize_t dims[3];
-    dims[0] = H5S_UNLIMITED;
+    dims[0] = 1;
     dims[1] = 1;
     dims[2] = 1;
     _h5->createDataset("/", "time", dims, dimsChunk, ndims, 

Modified: short/3D/PyLith/trunk/libsrc/pylith/meshio/HDF5.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/pylith/meshio/HDF5.cc	2011-05-30 21:03:22 UTC (rev 18492)
+++ short/3D/PyLith/trunk/libsrc/pylith/meshio/HDF5.cc	2011-05-30 21:40:35 UTC (rev 18493)
@@ -706,7 +706,13 @@
       throw std::runtime_error("Could not open group.");
 
     // Create the dataspace
-    hid_t dataspace = H5Screate_simple(ndims, dimsChunk, dims);
+    hsize_t *maxDims = (ndims > 0) ? new hsize_t[ndims] : 0;
+    if (ndims > 0)
+      maxDims[0] = H5S_UNLIMITED;
+    for (int i=1; i < ndims; ++i)
+      maxDims[i] = dims[i];
+    hid_t dataspace = H5Screate_simple(ndims, dims, maxDims);
+    delete[] maxDims; maxDims = 0;
     if (dataspace < 0)
       throw std::runtime_error("Could not create dataspace.");
       
@@ -1011,10 +1017,12 @@
 
     // Create the dataspace
     hsize_t* maxDims = (ndims > 0) ? new hsize_t[ndims] : 0;
-    maxDims[0] = H5S_UNLIMITED;
+    if (ndims > 0)
+      maxDims[0] = H5S_UNLIMITED;
     for (int i=1; i < ndims; ++i)
       maxDims[i] = dims[i];
     hid_t dataspace = H5Screate_simple(ndims, dims, maxDims);
+    delete[] maxDims; maxDims = 0;
     if (dataspace < 0)
       throw std::runtime_error("Could not create dataspace.");
       

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/TestHDF5.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/TestHDF5.cc	2011-05-30 21:03:22 UTC (rev 18492)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/TestHDF5.cc	2011-05-30 21:40:35 UTC (rev 18493)
@@ -104,6 +104,61 @@
 } // testHasDataset
 
 // ----------------------------------------------------------------------
+// Test getDatasetDims().
+void
+pylith::meshio::TestHDF5::testGetDatasetDims(void)
+{ // testGetDatasetDims
+  HDF5 h5("test.h5", H5F_ACC_TRUNC);
+
+  const int ndimsE = 2;
+  const hsize_t dimsE[ndimsE] = { 3, 2 };
+  const hsize_t dimsChunkE[ndimsE] = { 1, 2 };
+  h5.createDataset("/", "data", dimsE, dimsChunkE, ndimsE, H5T_NATIVE_INT);
+  h5.close();
+
+  h5.open("test.h5", H5F_ACC_RDONLY);
+  hsize_t* dims = 0;
+  int ndims = 0;
+  h5.getDatasetDims(&dims, &ndims, "/", "data");
+  h5.close();
+  CPPUNIT_ASSERT_EQUAL(ndimsE, ndims);
+
+  for (int i=0; i < ndimsE; ++i)
+    CPPUNIT_ASSERT_EQUAL(dimsE[i], dims[i]);
+} // testGetDatasetDims
+
+// ----------------------------------------------------------------------
+// Test getGroupDatasets().
+void
+pylith::meshio::TestHDF5::testGetGroupDatasets(void)
+{ // testGetGroupDatasets
+  const int ngroupsE = 3;
+  const char* namesE[3] = { "dataA",
+			    "dataB",
+			    "dataC" };
+  const hsize_t ndims = 2;
+  const hsize_t dims[ndims] = { 3, 2 };
+  const hsize_t dimsChunk[ndims] = { 1, 2 };
+
+  HDF5 h5("test.h5", H5F_ACC_TRUNC);
+  h5.createGroup("/mygroup");
+  for (int i=0; i < ngroupsE; ++i)
+    h5.createDataset("/mygroup", namesE[i], dims, dimsChunk, ndims,
+		     H5T_NATIVE_INT);
+  h5.close();
+
+  string_vector names;
+  h5.open("test.h5", H5F_ACC_RDONLY);
+  h5.getGroupDatasets(&names, "/mygroup");
+  h5.close();
+
+  const int ngroups = names.size();
+  CPPUNIT_ASSERT_EQUAL(ngroupsE, ngroups);
+  for (int i=0; i < ngroups; ++i)
+    CPPUNIT_ASSERT_EQUAL(std::string(namesE[i]), names[i]);
+} // testGetGroupDatasets
+
+// ----------------------------------------------------------------------
 // Test createGroup()
 void
 pylith::meshio::TestHDF5::testCreateGroup(void)

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/TestHDF5.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/TestHDF5.hh	2011-05-30 21:03:22 UTC (rev 18492)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/TestHDF5.hh	2011-05-30 21:40:35 UTC (rev 18493)
@@ -47,6 +47,8 @@
   CPPUNIT_TEST( testOpenClose );
   CPPUNIT_TEST( testHasGroup );
   CPPUNIT_TEST( testHasDataset );
+  CPPUNIT_TEST( testGetDatasetDims );
+  CPPUNIT_TEST( testGetGroupDatasets );
   CPPUNIT_TEST( testCreateGroup );
   CPPUNIT_TEST( testAttributeScalar );
   CPPUNIT_TEST( testAttributeString );
@@ -71,6 +73,12 @@
   /// Test hasDataset().
   void testHasDataset(void);
 
+  /// Test getDatasetDims().
+  void testGetDatasetDims(void);
+
+  /// Test getGroupDatasets().
+  void testGetGroupDatasets(void);
+
   /// Test createGroup()
   void testCreateGroup(void);
 



More information about the CIG-COMMITS mailing list