[cig-commits] r7057 - in short/3D/PyLith/trunk: . libsrc/meshio unittests/libtests/meshio unittests/libtests/meshio/data unittests/pytests/meshio/data

brad at geodynamics.org brad at geodynamics.org
Mon Jun 4 13:13:19 PDT 2007


Author: brad
Date: 2007-06-04 13:13:18 -0700 (Mon, 04 Jun 2007)
New Revision: 7057

Added:
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/MeshDataCubitQuad.cc
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/MeshDataCubitQuad.hh
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/MeshDataCubitTri.cc
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/MeshDataCubitTri.hh
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/twoquad4.cub
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/twoquad4.exo
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/twotri3.cub
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/twotri3.exo
Modified:
   short/3D/PyLith/trunk/TODO
   short/3D/PyLith/trunk/libsrc/meshio/GMVFileAscii.cc
   short/3D/PyLith/trunk/libsrc/meshio/GMVFileBinary.cc
   short/3D/PyLith/trunk/libsrc/meshio/MeshIOCubit.cc
   short/3D/PyLith/trunk/libsrc/meshio/MeshIOCubit.hh
   short/3D/PyLith/trunk/libsrc/meshio/MeshIOLagrit.cc
   short/3D/PyLith/trunk/libsrc/meshio/MeshIOLagrit.hh
   short/3D/PyLith/trunk/unittests/libtests/meshio/Makefile.am
   short/3D/PyLith/trunk/unittests/libtests/meshio/TestMeshIOCubit.cc
   short/3D/PyLith/trunk/unittests/libtests/meshio/TestMeshIOCubit.hh
   short/3D/PyLith/trunk/unittests/libtests/meshio/TestMeshIOLagrit.cc
   short/3D/PyLith/trunk/unittests/libtests/meshio/TestMeshIOLagrit.hh
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/Makefile.am
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/MeshDataCubitHex.cc
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/cube2_ascii.gmv
   short/3D/PyLith/trunk/unittests/pytests/meshio/data/twohex8.txt
Log:
Fixed bugs related to transforming to PyLith convention for ordering vertices within a cell. Created methods in importers to adjust ordering (orientation). Added unit tests for importing tri and quad meshes from Cubit.

Modified: short/3D/PyLith/trunk/TODO
===================================================================
--- short/3D/PyLith/trunk/TODO	2007-06-04 15:39:58 UTC (rev 7056)
+++ short/3D/PyLith/trunk/TODO	2007-06-04 20:13:18 UTC (rev 7057)
@@ -2,8 +2,6 @@
 MAIN PRIORITIES (Brad)
 ======================================================================
 
-0. Need to change order of basis functions in FIATLagrange cells.
-
 Replace specific object bins with ObjectBin.
 
 Update Dirichlet BC to allow mixing different Dirichlet BC for the

Modified: short/3D/PyLith/trunk/libsrc/meshio/GMVFileAscii.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/meshio/GMVFileAscii.cc	2007-06-04 15:39:58 UTC (rev 7056)
+++ short/3D/PyLith/trunk/libsrc/meshio/GMVFileAscii.cc	2007-06-04 20:13:18 UTC (rev 7057)
@@ -209,14 +209,6 @@
 
   *cells -= 1; // use zero base
 
-  if (cellString == "tet")
-    // reverse order
-    for (int iCell=0; iCell < *numCells; ++iCell) {
-      const int tmp = (*cells)[iCell*(*numCorners)+1];
-      (*cells)[iCell*(*numCorners)+1] = (*cells)[iCell*(*numCorners)+2];
-      (*cells)[iCell*(*numCorners)+2] = tmp;
-    } // for
-
   info << "Done." << journal::endl;
 } // readCells
 

Modified: short/3D/PyLith/trunk/libsrc/meshio/GMVFileBinary.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/meshio/GMVFileBinary.cc	2007-06-04 15:39:58 UTC (rev 7056)
+++ short/3D/PyLith/trunk/libsrc/meshio/GMVFileBinary.cc	2007-06-04 20:13:18 UTC (rev 7057)
@@ -141,7 +141,6 @@
   } // if
 } // _readHeader
 
-#include <iostream>
 // ----------------------------------------------------------------------
 void
 pylith::meshio::GMVFileBinary::_readVertices(std::ifstream& fin,
@@ -230,14 +229,6 @@
 
   *cells -= 1; // use zero base
   
-  if (cellString == "tet")
-    // reverse order
-    for (int iCell=0; iCell < *numCells; ++iCell) {
-      const int tmp = (*cells)[iCell*(*numCorners)+1];
-      (*cells)[iCell*(*numCorners)+1] = (*cells)[iCell*(*numCorners)+2];
-      (*cells)[iCell*(*numCorners)+2] = tmp;
-    } // for
-
   info << "Done." << journal::endl;
 } // _readCells
 

Modified: short/3D/PyLith/trunk/libsrc/meshio/MeshIOCubit.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/meshio/MeshIOCubit.cc	2007-06-04 15:39:58 UTC (rev 7056)
+++ short/3D/PyLith/trunk/libsrc/meshio/MeshIOCubit.cc	2007-06-04 20:13:18 UTC (rev 7057)
@@ -67,6 +67,7 @@
 
     _readVertices(ncfile, &coordinates, &numVertices, &spaceDim);
     _readCells(ncfile, &cells, &materialIds, &numCells, &numCorners);
