[cig-commits] r8296 - in short/3D/PyLith/trunk: libsrc/bc unittests/libtests/bc unittests/libtests/bc/data

willic3 at geodynamics.org willic3 at geodynamics.org
Thu Nov 15 13:35:59 PST 2007


Author: willic3
Date: 2007-11-15 13:35:58 -0800 (Thu, 15 Nov 2007)
New Revision: 8296

Modified:
   short/3D/PyLith/trunk/libsrc/bc/Neumann.cc
   short/3D/PyLith/trunk/unittests/libtests/bc/TestNeumann.cc
   short/3D/PyLith/trunk/unittests/libtests/bc/TestNeumann.hh
   short/3D/PyLith/trunk/unittests/libtests/bc/TestNeumannHex8.hh
   short/3D/PyLith/trunk/unittests/libtests/bc/data/NeumannData.cc
   short/3D/PyLith/trunk/unittests/libtests/bc/data/NeumannData.hh
   short/3D/PyLith/trunk/unittests/libtests/bc/data/NeumannDataHex8.cc
   short/3D/PyLith/trunk/unittests/libtests/bc/data/NeumannDataHex8.hh
Log:
A few fixes to Neumann.cc and an initial unit test for hex8 elements.



Modified: short/3D/PyLith/trunk/libsrc/bc/Neumann.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/bc/Neumann.cc	2007-11-15 01:14:57 UTC (rev 8295)
+++ short/3D/PyLith/trunk/libsrc/bc/Neumann.cc	2007-11-15 21:35:58 UTC (rev 8296)
@@ -162,7 +162,7 @@
   // Containers for database query results and quadrature coordinates in
   // reference geometry.
   double_array tractionDataLocal(spaceDim);
-  double_array quadPtRef(spaceDim);
+  double_array quadPtRef(cellDim);
   const double_array& quadPtsRef = _quadrature->quadPtsRef();
 
   // Container for cell tractions rotated to global coordinates.
@@ -183,7 +183,8 @@
     // std::cout << "c_iter:  " << *c_iter << std::endl;
     _quadrature->computeGeometry(_boundaryMesh, coordinates, *c_iter);
     const double_array& quadPts = _quadrature->quadPts();
-    _boundaryMesh->restrict(coordinates, *c_iter, &cellVertices[0], cellVertices.size());
+    _boundaryMesh->restrict(coordinates, *c_iter,
+			    &cellVertices[0], cellVertices.size());
     /* Debugging stuff
     std::cout << "cellVertices:  " << std::endl;
     for(int iTest = 0; iTest < numBasis; ++iTest) {
@@ -193,9 +194,10 @@
       std::cout << std::endl;
     } // for
     */
+
     cellTractionsGlobal = 0.0;
