[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