+    _orientCells(&cells, numCells, numCorners, meshDim);
     _buildMesh(coordinates, numVertices, spaceDim,
 	       cells, numCells, numCorners, meshDim);
     _setMaterials(materialIds);
@@ -307,5 +308,51 @@
   throw std::logic_error("MeshIOCubit::_writeAttributes() not implemented.");
 } // _writeAttributes
 
+// ----------------------------------------------------------------------
+// Reorder vertices in cells to match PyLith conventions.
+void
+pylith::meshio::MeshIOCubit::_orientCells(int_array* const cells,
+					  const int numCells,
+					  const int numCorners,
+					  const int meshDim)
+{ // _orientCells
+  assert(0 != cells);
+  assert(cells->size() == numCells*numCorners);
+
+  if (2 == meshDim && 3 == numCorners) // TRI
+    // 0 1 2 -> 0 2 1
+    for (int iCell=0; iCell < numCells; ++iCell) {
+      const int i1 = iCell*numCorners+1;
+      const int i2 = iCell*numCorners+2;
+      const int tmp = (*cells)[i1];
+      (*cells)[i1] = (*cells)[i2];
+      (*cells)[i2] = tmp;
+    } // for
+  else if (2 == meshDim && 4 == numCorners) // QUAD
+    // 0 1 2 3 -> 0 1 3 2
+    for (int iCell=0; iCell < numCells; ++iCell) {
+      const int i2 = iCell*numCorners+2;
+      const int i3 = iCell*numCorners+3;
+      const int tmp = (*cells)[i2];
+      (*cells)[i2] = (*cells)[i3];
+      (*cells)[i3] = tmp;
+    } // for
+  else if (3 == meshDim && 8 == numCorners) // HEX
+    // 0 1 2 3 4 5 6 7 -> 0 1 3 2 4 5 7 6
+    for (int iCell=0; iCell < numCells; ++iCell) {
+      const int i2 = iCell*numCorners+2;
+      const int i3 = iCell*numCorners+3;
+      int tmp = (*cells)[i2];
+      (*cells)[i2] = (*cells)[i3];
+      (*cells)[i3] = tmp;
+
+      const int i6 = iCell*numCorners+6;
+      const int i7 = iCell*numCorners+7;
+      tmp = (*cells)[i6];
+      (*cells)[i6] = (*cells)[i7];
+      (*cells)[i7] = tmp;
+    } // for
+} // _orientCells
   
+
 // End of file 

Modified: short/3D/PyLith/trunk/libsrc/meshio/MeshIOCubit.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/meshio/MeshIOCubit.hh	2007-06-04 15:39:58 UTC (rev 7056)
+++ short/3D/PyLith/trunk/libsrc/meshio/MeshIOCubit.hh	2007-06-04 20:13:18 UTC (rev 7057)
@@ -20,6 +20,8 @@
 namespace pylith {
   namespace meshio {
     class MeshIOCubit;
+
+    class TestMeshIOCubit; // unit testing
   } // meshio
 } // pylith
 
@@ -27,6 +29,7 @@
 
 class pylith::meshio::MeshIOCubit : public MeshIO
 { // MeshIOCubit
+  friend class TestMeshIOCubit;
 
 // PUBLIC METHODS ///////////////////////////////////////////////////////
 public :
@@ -111,6 +114,19 @@
    */
   void _writeAttributes(NcFile& ncfile) const;
 
+  /** Reorder vertices in cells to match PyLith conventions.
+   *
+   * @param cells Array of vertex indices for each cell [numCells*numCorners].
+   * @param numCells Number of cells.
+   * @param numCorners Number of vertices per cell.
+   * @param meshDim Spatial dimension of mesh.
+   */
+  static
+  void _orientCells(int_array* const cells,
+		    const int numCells,
+		    const int numCorners,
+		    const int meshDim);
+
 // PRIVATE MEMBERS //////////////////////////////////////////////////////
 private :
 

Modified: short/3D/PyLith/trunk/libsrc/meshio/MeshIOLagrit.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/meshio/MeshIOLagrit.cc	2007-06-04 15:39:58 UTC (rev 7056)
+++ short/3D/PyLith/trunk/libsrc/meshio/MeshIOLagrit.cc	2007-06-04 20:13:18 UTC (rev 7057)
@@ -21,6 +21,7 @@
 
 #include "pylith/utils/array.hh" // USES double_array, int_array
 
+#include <assert.h> // USES assert()
 #include <stdexcept> // TEMPORARY
 
 // ----------------------------------------------------------------------
@@ -56,10 +57,12 @@
     GMVFileAscii filein(_filenameGmv.c_str());
     filein.read(&coordinates, &cells, &materialIds, 
 		&meshDim, &spaceDim, &numVertices, &numCells, &numCorners);
+    _orientCellsAscii(&cells, numCells, numCorners, meshDim);
   } else {
     GMVFileBinary filein(_filenameGmv.c_str(), _flipEndian);
     filein.read(&coordinates, &cells, &materialIds, 
 		&meshDim, &spaceDim, &numVertices, &numCells, &numCorners);
+    _orientCellsBinary(&cells, numCells, numCorners, meshDim);
   } // if/else
   _buildMesh(coordinates, numVertices, spaceDim,
 	     cells, numCells, numCorners, meshDim);