-
-    for(int iQuad = 0, iRef=0, iSpace=0; iQuad < numQuadPts; ++iQuad, iRef+=cellDim, iSpace+=spaceDim) {
+    for(int iQuad = 0, iRef=0, iSpace=0; iQuad < numQuadPts;
+	++iQuad, iRef+=cellDim, iSpace+=spaceDim) {
       // Get traction vector in local coordinate system at quadrature point
       const int err = _db->query(&tractionDataLocal[0], spaceDim,
 				 &quadPts[iSpace], spaceDim, cs);
@@ -222,7 +224,7 @@
       for(int iDim = 0; iDim < spaceDim; ++iDim) {
 	for(int jDim = 0; jDim < spaceDim; ++jDim)
 	  cellTractionsGlobal[iDim+iSpace] +=
-	    orientation[iDim*spaceDim+jDim] * tractionDataLocal[jDim];
+	    orientation[jDim*spaceDim+iDim] * tractionDataLocal[jDim];
       } // for
     } // for
 

Modified: short/3D/PyLith/trunk/unittests/libtests/bc/TestNeumann.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/bc/TestNeumann.cc	2007-11-15 01:14:57 UTC (rev 8295)
+++ short/3D/PyLith/trunk/unittests/libtests/bc/TestNeumann.cc	2007-11-15 21:35:58 UTC (rev 8296)
@@ -17,16 +17,18 @@
 #include "pylith/bc/Neumann.hh" // USES Neumann
 
 #include "data/NeumannData.hh" // USES NeumannData
+
 #include "pylith/feassemble/Quadrature.hh" // USES Quadrature
 #include "pylith/topology/FieldsManager.hh" // USES FieldsManager
 #include "pylith/meshio/MeshIOAscii.hh" // USES MeshIOAscii
 #include "pylith/utils/sievetypes.hh" // USES PETSc Mesh
-#include <Selection.hh> // USES submesh algorithms
 
 #include "spatialdata/geocoords/CSCart.hh" // USES CSCart
 #include "spatialdata/spatialdb/SimpleDB.hh" // USES SimpleDB
 #include "spatialdata/spatialdb/SimpleIOAscii.hh" // USES SimpleIOAscii
 
+#include <stdexcept> // USES std::runtime_erro
+
 // ----------------------------------------------------------------------
 CPPUNIT_TEST_SUITE_REGISTRATION( pylith::bc::TestNeumann );
 
@@ -63,39 +65,67 @@
 { // testInitialize
   ALE::Obj<Mesh> mesh;
   Neumann bc;
-  _initialize(&mesh, &bc);
+  topology::FieldsManager fields(mesh);
+  _initialize(&mesh, &bc, &fields);
 
   CPPUNIT_ASSERT(0 != _data);
 
-  // Check submesh
-  CPPUNIT_ASSERT_EQUAL(_data->cellDim, bc._boundaryMesh->getDimension());
-  const ALE::Obj<sieve_type>& sieve = bc._boundaryMesh->getSieve();
-  const ALE::Obj<Mesh::label_sequence>& cells = bc._boundaryMesh->heightStratum(1);
+  const ALE::Obj<Mesh>& boundaryMesh = bc._boundaryMesh;
+
+  // Check boundary mesh
+  CPPUNIT_ASSERT(!boundaryMesh.isNull());
+
+  const int cellDim = boundaryMesh->getDimension();
+  const ALE::Obj<sieve_type>& sieve = boundaryMesh->getSieve();
+  const ALE::Obj<Mesh::label_sequence>& cells = boundaryMesh->heightStratum(1);
+  const int numBoundaryVertices = boundaryMesh->depthStratum(0)->size();
   const int numBoundaryCells = cells->size();
+
+  CPPUNIT_ASSERT_EQUAL(_data->cellDim, cellDim);
+  CPPUNIT_ASSERT_EQUAL(_data->numBoundaryVertices, numBoundaryVertices);
   CPPUNIT_ASSERT_EQUAL(_data->numBoundaryCells, numBoundaryCells);
+
+  // boundaryMesh->view("BOUNDARY MESH");
+
+  const int boundaryDepth = boundaryMesh->depth()-1; // depth of boundary cells
   const ALE::Obj<real_section_type>& coordinates =
     mesh->getRealSection("coordinates");
-  coordinates->view("Mesh coordinates from TestNeumann::testInitialize");
+  // coordinates->view("Mesh coordinates from TestNeumann::testInitialize");
 
   const int spaceDim = _data->spaceDim;
   const int numBasis = bc._quadrature->numBasis();
-  double_array cellVertices(numBasis*spaceDim);
+  const int cellVertSize = _data->numCorners * spaceDim;
+  double_array cellVertices(cellVertSize);
+
+  const double tolerance = 1.0e-06;
+
+  // check cell vertices
   int iCell = 0;
   for(Mesh::label_sequence::iterator c_iter = cells->begin();
       c_iter != cells->end();
       ++c_iter) {
-    const int numCorners = sieve->nCone(*c_iter, bc._boundaryMesh->depth()-1)->size();
-    CPPUNIT_ASSERT_EQUAL(_data->numCorners[iCell++], numCorners);
-    bc._boundaryMesh->restrict(coordinates, *c_iter, &cellVertices[0], cellVertices.size());
-    std::cout << "c_iter " << *c_iter << " vertex coords:" << std::endl;
+    const int numCorners = (boundaryMesh->getDimension() > 0) ?
+      sieve->nCone(*c_iter, boundaryDepth)->size() : 1;
+    CPPUNIT_ASSERT_EQUAL(_data->numCorners, numCorners);
+
+    boundaryMesh->restrict(coordinates, *c_iter, &cellVertices[0],
+			   cellVertices.size());
+    double vert =0.0;
+    double vertE =0.0;
+    // std::cout << "c_iter " << *c_iter << " vertex coords:" << std::endl;
     for(int iVert = 0; iVert < numCorners; ++iVert) {
       for(int iDim = 0; iDim < spaceDim; ++iDim) {
-        std::cout << "  " << cellVertices[iDim+spaceDim*iVert];
-	// Need to get vertex info and put it in data, then put in a
-	// CPPUNIT_ASSERT_DOUBLES_EQUAL
+	vertE = _data->cellVertices[iDim+spaceDim*iVert+iCell*cellVertSize];
+	vert = cellVertices[iDim+spaceDim*iVert];
+        // std::cout << "  " << cellVertices[iDim+spaceDim*iVert];
+	if (fabs(vertE) > 1.0)
+	  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, vert/vertE, tolerance);
+	else
+	  CPPUNIT_ASSERT_DOUBLES_EQUAL(vert, vertE, tolerance);
       } // for
-    std::cout << std::endl;
+      // std::cout << std::endl;
     } // for
+    iCell++;
   } // for
 
   // Check traction values
@@ -103,7 +133,6 @@
   const int fiberDim = numQuadPts * spaceDim;
   double_array tractionsCell(fiberDim);
   int index = 0;
-  const double tolerance = 1.0e-06;
 
   for(Mesh::label_sequence::iterator c_iter = cells->begin();
       c_iter != cells->end();
@@ -133,38 +162,31 @@
 
   ALE::Obj<Mesh> mesh;
   Neumann bc;
-  Neumann integrator;
-  _initialize(&mesh, &bc);
-
-  // Set up fields
   topology::FieldsManager fields(mesh);
-  fields.addReal("residual");
-  fields.addReal("solution");
-  fields.solutionField("solution");
+  _initialize(&mesh, &bc, &fields);
 
   const ALE::Obj<real_section_type>& residual = fields.getReal("residual");
   CPPUNIT_ASSERT(!residual.isNull());
+
   const int spaceDim = _data->spaceDim;
-  residual->setFiberDimension(mesh->depthStratum(0), spaceDim);
-  mesh->allocate(residual);
-  residual->zero();
-  fields.copyLayout("residual");
 
-  const ALE::Obj<real_section_type>& solution = fields.getReal("solution");
-  CPPUNIT_ASSERT(!solution.isNull());
-
   const double t = 0.0;
-  integrator.integrateResidual(residual, t, &fields, mesh);
+  bc.integrateResidual(residual, t, &fields, mesh);
 
   const double* valsE = _data->valsResidual;
-  const int sizeE = _data->spaceDim * _data->numVertices;
+  const int totalNumVertices = mesh->depthStratum(0)->size();
+  const int sizeE = _data->spaceDim * totalNumVertices;
 
   const double* vals = residual->restrict();
   const int size = residual->sizeWithBC();
   CPPUNIT_ASSERT_EQUAL(sizeE, size);
 
+  //residual->view("RESIDUAL");
+
   const double tolerance = 1.0e-06;
+  // std::cout << "computed residuals: " << std::endl;
   for (int i=0; i < size; ++i)
+    // std::cout << "  " << vals[i] << std::endl;
     if (fabs(valsE[i]) > 1.0)
       CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, vals[i]/valsE[i], tolerance);
     else
@@ -175,44 +197,65 @@
 // ----------------------------------------------------------------------
 void
 pylith::bc::TestNeumann::_initialize(ALE::Obj<Mesh>* mesh,
-				     Neumann* const bc) const
+				     Neumann* const bc,
+				     topology::FieldsManager* fields) const
 { // _initialize
   CPPUNIT_ASSERT(0 != _data);
   CPPUNIT_ASSERT(0 != mesh);
   CPPUNIT_ASSERT(0 != bc);
   CPPUNIT_ASSERT(0 != _quadrature);
 
-  // Set up mesh
-  meshio::MeshIOAscii iohandler;
-  iohandler.filename(_data->meshFilename);
-  iohandler.read(mesh);
-  CPPUNIT_ASSERT(!mesh->isNull());
-  (*mesh)->getFactory()->clear();
+  try {
+    // Set up mesh
+    meshio::MeshIOAscii iohandler;
+    iohandler.filename(_data->meshFilename);
+    iohandler.read(mesh);
+    CPPUNIT_ASSERT(!mesh->isNull());
+    (*mesh)->getFactory()->clear();
 
-  // Set up coordinates
-  spatialdata::geocoords::CSCart cs;
-  cs.setSpaceDim((*mesh)->getDimension());
-  cs.initialize();
+    // Set up coordinates
+    spatialdata::geocoords::CSCart cs;
+    cs.setSpaceDim((*mesh)->getDimension());
+    cs.initialize();
 
-  // Set up quadrature
-  _quadrature->initialize(_data->basis, _data->basisDeriv, _data->quadPts,
-			  _data->quadWts, _data->cellDim, _data->numBasis,
-			  _data->numQuadPts, _data->spaceDim);
+    // Set up quadrature
+    _quadrature->initialize(_data->basis, _data->basisDerivRef, _data->quadPts,
+			    _data->quadWts, _data->cellDim, _data->numBasis,
+			    _data->numQuadPts, _data->spaceDim);
 
-  // Set up database
-  spatialdata::spatialdb::SimpleDB db("TestNeumann");
-  spatialdata::spatialdb::SimpleIOAscii dbIO;
-  dbIO.filename(_data->dbFilename);
-  db.ioHandler(&dbIO);
+    // Set up database
+    spatialdata::spatialdb::SimpleDB db("TestNeumann");
+    spatialdata::spatialdb::SimpleIOAscii dbIO;
+    dbIO.filename(_data->spatialDBFilename);
+    db.ioHandler(&dbIO);
+    db.queryType(spatialdata::spatialdb::SimpleDB::LINEAR);
 
-  const double upDirVals[] = { 0.0, 0.0, 1.0 };
-  double_array upDir(upDirVals, 3);
+    const double upDirVals[] = { 0.0, 0.0, 1.0 };
+    double_array upDir(upDirVals, 3);
 
-  bc->id(_data->id);
-  bc->label(_data->label);
-  bc->quadrature(_quadrature);
-  bc->db(&db);
-  bc->initialize(*mesh, &cs, upDir);
+    bc->quadrature(_quadrature);
+    bc->id(_data->id);
+    bc->label(_data->label);
+    bc->db(&db);
+    bc->initialize(*mesh, &cs, upDir);
+
+    // Set up fields
+    CPPUNIT_ASSERT(0 != fields);
+    fields->addReal("residual");
+    fields->addReal("dispTBctpdt");
+
+    const ALE::Obj<real_section_type>& residual = fields->getReal("residual");
+    CPPUNIT_ASSERT(!residual.isNull());
+    residual->setFiberDimension((*mesh)->depthStratum(0), _data->spaceDim);
+    (*mesh)->allocate(residual);
+    residual->zero();
+    fields->copyLayout("residual");
+    const ALE::Obj<real_section_type>& dispTBctpdt = 
+      fields->getReal("dispTBctpdt");
+    CPPUNIT_ASSERT(!dispTBctpdt.isNull());
+  } catch (const ALE::Exception& err) {
+    throw std::runtime_error(err.msg());
+  } // catch
 } // _initialize
 
 