@@ -87,5 +90,43 @@
   throw std::logic_error("MeshIOLagrit::_write not implemented.");
 } // _write
 
+// ----------------------------------------------------------------------
+// Reorder vertices in cells from ASCII GMV file to match PyLith
+// conventions.
+void
+pylith::meshio::MeshIOLagrit::_orientCellsAscii(int_array* const cells,
+						const int numCells,
+						const int numCorners,
+						const int meshDim)
+{ // _orientCellsAscii
+  assert(0 != cells);
+  assert(cells->size() == numCells*numCorners);
+
+  if (3 == meshDim && 4 == numCorners) // TET
+    for (int iCell=0; iCell < numCells; ++iCell) {
+      const int i1 = iCell*numCorners+1;
+      const int i2 = iCell*numCorners+2;
+      const int tmp = (*cells)[i1];
+      (*cells)[i1] = (*cells)[i2];
+      (*cells)[i2] = tmp;
+    } // for
+} // _orientCellsAscii
   
+// ----------------------------------------------------------------------
+// Reorder vertices in cells from binary GMV file to match PyLith
+// conventions.
+void
+pylith::meshio::MeshIOLagrit::_orientCellsBinary(int_array* const cells,
+						 const int numCells,
+						 const int numCorners,
+						 const int meshDim)
+{ // _orientCellsBinary
+  assert(0 != cells);
+  assert(cells->size() == numCells*numCorners);
+
+  if (3 == meshDim && 4 == numCorners)  // TET
+    ; // do nothing
+} // _orientCellsBinary
+  
+
 // End of file 

Modified: short/3D/PyLith/trunk/libsrc/meshio/MeshIOLagrit.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/meshio/MeshIOLagrit.hh	2007-06-04 15:39:58 UTC (rev 7056)
+++ short/3D/PyLith/trunk/libsrc/meshio/MeshIOLagrit.hh	2007-06-04 20:13:18 UTC (rev 7057)
@@ -20,11 +20,14 @@
 namespace pylith {
   namespace meshio {
     class MeshIOLagrit;
+
+    class TestMeshIOLagrit; // unit testing
   } // meshio
 } // pylith
 
 class pylith::meshio::MeshIOLagrit : public MeshIO
 { // MeshIOLagrit
+  friend class TestMeshIOLagrit; // unit testing
 
 // PUBLIC METHODS ///////////////////////////////////////////////////////
 public :
@@ -95,6 +98,34 @@
 // PRIVATE METHODS //////////////////////////////////////////////////////
 private :
 
+  /** Reorder vertices in cells from ASCII GMV files to match PyLith
+   * conventions.
+   *
+   * @param cells Array of vertex indices for each cell [numCells*numCorners].
+   * @param numCells Number of cells.
+   * @param numCorners Number of vertices per cell.
+   * @param meshDim Spatial dimension of mesh.
+   */
+  static
+  void _orientCellsAscii(int_array* const cells,
+			 const int numCells,
+			 const int numCorners,
+			 const int meshDim);
+
+  /** Reorder vertices in cells from binary GMV files to match PyLith
+   * conventions.
+   *
+   * @param cells Array of vertex indices for each cell [numCells*numCorners].
+   * @param numCells Number of cells.
+   * @param numCorners Number of vertices per cell.
+   * @param meshDim Spatial dimension of mesh.
+   */
+  static
+  void _orientCellsBinary(int_array* const cells,
+			  const int numCells,
+			  const int numCorners,
+			  const int meshDim);
+
 // PRIVATE MEMBERS //////////////////////////////////////////////////////
 private :
 

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/Makefile.am
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/Makefile.am	2007-06-04 15:39:58 UTC (rev 7056)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/Makefile.am	2007-06-04 20:13:18 UTC (rev 7057)
@@ -40,8 +40,10 @@
 	data/MeshData2D.cc \
 	data/MeshData2Din3D.cc \
 	data/MeshData3D.cc \
+	data/MeshDataCubitTri.cc \
+	data/MeshDataCubitQuad.cc \
+	data/MeshDataCubitTet.cc \
 	data/MeshDataCubitHex.cc \
-	data/MeshDataCubitTet.cc \
 	data/MeshDataLagritTet.cc
 
 noinst_HEADERS += \
@@ -52,8 +54,10 @@
 	data/MeshData2D.hh \
 	data/MeshData2Din3D.hh \
 	data/MeshData3D.hh \
+	data/MeshDataCubitTri.hh \
+	data/MeshDataCubitQuad.hh \
+	data/MeshDataCubitTet.hh \
 	data/MeshDataCubitHex.hh \
-	data/MeshDataCubitTet.hh \
 	data/MeshDataLagritTet.hh
 
 testmeshio_LDFLAGS = $(PETSC_LIB) $(PYTHON_BLDLIBRARY)

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/TestMeshIOCubit.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/TestMeshIOCubit.cc	2007-06-04 15:39:58 UTC (rev 7056)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/TestMeshIOCubit.cc	2007-06-04 20:13:18 UTC (rev 7057)
@@ -17,7 +17,10 @@
 #include "pylith/meshio/MeshIOCubit.hh"
 
 #include "pylith/utils/sievetypes.hh" // USES PETSc Mesh
+#include "pylith/utils/array.hh" // USES int_array
 
+#include "data/MeshDataCubitTri.hh"
+#include "data/MeshDataCubitQuad.hh"
 #include "data/MeshDataCubitTet.hh"
 #include "data/MeshDataCubitHex.hh"
 
@@ -63,6 +66,26 @@
 } // testFilename
 
 // ----------------------------------------------------------------------