Modified: short/3D/PyLith/trunk/unittests/libtests/bc/TestNeumann.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/bc/TestNeumann.hh	2007-11-15 01:14:57 UTC (rev 8295)
+++ short/3D/PyLith/trunk/unittests/libtests/bc/TestNeumann.hh	2007-11-15 21:35:58 UTC (rev 8296)
@@ -37,6 +37,10 @@
   namespace feassemble {
     class Quadrature; // HOLDSA Quadrature
   } // feassemble
+
+  namespace topology {
+    class FieldsManager; // USES FieldsManager
+  } // topology
 } // pylith
 
 /// C++ unit testing for Neumann.
@@ -79,9 +83,11 @@
    *
    * @param mesh PETSc mesh to initialize
    * @param bc Neumann boundary condition to initialize.
+   * @param fields Solution fields.
    */
   void _initialize(ALE::Obj<ALE::Mesh>* mesh,
-		   Neumann* const bc) const;
+		   Neumann* const bc,
+		   topology::FieldsManager* fields) const;
 
 }; // class TestNeumann
 

Modified: short/3D/PyLith/trunk/unittests/libtests/bc/TestNeumannHex8.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/bc/TestNeumannHex8.hh	2007-11-15 01:14:57 UTC (rev 8295)
+++ short/3D/PyLith/trunk/unittests/libtests/bc/TestNeumannHex8.hh	2007-11-15 21:35:58 UTC (rev 8296)
@@ -36,8 +36,8 @@
 
   // CPPUNIT TEST SUITE /////////////////////////////////////////////////
   CPPUNIT_TEST_SUITE( TestNeumannHex8 );