+// Test read() for mesh with triangle cells.
+void
+pylith::meshio::TestMeshIOCubit::testReadTri(void)
+{ // testReadTri
+  MeshDataCubitTri data;
+  const char* filename = "data/twotri3.exo";
+  _testRead(data, filename);
+} // testReadTri
+
+// ----------------------------------------------------------------------
+// Test read() for mesh with quadrilateral cells.
+void
+pylith::meshio::TestMeshIOCubit::testReadQuad(void)
+{ // testReadQuad
+  MeshDataCubitQuad data;
+  const char* filename = "data/twoquad4.exo";
+  _testRead(data, filename);
+} // testReadQuad
+
+// ----------------------------------------------------------------------
 // Test read() for mesh with tetrahedral cells.
 void
 pylith::meshio::TestMeshIOCubit::testReadTet(void)
@@ -99,5 +122,147 @@
   _checkVals(mesh, data);
 } // _testRead
 
+// ----------------------------------------------------------------------
+// Test _orientCells with line cells.
+void
+pylith::meshio::TestMeshIOCubit::testOrientLine(void)
+{ // testOrientLine
+  // No change in cells exepected
 
+  const int meshDim = 1;
+  const int numCells = 2;
+  const int numCorners = 2;
+  const int cellsOrig[] = {
+    0, 1,
+    2, 3
+  };
+  const int cellsE[] = {
+    0, 1,
+    2, 3
+  };
+  
+  int_array cells(cellsOrig, numCells*numCorners);
+  MeshIOCubit::_orientCells(&cells, numCells, numCorners, meshDim);
+
+  const int size = numCells*numCorners;
+  CPPUNIT_ASSERT_EQUAL(size, int(cells.size()));
+  for (int i=0; i < size; ++i)
+    CPPUNIT_ASSERT_EQUAL(cellsE[i], cells[i]);
+} // testOrientLine
+
+// ----------------------------------------------------------------------
+// Test _orientCells with tri cells.
+void
+pylith::meshio::TestMeshIOCubit::testOrientTri(void)
+{ // testOrientTri
+  // Swap vertices 1 and 2, vertex 0 is unchanged.
+
+  const int meshDim = 2;
+  const int numCells = 2;
+  const int numCorners = 3;
+  const int cellsOrig[] = {
+    0, 1, 2,
+    3, 4, 5
+  };
+  const int cellsE[] = {
+    0, 2, 1,
+    3, 5, 4
+  };
+  
+  int_array cells(cellsOrig, numCells*numCorners);
+  MeshIOCubit::_orientCells(&cells, numCells, numCorners, meshDim);
+
+  const int size = numCells*numCorners;
+  CPPUNIT_ASSERT_EQUAL(size, int(cells.size()));
+  for (int i=0; i < size; ++i)
+    CPPUNIT_ASSERT_EQUAL(cellsE[i], cells[i]);
+} // testOrientTri
+
+// ----------------------------------------------------------------------
+// Test _orientCells with quad cells.
+void
+pylith::meshio::TestMeshIOCubit::testOrientQuad(void)
+{ // testOrientQuad
+  // Expect vertices 0 and 1 to remain the same, but vertices 2 and 3
+  // should be swapped
+
+  const int meshDim = 2;
+  const int numCells = 2;
+  const int numCorners = 4;
+  const int cellsOrig[] = {
+    0, 1, 2, 3,
+    6, 7, 8, 9
+  };
+  const int cellsE[] = {
+    0, 1, 3, 2,
+    6, 7, 9, 8
+  };
+  
+  int_array cells(cellsOrig, numCells*numCorners);
+  MeshIOCubit::_orientCells(&cells, numCells, numCorners, meshDim);
+
+  const int size = numCells*numCorners;
+  CPPUNIT_ASSERT_EQUAL(size, int(cells.size()));
+  for (int i=0; i < size; ++i)
+    CPPUNIT_ASSERT_EQUAL(cellsE[i], cells[i]);
+} // testOrientQuad
+
+// ----------------------------------------------------------------------
+// Test _orientCells with tet cells.
+void
+pylith::meshio::TestMeshIOCubit::testOrientTet(void)
+{ // testOrientTet
+  // No change in cells exepected
+
+  const int meshDim = 3;
+  const int numCells = 2;
+  const int numCorners = 4;
+  const int cellsOrig[] = {
+    0, 1, 2, 3,
+    3, 4, 5, 6
+  };
+  const int cellsE[] = {
+    0, 1, 2, 3,
+    3, 4, 5, 6
+  };
+  
+  int_array cells(cellsOrig, numCells*numCorners);
+  MeshIOCubit::_orientCells(&cells, numCells, numCorners, meshDim);
+
+  const int size = numCells*numCorners;
+  CPPUNIT_ASSERT_EQUAL(size, int(cells.size()));
+  for (int i=0; i < size; ++i)
+    CPPUNIT_ASSERT_EQUAL(cellsE[i], cells[i]);
+} // testOrientTet
+
+// ----------------------------------------------------------------------
+// Test _orientCells with hex cells.
+void
+pylith::meshio::TestMeshIOCubit::testOrientHex(void)
+{ // testOrientHex
+  // Expect vertices 0 and 1 to remain the same, but vertices 2 and 3
+  // should be swapped
+
+  const int meshDim = 3;
+  const int numCells = 2;
+  const int numCorners = 8;
+  const int cellsOrig[] = {
+    0, 1, 2, 3, 4, 5, 6, 7,
+    10, 11, 12, 13, 14, 15, 16, 17
+  };
+  const int cellsE[] = {
+    0, 1, 3, 2, 4, 5, 7, 6,
+    10, 11, 13, 12, 14, 15, 17, 16
+  };
+  
+  int_array cells(cellsOrig, numCells*numCorners);
+  MeshIOCubit::_orientCells(&cells, numCells, numCorners, meshDim);
+
+  const int size = numCells*numCorners;
+  CPPUNIT_ASSERT_EQUAL(size, int(cells.size()));
+  for (int i=0; i < size; ++i)
+    CPPUNIT_ASSERT_EQUAL(cellsE[i], cells[i]);
+} // testOrientHex
+
+
 // End of file 

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/TestMeshIOCubit.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/TestMeshIOCubit.hh	2007-06-04 15:39:58 UTC (rev 7056)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/TestMeshIOCubit.hh	2007-06-04 20:13:18 UTC (rev 7057)
@@ -41,8 +41,15 @@
   CPPUNIT_TEST( testDebug );
   CPPUNIT_TEST( testInterpolate );
   CPPUNIT_TEST( testFilename );