-  // CPPUNIT_TEST( testInitialize );
-  // CPPUNIT_TEST( testIntegrateResidual );
+  CPPUNIT_TEST( testInitialize );
+  CPPUNIT_TEST( testIntegrateResidual );
   CPPUNIT_TEST_SUITE_END();
 
   // PUBLIC METHODS /////////////////////////////////////////////////////

Modified: short/3D/PyLith/trunk/unittests/libtests/bc/data/NeumannData.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/bc/data/NeumannData.cc	2007-11-15 01:14:57 UTC (rev 8295)
+++ short/3D/PyLith/trunk/unittests/libtests/bc/data/NeumannData.cc	2007-11-15 21:35:58 UTC (rev 8296)
@@ -16,22 +16,21 @@
 // Constructor
 pylith::bc::NeumannData::NeumannData(void) :
   meshFilename(0),
-  spaceDim(0),
-  cellDim(0),
   numBasis(0),
   numQuadPts(0),
   quadPts(0),
   quadWts(0),
   basis(0),
-  basisDeriv(0),
-  verticesRef(0),
+  basisDerivRef(0),
+  spatialDBFilename(0),
   id(0),
-  label(0),
-  dbFilename(0),
+  label(""),
+  spaceDim(0),
+  cellDim(0),
+  numBoundaryVertices(0),
   numBoundaryCells(0),