+  CPPUNIT_TEST( testReadTri );
+  CPPUNIT_TEST( testReadQuad );
   CPPUNIT_TEST( testReadTet );
   CPPUNIT_TEST( testReadHex );
+  CPPUNIT_TEST( testOrientLine );
+  CPPUNIT_TEST( testOrientTri );
+  CPPUNIT_TEST( testOrientQuad );
+  CPPUNIT_TEST( testOrientTet );
+  CPPUNIT_TEST( testOrientHex );
   CPPUNIT_TEST_SUITE_END();
 
   // PUBLIC METHODS /////////////////////////////////////////////////////
@@ -60,12 +67,33 @@
   /// Test filename()
   void testFilename(void);
 
+  /// Test read() for mesh with triangle cells.
+  void testReadTri(void);
+
+  /// Test read() for mesh with quadrilateral cells.
+  void testReadQuad(void);
+
   /// Test read() for mesh with tetrahedral cells.
   void testReadTet(void);
 
   /// Test read() for mesh with hexahedral cells.
   void testReadHex(void);
 
+  /// Test _orientCells with line cells.
+  void testOrientLine(void);
+
+  /// Test _orientCells with tri cells.
+  void testOrientTri(void);
+
+  /// Test _orientCells with quad cells.
+  void testOrientQuad(void);
+
+  /// Test _orientCells with tet cells.
+  void testOrientTet(void);
+
+  /// Test _orientCells with hex cells.
+  void testOrientHex(void);
+
   // PRIVATE METHODS ////////////////////////////////////////////////////
 private :
 

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/TestMeshIOLagrit.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/TestMeshIOLagrit.cc	2007-06-04 15:39:58 UTC (rev 7056)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/TestMeshIOLagrit.cc	2007-06-04 20:13:18 UTC (rev 7057)
@@ -17,6 +17,7 @@
 #include "pylith/meshio/MeshIOLagrit.hh"
 
 #include "pylith/utils/sievetypes.hh" // USES PETSc Mesh
+#include "pylith/utils/array.hh" // USES int_array
 
 #include "data/MeshDataLagritTet.hh"
 
@@ -120,5 +121,61 @@
   _checkVals(mesh, data);
 } // _testRead
 
+// ----------------------------------------------------------------------
+// Test _orientCellsAscii with tet cells.
+void
+pylith::meshio::TestMeshIOLagrit::testOrientAsciiTet(void)
+{ // testOrientAsciiTet
+  // Expect vertices 1 and 2 to be swapped (not change to vertices 0 and 3)
 
+  const int meshDim = 3;
+  const int numCells = 2;
+  const int numCorners = 4;
+  const int cellsOrig[] = {
+    0, 1, 2, 3,
+    3, 4, 5, 6
+  };
+  const int cellsE[] = {
+    0, 2, 1, 3,
+    3, 5, 4, 6
+  };
+  
+  int_array cells(cellsOrig, numCells*numCorners);
+  MeshIOLagrit::_orientCellsAscii(&cells, numCells, numCorners, meshDim);
+
+  const int size = numCells*numCorners;
+  CPPUNIT_ASSERT_EQUAL(size, int(cells.size()));
+  for (int i=0; i < size; ++i)
+    CPPUNIT_ASSERT_EQUAL(cellsE[i], cells[i]);
+} // testOrientAsciiTet
+
+// ----------------------------------------------------------------------
+// Test _orientCellsBinary with tet cells.
+void
+pylith::meshio::TestMeshIOLagrit::testOrientBinaryTet(void)
+{ // testOrientBinaryTet
+  // No change in cells exepected
+
+  const int meshDim = 3;
+  const int numCells = 2;
+  const int numCorners = 4;
+  const int cellsOrig[] = {
+    0, 1, 2, 3,
+    3, 4, 5, 6
+  };
+  const int cellsE[] = {
+    0, 1, 2, 3,
+    3, 4, 5, 6
+  };
+  
+  int_array cells(cellsOrig, numCells*numCorners);
+  MeshIOLagrit::_orientCellsBinary(&cells, numCells, numCorners, meshDim);
+
+  const int size = numCells*numCorners;
+  CPPUNIT_ASSERT_EQUAL(size, int(cells.size()));
+  for (int i=0; i < size; ++i)
+    CPPUNIT_ASSERT_EQUAL(cellsE[i], cells[i]);
+} // testOrientBinaryTet
+
+
 // End of file 

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/TestMeshIOLagrit.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/TestMeshIOLagrit.hh	2007-06-04 15:39:58 UTC (rev 7056)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/TestMeshIOLagrit.hh	2007-06-04 20:13:18 UTC (rev 7057)
@@ -43,6 +43,8 @@
   CPPUNIT_TEST( testFilename );
   CPPUNIT_TEST( testReadTetAscii );
   CPPUNIT_TEST( testReadTetBinary );
+  CPPUNIT_TEST( testOrientAsciiTet );
+  CPPUNIT_TEST( testOrientBinaryTet );
   CPPUNIT_TEST_SUITE_END();
 
   // PUBLIC METHODS /////////////////////////////////////////////////////
@@ -66,6 +68,12 @@
   /// Test read() for mesh with binary files.
   void testReadTetBinary(void);
 
+  /// Test _orientCellsAscii with tet cells.
+  void testOrientAsciiTet(void);
+
+  /// Test _orientCellsBinary with tet cells.
+  void testOrientBinaryTet(void);
+
   // PRIVATE METHODS ////////////////////////////////////////////////////
 private :
 

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/Makefile.am
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/Makefile.am	2007-06-04 15:39:58 UTC (rev 7056)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/Makefile.am	2007-06-04 20:13:18 UTC (rev 7057)
@@ -15,8 +15,10 @@
 	cube2_ascii.pset \
 	cube2_binary.gmv \
 	cube2_binary.pset \
-	twohex8.exo \
-	twotet4.exo
+	twotri3.exo \
+	twoquad4.exo \
+	twotet4.exo \
+	twohex8.exo
 
 noinst_TMP =
 

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/MeshDataCubitHex.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/MeshDataCubitHex.cc	2007-06-04 15:39:58 UTC (rev 7056)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/MeshDataCubitHex.cc	2007-06-04 20:13:18 UTC (rev 7057)
@@ -37,9 +37,10 @@
    2.0,  1.0,  1.0
 };
 