-  numVertices(0),
   numCorners(0),
-  cells(0),
+  cellVertices(0),
   tractionsCell(0),
   valsResidual(0)
 { // constructor

Modified: short/3D/PyLith/trunk/unittests/libtests/bc/data/NeumannData.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/bc/data/NeumannData.hh	2007-11-15 01:14:57 UTC (rev 8295)
+++ short/3D/PyLith/trunk/unittests/libtests/bc/data/NeumannData.hh	2007-11-15 21:35:58 UTC (rev 8296)
@@ -38,30 +38,33 @@
 
   /// @name Quadrature information
   //@{
-  int spaceDim; ///< Spatial dimension for the problem.
-  int cellDim; ///< Dimension of surface cells.
   int numBasis; ///< Number of basis functions for surface cells.
   int numQuadPts; ///< Number of quadrature points per boundary cell.
   double* quadPts; ///< Coordinates of quadrature points in ref cell.
   double* quadWts; ///< Weights of quadrature points.
   double* basis; ///< Cell basis functions at quad points.
-  double* basisDeriv; ///< Derivatives of cell basis functions at quad points.
-  double* verticesRef; ///< Coordinates of vertices in ref cell (dual basis).
+  double* basisDerivRef; ///< Derivatives of basis functions at quad points.
   //@}
 
-  /// @name BC information
+  /// @name Parameter information
   //@{
+  char* spatialDBFilename; ///< Filename of simple spatial database.
   int id; ///< Boundary condition identifier
   char* label; ///< Label for boundary condition group
-  char* dbFilename; ///< Filename of simple spatial database.
   //@}
 
+  /// @name Boundary mesh information
+  //@{
+  int spaceDim; ///< Number of dimensions of vertex coordinates
+  int cellDim; ///< Dimension of surface cells.
+  int numBoundaryVertices; ///< Number of boundary vertices in the mesh.
+  int numBoundaryCells; ///< Number of cells on Neumann boundary.
+  int numCorners; ///< Number of vertices for each boundary cell.
+  double* cellVertices; ///< Vertex coordinates for boundary cells.
+  //@}
+
   /// @name Calculated values.
   //@{
-  int numBoundaryCells; ///< Expected number of cells on Neumann boundary.
-  int numVertices; ///< Expected number of vertices in the mesh.
-  int* numCorners; ///< Expected number of vertices for each boundary cell.
-  int* cells; ///< Expected array of vertices defining each boundary cell.
   double* tractionsCell; ///< Expected traction values at quadrature points.
   double* valsResidual; ///< Expected residual at each vertex.
   //@}

Modified: short/3D/PyLith/trunk/unittests/libtests/bc/data/NeumannDataHex8.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/bc/data/NeumannDataHex8.cc	2007-11-15 01:14:57 UTC (rev 8295)
+++ short/3D/PyLith/trunk/unittests/libtests/bc/data/NeumannDataHex8.cc	2007-11-15 21:35:58 UTC (rev 8296)
@@ -15,18 +15,17 @@
  * Neumann BC on faces defined by vertices 0, 2, 4, 6, 8, 10.
  *
  * Constant value of 4 Pa horizontal shear applied on both faces.
- * Since each face has an area of 2 m^2, we should obtain the following
+ * Since each face has an area of 4 m^2, we should obtain the following
  * values:
- * 2 N in x-direction:  Vertices 0, 2, 8, 10
- * 4 N in x-direction:  Vertices 4, 6.
+ * 4 N in x-direction:  Vertices 0, 2, 8, 10
+ * 8 N in x-direction:  Vertices 4, 6.
  */
 
 #include "NeumannDataHex8.hh"
 
 const char* pylith::bc::NeumannDataHex8::_meshFilename = 
   "data/hex8b.mesh";
-const int pylith::bc::NeumannDataHex8::_spaceDim = 3;
-const int pylith::bc::NeumannDataHex8::_cellDim = 2;
+
 const int pylith::bc::NeumannDataHex8::_numBasis = 4;
 const int pylith::bc::NeumannDataHex8::_numQuadPts = 4;
 const double pylith::bc::NeumannDataHex8::_quadPts[] = {
@@ -44,7 +43,7 @@
   0.16666667,  0.0446582,   0.62200847,  0.16666667,
   0.0446582,   0.16666667,  0.16666667,  0.62200847,
 };
-const double pylith::bc::NeumannDataHex8::_basisDeriv[] = {
+const double pylith::bc::NeumannDataHex8::_basisDerivRef[] = {
   -0.39433757, -0.39433757,
   +0.39433757, -0.10566243,
   +0.10566243, +0.10566243,
@@ -65,64 +64,70 @@
   +0.39433757, +0.10566243,
   -0.39433757, +0.39433757,
 };
-const double pylith::bc::NeumannDataHex8::_verticesRef[] = {
-  -1.0, -1.0,
-  +1.0, -1.0,
-  +1.0, +1.0,
-  -1.0, +1.0
-};
 
+const char* pylith::bc::NeumannDataHex8::_spatialDBFilename =
+  "data/hex8b.spatialdb";
 const int pylith::bc::NeumannDataHex8::_id = 0;
 const char* pylith::bc::NeumannDataHex8::_label = "tractionVerts";
-const char* pylith::bc::NeumannDataHex8::_dbFilename =
-  "data/hex8b.spatialdb";
 
+const int pylith::bc::NeumannDataHex8::_spaceDim = 3;
+const int pylith::bc::NeumannDataHex8::_cellDim = 2;
+
+const int pylith::bc::NeumannDataHex8::_numBoundaryVertices = 6;
 const int pylith::bc::NeumannDataHex8::_numBoundaryCells = 2;
-const int pylith::bc::NeumannDataHex8::_numVertices = 12;
-const int pylith::bc::NeumannDataHex8::_numCorners[] = { 4, 4 };
-const int pylith::bc::NeumannDataHex8::_cells[] = { 0,  4,  6,  2,
-						    4,  8, 10,  6 };
-const double pylith::bc::NeumannDataHex8::_tractionsCell[] = { 1.0, 0.0, 0.0,
-							       1.0, 0.0, 0.0,
-							       1.0, 0.0, 0.0,
-							       1.0, 0.0, 0.0,
-							       1.0, 0.0, 0.0,
-							       1.0, 0.0, 0.0,
-							       1.0, 0.0, 0.0,
-							       1.0, 0.0, 0.0};
-const double pylith::bc::NeumannDataHex8::_valsResidual[] = { 2.0, 0.0, 0.0,
+const int pylith::bc::NeumannDataHex8::_numCorners = 4;
+const double pylith::bc::NeumannDataHex8::_cellVertices[] = { 0.0,-1.0,-1.0,
+							      0.0,-1.0, 1.0,
+							     -2.0,-1.0, 1.0,
+							     -2.0,-1.0,-1.0,
+							      2.0,-1.0,-1.0,
+							      2.0,-1.0, 1.0,
+							      0.0,-1.0, 1.0,
+							      0.0,-1.0,-1.0};
+const double pylith::bc::NeumannDataHex8::_tractionsCell[] = { 4.0, 0.0, 0.0,
+							       4.0, 0.0, 0.0,
+							       4.0, 0.0, 0.0,
+							       4.0, 0.0, 0.0,
+							       4.0, 0.0, 0.0,
+							       4.0, 0.0, 0.0,
+							       4.0, 0.0, 0.0,
+							       4.0, 0.0, 0.0};
+const double pylith::bc::NeumannDataHex8::_valsResidual[] = { 4.0, 0.0, 0.0,
 							      0.0, 0.0, 0.0,
-							      2.0, 0.0, 0.0,
+							      4.0, 0.0, 0.0,
 							      0.0, 0.0, 0.0,
+							      8.0, 0.0, 0.0,
+							      0.0, 0.0, 0.0,
+							      8.0, 0.0, 0.0,
+							      0.0, 0.0, 0.0,
 							      4.0, 0.0, 0.0,
 							      0.0, 0.0, 0.0,
 							      4.0, 0.0, 0.0,
-							      0.0, 0.0, 0.0,
-							      2.0, 0.0, 0.0,
-							      0.0, 0.0, 0.0,
-							      2.0, 0.0, 0.0,
 							      0.0, 0.0, 0.0};
 
 
 pylith::bc::NeumannDataHex8::NeumannDataHex8(void)
 { // constructor
   meshFilename = const_cast<char*>(_meshFilename);
-  spaceDim = _spaceDim;
-  cellDim = _cellDim;
+
   numBasis = _numBasis;
   numQuadPts = _numQuadPts;
   quadPts = const_cast<double*>(_quadPts);
   quadWts = const_cast<double*>(_quadWts);
   basis = const_cast<double*>(_basis);
-  basisDeriv = const_cast<double*>(_basisDeriv);
-  verticesRef = const_cast<double*>(_verticesRef);
+  basisDerivRef = const_cast<double*>(_basisDerivRef);
+
+  spatialDBFilename = const_cast<char*>(_spatialDBFilename);
   id = _id;
   label = const_cast<char*>(_label);
-  dbFilename = const_cast<char*>(_dbFilename);
+
+  spaceDim = _spaceDim;
+  cellDim = _cellDim;
+  numBoundaryVertices = _numBoundaryVertices;
   numBoundaryCells = _numBoundaryCells;
-  numVertices = _numVertices;
-  numCorners = const_cast<int*>(_numCorners);
-  cells = const_cast<int*>(_cells);
+  numCorners = _numCorners;
+
+  cellVertices = const_cast<double*>(_cellVertices);
   tractionsCell = const_cast<double*>(_tractionsCell);
   valsResidual = const_cast<double*>(_valsResidual);
 

Modified: short/3D/PyLith/trunk/unittests/libtests/bc/data/NeumannDataHex8.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/bc/data/NeumannDataHex8.hh	2007-11-15 01:14:57 UTC (rev 8295)
+++ short/3D/PyLith/trunk/unittests/libtests/bc/data/NeumannDataHex8.hh	2007-11-15 21:35:58 UTC (rev 8296)
@@ -36,30 +36,32 @@
 // PRIVATE MEMBERS //////////////////////////////////////////////////////
 private:
 
+  static const char* _meshFilename;
+
   // Quadrature information
-  static const char* _meshFilename; ///< Filename of input mesh.
-  static const int _spaceDim; ///< Dimension of mesh.
-  static const int _cellDim; ///< Dimension of surface cells.
-  static const int _numBasis; ///< Number of basis functions for surface cells.
-  static const int _numQuadPts; ///< Number of quadrature points per boundary cell.
-  static const double _quadPts[]; ///< Coordinates of quadrature points in ref cell.
-  static const double _quadWts[]; ///< Weights of quadrature points.
-  static const double _basis[]; ///< Cell basis functions at quad points.
-  static const double _basisDeriv[]; ///< Derivatives of cell basis functions at quad points.
-  static const double _verticesRef[]; ///< Coordinates of vertices in ref cell (dual basis).
+  static const int _numBasis;
+  static const int _numQuadPts;
+  static const double _quadPts[];
+  static const double _quadWts[];
+  static const double _basis[];
+  static const double _basisDerivRef[];
 
   // BC information
-  static const int _id; ///< Boundary condition identifier
-  static const char* _label; /// Label for boundary condition group
-  static const char* _dbFilename; ///< Filename of simple spatial database.
+  static const char* _spatialDBFilename;
+  static const int _id;
+  static const char* _label;
 
+  // Mesh information
+  static const int _spaceDim;
+  static const int _cellDim;
+  static const int _numBoundaryVertices;
+  static const int _numBoundaryCells;
+  static const int _numCorners;
+  static const double _cellVertices[];
+
   // Calculated values.
-  static const int _numBoundaryCells; ///< Expected number of cells on Neumann boundary.
-  static const int _numVertices; ///< Expected number of vertices in the mesh.
-  static const int _numCorners[]; ///< Expected number of vertices for each boundary cell.
-  static const int _cells[]; ///< Expected array of vertices defining each boundary cell.
-  static const double _tractionsCell[]; ///< Expected traction values at quadrature points.
-  static const double _valsResidual[]; ///< Expected residual at each vertex.
+  static const double _tractionsCell[];
+  static const double _valsResidual[];
 
 };
 



More information about the cig-commits mailing list