+// PyLith order, not Cubit order
 const int pylith::meshio::MeshDataCubitHex::_cells[] = {
-  0,  1,  2,  3,  4,  5,  6,  7,
-  4,  5,  6,  7,  8,  9, 10, 11
+  0,  1,  3,  2,  4,  5,  7,  6,
+  4,  5,  7,  6,  8,  9, 11, 10
 };
 const int pylith::meshio::MeshDataCubitHex::_materialIds[] = {
   7, 8

Added: short/3D/PyLith/trunk/unittests/libtests/meshio/data/MeshDataCubitQuad.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/MeshDataCubitQuad.cc	2007-06-04 15:39:58 UTC (rev 7056)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/MeshDataCubitQuad.cc	2007-06-04 20:13:18 UTC (rev 7057)
@@ -0,0 +1,84 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+#include "MeshDataCubitQuad.hh"
+
+const int pylith::meshio::MeshDataCubitQuad::_numVertices = 6;
+
+const int pylith::meshio::MeshDataCubitQuad::_spaceDim = 2;
+
+const int pylith::meshio::MeshDataCubitQuad::_numCells = 2;
+
+const int pylith::meshio::MeshDataCubitQuad::_cellDim = 2;
+
+const int pylith::meshio::MeshDataCubitQuad::_numCorners = 4;
+
+const double pylith::meshio::MeshDataCubitQuad::_vertices[] = {
+   0.0,  0.0,
+   1.0,  0.0,
+   1.0,  1.0,
+   0.0,  1.0,
+   2.0,  0.0,
+   2.0,  1.0
+};
+
+const int pylith::meshio::MeshDataCubitQuad::_cells[] = {
+  0,  1,  3,  2,
+  1,  4,  2,  5
+};
+const int pylith::meshio::MeshDataCubitQuad::_materialIds[] = {
+  10, 11
+};
+
+const int pylith::meshio::MeshDataCubitQuad::_numGroups = 2;
+
+const int pylith::meshio::MeshDataCubitQuad::_groupSizes[] = 
+  { 2, 2 };
+
+const int pylith::meshio::MeshDataCubitQuad::_groups[] = {
+  0, 3,
+  4, 5
+};
+
+const char* pylith::meshio::MeshDataCubitQuad::_groupNames[] = {
+  "100", "101"
+};
+
+const char* pylith::meshio::MeshDataCubitQuad::_groupTypes[] = {
+  "vertex", "vertex"
+};
+
+const bool pylith::meshio::MeshDataCubitQuad::_useIndexZero = true;
+
+pylith::meshio::MeshDataCubitQuad::MeshDataCubitQuad(void)
+{ // constructor
+  numVertices = _numVertices;
+  spaceDim = _spaceDim;
+  numCells = _numCells;
+  cellDim = _cellDim;
+  numCorners = _numCorners;
+  vertices = const_cast<double*>(_vertices);
+  cells = const_cast<int*>(_cells);
+  materialIds = const_cast<int*>(_materialIds);
+  groups = const_cast<int*>(_groups);
+  groupSizes = const_cast<int*>(_groupSizes);
+  groupNames = const_cast<char**>(_groupNames);
+  groupTypes = const_cast<char**>(_groupTypes);
+  numGroups = _numGroups;
+  useIndexZero = _useIndexZero;
+} // constructor
+
+pylith::meshio::MeshDataCubitQuad::~MeshDataCubitQuad(void)
+{}
+
+
+// End of file

Added: short/3D/PyLith/trunk/unittests/libtests/meshio/data/MeshDataCubitQuad.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/MeshDataCubitQuad.hh	2007-06-04 15:39:58 UTC (rev 7056)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/MeshDataCubitQuad.hh	2007-06-04 20:13:18 UTC (rev 7057)
@@ -0,0 +1,61 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+#if !defined(pylith_meshio_meshdatacubitquad_hh)
+#define pylith_meshio_meshdatacubitquad_hh
+
+#include "MeshData.hh"
+
+namespace pylith {
+  namespace meshio {
+     class MeshDataCubitQuad;
+  } // pylith
+} // meshio
+
+class pylith::meshio::MeshDataCubitQuad : public MeshData
+{
+
+// PUBLIC METHODS ///////////////////////////////////////////////////////
+public: 
+
+  /// Constructor
+  MeshDataCubitQuad(void);
+
+  /// Destructor
+  ~MeshDataCubitQuad(void);
+
+// PRIVATE MEMBERS //////////////////////////////////////////////////////
+private:
+
+  static const int _numVertices; ///< Number of vertices
+  static const int _spaceDim; ///< Number of dimensions in vertex coordinates
+  static const int _numCells; ///< Number of cells
+  static const int _cellDim; ///< Number of dimensions associated with cell
+  static const int _numCorners; ///< Number of vertices in cell
+
+  static const double _vertices[]; ///< Pointer to coordinates of vertices
+  static const int _cells[]; ///< Pointer to indices of vertices in cells
+  static const int _materialIds[]; ///< Pointer to cell material identifiers
+
+  static const int _groups[]; ///< Groups of points
+  static const int _groupSizes[]; ///< Sizes of groups
+  static const char* _groupNames[]; ///< Array of group names
+  static const char* _groupTypes[]; ///< Array of group types
+  static const int _numGroups; ///< Number of groups
+
+  static const bool _useIndexZero; ///< First vertex is 0 if true, 1 if false
+
+};
+
+#endif // pylith_meshio_meshdatacubitquad_hh
+
+// End of file

Added: short/3D/PyLith/trunk/unittests/libtests/meshio/data/MeshDataCubitTri.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/MeshDataCubitTri.cc	2007-06-04 15:39:58 UTC (rev 7056)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/MeshDataCubitTri.cc	2007-06-04 20:13:18 UTC (rev 7057)
@@ -0,0 +1,82 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+#include "MeshDataCubitTri.hh"
+
+const int pylith::meshio::MeshDataCubitTri::_numVertices = 4;
+
+const int pylith::meshio::MeshDataCubitTri::_spaceDim = 2;
+
+const int pylith::meshio::MeshDataCubitTri::_numCells = 2;
+
+const int pylith::meshio::MeshDataCubitTri::_cellDim = 2;
+
+const int pylith::meshio::MeshDataCubitTri::_numCorners = 3;
+
+const double pylith::meshio::MeshDataCubitTri::_vertices[] = {
+  -1.0,  0.0,
+   0.0, -1.0,
+   0.0,  1.0,
+   1.0,  0.0
+};
+
+const int pylith::meshio::MeshDataCubitTri::_cells[] = {
+  0,  2,  1,
+  2,  3,  1
+};
+const int pylith::meshio::MeshDataCubitTri::_materialIds[] = {
+  2, 3
+};
+
+const int pylith::meshio::MeshDataCubitTri::_numGroups = 2;
+
+const int pylith::meshio::MeshDataCubitTri::_groupSizes[] = 
+  { 1, 1 };
+
+const int pylith::meshio::MeshDataCubitTri::_groups[] = {
+  0,
+  3
+};
+
+const char* pylith::meshio::MeshDataCubitTri::_groupNames[] = {
+  "5", "6"
+};
+
+const char* pylith::meshio::MeshDataCubitTri::_groupTypes[] = {
+  "vertex", "vertex"
+};
+
+const bool pylith::meshio::MeshDataCubitTri::_useIndexZero = true;
+
+pylith::meshio::MeshDataCubitTri::MeshDataCubitTri(void)
+{ // constructor
+  numVertices = _numVertices;
+  spaceDim = _spaceDim;
+  numCells = _numCells;
+  cellDim = _cellDim;
+  numCorners = _numCorners;
+  vertices = const_cast<double*>(_vertices);
+  cells = const_cast<int*>(_cells);
+  materialIds = const_cast<int*>(_materialIds);
+  groups = const_cast<int*>(_groups);
+  groupSizes = const_cast<int*>(_groupSizes);
+  groupNames = const_cast<char**>(_groupNames);
+  groupTypes = const_cast<char**>(_groupTypes);
+  numGroups = _numGroups;
+  useIndexZero = _useIndexZero;
+} // constructor
+
+pylith::meshio::MeshDataCubitTri::~MeshDataCubitTri(void)
+{}
+
+
+// End of file

Added: short/3D/PyLith/trunk/unittests/libtests/meshio/data/MeshDataCubitTri.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/MeshDataCubitTri.hh	2007-06-04 15:39:58 UTC (rev 7056)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/MeshDataCubitTri.hh	2007-06-04 20:13:18 UTC (rev 7057)
@@ -0,0 +1,61 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+#if !defined(pylith_meshio_meshdatacubittri_hh)
+#define pylith_meshio_meshdatacubittri_hh
+
+#include "MeshData.hh"
+
+namespace pylith {
+  namespace meshio {
+     class MeshDataCubitTri;
+  } // pylith
+} // meshio
+
+class pylith::meshio::MeshDataCubitTri : public MeshData
+{
+
+// PUBLIC METHODS ///////////////////////////////////////////////////////
+public: 
+
+  /// Constructor
+  MeshDataCubitTri(void);
+
+  /// Destructor
+  ~MeshDataCubitTri(void);
+
+// PRIVATE MEMBERS //////////////////////////////////////////////////////
+private:
+
+  static const int _numVertices; ///< Number of vertices
+  static const int _spaceDim; ///< Number of dimensions in vertex coordinates
+  static const int _numCells; ///< Number of cells
+  static const int _cellDim; ///< Number of dimensions associated with cell
+  static const int _numCorners; ///< Number of vertices in cell
+
+  static const double _vertices[]; ///< Pointer to coordinates of vertices
+  static const int _cells[]; ///< Pointer to indices of vertices in cells
+  static const int _materialIds[]; ///< Pointer to cell material identifiers
+
+  static const int _groups[]; ///< Groups of points
+  static const int _groupSizes[]; ///< Sizes of groups
+  static const char* _groupNames[]; ///< Array of group names
+  static const char* _groupTypes[]; ///< Array of group types
+  static const int _numGroups; ///< Number of groups
+
+  static const bool _useIndexZero; ///< First vertex is 0 if true, 1 if false
+
+};
+
+#endif // pylith_meshio_meshdatacubittri_hh
+
+// End of file

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/cube2_ascii.gmv
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/cube2_ascii.gmv	2007-06-04 15:39:58 UTC (rev 7056)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/cube2_ascii.gmv	2007-06-04 20:13:18 UTC (rev 7057)
@@ -1,6 +1,6 @@
 gmvinput ascii
 codename LaGriT
-simdate 05/09/07
+simdate 06/04/07
 nodes           12
   0.00000E+000  0.00000E+000  1.00000E+000  1.00000E+000  0.00000E+000  0.00000E+000  1.00000E+000  1.00000E+000 -1.00000E+000 -1.00000E+000
  -1.00000E+000 -1.00000E+000

Added: short/3D/PyLith/trunk/unittests/libtests/meshio/data/twoquad4.cub
===================================================================
(Binary files differ)


Property changes on: short/3D/PyLith/trunk/unittests/libtests/meshio/data/twoquad4.cub
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: short/3D/PyLith/trunk/unittests/libtests/meshio/data/twoquad4.exo
===================================================================
(Binary files differ)


Property changes on: short/3D/PyLith/trunk/unittests/libtests/meshio/data/twoquad4.exo
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: short/3D/PyLith/trunk/unittests/libtests/meshio/data/twotri3.cub
===================================================================
(Binary files differ)


Property changes on: short/3D/PyLith/trunk/unittests/libtests/meshio/data/twotri3.cub
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: short/3D/PyLith/trunk/unittests/libtests/meshio/data/twotri3.exo
===================================================================
(Binary files differ)


Property changes on: short/3D/PyLith/trunk/unittests/libtests/meshio/data/twotri3.exo
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Modified: short/3D/PyLith/trunk/unittests/pytests/meshio/data/twohex8.txt
===================================================================
--- short/3D/PyLith/trunk/unittests/pytests/meshio/data/twohex8.txt	2007-06-04 15:39:58 UTC (rev 7056)
+++ short/3D/PyLith/trunk/unittests/pytests/meshio/data/twohex8.txt	2007-06-04 20:13:18 UTC (rev 7057)
@@ -23,8 +23,8 @@
     count = 2
     num-corners = 8
     simplices = {
-             0       0       1       2       3       4       5       6       7
-             1       4       5       6       7       8       9      10      11
+             0       0       1       3       2       4       5       7       6
+             1       4       5       7       6       8       9      11      10
     }
     material-ids = {
              0   7



More information about the cig-commits mailing list