[cig-commits] r6715 - in short/3D/PyLith/trunk: . libsrc/faults libsrc/feassemble libsrc/materials modulesrc/feassemble pylith/feassemble pylith/feassemble/quadrature unittests/libtests/feassemble unittests/libtests/feassemble/data unittests/pytests/feassemble

brad at geodynamics.org brad at geodynamics.org
Fri Apr 27 13:27:05 PDT 2007


Author: brad
Date: 2007-04-27 13:27:03 -0700 (Fri, 27 Apr 2007)
New Revision: 6715

Removed:
   short/3D/PyLith/trunk/pylith/feassemble/Field.py
   short/3D/PyLith/trunk/unittests/pytests/feassemble/TestQuadrature.cc
Modified:
   short/3D/PyLith/trunk/TODO
   short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveKin.cc
   short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveKin.hh
   short/3D/PyLith/trunk/libsrc/feassemble/ExplicitElasticity.cc
   short/3D/PyLith/trunk/libsrc/feassemble/ImplicitElasticity.cc
   short/3D/PyLith/trunk/libsrc/feassemble/Quadrature.cc
   short/3D/PyLith/trunk/libsrc/feassemble/Quadrature.hh
   short/3D/PyLith/trunk/libsrc/feassemble/Quadrature.icc
   short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1D.cc
   short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1D.hh
   short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din2D.cc
   short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din2D.hh
   short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din3D.cc
   short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din3D.hh
   short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2D.cc
   short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2D.hh
   short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2Din3D.cc
   short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2Din3D.hh
   short/3D/PyLith/trunk/libsrc/feassemble/Quadrature3D.cc
   short/3D/PyLith/trunk/libsrc/feassemble/Quadrature3D.hh
   short/3D/PyLith/trunk/libsrc/materials/Material.cc
   short/3D/PyLith/trunk/modulesrc/feassemble/feassemble.pyxe.src
   short/3D/PyLith/trunk/pylith/feassemble/FIATCell.py
   short/3D/PyLith/trunk/pylith/feassemble/FIATSimplex.py
   short/3D/PyLith/trunk/pylith/feassemble/ReferenceCell.py
   short/3D/PyLith/trunk/pylith/feassemble/quadrature/Quadrature.py
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature1D.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature1Din2D.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature1Din3D.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature2D.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature2Din3D.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature3D.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/IntegratorInertia.py
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature1DLinear.py
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature1DQuadratic.py
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature2DLinear.py
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature2DQuadratic.py
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature3DLinear.py
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature3DQuadratic.py
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureApp.py
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1DLinear.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1DLinear.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1DQuadratic.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1DQuadratic.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din2DLinear.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din2DLinear.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din2DQuadratic.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din2DQuadratic.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din3DLinear.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din3DLinear.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din3DQuadratic.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din3DQuadratic.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2DLinear.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2DLinear.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2DQuadratic.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2DQuadratic.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearXY.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearXY.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearXYZ.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearXYZ.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearXZ.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearXZ.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearYZ.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearYZ.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2Din3DQuadratic.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2Din3DQuadratic.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData3DLinear.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData3DLinear.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData3DQuadratic.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData3DQuadratic.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/feutils.py
   short/3D/PyLith/trunk/unittests/pytests/feassemble/TestFIATSimplex.py
   short/3D/PyLith/trunk/unittests/pytests/feassemble/TestQuadrature.hh
   short/3D/PyLith/trunk/unittests/pytests/feassemble/TestQuadrature.icc
   short/3D/PyLith/trunk/unittests/pytests/feassemble/TestQuadrature.py
   short/3D/PyLith/trunk/unittests/pytests/feassemble/testfeassemble.pyxe.src
Log:
Added evaluation of cell geometry information at vertices to Quadrature. Need Matt to fix getting vertex information from FIAT.

Modified: short/3D/PyLith/trunk/TODO
===================================================================
--- short/3D/PyLith/trunk/TODO	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/TODO	2007-04-27 20:27:03 UTC (rev 6715)
@@ -25,10 +25,6 @@
         Double check consistency in ordering of vertices (positive/negative).
 
    b. Implement slip time function
-     i. Allow 1-D, 2-D, or 3-D specification of slip.
-        1-D uses "slip"
-        2-D uses "slip", "fault-opening"
-        3-D uses "left-lateral", "reverse", "fault-opening"
      ii. Add Python
      iii. Add unit tests
 

Modified: short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveKin.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveKin.cc	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveKin.cc	2007-04-27 20:27:03 UTC (rev 6715)
@@ -66,7 +66,7 @@
     throw std::runtime_error("Up direction for fault orientation must be "
 			     "a vector with 3 components.");
   
-  // Allocate section for orientation information
+  // Allocate section for orientation information (all vertices)
 
   // Loop over cells
   //   Compute cell geometry at vertices

Modified: short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveKin.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveKin.hh	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveKin.hh	2007-04-27 20:27:03 UTC (rev 6715)
@@ -137,6 +137,10 @@
 
   EqKinSrc* _eqsrc; ///< Kinematic earthquake source information
 
+  /// Orientation of fault surface at vertices (fiber dimension is
+  /// nonzero only at constraint vertices)
+  ALE::Obj<real_section_type> _orientation;
+
   /// Fault vertices associated with constraints
   std::vector<Mesh::point_type> _constraintVert;
 

Modified: short/3D/PyLith/trunk/libsrc/feassemble/ExplicitElasticity.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/ExplicitElasticity.cc	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/libsrc/feassemble/ExplicitElasticity.cc	2007-04-27 20:27:03 UTC (rev 6715)
@@ -130,7 +130,7 @@
        cellIter != cellsEnd;
        ++cellIter) {
     // Compute geometry information for current cell
-    _quadrature->computeGeometry(mesh, coordinates, *cellIter);
+    _quadrature->computeGeometryQuad(mesh, coordinates, *cellIter);
 
     // Set cell data in material
     _material->initCellData(*cellIter, numQuadPts);
@@ -145,9 +145,9 @@
       mesh->restrict(dispTmdt, *cellIter);
 
     // Get cell geometry information that depends on cell
-    const double_array& basis = _quadrature->basis();
-    const double_array& basisDeriv = _quadrature->basisDeriv();
-    const double_array& jacobianDet = _quadrature->jacobianDet();
+    const double_array& basis = _quadrature->basisQuad();
+    const double_array& basisDeriv = _quadrature->basisDerivQuad();
+    const double_array& jacobianDet = _quadrature->jacobianDetQuad();
 
     // Compute action for cell
 
@@ -298,7 +298,7 @@
        cellIter != cellsEnd;
        ++cellIter) {
     // Compute geometry information for current cell
-    _quadrature->computeGeometry(mesh, coordinates, *cellIter);
+    _quadrature->computeGeometryQuad(mesh, coordinates, *cellIter);
 
     // Set cell data in material
     _material->initCellData(*cellIter, numQuadPts);
@@ -307,8 +307,8 @@
     _resetCellMatrix();
 
     // Get cell geometry information that depends on cell
-    const double_array& basis = _quadrature->basis();
-    const double_array& jacobianDet = _quadrature->jacobianDet();
+    const double_array& basis = _quadrature->basisQuad();
+    const double_array& jacobianDet = _quadrature->jacobianDetQuad();
 
     // Get material physical properties at quadrature points for this cell
     const std::vector<double_array>& density = _material->calcDensity();

Modified: short/3D/PyLith/trunk/libsrc/feassemble/ImplicitElasticity.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/ImplicitElasticity.cc	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/libsrc/feassemble/ImplicitElasticity.cc	2007-04-27 20:27:03 UTC (rev 6715)
@@ -105,7 +105,7 @@
        cellIter != cellsEnd;
        ++cellIter) {
     // Compute geometry information for current cell
-    _quadrature->computeGeometry(mesh, coordinates, *cellIter);
+    _quadrature->computeGeometryQuad(mesh, coordinates, *cellIter);
 
     // Set cell data in material
     _material->initCellData(*cellIter, numQuadPts);
@@ -114,8 +114,8 @@
     _resetCellVector();
 
     // Get cell geometry information that depends on cell
-    const double_array& basis = _quadrature->basis();
-    const double_array& jacobianDet = _quadrature->jacobianDet();
+    const double_array& basis = _quadrature->basisQuad();
+    const double_array& jacobianDet = _quadrature->jacobianDetQuad();
 
     // Get density at quadrature points for this cell
     const std::vector<double_array>& density = _material->calcDensity();
@@ -204,7 +204,7 @@
        cellIter != cellsEnd;
        ++cellIter) {
     // Compute geometry information for current cell
-    _quadrature->computeGeometry(mesh, coordinates, *cellIter);
+    _quadrature->computeGeometryQuad(mesh, coordinates, *cellIter);
 
     // Set cell data in material
     _material->initCellData(*cellIter, numQuadPts);
@@ -217,9 +217,9 @@
       mesh->restrict(dispT, *cellIter);
 
     // Get cell geometry information that depends on cell
-    const double_array& basis = _quadrature->basis();
-    const double_array& basisDeriv = _quadrature->basisDeriv();
-    const double_array& jacobianDet = _quadrature->jacobianDet();
+    const double_array& basis = _quadrature->basisQuad();
+    const double_array& basisDeriv = _quadrature->basisDerivQuad();
+    const double_array& jacobianDet = _quadrature->jacobianDetQuad();
 
     if (cellDim != spaceDim)
       throw std::logic_error("Not implemented yet.");
@@ -368,6 +368,10 @@
   const double_array& quadWts = _quadrature->quadWts();
   const int numBasis = _quadrature->numCorners();
   const int spaceDim = _quadrature->spaceDim();
+  
+  // Compute Jacobian for cell, specific for each geometry type
+  if (cellDim != spaceDim)
+    throw std::logic_error("Not implemented yet.")
 
   // Allocate vector for cell values (if necessary)
   _initCellMatrix();
@@ -377,7 +381,7 @@
        cellIter != cellsEnd;
        ++cellIter) {
     // Compute geometry information for current cell
-    _quadrature->computeGeometry(mesh, coordinates, *cellIter);
+    _quadrature->computeGeometryQuad(mesh, coordinates, *cellIter);
 
     // Set cell data in material
     _material->initCellData(*cellIter, numQuadPts);
@@ -386,14 +390,10 @@
     _resetCellMatrix();
 
     // Get cell geometry information that depends on cell
-    const double_array& basis = _quadrature->basis();
-    const double_array& basisDeriv = _quadrature->basisDeriv();
-    const double_array& jacobianDet = _quadrature->jacobianDet();
+    const double_array& basis = _quadrature->basisQuad();
+    const double_array& basisDeriv = _quadrature->basisDerivQuad();
+    const double_array& jacobianDet = _quadrature->jacobianDetQuad();
 
-    // Compute Jacobian for cell, specific for each geometry type
-    if (cellDim != spaceDim)
-      throw std::logic_error("Not implemented yet.")
-
 	// Need to finish fixing from here***************************
     // 1D Case
     if (1 == cellDim) {

Modified: short/3D/PyLith/trunk/libsrc/feassemble/Quadrature.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Quadrature.cc	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Quadrature.cc	2007-04-27 20:27:03 UTC (rev 6715)
@@ -40,14 +40,18 @@
 // Copy constructor
 pylith::feassemble::Quadrature::Quadrature(const Quadrature& q) :
   _minJacobian(q._minJacobian),
-  _basis(q._basis),
-  _basisDeriv(q._basisDeriv),
   _quadPtsRef(q._quadPtsRef),
   _quadPts(q._quadPts),
   _quadWts(q._quadWts),
-  _jacobian(q._jacobian),
-  _jacobianInv(q._jacobianInv),
-  _jacobianDet(q._jacobianDet),
+  _basisVert(q._basisVert),
+  _basisDerivVert(q._basisDerivVert),
+  _jacobianVert(q._jacobianVert),
+  _jacobianDetVert(q._jacobianDetVert),
+  _basisQuad(q._basisQuad),
+  _basisDerivQuad(q._basisDerivQuad),
+  _jacobianQuad(q._jacobianQuad),
+  _jacobianInvQuad(q._jacobianInvQuad),
+  _jacobianDetQuad(q._jacobianDetQuad),
   _cellDim(q._cellDim),
   _numBasis(q._numBasis),
   _numQuadPts(q._numQuadPts),
@@ -59,8 +63,10 @@
 // Set basis functions and their derivatives and coordinates and
 //   weights of the quadrature points.
 void
-pylith::feassemble::Quadrature::initialize(const double* basis,
-					   const double* basisDeriv,
+pylith::feassemble::Quadrature::initialize(const double* basisVert,
+					   const double* basisDerivVert,
+					   const double* basisQuad,
+					   const double* basisDerivQuad,
 					   const double* quadPtsRef,
 					   const double* quadWts,
 					   const int cellDim,
@@ -68,8 +74,10 @@
 					   const int numQuadPts,
 					   const int spaceDim)
 { // initialize
-  if (0 == basis ||
-      0 == basisDeriv ||
+  if (0 == basisVert ||
+      0 == basisDerivVert ||
+      0 == basisQuad ||
+      0 == basisDerivQuad ||
       0 == quadPtsRef ||
       0 == quadWts ||
       cellDim < 1 || cellDim > 3 ||
@@ -81,8 +89,10 @@
 	<< "their derivatives, and coordinates and weights of quadrature\n"
 	<< "points must all be specified.\n"
 	<< "Values:\n"
-	<< "  basis pointer: " << basis << "\n"
-	<< "  basis derivatites pointer: " << basisDeriv << "\n"
+	<< "  basis pointer (vertices): " << basisVert << "\n"
+	<< "  basis derivatites pointer (vertices): " << basisDerivVert << "\n"
+	<< "  basis pointer (quad pts): " << basisQuad << "\n"
+	<< "  basis derivatites pointer (quad pts): " << basisDerivQuad << "\n"
 	<< "  quadrature points pointer: " << quadPtsRef << "\n"
 	<< "  quadrature weights pointer: " << quadWts << "\n"
 	<< "  space dimension: " << spaceDim << "\n"
@@ -91,16 +101,27 @@
 	<< "  dimension of coordinate space: " << spaceDim << "\n";
     throw std::runtime_error(msg.str());
   } // if
+  const int numVertices = numBasis;
 
-  int size = numBasis * numQuadPts;
-  _basis.resize(size);
+  int size = numBasis * numVertices;
+  _basisVert.resize(size);
   for (int i=0; i < size; ++i)
-    _basis[i] = basis[i];
+    _basisVert[i] = basisVert[i];
 
+  size = numBasis * numVertices * cellDim;
+  _basisDerivVert.resize(size);
+  for (int i=0; i < size; ++i)
+    _basisDerivVert[i] = basisDerivVert[i];
+
+  size = numBasis * numQuadPts;
+  _basisQuad.resize(size);
+  for (int i=0; i < size; ++i)
+    _basisQuad[i] = basisQuad[i];
+
   size = numBasis * numQuadPts * cellDim;
-  _basisDeriv.resize(size);
+  _basisDerivQuad.resize(size);
   for (int i=0; i < size; ++i)
-    _basisDeriv[i] = basisDeriv[i];
+    _basisDerivQuad[i] = basisDerivQuad[i];
 
   size = numQuadPts * cellDim;
   _quadPtsRef.resize(size);
@@ -118,13 +139,19 @@
   _spaceDim = spaceDim;
 
   // Allocate for Jacobian and its inverse
-  size = numQuadPts*cellDim*spaceDim;
-  _jacobian.resize(size);
-  _jacobianInv.resize(size);
+  size = numVertices * cellDim * spaceDim;
+  _jacobianVert.resize(size);
 
+  size = numQuadPts * cellDim * spaceDim;
+  _jacobianQuad.resize(size);
+  _jacobianInvQuad.resize(size);
+
   // Allocate for Jacobian determinant
+  size = numVertices;
+  _jacobianDetVert.resize(size);
+
   size = numQuadPts;
-  _jacobianDet.resize(size);
+  _jacobianDetQuad.resize(size);
 
   // Allocate for quad pts
   size = numQuadPts*spaceDim;
@@ -136,9 +163,11 @@
 void
 pylith::feassemble::Quadrature::_resetGeometry(void)
 { // _resetGeometry
-  _jacobian = 0.0;
-  _jacobianInv = 0.0;
-  _jacobianDet = 0.0;
+  _jacobianVert = 0.0;
+  _jacobianDetVert = 0.0;
+  _jacobianQuad = 0.0;
+  _jacobianDetQuad = 0.0;
+  _jacobianInvQuad = 0.0;
   _quadPts = 0.0;
 } // _resetGeometry
 

Modified: short/3D/PyLith/trunk/libsrc/feassemble/Quadrature.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Quadrature.hh	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Quadrature.hh	2007-04-27 20:27:03 UTC (rev 6715)
@@ -61,6 +61,21 @@
   /** Set basis functions and their derivatives, and coordinates and
    *  weights of the quadrature points.
    *
+   * @param basis Array of basis functions evaluated at vertices
+   *   N0Qp0, N1Qp0, ...
+   *   N0Qp1, N1Qp1, ...
+   *   ...
+   *   size = numVertices * numBasis
+   *   index = iVertex*numBasis + iBasis
+   *
+   * @param basisDeriv Array of basis function derivaties evaluated 
+   *   at quadrature pts
+   *   N0xQp0, N0yQp0, N0zQp0, N1xQp0, N1yQp0, N1zQp0, ... 
+   *   N0xQp1, N0yQp1, N0zQp1, N1xQp1, N1yQp1, N1zQp1, ...
+   *   ...
+   *   size = numVertices * numBasis * cellDim
+   *   index = iVertex*numBasis*cellDim + iBasis*cellDim + iDim
+   *
    * @param basis Array of basis functions evaluated at quadrature pts
    *   N0Qp0, N1Qp0, ...
    *   N0Qp1, N1Qp1, ...
@@ -73,7 +88,7 @@
    *   N0xQp0, N0yQp0, N0zQp0, N1xQp0, N1yQp0, N1zQp0, ... 
    *   N0xQp1, N0yQp1, N0zQp1, N1xQp1, N1yQp1, N1zQp1, ...
    *   ...
-   *   size = numBasis * numQuadPts * cellDim
+   *   size = numQuadPts * numBasis * cellDim
    *   index = iQuadPt*numBasis*cellDim + iBasis*cellDim + iDim
    *
    * @param quadPts Array of coordinates of quadrature points in 
@@ -88,12 +103,14 @@
    *   index = iQuadPt
    *
    * @param cellDim Number of dimensions in reference cell
-   * @param numBasis Number of vertices in a cell
+   * @param numBasis Number of basis functions (and vertices) for a cell
    * @param numQuadPts Number of quadrature points
    * @param spaceDim Number of dimensions in coordinates of cell vertices
    */
-  void initialize(const double* basis,
-		  const double* basisDeriv,
+  void initialize(const double* basisVert,
+		  const double* basisDerivVert,
+		  const double* basisQuad,
+		  const double* basisDerivQuad,
 		  const double* quadPtsRef,
 		  const double* quadWts,
 		  const int cellDim,
@@ -113,43 +130,73 @@
    */
   double minJacobian(void);
 
+  /** Get coordinates of quadrature points in cell (NOT reference cell).
+   *
+   * @returns Array of coordinates of quadrature points in cell
+   */
+  const double_array& quadPts(void) const;
+
+  /** Get weights of quadrature points.
+   *
+   * @returns Weights of quadrature points
+   */
+  const double_array& quadWts(void) const;
+
+  /** Get basis fns evaluated at vertices.
+   *
+   * @returns Array of basis fns evaluated at vertices
+   */
+  const double_array& basisVert(void) const;
+
+  /** Get derivatives of basis fns evaluated at vertices.
+   *
+   * @returns Array of derivatives of basis fns evaluated at vertices
+   */
+  const double_array& basisDerivVert(void) const;
+
+  /** Get Jacobians evaluated at vertices.
+   *
+   * @returns Array of Jacobian inverses evaluated at vertices.
+   */
+  const double_array& jacobianVert(void) const;
+
+  /** Get determinants of Jacobian evaluated at vertices.
+   *
+   * @returns Array of determinants of Jacobian evaluated at vertices
+   */
+  const double_array& jacobianDetVert(void) const;
+
   /** Get basis fns evaluated at quadrature points.
    *
    * @returns Array of basis fns evaluated at quadrature points
    */
-  const double_array& basis(void) const;
+  const double_array& basisQuad(void) const;
 
   /** Get derivatives of basis fns evaluated at quadrature points.
    *
    * @returns Array of derivatives of basis fns evaluated at
    * quadrature points
    */
-  const double_array& basisDeriv(void) const;
+  const double_array& basisDerivQuad(void) const;
 
-  /** Get coordinates of quadrature points in cell (NOT reference cell).
+  /** Get Jacobians evaluated at quadrature points.
    *
-   * @returns Array of coordinates of quadrature points in cell
+   * @returns Array of Jacobian inverses evaluated at quadrature points.
    */
-  const double_array& quadPts(void) const;
+  const double_array& jacobianQuad(void) const;
 
-  /** Get weights of quadrature points.
+  /** Get determinants of Jacobian evaluated at quadrature points.
    *
-   * @returns Weights of quadrature points
+   * @returns Array of determinants of Jacobian evaluated at quadrature pts
    */
-  const double_array& quadWts(void) const;
+  const double_array& jacobianDetQuad(void) const;
 
   /** Get Jacobian inverses evaluated at quadrature points.
    *
    * @returns Array of Jacobian inverses evaluated at quadrature points.
    */
-  const double_array& jacobianInv(void) const;
+  const double_array& jacobianInvQuad(void) const;
 
-  /** Get determinants of Jacobian evaluated at quadrature points.
-   *
-   * @returns Array of determinants of Jacobian evaluated at quadrature pts
-   */
-  const double_array& jacobianDet(void) const;
-
   /** Get number of dimensions in reference cell.
    *
    * @returns Number of dimensions in reference cell
@@ -174,16 +221,28 @@
    */
   int spaceDim(void) const;
 
-  /** Compute geometric quantities for a cell.
+  /** Compute geometric quantities for a cell at vertices.
    *
+   * @param mesh Finite-element mesh
    * @param coordinates Section containing vertex coordinates
    * @param cell Finite-element cell
    */
   virtual 
-  void computeGeometry(const ALE::Obj<Mesh>& mesh,
-		       const ALE::Obj<real_section_type>& coordinates,
-		       const Mesh::point_type& cell) = 0;
+  void computeGeometryVert(const ALE::Obj<Mesh>& mesh,
+			   const ALE::Obj<real_section_type>& coordinates,
+			   const Mesh::point_type& cell) = 0;
 
+  /** Compute geometric quantities for a cell at quadrature points.
+   *
+   * @param mesh Finite-element mesh
+   * @param coordinates Section containing vertex coordinates
+   * @param cell Finite-element cell
+   */
+  virtual 
+  void computeGeometryQuad(const ALE::Obj<Mesh>& mesh,
+			   const ALE::Obj<real_section_type>& coordinates,
+			   const Mesh::point_type& cell) = 0;
+
 // PROTECTED METHODS ////////////////////////////////////////////////////
 protected :
 
@@ -209,26 +268,6 @@
 
   double _minJacobian; ///< Minium allowable Jacobian determinant
   
-  /** Array of basis functions evaluated at the quadrature points.
-   *
-   * N0Qp0, N1Qp0, ...
-   * N0Qp1, N1Qp1, ...
-   *
-   * size = numQuadPts * numBasis
-   * index = iQuadPt*numBasis + iBasis
-   */
-  double_array _basis;
-
-  /** Array of basis function derivatives evaluated at the quadrature points.
-   *
-   * N0xQp0, N0yQp0, N0zQp0, N1xQp0, N1yQp0, N1zQp0, ... 
-   * N0xQp1, N0yQp1, N0zQp1, N1xQp1, N1yQp1, N1zQp1, ...
-   *
-   * size = numQuadPts * numBasis * cellDim
-   * index = iQuadPt*numBasis*cellDim + iBasis*cellDim + iDim
-   */
-  double_array _basisDeriv;
-
   /** Array of coordinates of quadrature points in reference cell.
    *
    * Reference coordinates: (p,q,r)
@@ -259,27 +298,76 @@
    */
   double_array _quadWts;
 
-  /** Array of Jacobian evaluated at quadrature points.
+  /** Array of basis functions evaluated at the vertices.
    *
+   * N0Qp0, N1Qp0, ...
+   * N0Qp1, N1Qp1, ...
+   *
+   * size = numVertices * numBasis
+   * index = iVertex*numBasis + iBasis
+   */
+  double_array _basisVert;
+
+  /** Array of basis function derivatives evaluated at the vertices.
+   *
+   * N0xQp0, N0yQp0, N0zQp0, N1xQp0, N1yQp0, N1zQp0, ... 
+   * N0xQp1, N0yQp1, N0zQp1, N1xQp1, N1yQp1, N1zQp1, ...
+   *
+   * size = numVertices * numBasis * cellDim
+   * index = iVertex*numBasis*cellDim + iBasis*cellDim + iDim
+   */
+  double_array _basisDerivVert;
+
+  /** Array of Jacobians evaluated at vertices.
+   *
    * Qp0J00, Qp0J01, Qp0J02, ...
    * Qp1J00, Qp1J01, Qp1J02, ...
    * ...
    *
-   * size = numQuadPts*cellDim*spaceDim
-   * index = iQuadPt*cellDim*spaceDim + iRow*spaceDim + iCol
+   * size = numVertices*cellDim*spaceDim
+   * index = iVertex*cellDim*spaceDim + iRow*spaceDim + iCol
    */
-  double_array _jacobian;
+  double_array _jacobianVert;
 
-  /** Array of Jacobian inverses evaluated at quadrature points.
+  /** Array of determinant of Jacobian evaluated at vertices.
    *
-   * Qp0Jinv00, Qp0Jinv01, Qp0Jinv02, ...
-   * Qp1Jinv00, Qp1Jinv01, Qp1Jinv02, ...
+   * JdetQp0, JdetQp1, ...
+   *
+   * size = numVertices
+   * index = iVertex
+   */
+  double_array _jacobianDetVert;
+
+  /** Array of basis functions evaluated at the quadrature points.
+   *
+   * N0Qp0, N1Qp0, ...
+   * N0Qp1, N1Qp1, ...
+   *
+   * size = numQuadPts * numBasis
+   * index = iQuadPt*numBasis + iBasis
+   */
+  double_array _basisQuad;
+
+  /** Array of basis function derivatives evaluated at the quadrature points.
+   *
+   * N0xQp0, N0yQp0, N0zQp0, N1xQp0, N1yQp0, N1zQp0, ... 
+   * N0xQp1, N0yQp1, N0zQp1, N1xQp1, N1yQp1, N1zQp1, ...
+   *
+   * size = numQuadPts * numBasis * cellDim
+   * index = iQuadPt*numBasis*cellDim + iBasis*cellDim + iDim
+   */
+  double_array _basisDerivQuad;
+
+  /** Array of Jacobians evaluated at quadrature points.
+   *
+   * Qp0J00, Qp0J01, Qp0J02, ...
+   * Qp1J00, Qp1J01, Qp1J02, ...
    * ...
    *
-   * size = numQuadPts*spaceDim*cellDim
-   * index = iQuadPt*spaceDim*cellDim + iRow*cellDim + iCol
+   * size = numQuadPts*cellDim*spaceDim
+   * index = iQuadPt*cellDim*spaceDim + iRow*spaceDim + iCol
    */
-  double_array _jacobianInv;
+  double_array _jacobianQuad;
 
   /** Array of determinant of Jacobian evaluated at quadrature points.
    *
@@ -288,10 +376,21 @@
    * size = numQuadPts
    * index = iQuadPt
    */
-  double_array _jacobianDet;
+  double_array _jacobianDetQuad;
 
+  /** Array of Jacobian inverses evaluated at quadrature points.
+   *
+   * Qp0Jinv00, Qp0Jinv01, Qp0Jinv02, ...
+   * Qp1Jinv00, Qp1Jinv01, Qp1Jinv02, ...
+   * ...
+   *
+   * size = numQuadPts*spaceDim*cellDim
+   * index = iQuadPt*spaceDim*cellDim + iRow*cellDim + iCol
+   */
+  double_array _jacobianInvQuad;
+
   int _cellDim; ///< Number of dimensions in reference cell
-  int _numBasis; ///< Number of basis functions for cell
+  int _numBasis; ///< Number of basis functions (and vertices) for cell
   int _numQuadPts; ///< Number of quadrature points
   int _spaceDim; ///< Number of dimensions in coordinates of cell vertices
 

Modified: short/3D/PyLith/trunk/libsrc/feassemble/Quadrature.icc
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Quadrature.icc	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Quadrature.icc	2007-04-27 20:27:03 UTC (rev 6715)
@@ -28,48 +28,83 @@
   _minJacobian = min;
 }
 
-// Get basis fns evaluated at quadrature points.
+// Get coordinates of quadrature points in cell (NOT reference cell).
 inline
 const pylith::double_array&
-pylith::feassemble::Quadrature::basis(void) const {
-  return _basis;
+pylith::feassemble::Quadrature::quadPts(void) const {
+  return _quadPts;
 }
 
-// Get derivatives of basis fns evaluated at quadrature points.
+// Get weights of quadrature points.
 inline
 const pylith::double_array&
-pylith::feassemble::Quadrature::basisDeriv(void) const {
-  return _basisDeriv;
+pylith::feassemble::Quadrature::quadWts(void) const {
+  return _quadWts;
 }
 
-// Get coordinates of quadrature points in cell (NOT reference cell).
+// Get basis fns evaluated at vertices.
 inline
 const pylith::double_array&
-pylith::feassemble::Quadrature::quadPts(void) const {
-  return _quadPts;
+pylith::feassemble::Quadrature::basisVert(void) const {
+  return _basisVert;
 }
 
-// Get weights of quadrature points.
+// Get derivatives of basis fns evaluated at vertices.
 inline
 const pylith::double_array&
-pylith::feassemble::Quadrature::quadWts(void) const {
-  return _quadWts;
+pylith::feassemble::Quadrature::basisDerivVert(void) const {
+  return _basisDerivVert;
 }
 
-// Get Jacobian inverses evaluated at quadrature points.
+// Get Jacobians evaluated at vertices.
 inline
 const pylith::double_array&
-pylith::feassemble::Quadrature::jacobianInv(void) const {
-  return _jacobianInv;
+pylith::feassemble::Quadrature::jacobianVert(void) const {
+  return _jacobianVert;
 }
 
+// Get determinants of Jacobian evaluated at vertices.
+inline
+const pylith::double_array&
+pylith::feassemble::Quadrature::jacobianDetVert(void) const {
+  return _jacobianDetVert;
+}
+
+// Get basis fns evaluated at quadrature points.
+inline
+const pylith::double_array&
+pylith::feassemble::Quadrature::basisQuad(void) const {
+  return _basisQuad;
+}
+
+// Get derivatives of basis fns evaluated at quadrature points.
+inline
+const pylith::double_array&
+pylith::feassemble::Quadrature::basisDerivQuad(void) const {
+  return _basisDerivQuad;
+}
+
+// Get Jacobians evaluated at quadrature points.
+inline
+const pylith::double_array&
+pylith::feassemble::Quadrature::jacobianQuad(void) const {
+  return _jacobianQuad;
+}
+
 // Get determinants of Jacobian evaluated at quadrature points.
 inline
 const pylith::double_array&
-pylith::feassemble::Quadrature::jacobianDet(void) const {
-  return _jacobianDet;
+pylith::feassemble::Quadrature::jacobianDetQuad(void) const {
+  return _jacobianDetQuad;
 }
 
+// Get Jacobian inverses evaluated at quadrature points.
+inline
+const pylith::double_array&
+pylith::feassemble::Quadrature::jacobianInvQuad(void) const {
+  return _jacobianInvQuad;
+}
+
 // Get number of dimensions in reference cell.
 inline
 int

Modified: short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1D.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1D.cc	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1D.cc	2007-04-27 20:27:03 UTC (rev 6715)
@@ -38,13 +38,13 @@
 } // copy constructor
 
 // ----------------------------------------------------------------------
-// Compute geometric quantities for a cell.
+// Compute geometric quantities for a cell at vertoces.
 void
-pylith::feassemble::Quadrature1D::computeGeometry(
+pylith::feassemble::Quadrature1D::computeGeometryVert(
 			      const ALE::Obj<Mesh>& mesh,
 			      const ALE::Obj<real_section_type>& coordinates,
 			      const Mesh::point_type& cell)
-{ // computeGeometry
+{ // computeGeometryVert
   assert(1 == _cellDim);
   assert(1 == _spaceDim);
 
@@ -53,8 +53,45 @@
   // Get coordinates of cell's vertices
   const real_section_type::value_type* vertCoords = 
     mesh->restrict(coordinates, cell);
-  //assert(1 == coordinates->GetFiberDimension(0));
+  assert(1 == coordinates->getFiberDimension(*mesh->depthStratum(0)->begin()));
   
+  // Loop over vertices
+  const int numVertices = _numBasis;
+  for (int iVertex=0; iVertex < numVertices; ++iVertex) {
+    
+    // Compute Jacobian at vertices
+    // J = dx/dp = sum[i=0,n-1] (dNi/dp * xi)
+    for (int iBasis=0; iBasis < _numBasis; ++iBasis)
+      _jacobianVert[iVertex] += 
+	_basisDerivVert[iVertex*_numBasis+iBasis] * vertCoords[iBasis];
+
+    // Compute determinant of Jacobian at vertices
+    // |J| = j00
+    const double det = _jacobianVert[iVertex];
+    _checkJacobianDet(det);
+    _jacobianDetVert[iVertex] = _jacobianVert[iVertex];
+  } // for    
+
+} // computeGeometryVert
+
+// ----------------------------------------------------------------------
+// Compute geometric quantities for a cell at quadrature points.
+void
+pylith::feassemble::Quadrature1D::computeGeometryQuad(
+			      const ALE::Obj<Mesh>& mesh,
+			      const ALE::Obj<real_section_type>& coordinates,
+			      const Mesh::point_type& cell)
+{ // computeGeometryQuad
+  assert(1 == _cellDim);
+  assert(1 == _spaceDim);
+
+  _resetGeometry();
+  
+  // Get coordinates of cell's vertices
+  const real_section_type::value_type* vertCoords = 
+    mesh->restrict(coordinates, cell);
+  assert(1 == coordinates->getFiberDimension(*mesh->depthStratum(0)->begin()));
+  
   // Loop over quadrature points
   for (int iQuadPt=0; iQuadPt < _numQuadPts; ++iQuadPt) {
     
@@ -62,25 +99,25 @@
     // x = sum[i=0,n-1] (Ni * xi)
     for (int iBasis=0; iBasis < _numBasis; ++iBasis)
       _quadPts[iQuadPt] += 
-	_basis[iQuadPt*_numBasis+iBasis]*vertCoords[iBasis];
+	_basisQuad[iQuadPt*_numBasis+iBasis]*vertCoords[iBasis];
 
     // Compute Jacobian at quadrature point
     // J = dx/dp = sum[i=0,n-1] (dNi/dp * xi)
     for (int iBasis=0; iBasis < _numBasis; ++iBasis)
-      _jacobian[iQuadPt] += 
-	_basisDeriv[iQuadPt*_numBasis+iBasis] * vertCoords[iBasis];
+      _jacobianQuad[iQuadPt] += 
+	_basisDerivQuad[iQuadPt*_numBasis+iBasis] * vertCoords[iBasis];
 
     // Compute determinant of Jacobian at quadrature point
     // |J| = j00
-    const double det = _jacobian[iQuadPt];
+    const double det = _jacobianQuad[iQuadPt];
     _checkJacobianDet(det);
-    _jacobianDet[iQuadPt] = _jacobian[iQuadPt];
+    _jacobianDetQuad[iQuadPt] = _jacobianQuad[iQuadPt];
     
     // Compute inverse of Jacobian at quadrature point
     // Jinv = 1/j00
-    _jacobianInv[iQuadPt] = 1.0/_jacobianDet[iQuadPt];
+    _jacobianInvQuad[iQuadPt] = 1.0/_jacobianDetQuad[iQuadPt];
   } // for
-} // computeGeometry
+} // computeGeometryQuad
 
 
 // End of file 

Modified: short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1D.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1D.hh	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1D.hh	2007-04-27 20:27:03 UTC (rev 6715)
@@ -44,10 +44,26 @@
   /// Create a copy of this object.
   Quadrature* clone(void) const;
 
-  void computeGeometry(const ALE::Obj<Mesh>& mesh,
-		       const ALE::Obj<real_section_type>& coordinates,
-		       const Mesh::point_type& cell);
+  /** Compute geometric quantities for a cell at vertices.
+   *
+   * @param mesh Finite-element mesh
+   * @param coordinates Section containing vertex coordinates
+   * @param cell Finite-element cell
+   */
+  void computeGeometryVert(const ALE::Obj<Mesh>& mesh,
+			   const ALE::Obj<real_section_type>& coordinates,
+			   const Mesh::point_type& cell);
 
+  /** Compute geometric quantities for a cell at quadrature points.
+   *
+   * @param mesh Finite-element mesh
+   * @param coordinates Section containing vertex coordinates
+   * @param cell Finite-element cell
+   */
+  void computeGeometryQuad(const ALE::Obj<Mesh>& mesh,
+			   const ALE::Obj<real_section_type>& coordinates,
+			   const Mesh::point_type& cell);
+
 // PROTECTED METHODS ////////////////////////////////////////////////////
 protected :
 

Modified: short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din2D.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din2D.cc	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din2D.cc	2007-04-27 20:27:03 UTC (rev 6715)
@@ -36,13 +36,13 @@
 } // copy constructor
 
 // ----------------------------------------------------------------------
-// Compute geometric quantities for a cell.
+// Compute geometric quantities for a cell at vertices.
 void
-pylith::feassemble::Quadrature1Din2D::computeGeometry(
+pylith::feassemble::Quadrature1Din2D::computeGeometryVert(
 		       const ALE::Obj<Mesh>& mesh,
 		       const ALE::Obj<real_section_type>& coordinates,
 		       const Mesh::point_type& cell)
-{ // computeGeometry
+{ // computeGeometryVert
   assert(1 == _cellDim);
   assert(2 == _spaceDim);
 
@@ -51,9 +51,54 @@
   // Get coordinates of cell's vertices
   const real_section_type::value_type* vertCoords = 
     mesh->restrict(coordinates, cell);
-  //assert(2 == coordinates.GetFiberDimensionByDepth(patch, 
-  //*vertices->begin(), 0));
+  assert(2 == coordinates->getFiberDimension(*mesh->depthStratum(0)->begin()));
 
+  // Loop over vertices
+  const int numVertices = _numBasis;
+  for (int iVertex=0; iVertex < numVertices; ++iVertex) {
+    
+    // Compute Jacobian at vertex
+    // J = [dx/dp dy/dp]
+    // dx/dp = sum[i=0,n-1] (dNi/dp * xi)
+    // dy/dp = sum[i=0,n-1] (dNi/dp * yi)
+    for (int iBasis=0; iBasis < _numBasis; ++iBasis) {
+      const double deriv = _basisDerivVert[iVertex*_numBasis+iBasis];
+      for (int iDim=0; iDim < _spaceDim; ++iDim)
+	_jacobianVert[iVertex*_spaceDim+iDim] += 
+	  deriv * vertCoords[iBasis*_spaceDim+iDim];
+    } // for
+
+    // Compute determinant of Jacobian at vertex
+    // |J| = sqrt(J transpose(J))
+    double det = 0.0;
+    for (int iDim=0; iDim < _spaceDim; ++iDim)
+      det += _jacobianVert[iVertex*_spaceDim+iDim] * 
+	_jacobianVert[iVertex*_spaceDim+iDim];
+    det = sqrt(det);
+    _checkJacobianDet(det);
+    _jacobianDetVert[iVertex] = det;
+  } // for
+
+} // computeGeometryVert
+
+// ----------------------------------------------------------------------
+// Compute geometric quantities for a cell at quadrature points.
+void
+pylith::feassemble::Quadrature1Din2D::computeGeometryQuad(
+		       const ALE::Obj<Mesh>& mesh,
+		       const ALE::Obj<real_section_type>& coordinates,
+		       const Mesh::point_type& cell)
+{ // computeGeometryQuad
+  assert(1 == _cellDim);
+  assert(2 == _spaceDim);
+
+  _resetGeometry();
+
+  // Get coordinates of cell's vertices
+  const real_section_type::value_type* vertCoords = 
+    mesh->restrict(coordinates, cell);
+  assert(2 == coordinates->getFiberDimension(*mesh->depthStratum(0)->begin()));
+
   // Loop over quadrature points
   for (int iQuadPt=0; iQuadPt < _numQuadPts; ++iQuadPt) {
     
@@ -61,7 +106,7 @@
     // x = sum[i=0,n-1] (Ni * xi)
     // y = sum[i=0,n-1] (Ni * yi)
     for (int iBasis=0; iBasis < _numBasis; ++iBasis) {
-      const double basis = _basis[iQuadPt*_numBasis+iBasis];
+      const double basis = _basisQuad[iQuadPt*_numBasis+iBasis];
       for (int iDim=0; iDim < _spaceDim; ++iDim)
 	_quadPts[iQuadPt*_spaceDim+iDim] +=
 	  basis * vertCoords[iBasis*_spaceDim+iDim];
@@ -72,9 +117,9 @@
     // dx/dp = sum[i=0,n-1] (dNi/dp * xi)
     // dy/dp = sum[i=0,n-1] (dNi/dp * yi)
     for (int iBasis=0; iBasis < _numBasis; ++iBasis) {
-      const double deriv = _basisDeriv[iQuadPt*_numBasis+iBasis];
+      const double deriv = _basisDerivQuad[iQuadPt*_numBasis+iBasis];
       for (int iDim=0; iDim < _spaceDim; ++iDim)
-	_jacobian[iQuadPt*_spaceDim+iDim] += 
+	_jacobianQuad[iQuadPt*_spaceDim+iDim] += 
 	  deriv * vertCoords[iBasis*_spaceDim+iDim];
     } // for
 
@@ -82,19 +127,19 @@
     // |J| = sqrt(J transpose(J))
     double det = 0.0;
     for (int iDim=0; iDim < _spaceDim; ++iDim)
-      det += _jacobian[iQuadPt*_spaceDim+iDim] * 
-	_jacobian[iQuadPt*_spaceDim+iDim];
+      det += _jacobianQuad[iQuadPt*_spaceDim+iDim] * 
+	_jacobianQuad[iQuadPt*_spaceDim+iDim];
     det = sqrt(det);
     _checkJacobianDet(det);
-    _jacobianDet[iQuadPt] = det;
+    _jacobianDetQuad[iQuadPt] = det;
 
     // Compute inverse of Jacobian at quadrature point
     // Jinv = 1.0/[J]
     for (int iDim=0; iDim < _spaceDim; ++iDim)
-      _jacobianInv[iQuadPt*_spaceDim+iDim] = 
-	1.0 / _jacobian[iQuadPt*_spaceDim+iDim];
+      _jacobianInvQuad[iQuadPt*_spaceDim+iDim] = 
+	1.0 / _jacobianQuad[iQuadPt*_spaceDim+iDim];
   } // for
-} // computeGeometry
+} // computeGeometryQuad
 
 
 // End of file 

Modified: short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din2D.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din2D.hh	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din2D.hh	2007-04-27 20:27:03 UTC (rev 6715)
@@ -44,15 +44,26 @@
   /// Create a copy of this object.
   Quadrature* clone(void) const;
 
-  /** Compute geometric quantities for a cell.
+  /** Compute geometric quantities for a cell at vertices.
    *
+   * @param mesh Finite-element mesh
    * @param coordinates Section containing vertex coordinates
    * @param cell Finite-element cell
    */
-  void computeGeometry(const ALE::Obj<Mesh>& mesh,
-		       const ALE::Obj<real_section_type>& coordinates,
-		       const Mesh::point_type& cell);
+  void computeGeometryVert(const ALE::Obj<Mesh>& mesh,
+			   const ALE::Obj<real_section_type>& coordinates,
+			   const Mesh::point_type& cell);
 
+  /** Compute geometric quantities for a cell at quadrature points.
+   *
+   * @param mesh Finite-element mesh
+   * @param coordinates Section containing vertex coordinates
+   * @param cell Finite-element cell
+   */
+  void computeGeometryQuad(const ALE::Obj<Mesh>& mesh,
+			   const ALE::Obj<real_section_type>& coordinates,
+			   const Mesh::point_type& cell);
+
 // PROTECTED METHODS ////////////////////////////////////////////////////
 protected :
 

Modified: short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din3D.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din3D.cc	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din3D.cc	2007-04-27 20:27:03 UTC (rev 6715)
@@ -36,13 +36,13 @@
 } // copy constructor
 
 // ----------------------------------------------------------------------
-// Compute geometric quantities for a cell.
+// Compute geometric quantities for a cell at vertices.
 void
-pylith::feassemble::Quadrature1Din3D::computeGeometry(
+pylith::feassemble::Quadrature1Din3D::computeGeometryVert(
 		       const ALE::Obj<Mesh>& mesh,
 		       const ALE::Obj<real_section_type>& coordinates,
 		       const Mesh::point_type& cell)
-{ // computeGeometry
+{ // computeGeometryVert
   assert(1 == _cellDim);
   assert(3 == _spaceDim);
 
@@ -51,9 +51,54 @@
   // Get coordinates of cell's vertices
   const real_section_type::value_type* vertCoords = 
     mesh->restrict(coordinates, cell);
-  //assert(3 == coordinates.GetFiberDimensionByDepth(patch,
-  //*vertices->begin(), 0));
+  assert(3 == coordinates->getFiberDimension(*mesh->depthStratum(0)->begin()));
 
+  // Loop over vertices
+  const int numVertices = _numBasis;
+  for (int iVertex=0; iVertex < numVertices; ++iVertex) {
+    // Compute Jacobian at vertex
+    // J = [dx/dp dy/dp dz/dp]
+    // dx/dp = sum[i=0,n-1] (dNi/dp * xi)
+    // dy/dp = sum[i=0,n-1] (dNi/dp * yi)
+    // dz/dp = sum[i=0,n-1] (dNi/dp * zi)
+    for (int iBasis=0; iBasis < _numBasis; ++iBasis) {
+      const double deriv = _basisDerivVert[iVertex*_numBasis+iBasis];
+      for (int iDim=0; iDim < _spaceDim; ++iDim)
+	_jacobianVert[iVertex*_spaceDim+iDim] += 
+	  deriv * vertCoords[iBasis*_spaceDim+iDim];
+    } // for
+
+    // Compute determinant of Jacobian at quadrature point
+    // |J| = sqrt(J transpose(J))
+    double det = 0.0;
+    for (int iDim=0; iDim < _spaceDim; ++iDim)
+      det += _jacobianVert[iVertex*_spaceDim+iDim] * 
+	_jacobianVert[iVertex*_spaceDim+iDim];
+    det = sqrt(det);
+    _checkJacobianDet(det);
+    _jacobianDetVert[iVertex] = det;
+  } // for
+
+} // computeGeometryVert
+
+// ----------------------------------------------------------------------
+// Compute geometric quantities for a cell at quadrature points.
+void
+pylith::feassemble::Quadrature1Din3D::computeGeometryQuad(
+		       const ALE::Obj<Mesh>& mesh,
+		       const ALE::Obj<real_section_type>& coordinates,
+		       const Mesh::point_type& cell)
+{ // computeGeometryQuad
+  assert(1 == _cellDim);
+  assert(3 == _spaceDim);
+
+  _resetGeometry();
+
+  // Get coordinates of cell's vertices
+  const real_section_type::value_type* vertCoords = 
+    mesh->restrict(coordinates, cell);
+  assert(3 == coordinates->getFiberDimension(*mesh->depthStratum(0)->begin()));
+
   // Loop over quadrature points
   for (int iQuadPt=0; iQuadPt < _numQuadPts; ++iQuadPt) {
     
@@ -62,7 +107,7 @@
     // y = sum[i=0,n-1] (Ni * yi)
     // z = sum[i=0,n-1] (Ni * zi)
     for (int iBasis=0; iBasis < _numBasis; ++iBasis) {
-      const double basis = _basis[iQuadPt*_numBasis+iBasis];
+      const double basis = _basisQuad[iQuadPt*_numBasis+iBasis];
       for (int iDim=0; iDim < _spaceDim; ++iDim)
 	_quadPts[iQuadPt*_spaceDim+iDim] += 
 	  basis * vertCoords[iBasis*_spaceDim+iDim];
@@ -74,9 +119,9 @@
     // dy/dp = sum[i=0,n-1] (dNi/dp * yi)
     // dz/dp = sum[i=0,n-1] (dNi/dp * zi)
     for (int iBasis=0; iBasis < _numBasis; ++iBasis) {
-      const double deriv = _basisDeriv[iQuadPt*_numBasis+iBasis];
+      const double deriv = _basisDerivQuad[iQuadPt*_numBasis+iBasis];
       for (int iDim=0; iDim < _spaceDim; ++iDim)
-	_jacobian[iQuadPt*_spaceDim+iDim] += 
+	_jacobianQuad[iQuadPt*_spaceDim+iDim] += 
 	  deriv * vertCoords[iBasis*_spaceDim+iDim];
     } // for
 
@@ -84,19 +129,19 @@
     // |J| = sqrt(J transpose(J))
     double det = 0.0;
     for (int iDim=0; iDim < _spaceDim; ++iDim)
-      det += _jacobian[iQuadPt*_spaceDim+iDim] * 
-	_jacobian[iQuadPt*_spaceDim+iDim];
+      det += _jacobianQuad[iQuadPt*_spaceDim+iDim] * 
+	_jacobianQuad[iQuadPt*_spaceDim+iDim];
     det = sqrt(det);
     _checkJacobianDet(det);
-    _jacobianDet[iQuadPt] = det;
+    _jacobianDetQuad[iQuadPt] = det;
 
     // Compute inverse of Jacobian at quadrature point
     // Jinv = 1.0/[J]
     for (int iDim=0; iDim < _spaceDim; ++iDim)
-      _jacobianInv[iQuadPt*_spaceDim+iDim] = 
-	1.0 / _jacobian[iQuadPt*_spaceDim+iDim];
+      _jacobianInvQuad[iQuadPt*_spaceDim+iDim] = 
+	1.0 / _jacobianQuad[iQuadPt*_spaceDim+iDim];
   } // for
-} // computeGeometry
+} // computeGeometryQuad
 
 
 // End of file 

Modified: short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din3D.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din3D.hh	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din3D.hh	2007-04-27 20:27:03 UTC (rev 6715)
@@ -44,15 +44,26 @@
   /// Create a copy of this object.
   Quadrature* clone(void) const;
 
-  /** Compute geometric quantities for a cell.
+  /** Compute geometric quantities for a cell at vertices.
    *
+   * @param mesh Finite-element mesh
    * @param coordinates Section containing vertex coordinates
    * @param cell Finite-element cell
    */
-  void computeGeometry(const ALE::Obj<Mesh>& mesh,
-		       const ALE::Obj<real_section_type>& coordinates,
-		       const Mesh::point_type& cell);
+  void computeGeometryVert(const ALE::Obj<Mesh>& mesh,
+			   const ALE::Obj<real_section_type>& coordinates,
+			   const Mesh::point_type& cell);
 
+  /** Compute geometric quantities for a cell at quadrature points.
+   *
+   * @param mesh Finite-element mesh
+   * @param coordinates Section containing vertex coordinates
+   * @param cell Finite-element cell
+   */
+  void computeGeometryQuad(const ALE::Obj<Mesh>& mesh,
+			   const ALE::Obj<real_section_type>& coordinates,
+			   const Mesh::point_type& cell);
+
 // PROTECTED METHODS ////////////////////////////////////////////////////
 protected :
 

Modified: short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2D.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2D.cc	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2D.cc	2007-04-27 20:27:03 UTC (rev 6715)
@@ -36,13 +36,13 @@
 } // copy constructor
 
 // ----------------------------------------------------------------------
-// Compute geometric quantities for a cell.
+// Compute geometric quantities for a cell at vertices.
 void
-pylith::feassemble::Quadrature2D::computeGeometry(
+pylith::feassemble::Quadrature2D::computeGeometryVert(
 		       const ALE::Obj<Mesh>& mesh,
 		       const ALE::Obj<real_section_type>& coordinates,
 		       const Mesh::point_type& cell)
-{ // computeGeometry
+{ // computeGeometryVert
   assert(2 == _cellDim);
   assert(2 == _spaceDim);
 
@@ -51,9 +51,61 @@
   // Get coordinates of cell's vertices
   const real_section_type::value_type* vertCoords = 
     mesh->restrict(coordinates, cell);
-  //assert(2 == coordinates.GetFiberDimensionByDepth(patch,
-  //*vertices->begin(), 0));
+  assert(2 == coordinates->getFiberDimension(*mesh->depthStratum(0)->begin()));
 
+  // Loop over vertices
+  const int numVertices = _numBasis;
+  for (int iVertex=0; iVertex < numVertices; ++iVertex) {
+    // Compute Jacobian at vertex
+    // J = [dx/dp dy/dp]
+    //     [dx/dq dy/dq]
+    // dx/dp = sum[i=0,n-1] (dNi/dp * xi)
+    // dy/dp = sum[i=0,n-1] (dNi/dp * yi)
+    // dx/dq = sum[i=0,n-1] (dNi/dq * xi)
+    // dy/dq = sum[i=0,n-1] (dNi/dq * yi)
+    for (int iBasis=0; iBasis < _numBasis; ++iBasis)
+      for (int iRow=0; iRow < _cellDim; ++iRow) {
+	const double deriv = 
+	  _basisDerivVert[iVertex*_numBasis*_spaceDim+iBasis*_cellDim+iRow];
+	for (int iCol=0; iCol < _spaceDim; ++iCol)
+	  _jacobianVert[iVertex*_cellDim*_spaceDim+iRow*_spaceDim+iCol] +=
+	    deriv * vertCoords[iBasis*_spaceDim+iCol];
+      } // for
+  
+    // Compute determinant of Jacobian at quadrature point
+    // |J| = j00*j11-j01*j10
+    const int iJ = iVertex*_cellDim*_spaceDim;
+    const int i00 = iJ + 0*_spaceDim + 0;
+    const int i01 = iJ + 0*_spaceDim + 1;
+    const int i10 = iJ + 1*_spaceDim + 0;
+    const int i11 = iJ + 1*_spaceDim + 1;
+    const double det = 
+      _jacobianVert[i00]*_jacobianVert[i11] - 
+      _jacobianVert[i01]*_jacobianVert[i10];
+    _checkJacobianDet(det);
+    _jacobianDetVert[iVertex] = det;
+  } // for
+
+} // computeGeometryVert
+
+// ----------------------------------------------------------------------
+// Compute geometric quantities for a cell at quadrature points.
+void
+pylith::feassemble::Quadrature2D::computeGeometryQuad(
+		       const ALE::Obj<Mesh>& mesh,
+		       const ALE::Obj<real_section_type>& coordinates,
+		       const Mesh::point_type& cell)
+{ // computeGeometryQuad
+  assert(2 == _cellDim);
+  assert(2 == _spaceDim);
+
+  _resetGeometry();
+
+  // Get coordinates of cell's vertices
+  const real_section_type::value_type* vertCoords = 
+    mesh->restrict(coordinates, cell);
+  assert(2 == coordinates->getFiberDimension(*mesh->depthStratum(0)->begin()));
+
   // Loop over quadrature points
   for (int iQuadPt=0; iQuadPt < _numQuadPts; ++iQuadPt) {
     
@@ -61,7 +113,7 @@
     // x = sum[i=0,n-1] (Ni * xi)
     // y = sum[i=0,n-1] (Ni * yi)
     for (int iBasis=0; iBasis < _numBasis; ++iBasis) {
-      const double basis = _basis[iQuadPt*_numBasis+iBasis];
+      const double basis = _basisQuad[iQuadPt*_numBasis+iBasis];
       for (int iDim=0; iDim < _spaceDim; ++iDim)
 	_quadPts[iQuadPt*_spaceDim+iDim] += 
 	  basis * vertCoords[iBasis*_spaceDim+iDim];
@@ -77,9 +129,9 @@
     for (int iBasis=0; iBasis < _numBasis; ++iBasis)
       for (int iRow=0; iRow < _cellDim; ++iRow) {
 	const double deriv = 
-	  _basisDeriv[iQuadPt*_numBasis*_spaceDim+iBasis*_cellDim+iRow];
+	  _basisDerivQuad[iQuadPt*_numBasis*_spaceDim+iBasis*_cellDim+iRow];
 	for (int iCol=0; iCol < _spaceDim; ++iCol)
-	  _jacobian[iQuadPt*_cellDim*_spaceDim+iRow*_spaceDim+iCol] +=
+	  _jacobianQuad[iQuadPt*_cellDim*_spaceDim+iRow*_spaceDim+iCol] +=
 	    deriv * vertCoords[iBasis*_spaceDim+iCol];
       } // for
   
@@ -91,19 +143,20 @@
     const int i10 = iJ + 1*_spaceDim + 0;
     const int i11 = iJ + 1*_spaceDim + 1;
     const double det = 
-      _jacobian[i00]*_jacobian[i11] - _jacobian[i01]*_jacobian[i10];
+      _jacobianQuad[i00]*_jacobianQuad[i11] - 
+      _jacobianQuad[i01]*_jacobianQuad[i10];
     _checkJacobianDet(det);
-    _jacobianDet[iQuadPt] = det;
+    _jacobianDetQuad[iQuadPt] = det;
 
     // Compute inverse of Jacobian at quadrature point
     // Jinv = 1/det*[ j11 -j01]
     //              [-j10  j00]
-    _jacobianInv[i00] = _jacobian[i11] / det;
-    _jacobianInv[i01] = -_jacobian[i01] / det;
-    _jacobianInv[i10] = -_jacobian[i10] / det;
-    _jacobianInv[i11] = _jacobian[i00] / det;
+    _jacobianInvQuad[i00] =  _jacobianQuad[i11] / det;
+    _jacobianInvQuad[i01] = -_jacobianQuad[i01] / det;
+    _jacobianInvQuad[i10] = -_jacobianQuad[i10] / det;
+    _jacobianInvQuad[i11] =  _jacobianQuad[i00] / det;
   } // for
-} // computeGeometry
+} // computeGeometryQuad
 
 
 // End of file 

Modified: short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2D.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2D.hh	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2D.hh	2007-04-27 20:27:03 UTC (rev 6715)
@@ -44,15 +44,26 @@
   /// Create a copy of this object.
   Quadrature* clone(void) const;
 
-  /** Compute geometric quantities for a cell.
+  /** Compute geometric quantities for a cell at vertices.
    *
+   * @param mesh Finite-element mesh
    * @param coordinates Section containing vertex coordinates
    * @param cell Finite-element cell
    */
-  void computeGeometry(const ALE::Obj<Mesh>& mesh,
-		       const ALE::Obj<real_section_type>& coordinates,
-		       const Mesh::point_type& cell);
+  void computeGeometryVert(const ALE::Obj<Mesh>& mesh,
+			   const ALE::Obj<real_section_type>& coordinates,
+			   const Mesh::point_type& cell);
 
+  /** Compute geometric quantities for a cell at quadrature points.
+   *
+   * @param mesh Finite-element mesh
+   * @param coordinates Section containing vertex coordinates
+   * @param cell Finite-element cell
+   */
+  void computeGeometryQuad(const ALE::Obj<Mesh>& mesh,
+			   const ALE::Obj<real_section_type>& coordinates,
+			   const Mesh::point_type& cell);
+
 // PROTECTED METHODS ////////////////////////////////////////////////////
 protected :
 

Modified: short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2Din3D.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2Din3D.cc	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2Din3D.cc	2007-04-27 20:27:03 UTC (rev 6715)
@@ -39,13 +39,13 @@
 } // copy constructor
 
 // ----------------------------------------------------------------------
-// Compute geometric quantities for a cell.
+// Compute geometric quantities for a cell at vertices.
 void
-pylith::feassemble::Quadrature2Din3D::computeGeometry(
+pylith::feassemble::Quadrature2Din3D::computeGeometryVert(
 		       const ALE::Obj<Mesh>& mesh,
 		       const ALE::Obj<real_section_type>& coordinates,
 		       const Mesh::point_type& cell)
-{ // computeGeometry
+{ // computeGeometryVert
   assert(2 == _cellDim);
   assert(3 == _spaceDim);
 
@@ -54,9 +54,77 @@
   // Get coordinates of cell's vertices
   const real_section_type::value_type* vertCoords = 
     mesh->restrict(coordinates, cell);
-  //assert(3 == coordinates.GetFiberDimensionByDepth(patch,
-  //*vertices->begin(), 0));
+  assert(3 == coordinates->getFiberDimension(*mesh->depthStratum(0)->begin()));
 
+  // Loop over vertices
+  const int numVertices = _numBasis;
+  for (int iVertex=0; iVertex < numVertices; ++iVertex) {
+    // Compute Jacobian at vertex
+    // J = [dx/dp dy/dp dz/dp]
+    //     [dx/dq dy/dq dz/dq]
+    // dx/dp = sum[i=0,n-1] (dNi/dp * xi)
+    // dy/dp = sum[i=0,n-1] (dNi/dp * yi)
+    // dz/dp = sum[i=0,n-1] (dNi/dp * zi)
+    // dx/dq = sum[i=0,n-1] (dNi/dq * xi)
+    // dy/dq = sum[i=0,n-1] (dNi/dq * yi)
+    // dz/dq = sum[i=0,n-1] (dNi/dq * zi)
+    for (int iBasis=0; iBasis < _numBasis; ++iBasis)
+      for (int iRow=0; iRow < _cellDim; ++iRow) {
+	const double deriv = 
+	  _basisDerivVert[iVertex*_numBasis*_cellDim+iBasis*_cellDim+iRow];
+	for (int iCol=0; iCol < _spaceDim; ++iCol)
+	  _jacobianVert[iVertex*_cellDim*_spaceDim+iRow*_spaceDim+iCol] +=
+	    deriv * vertCoords[iBasis*+_spaceDim+iCol];
+      } // for
+    
+    // Compute determinant of Jacobian at quadrature point
+    // |J| = sqrt(J transpose(J))
+    const int iJ = iVertex*_cellDim*_spaceDim;
+    const int i00 = iJ + 0*_spaceDim + 0;
+    const int i01 = iJ + 0*_spaceDim + 1;
+    const int i02 = iJ + 0*_spaceDim + 2;
+    const int i10 = iJ + 1*_spaceDim + 0;
+    const int i11 = iJ + 1*_spaceDim + 1;
+    const int i12 = iJ + 1*_spaceDim + 2;
+    // JJ = J transpose(J)
+    const double jj00 = 
+      _jacobianVert[i00]*_jacobianVert[i00] +
+      _jacobianVert[i01]*_jacobianVert[i01] +
+      _jacobianVert[i02]*_jacobianVert[i02];
+    const double jj01 =
+      _jacobianVert[i00]*_jacobianVert[i10] +
+      _jacobianVert[i01]*_jacobianVert[i11] +
+      _jacobianVert[i02]*_jacobianVert[i12];
+    const double jj10 = jj01;
+    const double jj11 = 
+      _jacobianVert[i10]*_jacobianVert[i10] +
+      _jacobianVert[i11]*_jacobianVert[i11] +
+      _jacobianVert[i12]*_jacobianVert[i12];
+    const double det = sqrt(jj00*jj11 - jj01*jj10);
+    _checkJacobianDet(det);
+    _jacobianDetVert[iVertex] = det;
+  } // for
+    
+} // computeGeometryVert
+
+// ----------------------------------------------------------------------
+// Compute geometric quantities for a cell at quadrature points.
+void
+pylith::feassemble::Quadrature2Din3D::computeGeometryQuad(
+		       const ALE::Obj<Mesh>& mesh,
+		       const ALE::Obj<real_section_type>& coordinates,
+		       const Mesh::point_type& cell)
+{ // computeGeometryQuad
+  assert(2 == _cellDim);
+  assert(3 == _spaceDim);
+
+  _resetGeometry();
+
+  // Get coordinates of cell's vertices
+  const real_section_type::value_type* vertCoords = 
+    mesh->restrict(coordinates, cell);
+  assert(3 == coordinates->getFiberDimension(*mesh->depthStratum(0)->begin()));
+
   // Loop over quadrature points
   for (int iQuadPt=0; iQuadPt < _numQuadPts; ++iQuadPt) {
     
@@ -65,7 +133,7 @@
     // y = sum[i=0,n-1] (Ni * yi)
     // z = sum[i=0,n-1] (Ni * zi)
     for (int iBasis=0; iBasis < _numBasis; ++iBasis) {
-      const double basis = _basis[iQuadPt*_numBasis+iBasis];
+      const double basis = _basisQuad[iQuadPt*_numBasis+iBasis];
       for (int iDim=0; iDim < _spaceDim; ++iDim)
 	_quadPts[iQuadPt*_spaceDim+iDim] += 
 	  basis * vertCoords[iBasis*_spaceDim+iDim];
@@ -83,9 +151,9 @@
     for (int iBasis=0; iBasis < _numBasis; ++iBasis)
       for (int iRow=0; iRow < _cellDim; ++iRow) {
 	const double deriv = 
-	  _basisDeriv[iQuadPt*_numBasis*_cellDim+iBasis*_cellDim+iRow];
+	  _basisDerivQuad[iQuadPt*_numBasis*_cellDim+iBasis*_cellDim+iRow];
 	for (int iCol=0; iCol < _spaceDim; ++iCol)
-	  _jacobian[iQuadPt*_cellDim*_spaceDim+iRow*_spaceDim+iCol] +=
+	  _jacobianQuad[iQuadPt*_cellDim*_spaceDim+iRow*_spaceDim+iCol] +=
 	    deriv * vertCoords[iBasis*+_spaceDim+iCol];
       } // for
     
@@ -100,86 +168,89 @@
     const int i12 = iJ + 1*_spaceDim + 2;
     // JJ = J transpose(J)
     const double jj00 = 
-      _jacobian[i00]*_jacobian[i00] +
-      _jacobian[i01]*_jacobian[i01] +
-      _jacobian[i02]*_jacobian[i02];
+      _jacobianQuad[i00]*_jacobianQuad[i00] +
+      _jacobianQuad[i01]*_jacobianQuad[i01] +
+      _jacobianQuad[i02]*_jacobianQuad[i02];
     const double jj01 =
-      _jacobian[i00]*_jacobian[i10] +
-      _jacobian[i01]*_jacobian[i11] +
-      _jacobian[i02]*_jacobian[i12];
+      _jacobianQuad[i00]*_jacobianQuad[i10] +
+      _jacobianQuad[i01]*_jacobianQuad[i11] +
+      _jacobianQuad[i02]*_jacobianQuad[i12];
     const double jj10 = jj01;
     const double jj11 = 
-      _jacobian[i10]*_jacobian[i10] +
-      _jacobian[i11]*_jacobian[i11] +
-      _jacobian[i12]*_jacobian[i12];
+      _jacobianQuad[i10]*_jacobianQuad[i10] +
+      _jacobianQuad[i11]*_jacobianQuad[i11] +
+      _jacobianQuad[i12]*_jacobianQuad[i12];
     const double det = sqrt(jj00*jj11 - jj01*jj10);
     _checkJacobianDet(det);
-    _jacobianDet[iQuadPt] = det;
+    _jacobianDetQuad[iQuadPt] = det;
     
     // Compute inverse of Jacobian at quadrature point
     const double d01 = 
-      _jacobian[i00]*_jacobian[i11] - _jacobian[i10]*_jacobian[i01];
+      _jacobianQuad[i00]*_jacobianQuad[i11] - 
+      _jacobianQuad[i10]*_jacobianQuad[i01];
     const double d12 = 
-      _jacobian[i01]*_jacobian[i12] - _jacobian[i11]*_jacobian[i02];
+      _jacobianQuad[i01]*_jacobianQuad[i12] - 
+      _jacobianQuad[i11]*_jacobianQuad[i02];
     const double d02 = 
-      _jacobian[i00]*_jacobian[i12] - _jacobian[i10]*_jacobian[i02];
+      _jacobianQuad[i00]*_jacobianQuad[i12] - 
+      _jacobianQuad[i10]*_jacobianQuad[i02];
     if (fabs(d01) > _minJacobian) {
       // Jinv00 = 1/d01 * J11
       // Jinv01 = 1/d01 * -J01
       // Jinv10 = 1/d01 * -J10
       // Jinv11 = 1/d01 * J00
-      _jacobianInv[iJ+0] = _jacobian[i11] / d01; // Jinv00
-      _jacobianInv[iJ+1] = -_jacobian[i01] / d01; // Jinv01
-      _jacobianInv[iJ+2] = -_jacobian[i10] / d01; // Jinv10
-      _jacobianInv[iJ+3] = _jacobian[i00] / d01; // Jinv11
+      _jacobianInvQuad[iJ+0] =  _jacobianQuad[i11] / d01; // Jinv00
+      _jacobianInvQuad[iJ+1] = -_jacobianQuad[i01] / d01; // Jinv01
+      _jacobianInvQuad[iJ+2] = -_jacobianQuad[i10] / d01; // Jinv10
+      _jacobianInvQuad[iJ+3] =  _jacobianQuad[i00] / d01; // Jinv11
       if (fabs(d12) > _minJacobian) {
 	// Jinv20 = 1/d12 -J11
 	// Jinv21 = 1/d12 J01
-	_jacobianInv[iJ+4] = -_jacobian[i11] / d12; // Jinv20
-	_jacobianInv[iJ+5] = _jacobian[i01] / d12; // Jinv21
+	_jacobianInvQuad[iJ+4] = -_jacobianQuad[i11] / d12; // Jinv20
+	_jacobianInvQuad[iJ+5] =  _jacobianQuad[i01] / d12; // Jinv21
 	
       } else if (fabs(d02) > _minJacobian) {
 	// Jinv20 = 1/d02 -J10
 	// Jinv21 = 1/d02 J00
-	_jacobianInv[iJ+4] = -_jacobian[i10] / d02; // Jinv20
-	_jacobianInv[iJ+5] = _jacobian[i00] / d02; // Jinv21
+	_jacobianInvQuad[iJ+4] = -_jacobianQuad[i10] / d02; // Jinv20
+	_jacobianInvQuad[iJ+5] =  _jacobianQuad[i00] / d02; // Jinv21
       } else {
-	_jacobianInv[iJ+4] = 0.0; // Jinv20
-	_jacobianInv[iJ+5] = 0.0; // Jinv21
+	_jacobianInvQuad[iJ+4] = 0.0; // Jinv20
+	_jacobianInvQuad[iJ+5] = 0.0; // Jinv21
       } // if/else
     } else if (fabs(d02) > _minJacobian) {
       // Jinv00 = 1/d02 * J12
       // Jinv01 = 1/d02 * -J02
       // Jinv20 = 1/d02 * -J10
       // Jinv21 = 1/d02 * J00
-      _jacobianInv[iJ+0] = _jacobian[i12] / d02; // Jinv00
-      _jacobianInv[iJ+1] = -_jacobian[i02] / d02; // Jinv01
-      _jacobianInv[iJ+4] = -_jacobian[i10] / d02; // Jinv20
-      _jacobianInv[iJ+5] = _jacobian[i00] / d02; // Jinv21
+      _jacobianInvQuad[iJ+0] =  _jacobianQuad[i12] / d02; // Jinv00
+      _jacobianInvQuad[iJ+1] = -_jacobianQuad[i02] / d02; // Jinv01
+      _jacobianInvQuad[iJ+4] = -_jacobianQuad[i10] / d02; // Jinv20
+      _jacobianInvQuad[iJ+5] =  _jacobianQuad[i00] / d02; // Jinv21
       if (fabs(d12) > _minJacobian) {
 	// Jinv10 = 1/d12 J12
 	// Jinv11 = 1/d12 -J02
-	_jacobianInv[iJ+2] = -_jacobian[i12] / d12; // Jinv10
-	_jacobianInv[iJ+3] = _jacobian[i02] / d12; // Jinv11
+	_jacobianInvQuad[iJ+2] = -_jacobianQuad[i12] / d12; // Jinv10
+	_jacobianInvQuad[iJ+3] =  _jacobianQuad[i02] / d12; // Jinv11
       } else {
-	_jacobianInv[iJ+2] = 0.0; // Jinv10
-	_jacobianInv[iJ+3] = 0.0; // Jinv11
+	_jacobianInvQuad[iJ+2] = 0.0; // Jinv10
+	_jacobianInvQuad[iJ+3] = 0.0; // Jinv11
       } // if/else
     } else if (fabs(d12) > _minJacobian) {
-      _jacobianInv[iJ+0] = 0.0; // Jinv00
-      _jacobianInv[iJ+1] = 0.0; // Jinv01
+      _jacobianInvQuad[iJ+0] = 0.0; // Jinv00
+      _jacobianInvQuad[iJ+1] = 0.0; // Jinv01
       // Jinv10 = 1/d12 J12
       // Jinv11 = 1/d12 -J02
       // Jinv20 = 1/d12 -J11
       // Jinv21 = 1/d12 J01
-      _jacobianInv[iJ+2] = _jacobian[i12] / d12; // Jinv10
-      _jacobianInv[iJ+3] = -_jacobian[i02] / d12; // Jin11
-      _jacobianInv[iJ+4] = -_jacobian[i11] / d12; // Jinv20
-      _jacobianInv[iJ+5] = _jacobian[i01] / d12; // Jinv21
+      _jacobianInvQuad[iJ+2] =  _jacobianQuad[i12] / d12; // Jinv10
+      _jacobianInvQuad[iJ+3] = -_jacobianQuad[i02] / d12; // Jin11
+      _jacobianInvQuad[iJ+4] = -_jacobianQuad[i11] / d12; // Jinv20
+      _jacobianInvQuad[iJ+5] =  _jacobianQuad[i01] / d12; // Jinv21
     } else
       throw std::runtime_error("Could not invert Jacobian.");
   } // for
-} // computeGeometry
+} // computeGeometryQuad
 
 
 // End of file 

Modified: short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2Din3D.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2Din3D.hh	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2Din3D.hh	2007-04-27 20:27:03 UTC (rev 6715)
@@ -44,15 +44,26 @@
   /// Create a copy of this object.
   Quadrature* clone(void) const;
 
-  /** Compute geometric quantities for a cell.
+  /** Compute geometric quantities for a cell at vertices.
    *
+   * @param mesh Finite-element mesh
    * @param coordinates Section containing vertex coordinates
    * @param cell Finite-element cell
    */
-  void computeGeometry(const ALE::Obj<Mesh>& mesh,
-		       const ALE::Obj<real_section_type>& coordinates,
-		       const Mesh::point_type& cell);
+  void computeGeometryVert(const ALE::Obj<Mesh>& mesh,
+			   const ALE::Obj<real_section_type>& coordinates,
+			   const Mesh::point_type& cell);
 
+  /** Compute geometric quantities for a cell at quadrature points.
+   *
+   * @param mesh Finite-element mesh
+   * @param coordinates Section containing vertex coordinates
+   * @param cell Finite-element cell
+   */
+  void computeGeometryQuad(const ALE::Obj<Mesh>& mesh,
+			   const ALE::Obj<real_section_type>& coordinates,
+			   const Mesh::point_type& cell);
+
 // PROTECTED METHODS ////////////////////////////////////////////////////
 protected :
 

Modified: short/3D/PyLith/trunk/libsrc/feassemble/Quadrature3D.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Quadrature3D.cc	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Quadrature3D.cc	2007-04-27 20:27:03 UTC (rev 6715)
@@ -36,13 +36,13 @@
 } // copy constructor
 
 // ----------------------------------------------------------------------
-// Compute geometric quantities for a cell.
+// Compute geometric quantities for a cell at vertices.
 void
-pylith::feassemble::Quadrature3D::computeGeometry(
+pylith::feassemble::Quadrature3D::computeGeometryVert(
 		       const ALE::Obj<Mesh>& mesh,
 		       const ALE::Obj<real_section_type>& coordinates,
 		       const Mesh::point_type& cell)
-{ // computeGeometry
+{ // computeGeometryVert
   assert(3 == _cellDim);
   assert(3 == _spaceDim);
 
@@ -51,9 +51,78 @@
   // Get coordinates of cell's vertices
   const real_section_type::value_type* vertCoords = 
     mesh->restrict(coordinates, cell);
-  //assert(3 == coordinates->getFiberDimensionByDepth(patch,
-  //*vertices->begin(), 0));
+  assert(3 == coordinates->getFiberDimension(*mesh->depthStratum(0)->begin()));
 
+  // Loop over vertices
+  const int numVertices = _numBasis;
+  for (int iVertex=0; iVertex < numVertices; ++iVertex) {
+    // Compute Jacobian at vertex
+    // J = [dx/dp dy/dp dz/dp]
+    //     [dx/dq dy/dq dz/dq]
+    //     [dx/dr dy/dr dz/dr]
+    // dx/dp = sum[i=0,n-1] (dNi/dp * xi)
+    // dy/dp = sum[i=0,n-1] (dNi/dp * yi)
+    // dz/dp = sum[i=0,n-1] (dNi/dp * zi)
+    // dx/dq = sum[i=0,n-1] (dNi/dq * xi)
+    // dy/dq = sum[i=0,n-1] (dNi/dq * yi)
+    // dz/dq = sum[i=0,n-1] (dNi/dq * zi)
+    // dx/dr = sum[i=0,n-1] (dNi/dr * xi)
+    // dy/dr = sum[i=0,n-1] (dNi/dr * yi)
+    // dz/dr = sum[i=0,n-1] (dNi/dr * zi)
+    for (int iBasis=0; iBasis < _numBasis; ++iBasis)
+      for (int iRow=0; iRow < _cellDim; ++iRow) {
+	const double deriv = 
+	  _basisDerivVert[iVertex*_numBasis*_spaceDim+iBasis*_cellDim+iRow];
+	for (int iCol=0; iCol < _spaceDim; ++iCol)
+	  _jacobianVert[iVertex*_cellDim*_spaceDim+iRow*_spaceDim+iCol] += 
+	    deriv * vertCoords[iBasis*_spaceDim+iCol];
+      } // for
+
+    // Compute determinant of Jacobian at vertex
+    // |J| = j00*(j11*j22-j12*j21) +
+    //      -j01*(j10*j22-j12*j20) +
+    //       j02*(j10*j21-j11*j20)
+    const int iJ = iVertex*_cellDim*_spaceDim;
+    const int i00 = iJ + 0*_spaceDim + 0;
+    const int i01 = iJ + 0*_spaceDim + 1;
+    const int i02 = iJ + 0*_spaceDim + 2;
+    const int i10 = iJ + 1*_spaceDim + 0;
+    const int i11 = iJ + 1*_spaceDim + 1;
+    const int i12 = iJ + 1*_spaceDim + 2;
+    const int i20 = iJ + 2*_spaceDim + 0;
+    const int i21 = iJ + 2*_spaceDim + 1;
+    const int i22 = iJ + 2*_spaceDim + 2;
+    const double det = 
+      _jacobianVert[i00]*(_jacobianVert[i11]*_jacobianVert[i22] -
+		      _jacobianVert[i12]*_jacobianVert[i21]) -
+      _jacobianVert[i01]*(_jacobianVert[i10]*_jacobianVert[i22] -
+		      _jacobianVert[i12]*_jacobianVert[i20]) +
+      _jacobianVert[i02]*(_jacobianVert[i10]*_jacobianVert[i21] -
+		      _jacobianVert[i11]*_jacobianVert[i20]);
+    _checkJacobianDet(det);
+    _jacobianDetVert[iVertex] = det;
+  } // for
+    
+} // computeGeometryVert
+
+// ----------------------------------------------------------------------
+// Compute geometric quantities for a cell at quadrature points.
+void
+pylith::feassemble::Quadrature3D::computeGeometryQuad(
+		       const ALE::Obj<Mesh>& mesh,
+		       const ALE::Obj<real_section_type>& coordinates,
+		       const Mesh::point_type& cell)
+{ // computeGeometryQuad
+  assert(3 == _cellDim);
+  assert(3 == _spaceDim);
+
+  _resetGeometry();
+
+  // Get coordinates of cell's vertices
+  const real_section_type::value_type* vertCoords = 
+    mesh->restrict(coordinates, cell);
+  assert(3 == coordinates->getFiberDimension(*mesh->depthStratum(0)->begin()));
+
   // Loop over quadrature points
   for (int iQuadPt=0; iQuadPt < _numQuadPts; ++iQuadPt) {
     
@@ -62,7 +131,7 @@
     // y = sum[i=0,n-1] (Ni * yi)
     // z = sum[i=0,n-1] (Ni * zi)
     for (int iBasis=0; iBasis < _numBasis; ++iBasis) {
-      const double basis = _basis[iQuadPt*_numBasis+iBasis];
+      const double basis = _basisQuad[iQuadPt*_numBasis+iBasis];
       for (int iDim=0; iDim < _spaceDim; ++iDim)
 	_quadPts[iQuadPt*_spaceDim+iDim] += 
 	  basis * vertCoords[iBasis*_spaceDim+iDim];
@@ -84,9 +153,9 @@
     for (int iBasis=0; iBasis < _numBasis; ++iBasis)
       for (int iRow=0; iRow < _cellDim; ++iRow) {
 	const double deriv = 
-	  _basisDeriv[iQuadPt*_numBasis*_spaceDim+iBasis*_cellDim+iRow];
+	  _basisDerivQuad[iQuadPt*_numBasis*_spaceDim+iBasis*_cellDim+iRow];
 	for (int iCol=0; iCol < _spaceDim; ++iCol)
-	  _jacobian[iQuadPt*_cellDim*_spaceDim+iRow*_spaceDim+iCol] += 
+	  _jacobianQuad[iQuadPt*_cellDim*_spaceDim+iRow*_spaceDim+iCol] += 
 	    deriv * vertCoords[iBasis*_spaceDim+iCol];
       } // for
 
@@ -105,36 +174,36 @@
     const int i21 = iJ + 2*_spaceDim + 1;
     const int i22 = iJ + 2*_spaceDim + 2;
     const double det = 
-      _jacobian[i00]*(_jacobian[i11]*_jacobian[i22] -
-		      _jacobian[i12]*_jacobian[i21]) -
-      _jacobian[i01]*(_jacobian[i10]*_jacobian[i22] -
-		      _jacobian[i12]*_jacobian[i20]) +
-      _jacobian[i02]*(_jacobian[i10]*_jacobian[i21] -
-		      _jacobian[i11]*_jacobian[i20]);
+      _jacobianQuad[i00]*(_jacobianQuad[i11]*_jacobianQuad[i22] -
+		      _jacobianQuad[i12]*_jacobianQuad[i21]) -
+      _jacobianQuad[i01]*(_jacobianQuad[i10]*_jacobianQuad[i22] -
+		      _jacobianQuad[i12]*_jacobianQuad[i20]) +
+      _jacobianQuad[i02]*(_jacobianQuad[i10]*_jacobianQuad[i21] -
+		      _jacobianQuad[i11]*_jacobianQuad[i20]);
     _checkJacobianDet(det);
-    _jacobianDet[iQuadPt] = det;
+    _jacobianDetQuad[iQuadPt] = det;
     
     // Compute inverse of Jacobian at quadrature point
-    _jacobianInv[i00] = (_jacobian[i11]*_jacobian[i22] -
-			 _jacobian[i12]*_jacobian[i21]) / det;
-    _jacobianInv[i01] = (_jacobian[i02]*_jacobian[i21] -
-			 _jacobian[i01]*_jacobian[i22]) / det;
-    _jacobianInv[i02] = (_jacobian[i01]*_jacobian[i12] -
-			 _jacobian[i02]*_jacobian[i11]) / det;
-    _jacobianInv[i10] = (_jacobian[i12]*_jacobian[i20] -
-			 _jacobian[i10]*_jacobian[i22]) / det;
-    _jacobianInv[i11] = (_jacobian[i00]*_jacobian[i22] -
-			 _jacobian[i02]*_jacobian[i20]) / det;
-    _jacobianInv[i12] = (_jacobian[i02]*_jacobian[i10] -
-			 _jacobian[i00]*_jacobian[i12]) / det;
-    _jacobianInv[i20] = (_jacobian[i10]*_jacobian[i21] -
-			 _jacobian[i11]*_jacobian[i20]) / det;
-    _jacobianInv[i21] = (_jacobian[i01]*_jacobian[i20] -
-			 _jacobian[i00]*_jacobian[i21]) / det;
-    _jacobianInv[i22] = (_jacobian[i00]*_jacobian[i11] -
-			 _jacobian[i01]*_jacobian[i10]) / det;
+    _jacobianInvQuad[i00] = (_jacobianQuad[i11]*_jacobianQuad[i22] -
+			 _jacobianQuad[i12]*_jacobianQuad[i21]) / det;
+    _jacobianInvQuad[i01] = (_jacobianQuad[i02]*_jacobianQuad[i21] -
+			 _jacobianQuad[i01]*_jacobianQuad[i22]) / det;
+    _jacobianInvQuad[i02] = (_jacobianQuad[i01]*_jacobianQuad[i12] -
+			 _jacobianQuad[i02]*_jacobianQuad[i11]) / det;
+    _jacobianInvQuad[i10] = (_jacobianQuad[i12]*_jacobianQuad[i20] -
+			 _jacobianQuad[i10]*_jacobianQuad[i22]) / det;
+    _jacobianInvQuad[i11] = (_jacobianQuad[i00]*_jacobianQuad[i22] -
+			 _jacobianQuad[i02]*_jacobianQuad[i20]) / det;
+    _jacobianInvQuad[i12] = (_jacobianQuad[i02]*_jacobianQuad[i10] -
+			 _jacobianQuad[i00]*_jacobianQuad[i12]) / det;
+    _jacobianInvQuad[i20] = (_jacobianQuad[i10]*_jacobianQuad[i21] -
+			 _jacobianQuad[i11]*_jacobianQuad[i20]) / det;
+    _jacobianInvQuad[i21] = (_jacobianQuad[i01]*_jacobianQuad[i20] -
+			 _jacobianQuad[i00]*_jacobianQuad[i21]) / det;
+    _jacobianInvQuad[i22] = (_jacobianQuad[i00]*_jacobianQuad[i11] -
+			 _jacobianQuad[i01]*_jacobianQuad[i10]) / det;
   } // for
-} // computeGeometry
+} // computeGeometryQuad
 
 
 // End of file 

Modified: short/3D/PyLith/trunk/libsrc/feassemble/Quadrature3D.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Quadrature3D.hh	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Quadrature3D.hh	2007-04-27 20:27:03 UTC (rev 6715)
@@ -44,15 +44,26 @@
   /// Create a copy of this object.
   Quadrature* clone(void) const;
 
-  /** Compute geometric quantities for a cell.
+  /** Compute geometric quantities for a cell at vertices.
    *
+   * @param mesh Finite-element mesh
    * @param coordinates Section containing vertex coordinates
    * @param cell Finite-element cell
    */
-  void computeGeometry(const ALE::Obj<Mesh>& mesh,
-		       const ALE::Obj<real_section_type>& coordinates,
-		       const Mesh::point_type& cell);
+  void computeGeometryVert(const ALE::Obj<Mesh>& mesh,
+			   const ALE::Obj<real_section_type>& coordinates,
+			   const Mesh::point_type& cell);
 
+  /** Compute geometric quantities for a cell at quadrature points.
+   *
+   * @param mesh Finite-element mesh
+   * @param coordinates Section containing vertex coordinates
+   * @param cell Finite-element cell
+   */
+  void computeGeometryQuad(const ALE::Obj<Mesh>& mesh,
+			   const ALE::Obj<real_section_type>& coordinates,
+			   const Mesh::point_type& cell);
+
 // PROTECTED METHODS ////////////////////////////////////////////////////
 protected :
 

Modified: short/3D/PyLith/trunk/libsrc/materials/Material.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/Material.cc	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/libsrc/materials/Material.cc	2007-04-27 20:27:03 UTC (rev 6715)
@@ -119,7 +119,7 @@
        cellIter != cellsEnd;
        ++cellIter) {
     // Compute geometry information for current cell
-    quadrature->computeGeometry(mesh, coordinates, *cellIter);
+    quadrature->computeGeometryQuad(mesh, coordinates, *cellIter);
 
     const double_array& quadPts = quadrature->quadPts();
     const int spaceDim = quadrature->spaceDim();

Modified: short/3D/PyLith/trunk/modulesrc/feassemble/feassemble.pyxe.src
===================================================================
--- short/3D/PyLith/trunk/modulesrc/feassemble/feassemble.pyxe.src	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/modulesrc/feassemble/feassemble.pyxe.src	2007-04-27 20:27:03 UTC (rev 6715)
@@ -88,28 +88,35 @@
     return
 
 
-  def initialize(self, basis, basisDeriv, quadPts, quadWts,
-                 cellDim, numCorners, numQuadPts, spaceDim):
+  def initialize(self,
+                 basisVert, basisDerivVert,
+                 basisQuad, basisDerivQuad,
+                 quadPts, quadWts,
+                 cellDim, numBasis, numQuadPts, spaceDim):
     """
     Set basis functions and their derivatives, and coordinates and
     weights of quadrature points.
 
-    @param basis Basis functions evaluated at the quadrature points
-    @param basisDeriv Basis function derivatives evaluated at quad pts
+    @param basisVert Basis functions evaluated at the vertices
+    @param basisDerivVert Basis function derivatives evaluated at vertices
+    @param basisQuad Basis functions evaluated at the quadrature points
+    @param basisDerivQuad Basis function derivatives evaluated at quad pts
     @param quadPts Coordinates of quadrature points in reference cell
     @param quadWts Weights of quadrature points
     @param cellDim Dimension of reference cell
-    @param numCorners Number of vertices in reference cell
+    @param numBasis Number of vertices in reference cell
     @param numQuadPts Number of quadrature points
     @param spaceDim Number of dimensions associated with cell vertices
     """
     # create shim for method 'initialize'
-    #embed{ void Quadrature_initialize(void* objVptr, double* basis, double* basisDeriv, double* quadPts, double* quadWts, int cellDim, int numCorners, int numQuadPts, int spaceDim)
+    #embed{ void Quadrature_initialize(void* objVptr, double* basisVert, double* basisDerivVert, double* basisQuad, double* basisDerivQuad, double* quadPts, double* quadWts, int cellDim, int numBasis, int numQuadPts, int spaceDim)
     try {
-      ((pylith::feassemble::Quadrature*) objVptr)->initialize(basis, basisDeriv,
-                                                           quadPts, quadWts,
-                                                           cellDim, numCorners,
-                                                           numQuadPts, spaceDim);
+      ((pylith::feassemble::Quadrature*) objVptr)->initialize(
+                                         basisVert, basisDerivVert,
+                                         basisQuad, basisDerivQuad,
+                                         quadPts, quadWts,
+                                         cellDim, numBasis,
+                                         numQuadPts, spaceDim);
     } catch (const std::exception& err) {
       PyErr_SetString(PyExc_RuntimeError,
                       const_cast<char*>(err.what()));
@@ -121,31 +128,58 @@
 
     import spatialdata.utils.simplearray
 
-    # basis
-    basis = spatialdata.utils.simplearray.objAsSimpleArray(basis)
-    if not basis.isCompatible(nd=2, simpletype="double",
-                              contiguous=True, notswapped=True):
+    numVertices = numBasis
+
+    # basisVert
+    basisVert = spatialdata.utils.simplearray.objAsSimpleArray(basisVert)
+    if not basisVert.isCompatible(nd=2, simpletype="double",
+                                  contiguous=True, notswapped=True):
       raise TypeError, \
-            "Argument 'basis' must be a contiguous, 2-D array " \
+            "Argument 'basisVert' must be a contiguous, 2-D array " \
             "of type double."
-    if numQuadPts != basis.shape[0] or numCorners != basis.shape[1]:
+    if numVertices != basisVert.shape[0] or numBasis != basisVert.shape[1]:
       raise TypeError, \
-            "Shape of argument 'basis' must be (numQuadPts, numCorners)."
+            "Shape of argument 'basisVert' must be (numVertices, numBasis)."
 
-    # basisDeriv
-    basisDeriv = spatialdata.utils.simplearray.objAsSimpleArray(basisDeriv)
-    if not basisDeriv.isCompatible(nd=3, simpletype="double",
-                                   contiguous=True, notswapped=True):
+    # basisDerivVert
+    basisDerivVert = spatialdata.utils.simplearray.objAsSimpleArray(basisDerivVert)
+    if not basisDerivVert.isCompatible(nd=3, simpletype="double",
+                                       contiguous=True, notswapped=True):
       raise TypeError, \
-            "Argument 'basisDeriv' must be a contiguous, 3-D array " \
+            "Argument 'basisDerivVert' must be a contiguous, 3-D array " \
             "of type double."
-    if numQuadPts != basisDeriv.shape[0] or \
-           numCorners != basisDeriv.shape[1] or \
-           cellDim != basisDeriv.shape[2]:
+    if numVertices != basisDerivVert.shape[0] or \
+           numBasis != basisDerivVert.shape[1] or \
+           cellDim != basisDerivVert.shape[2]:
       raise TypeError, \
-            "Shape of argument 'basisDeriv' must be (numQuadPts, " \
-            "numCorners, cellDim)."
+            "Shape of argument 'basisDerivVert' must be (numVertices, " \
+            "numBasis, cellDim)."
 
+    # basisQuad
+    basisQuad = spatialdata.utils.simplearray.objAsSimpleArray(basisQuad)
+    if not basisQuad.isCompatible(nd=2, simpletype="double",
+                                  contiguous=True, notswapped=True):
+      raise TypeError, \
+            "Argument 'basisQuad' must be a contiguous, 2-D array " \
+            "of type double."
+    if numQuadPts != basisQuad.shape[0] or numBasis != basisQuad.shape[1]:
+      raise TypeError, \
+            "Shape of argument 'basisQuad' must be (numQuadPts, numBasis)."
+
+    # basisDerivQuad
+    basisDerivQuad = spatialdata.utils.simplearray.objAsSimpleArray(basisDerivQuad)
+    if not basisDerivQuad.isCompatible(nd=3, simpletype="double",
+                                       contiguous=True, notswapped=True):
+      raise TypeError, \
+            "Argument 'basisDerivQuad' must be a contiguous, 3-D array " \
+            "of type double."
+    if numQuadPts != basisDerivQuad.shape[0] or \
+           numBasis != basisDerivQuad.shape[1] or \
+           cellDim != basisDerivQuad.shape[2]:
+      raise TypeError, \
+            "Shape of argument 'basisDerivQuad' must be (numQuadPts, " \
+            "numBasis, cellDim)."
+
     # quadPts
     quadPts = spatialdata.utils.simplearray.objAsSimpleArray(quadPts)
     if not quadPts.isCompatible(nd=2, simpletype="double",
@@ -168,18 +202,24 @@
       raise TypeError, \
             "Shape of argument 'quadWts' must be (numQuadPts)."
 
-    cdef double* basisCpp
-    cdef double* basisDerivCpp
+    cdef double* basisCppVert
+    cdef double* basisDerivCppVert
+    cdef double* basisCppQuad
+    cdef double* basisDerivCppQuad
     cdef double* quadPtsCpp
     cdef double* quadWtsCpp
-    basisCpp = <double*> PyCObject_AsVoidPtr(basis.data)
-    basisDerivCpp = <double*> PyCObject_AsVoidPtr(basisDeriv.data)
+    basisCppVert = <double*> PyCObject_AsVoidPtr(basisVert.data)
+    basisDerivCppVert = <double*> PyCObject_AsVoidPtr(basisDerivVert.data)
+    basisCppQuad = <double*> PyCObject_AsVoidPtr(basisQuad.data)
+    basisDerivCppQuad = <double*> PyCObject_AsVoidPtr(basisDerivQuad.data)
     quadPtsCpp = <double*> PyCObject_AsVoidPtr(quadPts.data)
     quadWtsCpp = <double*> PyCObject_AsVoidPtr(quadWts.data)
 
-    Quadrature_initialize(self.thisptr, basisCpp, basisDerivCpp,
+    Quadrature_initialize(self.thisptr,
+                          basisCppVert, basisDerivCppVert,
+                          basisCppQuad, basisDerivCppQuad,
                           quadPtsCpp, quadWtsCpp,
-                          cellDim, numCorners,
+                          cellDim, numBasis,
                           numQuadPts, spaceDim)
     return
 

Modified: short/3D/PyLith/trunk/pylith/feassemble/FIATCell.py
===================================================================
--- short/3D/PyLith/trunk/pylith/feassemble/FIATCell.py	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/pylith/feassemble/FIATCell.py	2007-04-27 20:27:03 UTC (rev 6715)
@@ -46,34 +46,53 @@
     """
     quadrature = self._setupQuadrature()
     basisFns = self._setupBasisFns()
+    vertices = self._setupVertices()
+    print "VERTICES:",vertices
     
+    # Evaluate basis functions at vertices
+    basis = numpy.array(basisFns.tabulate(vertices)).transpose()
+    self.basisVert = numpy.reshape(basis.flatten(), basis.shape)
+    print "BASIS VERT:",self.basisVert
+
+    # Evaluate derivatives of basis functions at vertices
+    import FIAT.shapes
+    dim = FIAT.shapes.dimension(basisFns.base.shape)
+    basisDeriv = numpy.array([basisFns.deriv_all(d).tabulate(vertices) \
+                              for d in range(dim)]).transpose()
+    self.basisDerivVert = numpy.reshape(basisDeriv.flatten(), basisDeriv.shape)
+
     # Evaluate basis functions at quadrature points
     quadpts = quadrature.get_points()
     basis = numpy.array(basisFns.tabulate(quadpts)).transpose()
-    self.basis = numpy.reshape(basis.flatten(), basis.shape)
+    self.basisQuad = numpy.reshape(basis.flatten(), basis.shape)
 
     # Evaluate derivatives of basis functions at quadrature points
     import FIAT.shapes
     dim = FIAT.shapes.dimension(basisFns.base.shape)
     basisDeriv = numpy.array([basisFns.deriv_all(d).tabulate(quadpts) \
                               for d in range(dim)]).transpose()
-    self.basisDeriv = numpy.reshape(basisDeriv.flatten(), basisDeriv.shape)
+    self.basisDerivQuad = numpy.reshape(basisDeriv.flatten(), basisDeriv.shape)
 
     self.quadPts = numpy.array(quadrature.get_points())
     self.quadWts = numpy.array(quadrature.get_weights())
 
     self.cellDim = dim
-    self.numCorners = self.basis.shape[1]
+    self.numCorners = self.basisVert.shape[1]
     self.numQuadPts = len(quadrature.get_weights())
 
-    self._info.line("Basis:")
-    self._info.line(self.basis)
-    self._info.line("Basis derivatives:")
-    self._info.line(self.basisDeriv)
+    self._info.line("Basis (vertices):")
+    self._info.line(self.basisVert)
+    self._info.line("Basis derivatives (vertices):")
+    self._info.line(self.basisDerivVert)
+    self._info.line("Basis (quad pts):")
+    self._info.line(self.basisQuad)
+    self._info.line("Basis derivatives (quad pts):")
+    self._info.line(self.basisDerivQuad)
     self._info.line("Quad pts:")
     self._info.line(quadrature.get_points())
     self._info.line("Quad wts:")
     self._info.line(quadrature.get_weights())
+
     self._info.log()
 
     return
@@ -97,4 +116,12 @@
     return
 
 
+  def _setupVertices(self):
+    """
+    Setup vertices for reference cell.
+    """
+    raise NotImplementedError()
+    return
+
+
 # End of file 

Modified: short/3D/PyLith/trunk/pylith/feassemble/FIATSimplex.py
===================================================================
--- short/3D/PyLith/trunk/pylith/feassemble/FIATSimplex.py	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/pylith/feassemble/FIATSimplex.py	2007-04-27 20:27:03 UTC (rev 6715)
@@ -108,6 +108,14 @@
     return Lagrange(self._getShape(), self.degree).function_space()
 
 
+  def _setupVertices(self):
+    """
+    Setup vertices for reference cell.
+    """
+    import FIAT.shapes
+    return FIAT.shapes.vertices[self._getShape()].values()
+
+
   def _getShape(self):
     """
     Parse string into FIAT shape.

Deleted: short/3D/PyLith/trunk/pylith/feassemble/Field.py
===================================================================
--- short/3D/PyLith/trunk/pylith/feassemble/Field.py	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/pylith/feassemble/Field.py	2007-04-27 20:27:03 UTC (rev 6715)
@@ -1,70 +0,0 @@
-#!/usr/bin/env python
-#
-# ----------------------------------------------------------------------
-#
-#                           Brad T. Aagaard
-#                        U.S. Geological Survey
-#
-# <LicenseText>
-#
-# ----------------------------------------------------------------------
-#
-
-## @file pylith/feassemble/Field.py
-
-## @brief Python PyLith field.
-
-from pyre.components.Component import Component
-
-# Field class
-class Field(Component):
-  """
-  Python PyLith field.
-  """
-
-  # INVENTORY //////////////////////////////////////////////////////////
-
-  class Inventory(Component.Inventory):
-    """
-    Python object for managing Field facilities and properties.
-    """
-
-    ## @class Inventory
-    ## Python object for managing Field facilities and properties.
-    ##
-    ## \b Properties
-    ## @li None
-    ##
-    ## \b Facilities
-    ## @li None
-
-    import pyre.inventory
-
-  # PUBLIC METHODS /////////////////////////////////////////////////////
-
-  def initialize(self):
-    """
-    """
-    return
-
-
-  def __init__(self, name="field"):
-    """
-    Constructor.
-    """
-    Component.__init__(self, name, facility="field")
-    self.sieveField = None
-    return
-
-
-  # PRIVATE METHODS /////////////////////////////////////////////////////
-
-
-  def _configure(self):
-    """
-    Set members based using inventory.
-    """
-    return
-  
-
-# End of file 

Modified: short/3D/PyLith/trunk/pylith/feassemble/ReferenceCell.py
===================================================================
--- short/3D/PyLith/trunk/pylith/feassemble/ReferenceCell.py	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/pylith/feassemble/ReferenceCell.py	2007-04-27 20:27:03 UTC (rev 6715)
@@ -36,8 +36,11 @@
     """
     Component.__init__(self, name, facility="reference_cell")
 
-    self.basis = None # numpy array w/basis fns at quad pts
-    self.basisDeriv = None # numpy array w/basis fn derivs at quad pts
+    self.basisVert = None # numpy array w/basis fns at vertices
+    self.basisDerivVert = None # numpy array w/basis fn derivs at vertices
+    self.basisQuad = None # numpy array w/basis fns at quad pts
+    self.basisDerivQuad = None # numpy array w/basis fn derivs at quad pts
+
     self.quadPts = None # numpy array w/coordinates of quad pts
     self.quadWts = None # numpy array w/wts of quad pts
 

Modified: short/3D/PyLith/trunk/pylith/feassemble/quadrature/Quadrature.py
===================================================================
--- short/3D/PyLith/trunk/pylith/feassemble/quadrature/Quadrature.py	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/pylith/feassemble/quadrature/Quadrature.py	2007-04-27 20:27:03 UTC (rev 6715)
@@ -87,7 +87,9 @@
 
 
     self._info.log("Initializing C++ quadrature.")
-    self.cppHandle.initialize(c.basis, c.basisDeriv, c.quadPts, c.quadWts,
+    self.cppHandle.initialize(c.basisVert, c.basisDerivVert,
+                              c.basisQuad, c.basisDerivQuad,
+                              c.quadPts, c.quadWts,
                               c.cellDim, c.numCorners, c.numQuadPts,
                               self.spaceDim)
     return

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature.cc	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature.cc	2007-04-27 20:27:03 UTC (rev 6715)
@@ -31,14 +31,14 @@
   const int numBasisE = 2;
   const int numQuadPtsE = 1;
   const int spaceDimE = 1;
-  const double basisE[] = { 0.2, 0.4 };
-  const double basisDerivE[] = { 0.8, 1.6 };
+  const double basisQuadE[] = { 0.2, 0.4 };
+  const double basisDerivQuadE[] = { 0.8, 1.6 };
   const double quadPtsRefE[] = { 3.2 };
   const double quadWtsE[] = { 6.4 };
   const double quadPtsE[] = { 12.8 };
-  const double jacobianE[] = { 2.56 };
-  const double jacobianInvE[] = { 5.12 };
-  const double jacobianDetE[] = { 10.24 };
+  const double jacobianQuadE[] = { 2.56 };
+  const double jacobianInvQuadE[] = { 5.12 };
+  const double jacobianDetQuadE[] = { 10.24 };
 
   // Set values
   Quadrature1D qOrig;
@@ -49,12 +49,12 @@
   qOrig._spaceDim = spaceDimE;
 
   size_t size = 2;
-  qOrig._basis.resize(size);
-  memcpy(&qOrig._basis[0], basisE, size*sizeof(double));
+  qOrig._basisQuad.resize(size);
+  memcpy(&qOrig._basisQuad[0], basisQuadE, size*sizeof(double));
   
   size = 2;
-  qOrig._basisDeriv.resize(size);
-  memcpy(&qOrig._basisDeriv[0], basisDerivE, size*sizeof(double));
+  qOrig._basisDerivQuad.resize(size);
+  memcpy(&qOrig._basisDerivQuad[0], basisDerivQuadE, size*sizeof(double));
 
   size = 1;
   qOrig._quadPtsRef.resize(size);
@@ -69,16 +69,16 @@
   memcpy(&qOrig._quadPts[0], quadPtsE, size*sizeof(double));
 
   size = 1;
-  qOrig._jacobian.resize(size);
-  memcpy(&qOrig._jacobian[0], jacobianE, size*sizeof(double));
+  qOrig._jacobianQuad.resize(size);
+  memcpy(&qOrig._jacobianQuad[0], jacobianQuadE, size*sizeof(double));
 
   size = 1;
-  qOrig._jacobianInv.resize(size);
-  memcpy(&qOrig._jacobianInv[0], jacobianInvE, size*sizeof(double));
+  qOrig._jacobianInvQuad.resize(size);
+  memcpy(&qOrig._jacobianInvQuad[0], jacobianInvQuadE, size*sizeof(double));
 
   size = 1;
-  qOrig._jacobianDet.resize(size);
-  memcpy(&qOrig._jacobianDet[0], jacobianDetE, size*sizeof(double));
+  qOrig._jacobianDetQuad.resize(size);
+  memcpy(&qOrig._jacobianDetQuad[0], jacobianDetQuadE, size*sizeof(double));
 
   // Clone
   const Quadrature* qCopy = qOrig.clone();
@@ -92,17 +92,17 @@
   CPPUNIT_ASSERT_EQUAL(numQuadPtsE, qCopy->numQuadPts());
   CPPUNIT_ASSERT_EQUAL(spaceDimE, qCopy->spaceDim());
 
-  const double_array& basis = qCopy->basis();
+  const double_array& basisQuad = qCopy->basisQuad();
   size = numBasisE * numQuadPtsE;
-  CPPUNIT_ASSERT_EQUAL(size, basis.size());
+  CPPUNIT_ASSERT_EQUAL(size, basisQuad.size());
   for (int i=0; i < size; ++i)
-    CPPUNIT_ASSERT_EQUAL(basisE[i], basis[i]);
+    CPPUNIT_ASSERT_EQUAL(basisQuadE[i], basisQuad[i]);
 
-  const double_array& basisDeriv = qCopy->basisDeriv();
+  const double_array& basisDerivQuad = qCopy->basisDerivQuad();
   size = numBasisE * numQuadPtsE * spaceDimE;
-  CPPUNIT_ASSERT_EQUAL(size, basisDeriv.size());
+  CPPUNIT_ASSERT_EQUAL(size, basisDerivQuad.size());
   for (int i=0; i < size; ++i)
-    CPPUNIT_ASSERT_EQUAL(basisDerivE[i], basisDeriv[i]);
+    CPPUNIT_ASSERT_EQUAL(basisDerivQuadE[i], basisDerivQuad[i]);
 
   const double_array& quadPtsRef = qCopy->_quadPtsRef;
   size = numQuadPtsE * cellDimE;
@@ -122,23 +122,23 @@
   for (int i=0; i < size; ++i)
     CPPUNIT_ASSERT_EQUAL(quadPtsE[i], quadPts[i]);
 
-  const double_array& jacobian = qCopy->_jacobian;
+  const double_array& jacobianQuad = qCopy->_jacobianQuad;
   size = 1;
-  CPPUNIT_ASSERT_EQUAL(size, jacobian.size());
+  CPPUNIT_ASSERT_EQUAL(size, jacobianQuad.size());
   for (int i=0; i < size; ++i)
-    CPPUNIT_ASSERT_EQUAL(jacobianE[i], jacobian[i]);
+    CPPUNIT_ASSERT_EQUAL(jacobianQuadE[i], jacobianQuad[i]);
 
-  const double_array& jacobianInv = qCopy->jacobianInv();
+  const double_array& jacobianInvQuad = qCopy->jacobianInvQuad();
   size = 1;
-  CPPUNIT_ASSERT_EQUAL(size, jacobianInv.size());
+  CPPUNIT_ASSERT_EQUAL(size, jacobianInvQuad.size());
   for (int i=0; i < size; ++i)
-    CPPUNIT_ASSERT_EQUAL(jacobianInvE[i], jacobianInvE[i]);
+    CPPUNIT_ASSERT_EQUAL(jacobianInvQuadE[i], jacobianInvQuad[i]);
 
-  const double_array& jacobianDet = qCopy->jacobianDet();
+  const double_array& jacobianDetQuad = qCopy->jacobianDetQuad();
   size = 1;
-  CPPUNIT_ASSERT_EQUAL(size, jacobianDet.size());
+  CPPUNIT_ASSERT_EQUAL(size, jacobianDetQuad.size());
   for (int i=0; i < size; ++i)
-    CPPUNIT_ASSERT_EQUAL(jacobianDetE[i], jacobianDet[i]);
+    CPPUNIT_ASSERT_EQUAL(jacobianDetQuadE[i], jacobianDetQuad[i]);
 
   delete qCopy; qCopy = 0;
 } // testCopy
@@ -164,14 +164,17 @@
   const int numBasis = 2;
   const int numQuadPts = 1;
   const int spaceDim = 1;
-  const double basis[] = { 0.5, 0.5 };
-  const double basisDeriv[] = { -0.5, 0.5 };
+  const double basisVert[] = { 0.5, 0.5, 0.3, 0.7 };
+  const double basisDerivVert[] = { -0.5, 0.5, -0.4, 0.7 };
+  const double basisQuad[] = { 0.5, 0.5 };
+  const double basisDerivQuad[] = { -0.5, 0.5 };
   const double quadPtsRef[] = { 0.0 };
   const double quadWts[] = { 2.0 };
   const double minJacobian = 1.0;
 
   Quadrature1D q;
-  q.initialize(basis, basisDeriv, quadPtsRef, quadWts,
+  q.initialize(basisVert, basisDerivVert, 
+	       basisQuad, basisDerivQuad, quadPtsRef, quadWts,
 	       cellDim, numBasis, numQuadPts, spaceDim);
   
   CPPUNIT_ASSERT_EQUAL(cellDim, q._cellDim);
@@ -179,13 +182,23 @@
   CPPUNIT_ASSERT_EQUAL(numQuadPts, q._numQuadPts);
   CPPUNIT_ASSERT_EQUAL(spaceDim, q._spaceDim);
 
-  size_t size = numBasis * numQuadPts;
+  const int numVertices = numBasis;
+
+  size_t size = numBasis * numVertices;
   for (int i=0; i < size; ++i)
-    CPPUNIT_ASSERT_EQUAL(basis[i], q._basis[i]);
+    CPPUNIT_ASSERT_EQUAL(basisVert[i], q._basisVert[i]);
 
+  size = numBasis * numVertices * spaceDim;
+  for (int i=0; i < size; ++i)
+    CPPUNIT_ASSERT_EQUAL(basisDerivVert[i], q._basisDerivVert[i]);
+
+  size = numBasis * numQuadPts;
+  for (int i=0; i < size; ++i)
+    CPPUNIT_ASSERT_EQUAL(basisQuad[i], q._basisQuad[i]);
+
   size = numBasis * numQuadPts * spaceDim;
   for (int i=0; i < size; ++i)
-    CPPUNIT_ASSERT_EQUAL(basisDeriv[i], q._basisDeriv[i]);
+    CPPUNIT_ASSERT_EQUAL(basisDerivQuad[i], q._basisDerivQuad[i]);
 
   size = numQuadPts * cellDim;
   for (int i=0; i < size; ++i)
@@ -196,23 +209,98 @@
     CPPUNIT_ASSERT_EQUAL(quadWts[i], q._quadWts[i]);
 
   // Make sure Jacobian stuff has been allocated
+  size = numVertices*cellDim*spaceDim;
+  CPPUNIT_ASSERT_EQUAL(size, q._jacobianVert.size());
+  
+  size = numVertices;
+  CPPUNIT_ASSERT_EQUAL(size, q._jacobianDetVert.size());
+  
+  // Make sure Jacobian stuff has been allocated
   size = numQuadPts*cellDim*spaceDim;
-  CPPUNIT_ASSERT_EQUAL(size, q._jacobian.size());
+  CPPUNIT_ASSERT_EQUAL(size, q._jacobianQuad.size());
   
   size = numQuadPts*spaceDim*cellDim;
-  CPPUNIT_ASSERT_EQUAL(size, q._jacobianInv.size());
+  CPPUNIT_ASSERT_EQUAL(size, q._jacobianInvQuad.size());
   
   size = numQuadPts;
-  CPPUNIT_ASSERT_EQUAL(size, q._jacobianDet.size());
+  CPPUNIT_ASSERT_EQUAL(size, q._jacobianDetQuad.size());
   
   size = numQuadPts*spaceDim;
   CPPUNIT_ASSERT_EQUAL(size, q._quadPts.size());
 } // initialize
 
 // ----------------------------------------------------------------------
+// Test initialize() & computeGeometryVert()
+void
+pylith::feassemble::TestQuadrature::_testComputeGeometryVert(
+					    Quadrature* pQuad,
+					    const QuadratureData& data) const
+{ // testComputeGeometry
+  const int cellDim = data.cellDim;
+  const int numBasis = data.numBasis;
+  const int numQuadPts = data.numQuadPts;
+  const int spaceDim = data.spaceDim;
+  const double* basisVert = data.basisVert;
+  const double* basisDerivVert = data.basisDerivVert;
+  const double* basisQuad = data.basisQuad;
+  const double* basisDerivQuad = data.basisDerivQuad;
+  const double* quadPtsRef = data.quadPtsRef;
+  const double* quadWts = data.quadWts;
+
+  const int numVertices = data.numVertices;
+  const int numCells = data.numCells;
+  const double* vertCoords = data.vertices;
+  const int* cells = data.cells;
+  const double* quadPts = data.quadPts;
+  const double* jacobianVert = data.jacobianVert;
+  const double* jacobianDetVert = data.jacobianDetVert;
+
+  const double minJacobian = 1.0e-06;
+
+  pQuad->minJacobian(minJacobian);
+  pQuad->initialize(basisVert, basisDerivVert, 
+		    basisQuad, basisDerivQuad, quadPtsRef, quadWts,
+		    cellDim, numBasis, numQuadPts, spaceDim);
+
+  // Create mesh with test cell
+  typedef ALE::Mesh Mesh;
+  typedef ALE::Mesh::sieve_type sieve_type;
+  ALE::Obj<Mesh> mesh = new Mesh(PETSC_COMM_WORLD, cellDim);
+  ALE::Obj<sieve_type> sieve = new sieve_type(mesh->comm());
+
+  const bool interpolate = false;
+  ALE::SieveBuilder<Mesh>::buildTopology(sieve, cellDim, numCells,
+		     (int*) cells, numVertices, interpolate, numBasis);
+  mesh->setSieve(sieve);
+  mesh->stratify();
+  ALE::SieveBuilder<Mesh>::buildCoordinates(mesh, spaceDim, vertCoords);
+  
+  // Check values from computeGeometryVert()
+  const ALE::Obj<Mesh::label_sequence>& elements = mesh->heightStratum(0);
+  const Mesh::label_sequence::iterator e_iter = elements->begin(); 
+  const ALE::Obj<Mesh::real_section_type>& coordinates = 
+    mesh->getRealSection("coordinates");
+  pQuad->computeGeometryVert(mesh, coordinates, *e_iter);
+
+  CPPUNIT_ASSERT(1 == numCells);
+
+  const double tolerance = 1.0e-06;
+  int size = numVertices * cellDim * spaceDim;
+  for (int i=0; i < size; ++i)
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(jacobianVert[i], pQuad->_jacobianVert[i], 
+				 tolerance);
+
+  size = numVertices;
+  for (int i=0; i < size; ++i)
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(jacobianDetVert[i], 
+				 pQuad->_jacobianDetVert[i], 
+				 tolerance);
+} // testComputeGeometryVert
+
+// ----------------------------------------------------------------------
 // Test initialize() & computeGeometry()
 void
-pylith::feassemble::TestQuadrature::_testComputeGeometry(
+pylith::feassemble::TestQuadrature::_testComputeGeometryQuad(
 					    Quadrature* pQuad,
 					    const QuadratureData& data) const
 { // testComputeGeometry
@@ -220,8 +308,10 @@
   const int numBasis = data.numBasis;
   const int numQuadPts = data.numQuadPts;
   const int spaceDim = data.spaceDim;
-  const double* basis = data.basis;
-  const double* basisDeriv = data.basisDeriv;
+  const double* basisVert = data.basisVert;
+  const double* basisDerivVert = data.basisDerivVert;
+  const double* basisQuad = data.basisQuad;
+  const double* basisDerivQuad = data.basisDerivQuad;
   const double* quadPtsRef = data.quadPtsRef;
   const double* quadWts = data.quadWts;
 
@@ -230,14 +320,15 @@
   const double* vertCoords = data.vertices;
   const int* cells = data.cells;
   const double* quadPts = data.quadPts;
-  const double* jacobian = data.jacobian;
-  const double* jacobianInv = data.jacobianInv;
-  const double* jacobianDet = data.jacobianDet;
+  const double* jacobianQuad = data.jacobianQuad;
+  const double* jacobianInvQuad = data.jacobianInvQuad;
+  const double* jacobianDetQuad = data.jacobianDetQuad;
 
   const double minJacobian = 1.0e-06;
 
   pQuad->minJacobian(minJacobian);
-  pQuad->initialize(basis, basisDeriv, quadPtsRef, quadWts,
+  pQuad->initialize(basisVert, basisDerivVert, 
+		    basisQuad, basisDerivQuad, quadPtsRef, quadWts,
 		    cellDim, numBasis, numQuadPts, spaceDim);
 
   // Create mesh with test cell
@@ -258,7 +349,7 @@
   const Mesh::label_sequence::iterator e_iter = elements->begin(); 
   const ALE::Obj<Mesh::real_section_type>& coordinates = 
     mesh->getRealSection("coordinates");
-  pQuad->computeGeometry(mesh, coordinates, *e_iter);
+  pQuad->computeGeometryQuad(mesh, coordinates, *e_iter);
 
   CPPUNIT_ASSERT(1 == numCells);
 
@@ -269,17 +360,21 @@
 
   size = numQuadPts * cellDim * spaceDim;
   for (int i=0; i < size; ++i)
-    CPPUNIT_ASSERT_DOUBLES_EQUAL(jacobian[i], pQuad->_jacobian[i], tolerance);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(jacobianQuad[i], pQuad->_jacobianQuad[i], 
+				 tolerance);
 
   size = numQuadPts * spaceDim * cellDim;
   for (int i=0; i < size; ++i)
-    CPPUNIT_ASSERT_DOUBLES_EQUAL(jacobianInv[i], pQuad->_jacobianInv[i], 
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(jacobianInvQuad[i], 
+				 pQuad->_jacobianInvQuad[i], 
 				 tolerance);
 
   size = numQuadPts;
   for (int i=0; i < size; ++i)
-    CPPUNIT_ASSERT_DOUBLES_EQUAL(jacobianDet[i], pQuad->_jacobianDet[i], 
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(jacobianDetQuad[i], 
+				 pQuad->_jacobianDetQuad[i], 
 				 tolerance);
-} // testQuadratic
+} // testComputeGeometryQuad
 
+
 // End of file 

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature.hh	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature.hh	2007-04-27 20:27:03 UTC (rev 6715)
@@ -59,14 +59,22 @@
   // PROTECTED METHODS //////////////////////////////////////////////////
 protected :
 
-  /** Test initialize() & computeGeometry()
+  /** Test initialize() & computeGeometryVert()
    *
    * @param pQuad Pointer to quadrature
    * @param data Data for testing quadrature
    */
-  void _testComputeGeometry(Quadrature* pQuad,
-			    const QuadratureData& data) const;
+  void _testComputeGeometryVert(Quadrature* pQuad,
+				const QuadratureData& data) const;
 
+  /** Test initialize() & computeGeometryQuad()
+   *
+   * @param pQuad Pointer to quadrature
+   * @param data Data for testing quadrature
+   */
+  void _testComputeGeometryQuad(Quadrature* pQuad,
+				const QuadratureData& data) const;
+
 }; // class TestQuadrature
 
 #endif // pylith_feassemble_testquadrature_hh

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature1D.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature1D.cc	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature1D.cc	2007-04-27 20:27:03 UTC (rev 6715)
@@ -38,7 +38,8 @@
   Quadrature1D q;
   QuadratureData1DLinear data;
 
-  _testComputeGeometry(&q, data);
+  _testComputeGeometryVert(&q, data);
+  _testComputeGeometryQuad(&q, data);
 } // testLinear
 
 // ----------------------------------------------------------------------
@@ -49,7 +50,9 @@
   Quadrature1D q;
   QuadratureData1DQuadratic data;
 
-  _testComputeGeometry(&q, data);
+  _testComputeGeometryVert(&q, data);
+  _testComputeGeometryQuad(&q, data);
 } // testQuadratic
 
+
 // End of file 

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature1Din2D.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature1Din2D.cc	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature1Din2D.cc	2007-04-27 20:27:03 UTC (rev 6715)
@@ -38,7 +38,8 @@
   Quadrature1Din2D q;
   QuadratureData1Din2DLinear data;
 
-  _testComputeGeometry(&q, data);
+  _testComputeGeometryVert(&q, data);
+  _testComputeGeometryQuad(&q, data);
 } // testLinear
 
 // ----------------------------------------------------------------------
@@ -49,7 +50,8 @@
   Quadrature1Din2D q;
   QuadratureData1Din2DQuadratic data;
 
-  _testComputeGeometry(&q, data);
+  _testComputeGeometryVert(&q, data);
+  _testComputeGeometryQuad(&q, data);
 } // testQuadratic
 
 // End of file 

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature1Din3D.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature1Din3D.cc	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature1Din3D.cc	2007-04-27 20:27:03 UTC (rev 6715)
@@ -38,7 +38,8 @@
   Quadrature1Din3D q;
   QuadratureData1Din3DLinear data;
 
-  _testComputeGeometry(&q, data);
+  _testComputeGeometryVert(&q, data);
+  _testComputeGeometryQuad(&q, data);
 } // testLinear
 
 // ----------------------------------------------------------------------
@@ -49,7 +50,8 @@
   Quadrature1Din3D q;
   QuadratureData1Din3DQuadratic data;
 
-  _testComputeGeometry(&q, data);
+  _testComputeGeometryVert(&q, data);
+  _testComputeGeometryQuad(&q, data);
 } // testQuadratic
 
 // End of file 

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature2D.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature2D.cc	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature2D.cc	2007-04-27 20:27:03 UTC (rev 6715)
@@ -38,7 +38,8 @@
   Quadrature2D q;
   QuadratureData2DLinear data;
 
-  _testComputeGeometry(&q, data);
+  _testComputeGeometryVert(&q, data);
+  _testComputeGeometryQuad(&q, data);
 } // testLinear
 
 // ----------------------------------------------------------------------
@@ -49,7 +50,8 @@
   Quadrature2D q;
   QuadratureData2DQuadratic data;
 
-  _testComputeGeometry(&q, data);
+  _testComputeGeometryVert(&q, data);
+  _testComputeGeometryQuad(&q, data);
 } // testQuadratic
 
 // End of file 

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature2Din3D.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature2Din3D.cc	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature2Din3D.cc	2007-04-27 20:27:03 UTC (rev 6715)
@@ -41,7 +41,8 @@
   Quadrature2Din3D q;
   QuadratureData2Din3DLinearXYZ data;
 
-  _testComputeGeometry(&q, data);
+  _testComputeGeometryVert(&q, data);
+  _testComputeGeometryQuad(&q, data);
 } // testLinearXYZ
 
 // ----------------------------------------------------------------------
@@ -52,7 +53,8 @@
   Quadrature2Din3D q;
   QuadratureData2Din3DLinearXY data;
 
-  _testComputeGeometry(&q, data);
+  _testComputeGeometryVert(&q, data);
+  _testComputeGeometryQuad(&q, data);
 } // testLinearXY
 
 // ----------------------------------------------------------------------
@@ -63,7 +65,8 @@
   Quadrature2Din3D q;
   QuadratureData2Din3DLinearYZ data;
 
-  _testComputeGeometry(&q, data);
+  _testComputeGeometryVert(&q, data);
+  _testComputeGeometryQuad(&q, data);
 } // testLinearYZ
 
 // ----------------------------------------------------------------------
@@ -74,7 +77,8 @@
   Quadrature2Din3D q;
   QuadratureData2Din3DLinearXZ data;
 
-  _testComputeGeometry(&q, data);
+  _testComputeGeometryVert(&q, data);
+  _testComputeGeometryQuad(&q, data);
 } // testLinearXZ
 
 // ----------------------------------------------------------------------
@@ -85,7 +89,8 @@
   Quadrature2Din3D q;
   QuadratureData2Din3DQuadratic data;
 
-  _testComputeGeometry(&q, data);
+  _testComputeGeometryVert(&q, data);
+  _testComputeGeometryQuad(&q, data);
 } // testQuadratic
 
 // End of file 

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature3D.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature3D.cc	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature3D.cc	2007-04-27 20:27:03 UTC (rev 6715)
@@ -38,7 +38,8 @@
   Quadrature3D q;
   QuadratureData3DLinear data;
 
-  _testComputeGeometry(&q, data);
+  _testComputeGeometryVert(&q, data);
+  _testComputeGeometryQuad(&q, data);
 } // testLinear
 
 // ----------------------------------------------------------------------
@@ -49,7 +50,8 @@
   Quadrature3D q;
   QuadratureData3DQuadratic data;
 
-  _testComputeGeometry(&q, data);
+  _testComputeGeometryVert(&q, data);
+  _testComputeGeometryQuad(&q, data);
 } // testQuadratic
 
 // End of file 

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/IntegratorInertia.py
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/IntegratorInertia.py	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/IntegratorInertia.py	2007-04-27 20:27:03 UTC (rev 6715)
@@ -72,7 +72,7 @@
 
       vertices = self.vertices[cell, :]
       (jacobian, jacobianInv, jacobianDet) = \
-                 feutils.calculateJacobian(self.quadrature, vertices)
+                 feutils.calculateJacobianQuad(self.quadrature, vertices)
       density = 1.0
       for iQuad in xrange(self.numQuadPts):
         n *= 0.0

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature1DLinear.py
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature1DLinear.py	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature1DLinear.py	2007-04-27 20:27:03 UTC (rev 6715)
@@ -32,6 +32,9 @@
 def N1p(p):
   return +0.5
 
+def verticesRef():
+  return [-1.0, 1.0]
+
 # ----------------------------------------------------------------------
 
 # Quadrature1DLinear class
@@ -65,26 +68,53 @@
 
   # PRIVATE METHODS ////////////////////////////////////////////////////
   
-  def calculateBasis(self):
+  def calculateBasisVert(self):
     """
+    Calculate basis functions and their derivatives at reference vertices.
+    """
+
+    self.basisVert = numpy.zeros( (self.numBasis, self.numBasis),
+                                  dtype=numpy.float64)
+    self.basisDerivVert = numpy.zeros( (self.numBasis,
+                                        self.numBasis, self.cellDim),
+                                       dtype=numpy.float64)
+
+    iVertex = 0
+    for v in verticesRef():
+      # Basis functions at vertices
+      basis = numpy.array([N0(v), N1(v)], dtype=numpy.float64)
+      self.basisVert[iVertex,:] = basis.reshape( (self.numBasis,) )
+
+      # Derivatives of basis functions at quadrature points
+      deriv = numpy.array([[N0p(v)], [N1p(v)]], dtype=numpy.float64)      
+      self.basisDerivVert[iVertex,:] = deriv.reshape((self.numBasis,
+                                                      self.cellDim))
+
+      iVertex += 1
+    return
+    
+
+  def calculateBasisQuad(self):
+    """
     Calculate basis functions and their derivatives at quadrature points.
     """
 
-    self.basis = numpy.zeros( (self.numQuadPts, self.numBasis),
-                              dtype=numpy.float64)
-    self.basisDeriv = numpy.zeros( (self.numQuadPts,
-                                    self.numBasis, self.cellDim),
-                                   dtype=numpy.float64)
+    self.basisQuad = numpy.zeros( (self.numQuadPts, self.numBasis),
+                                  dtype=numpy.float64)
+    self.basisDerivQuad = numpy.zeros( (self.numQuadPts,
+                                        self.numBasis, self.cellDim),
+                                       dtype=numpy.float64)
 
     iQuad = 0
     for q in self.quadPtsRef:
       # Basis functions at quadrature points
       basis = numpy.array([N0(q), N1(q)], dtype=numpy.float64)
-      self.basis[iQuad,:] = basis.reshape( (self.numBasis,) )
+      self.basisQuad[iQuad,:] = basis.reshape( (self.numBasis,) )
 
       # Derivatives of basis functions at quadrature points
       deriv = numpy.array([[N0p(q)], [N1p(q)]], dtype=numpy.float64)      
-      self.basisDeriv[iQuad,:] = deriv.reshape((self.numBasis, self.cellDim))
+      self.basisDerivQuad[iQuad,:] = deriv.reshape((self.numBasis,
+                                                    self.cellDim))
 
       iQuad += 1
     return

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature1DQuadratic.py
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature1DQuadratic.py	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature1DQuadratic.py	2007-04-27 20:27:03 UTC (rev 6715)
@@ -38,6 +38,9 @@
 def N2p(p):
   return +0.5*(1.0+p) + 0.5*p
 
+def verticesRef():
+  return [-1.0, 0.0, 1.0]
+
 # ----------------------------------------------------------------------
 
 # Quadrature1DQuadratic class
@@ -75,27 +78,54 @@
 
   # PRIVATE METHODS ////////////////////////////////////////////////////
   
-  def calculateBasis(self):
+  def calculateBasisVert(self):
     """
+    Calculate basis functions and their derivatives at vertices.
+    """
+
+    self.basisVert = numpy.zeros( (self.numBasis, self.numBasis),
+                                  dtype=numpy.float64)
+    self.basisDerivVert = numpy.zeros( (self.numBasis,
+                                        self.numBasis, self.cellDim),
+                                       dtype=numpy.float64)
+
+    iVertex = 0
+    for v in verticesRef():
+      # Basis functions at vertices
+      basis = numpy.array([N0(v), N1(v), N2(v)], dtype=numpy.float64)
+      self.basisVert[iVertex] = basis.reshape( (self.numBasis,) )
+
+      # Derivatives of basis functions at vertices
+      deriv = numpy.array([[N0p(v)], [N1p(v)], [N2p(v)]],
+                          dtype=numpy.float64)      
+      self.basisDerivVert[iVertex] = deriv.reshape((self.numBasis,
+                                                    self.cellDim))
+
+      iVertex += 1
+    return
+    
+
+  def calculateBasisQuad(self):
+    """
     Calculate basis functions and their derivatives at quadrature points.
     """
 
-    self.basis = numpy.zeros( (self.numQuadPts, self.numBasis),
-                              dtype=numpy.float64)
-    self.basisDeriv = numpy.zeros( (self.numQuadPts,
-                                    self.numBasis, self.cellDim),
-                                   dtype=numpy.float64)
+    self.basisQuad = numpy.zeros( (self.numQuadPts, self.numBasis),
+                                  dtype=numpy.float64)
+    self.basisDerivQuad = numpy.zeros( (self.numQuadPts,
+                                        self.numBasis, self.cellDim),
+                                       dtype=numpy.float64)
 
     iQuad = 0
     for q in self.quadPtsRef:
       # Basis functions at quadrature points
       basis = numpy.array([N0(q), N1(q), N2(q)], dtype=numpy.float64)
-      self.basis[iQuad] = basis.reshape( (self.numBasis,) )
+      self.basisQuad[iQuad] = basis.reshape( (self.numBasis,) )
 
       # Derivatives of basis functions at quadrature points
       deriv = numpy.array([[N0p(q)], [N1p(q)], [N2p(q)]],
                           dtype=numpy.float64)      
-      self.basisDeriv[iQuad] = deriv.reshape((self.numBasis, self.cellDim))
+      self.basisDerivQuad[iQuad] = deriv.reshape((self.numBasis, self.cellDim))
 
       iQuad += 1
     return

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature2DLinear.py
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature2DLinear.py	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature2DLinear.py	2007-04-27 20:27:03 UTC (rev 6715)
@@ -47,6 +47,11 @@
 def N2q(p):
   return 1.0
 
+def verticesRef():
+  return [ [0.0, 0.0],
+           [1.0, 0.0],
+           [0.0, 1.0] ]
+
 # ----------------------------------------------------------------------
 
 # Quadrature2DLinear class
@@ -80,28 +85,56 @@
     return
   
 
-  def calculateBasis(self):
+  def calculateBasisVert(self):
     """
+    Calculate basis functions and their derivatives at vertices.
+    """
+
+    self.basisVert = numpy.zeros( (self.numBasis, self.numBasis),
+                                  dtype=numpy.float64)
+    self.basisDerivVert = numpy.zeros( (self.numBasis,
+                                        self.numBasis, self.cellDim),
+                                       dtype=numpy.float64)
+
+    iVertex = 0
+    for v in verticesRef():
+      # Basis functions at quadrature points
+      basis = numpy.array([N0(v), N1(v), N2(v)], dtype=numpy.float64)
+      self.basisVert[iVertex] = basis.reshape( (self.numBasis,) )
+
+      # Derivatives of basis functions at quadrature points
+      deriv = numpy.array([[N0p(v), N0q(v)],
+                           [N1p(v), N1q(v)],
+                           [N2p(v), N2q(v)]], dtype=numpy.float64)      
+      self.basisDerivVert[iVertex] = deriv.reshape((self.numBasis,
+                                                    self.cellDim))
+
+      iVertex += 1
+    return
+    
+
+  def calculateBasisQuad(self):
+    """
     Calculate basis functions and their derivatives at quadrature points.
     """
 
-    self.basis = numpy.zeros( (self.numQuadPts, self.numBasis),
-                              dtype=numpy.float64)
-    self.basisDeriv = numpy.zeros( (self.numQuadPts,
-                                    self.numBasis, self.cellDim),
-                                   dtype=numpy.float64)
+    self.basisQuad = numpy.zeros( (self.numQuadPts, self.numBasis),
+                                  dtype=numpy.float64)
+    self.basisDerivQuad = numpy.zeros( (self.numQuadPts,
+                                        self.numBasis, self.cellDim),
+                                       dtype=numpy.float64)
 
     iQuad = 0
     for q in self.quadPtsRef:
       # Basis functions at quadrature points
       basis = numpy.array([N0(q), N1(q), N2(q)], dtype=numpy.float64)
-      self.basis[iQuad] = basis.reshape( (self.numBasis,) )
+      self.basisQuad[iQuad] = basis.reshape( (self.numBasis,) )
 
       # Derivatives of basis functions at quadrature points
       deriv = numpy.array([[N0p(q), N0q(q)],
                            [N1p(q), N1q(q)],
                            [N2p(q), N2q(q)]], dtype=numpy.float64)      
-      self.basisDeriv[iQuad] = deriv.reshape((self.numBasis, self.cellDim))
+      self.basisDerivQuad[iQuad] = deriv.reshape((self.numBasis, self.cellDim))
 
       iQuad += 1
     return

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature2DQuadratic.py
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature2DQuadratic.py	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature2DQuadratic.py	2007-04-27 20:27:03 UTC (rev 6715)
@@ -74,6 +74,14 @@
 def N5q(p):
   return -8.0*p[1]-4.0*p[0]+4.0
 
+def verticesRef():
+  return [ [0.0, 0.0],
+           [1.0, 0.0],
+           [0.0, 1.0],
+           [0.5, 0.0],
+           [0.0, 0.5],
+           [0.5, 0.5] ]
+
 # ----------------------------------------------------------------------
 
 # Quadrature2DQuadratic class
@@ -116,24 +124,57 @@
     return
 
 
-  def calculateBasis(self):
+  def calculateBasisVert(self):
     """
+    Calculate basis functions and their derivatives at vertices.
+    """
+
+    self.basisVert = numpy.zeros( (self.numBasis, self.numBasis),
+                                  dtype=numpy.float64)
+    self.basisDerivVert = numpy.zeros( (self.numBasis,
+                                        self.numBasis, self.cellDim),
+                                       dtype=numpy.float64)
+
+    iVertex = 0
+    for v in verticesRef():
+      # Basis functions at vertices
+      basis = numpy.array([N0(v), N1(v), N2(v), N3(v), N4(v), N5(v)],
+                          dtype=numpy.float64)
+      self.basisVert[iVertex] = basis.reshape( (self.numBasis,) )
+      
+      # Derivatives of basis functions at vertices
+      deriv = numpy.array([[N0p(v), N0q(v)],
+                           [N1p(v), N1q(v)],
+                           [N2p(v), N2q(v)],
+                           [N3p(v), N3q(v)],
+                           [N4p(v), N4q(v)],
+                           [N5p(v), N5q(v)]],
+                          dtype=numpy.float64)      
+      self.basisDerivVert[iVertex] = deriv.reshape((self.numBasis,
+                                                    self.cellDim))
+      
+      iVertex += 1
+    return
+    
+
+  def calculateBasisQuad(self):
+    """
     Calculate basis functions and their derivatives at quadrature points.
     """
 
-    self.basis = numpy.zeros( (self.numQuadPts, self.numBasis),
-                              dtype=numpy.float64)
-    self.basisDeriv = numpy.zeros( (self.numQuadPts,
-                                    self.numBasis, self.cellDim),
-                                   dtype=numpy.float64)
+    self.basisQuad = numpy.zeros( (self.numQuadPts, self.numBasis),
+                                  dtype=numpy.float64)
+    self.basisDerivQuad = numpy.zeros( (self.numQuadPts,
+                                        self.numBasis, self.cellDim),
+                                       dtype=numpy.float64)
 
     iQuad = 0
     for q in self.quadPtsRef:
       # Basis functions at quadrature points
       basis = numpy.array([N0(q), N1(q), N2(q), N3(q), N4(q), N5(q)],
                           dtype=numpy.float64)
-      self.basis[iQuad] = basis.reshape( (self.numBasis,) )
-
+      self.basisQuad[iQuad] = basis.reshape( (self.numBasis,) )
+      
       # Derivatives of basis functions at quadrature points
       deriv = numpy.array([[N0p(q), N0q(q)],
                            [N1p(q), N1q(q)],
@@ -142,8 +183,8 @@
                            [N4p(q), N4q(q)],
                            [N5p(q), N5q(q)]],
                           dtype=numpy.float64)      
-      self.basisDeriv[iQuad] = deriv.reshape((self.numBasis, self.cellDim))
-
+      self.basisDerivQuad[iQuad] = deriv.reshape((self.numBasis, self.cellDim))
+      
       iQuad += 1
     return
     

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature3DLinear.py
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature3DLinear.py	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature3DLinear.py	2007-04-27 20:27:03 UTC (rev 6715)
@@ -68,6 +68,13 @@
 def N3r(p):
   return 1.0
 
+def verticesRef():
+  return [ [0.0, 0.0, 0.0],
+           [1.0, 0.0, 0.0],
+           [0.0, 1.0, 0.0],
+           [0.0, 0.0, 1.0] ]
+
+
 # ----------------------------------------------------------------------
 
 # Quadrature3DLinear class
@@ -103,14 +110,44 @@
     return
   
 
-  def calculateBasis(self):
+  def calculateBasisVert(self):
     """
+    Calculate basis functions and their derivatives at vertices.
+    """
+
+    self.basisVert = numpy.zeros( (self.numBasis, self.numBasis),
+                                  dtype=numpy.float64)
+    self.basisDerivVert = numpy.zeros( (self.numBasis,
+                                        self.numBasis, self.cellDim),
+                                       dtype=numpy.float64)
+
+    iVertex = 0
+    for v in verticesRef():
+      # Basis functions at vertices
+      basis = numpy.array([N0(v), N1(v), N2(v), N3(v)], dtype=numpy.float64)
+      self.basisVert[iVertex] = basis.reshape( (self.numBasis,) )
+
+      # Derivatives of basis functions at vertices
+      deriv = numpy.array([[N0p(v), N0q(v), N0r(v)],
+                           [N1p(v), N1q(v), N1r(v)],
+                           [N2p(v), N2q(v), N2r(v)],
+                           [N3p(v), N3q(v), N3r(v)]],
+                          dtype=numpy.float64)      
+      self.basisDerivVert[iVertex] = deriv.reshape((self.numBasis,
+                                                    self.cellDim))
+
+      iVertex += 1
+    return
+    
+
+  def calculateBasisQuad(self):
+    """
     Calculate basis functions and their derivatives at quadrature points.
     """
 
-    self.basis = numpy.zeros( (self.numQuadPts, self.numBasis),
+    self.basisQuad = numpy.zeros( (self.numQuadPts, self.numBasis),
                               dtype=numpy.float64)
-    self.basisDeriv = numpy.zeros( (self.numQuadPts,
+    self.basisDerivQuad = numpy.zeros( (self.numQuadPts,
                                     self.numBasis, self.cellDim),
                                    dtype=numpy.float64)
 
@@ -118,7 +155,7 @@
     for q in self.quadPtsRef:
       # Basis functions at quadrature points
       basis = numpy.array([N0(q), N1(q), N2(q), N3(q)], dtype=numpy.float64)
-      self.basis[iQuad] = basis.reshape( (self.numBasis,) )
+      self.basisQuad[iQuad] = basis.reshape( (self.numBasis,) )
 
       # Derivatives of basis functions at quadrature points
       deriv = numpy.array([[N0p(q), N0q(q), N0r(q)],
@@ -126,7 +163,7 @@
                            [N2p(q), N2q(q), N2r(q)],
                            [N3p(q), N3q(q), N3r(q)]],
                           dtype=numpy.float64)      
-      self.basisDeriv[iQuad] = deriv.reshape((self.numBasis, self.cellDim))
+      self.basisDerivQuad[iQuad] = deriv.reshape((self.numBasis, self.cellDim))
 
       iQuad += 1
     return

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature3DQuadratic.py
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature3DQuadratic.py	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature3DQuadratic.py	2007-04-27 20:27:03 UTC (rev 6715)
@@ -140,6 +140,18 @@
 def N9r(p):
   return 4.0*p[0]
 
+def verticesRef():
+  return [ [0.0, 0.0, 0.0],
+           [1.0, 0.0, 0.0],
+           [0.0, 1.0, 0.0],
+           [0.0, 0.0, 1.0],
+           [0.5, 0.0, 0.0],
+           [0.0, 0.5, 0.0],
+           [0.0, 0.0, 0.5],
+           [0.5, 0.5, 0.0],
+           [0.0, 0.5, 0.5],
+           [0.5, 0.0, 0.5] ]
+
 # ----------------------------------------------------------------------
 
 # Quadrature3DQuadratic class
@@ -190,14 +202,52 @@
     return
 
 
-  def calculateBasis(self):
+  def calculateBasisVert(self):
     """
+    Calculate basis functions and their derivatives at vertices.
+    """
+
+    self.basisVert = numpy.zeros( (self.numBasis, self.numBasis),
+                                  dtype=numpy.float64)
+    self.basisDerivVert = numpy.zeros( (self.numBasis,
+                                        self.numBasis, self.cellDim),
+                                       dtype=numpy.float64)
+
+    iVertex = 0
+    for v in verticesRef():
+      # Basis functions at vertices
+      basis = numpy.array([N0(v), N1(v), N2(v), N3(v), N4(v),
+                           N5(v), N6(v), N7(v), N8(v), N9(v)],
+                          dtype=numpy.float64)
+      self.basisVert[iVertex] = basis.reshape( (self.numBasis,) )
+
+      # Derivatives of basis functions at vertices
+      deriv = numpy.array([[N0p(v), N0q(v), N0r(v)],
+                           [N1p(v), N1q(v), N1r(v)],
+                           [N2p(v), N2q(v), N2r(v)],
+                           [N3p(v), N3q(v), N3r(v)],
+                           [N4p(v), N4q(v), N4r(v)],
+                           [N5p(v), N5q(v), N5r(v)],
+                           [N6p(v), N6q(v), N6r(v)],
+                           [N7p(v), N7q(v), N7r(v)],
+                           [N8p(v), N8q(v), N8r(v)],
+                           [N9p(v), N9q(v), N9r(v)]],
+                          dtype=numpy.float64)      
+      self.basisDerivVert[iVertex] = deriv.reshape((self.numBasis,
+                                                    self.cellDim))
+
+      iVertex += 1
+    return
+    
+
+  def calculateBasisQuad(self):
+    """
     Calculate basis functions and their derivatives at quadrature points.
     """
 
-    self.basis = numpy.zeros( (self.numQuadPts, self.numBasis),
+    self.basisQuad = numpy.zeros( (self.numQuadPts, self.numBasis),
                               dtype=numpy.float64)
-    self.basisDeriv = numpy.zeros( (self.numQuadPts,
+    self.basisDerivQuad = numpy.zeros( (self.numQuadPts,
                                     self.numBasis, self.cellDim),
                                    dtype=numpy.float64)
 
@@ -207,7 +257,7 @@
       basis = numpy.array([N0(q), N1(q), N2(q), N3(q), N4(q),
                            N5(q), N6(q), N7(q), N8(q), N9(q)],
                           dtype=numpy.float64)
-      self.basis[iQuad] = basis.reshape( (self.numBasis,) )
+      self.basisQuad[iQuad] = basis.reshape( (self.numBasis,) )
 
       # Derivatives of basis functions at quadrature points
       deriv = numpy.array([[N0p(q), N0q(q), N0r(q)],
@@ -221,7 +271,7 @@
                            [N8p(q), N8q(q), N8r(q)],
                            [N9p(q), N9q(q), N9r(q)]],
                           dtype=numpy.float64)      
-      self.basisDeriv[iQuad] = deriv.reshape((self.numBasis, self.cellDim))
+      self.basisDerivQuad[iQuad] = deriv.reshape((self.numBasis, self.cellDim))
 
       iQuad += 1
     return

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureApp.py
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureApp.py	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureApp.py	2007-04-27 20:27:03 UTC (rev 6715)
@@ -66,16 +66,21 @@
     self.cellDim = None
     self.numBasis = None
     self.numQuadPts = None
+
     self.quadPtsRef = None
     self.quadWts = None
-    self.basis = None
-    self.basisDeriv = None
+    self.basisVert = None
+    self.basisDerivVert = None
+    self.basisQuad = None
+    self.basisDerivQuad = None
 
     # Computed quadrature information
     self.quadPts = None
-    self.jacobian = None
-    self.jacobianDet = None
-    self.jacobianInv = None
+    self.jacobianVert = None
+    self.jacobianDetVert = None
+    self.jacobianQuad = None
+    self.jacobianDetQuad = None
+    self.jacobianInvQuad = None
     return
 
 
@@ -83,32 +88,52 @@
     """
     Run the application.
     """
-    self.calculateBasis()
-    self.calculateJacobian()
+    self.calculateBasisVert()
+    self.calculateJacobianVert()
 
+    self.calculateBasisQuad()
+    self.calculateJacobianQuad()
+
     # Quadrature points in cell
-    self.quadPts = numpy.dot(self.basis, self.vertices)
+    self.quadPts = numpy.dot(self.basisQuad, self.vertices)
 
     self._initData()
     self.data.write(self.name)
     return
   
 
-  def calculateBasis(self):
+  def calculateBasisVert(self):
     """
+    Calculate basis functions and derivatives at vertoces.
+    """
+    raise NotImplementedError
+
+
+  def calculateBasisQuad(self):
+    """
     Calculate basis functions and derivatives at quadrature points.
     """
     raise NotImplementedError
 
 
-  def calculateJacobian(self):
+  def calculateJacobianVert(self):
     """
+    Calculate Jacobian and its determinant at vertices.
+    """
+    import feutils
+    (self.jacobianVert, self.jacobianDetVert) = \
+                        feutils.calculateJacobianVert(self, self.vertices)
+    return
+
+
+  def calculateJacobianQuad(self):
+    """
     Calculate Jacobian, its determinant, and its inverse at quadrature
     pts plus coordinates of quadrature points in the cell.
     """
     import feutils
-    (self.jacobian, self.jacobianInv, self.jacobianDet) = \
-                    feutils.calculateJacobian(self, self.vertices)
+    (self.jacobianQuad, self.jacobianInvQuad, self.jacobianDetQuad) = \
+                    feutils.calculateJacobianQuad(self, self.vertices)
     return
 
 
@@ -150,24 +175,37 @@
                        format="%16.8e", ncols=self.cellDim)
     self.data.addArray(vtype="double", name="_quadWts", values=self.quadWts,
                        format="%16.8e", ncols=self.numQuadPts)
-    
-    self.data.addArray(vtype="double", name="_basis", values=self.basis,
-                       format="%16.8e", ncols=self.cellDim)
-    self.data.addArray(vtype="double", name="_basisDeriv",
-                       values=self.basisDeriv,
-                       format="%16.8e", ncols=self.cellDim)
     self.data.addArray(vtype="double", name="_quadPts",
                        values=self.quadPts,
                        format="%16.8e", ncols=self.spaceDim)
-    
-    self.data.addArray(vtype="double", name="_jacobian",
-                       values=self.jacobian,
+        
+    self.data.addArray(vtype="double", name="_basisVert",
+                       values=self.basisVert,
+                       format="%16.8e", ncols=self.cellDim)
+    self.data.addArray(vtype="double", name="_basisDerivVert",
+                       values=self.basisDerivVert,
+                       format="%16.8e", ncols=self.cellDim)
+    self.data.addArray(vtype="double", name="_jacobianVert",
+                       values=self.jacobianVert,
                        format="%16.8e", ncols=self.spaceDim)
-    self.data.addArray(vtype="double", name="_jacobianDet",
-                       values=self.jacobianDet,
+    self.data.addArray(vtype="double", name="_jacobianDetVert",
+                       values=self.jacobianDetVert,
+                       format="%16.8e", ncols=self.numVertices)
+
+    self.data.addArray(vtype="double", name="_basisQuad",
+                       values=self.basisQuad,
+                       format="%16.8e", ncols=self.cellDim)
+    self.data.addArray(vtype="double", name="_basisDerivQuad",
+                       values=self.basisDerivQuad,
+                       format="%16.8e", ncols=self.cellDim)
+    self.data.addArray(vtype="double", name="_jacobianQuad",
+                       values=self.jacobianQuad,
+                       format="%16.8e", ncols=self.spaceDim)
+    self.data.addArray(vtype="double", name="_jacobianDetQuad",
+                       values=self.jacobianDetQuad,
                        format="%16.8e", ncols=self.numQuadPts)
-    self.data.addArray(vtype="double", name="_jacobianInv",
-                       values=self.jacobianInv,
+    self.data.addArray(vtype="double", name="_jacobianInvQuad",
+                       values=self.jacobianInvQuad,
                        format="%16.8e", ncols=self.cellDim)
       
     return

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData.cc	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData.cc	2007-04-27 20:27:03 UTC (rev 6715)
@@ -25,12 +25,16 @@
   cells(0),
   quadPtsRef(0),
   quadWts(0),
-  basis(0),
-  basisDeriv(0),
-  jacobian(0),
-  jacobianDet(0),
-  jacobianInv(0),
-  quadPts(0)
+  quadPts(0),
+  basisVert(0),
+  basisDerivVert(0),
+  jacobianVert(0),
+  jacobianDetVert(0),
+  basisQuad(0),
+  basisDerivQuad(0),
+  jacobianQuad(0),
+  jacobianDetQuad(0),
+  jacobianInvQuad(0)
 { // constructor
 } // constructor
 

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData.hh	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData.hh	2007-04-27 20:27:03 UTC (rev 6715)
@@ -43,15 +43,22 @@
 
   double* vertices; ///< Pointer to coordinates of vertices
   int* cells; ///< Pointer to indices of vertices in cells
+
   double* quadPtsRef; ///< Coordinates of quad pts in ref cell
   double* quadWts; ///< Weights of quadrature points
-  double* basis; ///< Basis fns at quadrature points
-  double* basisDeriv; ///< Derivatices of basis fns at quad pts
-  double* jacobian; ///< Jacobian at quadrature points
-  double* jacobianDet; ///< Determinant of quadrature points
-  double* jacobianInv; ///< Inverse of Jacobian at quadruature points
   double* quadPts; ///< Coordinates of quad pts in cell
 
+  double* basisVert; ///< Basis fns at vertices
+  double* basisDerivVert; ///< Derivatices of basis fns at vertices
+  double* jacobianVert; ///< Jacobian at vertices
+  double* jacobianDetVert; ///< Determinant at vertices
+
+  double* basisQuad; ///< Basis fns at quadrature points
+  double* basisDerivQuad; ///< Derivatices of basis fns at quad pts
+  double* jacobianQuad; ///< Jacobian at quadrature points
+  double* jacobianDetQuad; ///< Determinant of quadrature points
+  double* jacobianInvQuad; ///< Inverse of Jacobian at quadruature points
+
 };
 
 #endif // pylith_feassemble_quadraturedata_hh

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1DLinear.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1DLinear.cc	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1DLinear.cc	2007-04-27 20:27:03 UTC (rev 6715)
@@ -44,29 +44,52 @@
   2.00000000e+00,
 };
 
-const double pylith::feassemble::QuadratureData1DLinear::_basis[] = {
+const double pylith::feassemble::QuadratureData1DLinear::_quadPts[] = {
+  8.75000000e-01,
+};
+
+const double pylith::feassemble::QuadratureData1DLinear::_basisVert[] = {
+  1.00000000e+00,
+  0.00000000e+00,
+  0.00000000e+00,
+  1.00000000e+00,
+};
+
+const double pylith::feassemble::QuadratureData1DLinear::_basisDerivVert[] = {
+ -5.00000000e-01,
   5.00000000e-01,
+ -5.00000000e-01,
   5.00000000e-01,
 };
 
-const double pylith::feassemble::QuadratureData1DLinear::_basisDeriv[] = {
- -5.00000000e-01,
+const double pylith::feassemble::QuadratureData1DLinear::_jacobianVert[] = {
+  1.12500000e+00,
+  1.12500000e+00,
+};
+
+const double pylith::feassemble::QuadratureData1DLinear::_jacobianDetVert[] = {
+  1.12500000e+00,  1.12500000e+00,
+};
+
+const double pylith::feassemble::QuadratureData1DLinear::_basisQuad[] = {
   5.00000000e-01,
+  5.00000000e-01,
 };
 
-const double pylith::feassemble::QuadratureData1DLinear::_quadPts[] = {
-  8.75000000e-01,
+const double pylith::feassemble::QuadratureData1DLinear::_basisDerivQuad[] = {
+ -5.00000000e-01,
+  5.00000000e-01,
 };
 
-const double pylith::feassemble::QuadratureData1DLinear::_jacobian[] = {
+const double pylith::feassemble::QuadratureData1DLinear::_jacobianQuad[] = {
   1.12500000e+00,
 };
 
-const double pylith::feassemble::QuadratureData1DLinear::_jacobianDet[] = {
+const double pylith::feassemble::QuadratureData1DLinear::_jacobianDetQuad[] = {
   1.12500000e+00,
 };
 
-const double pylith::feassemble::QuadratureData1DLinear::_jacobianInv[] = {
+const double pylith::feassemble::QuadratureData1DLinear::_jacobianInvQuad[] = {
   8.88888889e-01,
 };
 
@@ -82,12 +105,16 @@
   cells = const_cast<int*>(_cells);
   quadPtsRef = const_cast<double*>(_quadPtsRef);
   quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDeriv = const_cast<double*>(_basisDeriv);
   quadPts = const_cast<double*>(_quadPts);
-  jacobian = const_cast<double*>(_jacobian);
-  jacobianDet = const_cast<double*>(_jacobianDet);
-  jacobianInv = const_cast<double*>(_jacobianInv);
+  basisVert = const_cast<double*>(_basisVert);
+  basisDerivVert = const_cast<double*>(_basisDerivVert);
+  jacobianVert = const_cast<double*>(_jacobianVert);
+  jacobianDetVert = const_cast<double*>(_jacobianDetVert);
+  basisQuad = const_cast<double*>(_basisQuad);
+  basisDerivQuad = const_cast<double*>(_basisDerivQuad);
+  jacobianQuad = const_cast<double*>(_jacobianQuad);
+  jacobianDetQuad = const_cast<double*>(_jacobianDetQuad);
+  jacobianInvQuad = const_cast<double*>(_jacobianInvQuad);
 } // constructor
 
 pylith::feassemble::QuadratureData1DLinear::~QuadratureData1DLinear(void)

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1DLinear.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1DLinear.hh	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1DLinear.hh	2007-04-27 20:27:03 UTC (rev 6715)
@@ -57,18 +57,26 @@
 
   static const double _quadWts[];
 
-  static const double _basis[];
+  static const double _quadPts[];
 
-  static const double _basisDeriv[];
+  static const double _basisVert[];
 
-  static const double _quadPts[];
+  static const double _basisDerivVert[];
 
-  static const double _jacobian[];
+  static const double _jacobianVert[];
 
-  static const double _jacobianDet[];
+  static const double _jacobianDetVert[];
 
-  static const double _jacobianInv[];
+  static const double _basisQuad[];
 
+  static const double _basisDerivQuad[];
+
+  static const double _jacobianQuad[];
+
+  static const double _jacobianDetQuad[];
+
+  static const double _jacobianInvQuad[];
+
 };
 
 #endif // pylith_feassemble_quadraturedata1dlinear_hh

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1DQuadratic.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1DQuadratic.cc	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1DQuadratic.cc	2007-04-27 20:27:03 UTC (rev 6715)
@@ -46,7 +46,46 @@
   1.00000000e+00,  1.00000000e+00,
 };
 
-const double pylith::feassemble::QuadratureData1DQuadratic::_basis[] = {
+const double pylith::feassemble::QuadratureData1DQuadratic::_quadPts[] = {
+  2.25480947e-01,
+  1.52451905e+00,
+};
+
+const double pylith::feassemble::QuadratureData1DQuadratic::_basisVert[] = {
+  1.00000000e+00,
+  0.00000000e+00,
+ -0.00000000e+00,
+ -0.00000000e+00,
+  1.00000000e+00,
+  0.00000000e+00,
+ -0.00000000e+00,
+  0.00000000e+00,
+  1.00000000e+00,
+};
+
+const double pylith::feassemble::QuadratureData1DQuadratic::_basisDerivVert[] = {
+ -1.50000000e+00,
+  2.00000000e+00,
+ -5.00000000e-01,
+ -5.00000000e-01,
+ -0.00000000e+00,
+  5.00000000e-01,
+  5.00000000e-01,
+ -2.00000000e+00,
+  1.50000000e+00,
+};
+
+const double pylith::feassemble::QuadratureData1DQuadratic::_jacobianVert[] = {
+  1.12500000e+00,
+  1.12500000e+00,
+  1.12500000e+00,
+};
+
+const double pylith::feassemble::QuadratureData1DQuadratic::_jacobianDetVert[] = {
+  1.12500000e+00,  1.12500000e+00,  1.12500000e+00,
+};
+
+const double pylith::feassemble::QuadratureData1DQuadratic::_basisQuad[] = {
   4.55341801e-01,
   6.66666667e-01,
  -1.22008468e-01,
@@ -55,7 +94,7 @@
   4.55341801e-01,
 };
 
-const double pylith::feassemble::QuadratureData1DQuadratic::_basisDeriv[] = {
+const double pylith::feassemble::QuadratureData1DQuadratic::_basisDerivQuad[] = {
  -1.07735027e+00,
   1.15470054e+00,
  -7.73502692e-02,
@@ -64,21 +103,16 @@
   1.07735027e+00,
 };
 
-const double pylith::feassemble::QuadratureData1DQuadratic::_quadPts[] = {
-  2.25480947e-01,
-  1.52451905e+00,
-};
-
-const double pylith::feassemble::QuadratureData1DQuadratic::_jacobian[] = {
+const double pylith::feassemble::QuadratureData1DQuadratic::_jacobianQuad[] = {
   1.12500000e+00,
   1.12500000e+00,
 };
 
-const double pylith::feassemble::QuadratureData1DQuadratic::_jacobianDet[] = {
+const double pylith::feassemble::QuadratureData1DQuadratic::_jacobianDetQuad[] = {
   1.12500000e+00,  1.12500000e+00,
 };
 
-const double pylith::feassemble::QuadratureData1DQuadratic::_jacobianInv[] = {
+const double pylith::feassemble::QuadratureData1DQuadratic::_jacobianInvQuad[] = {
   8.88888889e-01,
   8.88888889e-01,
 };
@@ -95,12 +129,16 @@
   cells = const_cast<int*>(_cells);
   quadPtsRef = const_cast<double*>(_quadPtsRef);
   quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDeriv = const_cast<double*>(_basisDeriv);
   quadPts = const_cast<double*>(_quadPts);
-  jacobian = const_cast<double*>(_jacobian);
-  jacobianDet = const_cast<double*>(_jacobianDet);
-  jacobianInv = const_cast<double*>(_jacobianInv);
+  basisVert = const_cast<double*>(_basisVert);
+  basisDerivVert = const_cast<double*>(_basisDerivVert);
+  jacobianVert = const_cast<double*>(_jacobianVert);
+  jacobianDetVert = const_cast<double*>(_jacobianDetVert);
+  basisQuad = const_cast<double*>(_basisQuad);
+  basisDerivQuad = const_cast<double*>(_basisDerivQuad);
+  jacobianQuad = const_cast<double*>(_jacobianQuad);
+  jacobianDetQuad = const_cast<double*>(_jacobianDetQuad);
+  jacobianInvQuad = const_cast<double*>(_jacobianInvQuad);
 } // constructor
 
 pylith::feassemble::QuadratureData1DQuadratic::~QuadratureData1DQuadratic(void)

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1DQuadratic.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1DQuadratic.hh	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1DQuadratic.hh	2007-04-27 20:27:03 UTC (rev 6715)
@@ -57,18 +57,26 @@
 
   static const double _quadWts[];
 
-  static const double _basis[];
+  static const double _quadPts[];
 
-  static const double _basisDeriv[];
+  static const double _basisVert[];
 
-  static const double _quadPts[];
+  static const double _basisDerivVert[];
 
-  static const double _jacobian[];
+  static const double _jacobianVert[];
 
-  static const double _jacobianDet[];
+  static const double _jacobianDetVert[];
 
-  static const double _jacobianInv[];
+  static const double _basisQuad[];
 
+  static const double _basisDerivQuad[];
+
+  static const double _jacobianQuad[];
+
+  static const double _jacobianDetQuad[];
+
+  static const double _jacobianInvQuad[];
+
 };
 
 #endif // pylith_feassemble_quadraturedata1dquadratic_hh

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din2DLinear.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din2DLinear.cc	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din2DLinear.cc	2007-04-27 20:27:03 UTC (rev 6715)
@@ -44,29 +44,52 @@
   2.00000000e+00,
 };
 
-const double pylith::feassemble::QuadratureData1Din2DLinear::_basis[] = {
+const double pylith::feassemble::QuadratureData1Din2DLinear::_quadPts[] = {
+  2.50000000e-01, -1.00000000e-01,
+};
+
+const double pylith::feassemble::QuadratureData1Din2DLinear::_basisVert[] = {
+  1.00000000e+00,
+  0.00000000e+00,
+  0.00000000e+00,
+  1.00000000e+00,
+};
+
+const double pylith::feassemble::QuadratureData1Din2DLinear::_basisDerivVert[] = {
+ -5.00000000e-01,
   5.00000000e-01,
+ -5.00000000e-01,
   5.00000000e-01,
 };
 
-const double pylith::feassemble::QuadratureData1Din2DLinear::_basisDeriv[] = {
- -5.00000000e-01,
+const double pylith::feassemble::QuadratureData1Din2DLinear::_jacobianVert[] = {
+  4.50000000e-01,  4.00000000e-01,
+  4.50000000e-01,  4.00000000e-01,
+};
+
+const double pylith::feassemble::QuadratureData1Din2DLinear::_jacobianDetVert[] = {
+  6.02079729e-01,  6.02079729e-01,
+};
+
+const double pylith::feassemble::QuadratureData1Din2DLinear::_basisQuad[] = {
   5.00000000e-01,
+  5.00000000e-01,
 };
 
-const double pylith::feassemble::QuadratureData1Din2DLinear::_quadPts[] = {
-  2.50000000e-01, -1.00000000e-01,
+const double pylith::feassemble::QuadratureData1Din2DLinear::_basisDerivQuad[] = {
+ -5.00000000e-01,
+  5.00000000e-01,
 };
 
-const double pylith::feassemble::QuadratureData1Din2DLinear::_jacobian[] = {
+const double pylith::feassemble::QuadratureData1Din2DLinear::_jacobianQuad[] = {
   4.50000000e-01,  4.00000000e-01,
 };
 
-const double pylith::feassemble::QuadratureData1Din2DLinear::_jacobianDet[] = {
+const double pylith::feassemble::QuadratureData1Din2DLinear::_jacobianDetQuad[] = {
   6.02079729e-01,
 };
 
-const double pylith::feassemble::QuadratureData1Din2DLinear::_jacobianInv[] = {
+const double pylith::feassemble::QuadratureData1Din2DLinear::_jacobianInvQuad[] = {
   2.22222222e+00,
   2.50000000e+00,
 };
@@ -83,12 +106,16 @@
   cells = const_cast<int*>(_cells);
   quadPtsRef = const_cast<double*>(_quadPtsRef);
   quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDeriv = const_cast<double*>(_basisDeriv);
   quadPts = const_cast<double*>(_quadPts);
-  jacobian = const_cast<double*>(_jacobian);
-  jacobianDet = const_cast<double*>(_jacobianDet);
-  jacobianInv = const_cast<double*>(_jacobianInv);
+  basisVert = const_cast<double*>(_basisVert);
+  basisDerivVert = const_cast<double*>(_basisDerivVert);
+  jacobianVert = const_cast<double*>(_jacobianVert);
+  jacobianDetVert = const_cast<double*>(_jacobianDetVert);
+  basisQuad = const_cast<double*>(_basisQuad);
+  basisDerivQuad = const_cast<double*>(_basisDerivQuad);
+  jacobianQuad = const_cast<double*>(_jacobianQuad);
+  jacobianDetQuad = const_cast<double*>(_jacobianDetQuad);
+  jacobianInvQuad = const_cast<double*>(_jacobianInvQuad);
 } // constructor
 
 pylith::feassemble::QuadratureData1Din2DLinear::~QuadratureData1Din2DLinear(void)

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din2DLinear.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din2DLinear.hh	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din2DLinear.hh	2007-04-27 20:27:03 UTC (rev 6715)
@@ -57,18 +57,26 @@
 
   static const double _quadWts[];
 
-  static const double _basis[];
+  static const double _quadPts[];
 
-  static const double _basisDeriv[];
+  static const double _basisVert[];
 
-  static const double _quadPts[];
+  static const double _basisDerivVert[];
 
-  static const double _jacobian[];
+  static const double _jacobianVert[];
 
-  static const double _jacobianDet[];
+  static const double _jacobianDetVert[];
 
-  static const double _jacobianInv[];
+  static const double _basisQuad[];
 
+  static const double _basisDerivQuad[];
+
+  static const double _jacobianQuad[];
+
+  static const double _jacobianDetQuad[];
+
+  static const double _jacobianInvQuad[];
+
 };
 
 #endif // pylith_feassemble_quadraturedata1din2dlinear_hh

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din2DQuadratic.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din2DQuadratic.cc	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din2DQuadratic.cc	2007-04-27 20:27:03 UTC (rev 6715)
@@ -46,7 +46,46 @@
   1.00000000e+00,  1.00000000e+00,
 };
 
-const double pylith::feassemble::QuadratureData1Din2DQuadratic::_basis[] = {
+const double pylith::feassemble::QuadratureData1Din2DQuadratic::_quadPts[] = {
+  2.35257122e-02, -3.97606774e-01,
+  5.43140954e-01,  6.42734410e-02,
+};
+
+const double pylith::feassemble::QuadratureData1Din2DQuadratic::_basisVert[] = {
+  1.00000000e+00,
+  0.00000000e+00,
+ -0.00000000e+00,
+ -0.00000000e+00,
+  1.00000000e+00,
+  0.00000000e+00,
+ -0.00000000e+00,
+  0.00000000e+00,
+  1.00000000e+00,
+};
+
+const double pylith::feassemble::QuadratureData1Din2DQuadratic::_basisDerivVert[] = {
+ -1.50000000e+00,
+  2.00000000e+00,
+ -5.00000000e-01,
+ -5.00000000e-01,
+ -0.00000000e+00,
+  5.00000000e-01,
+  5.00000000e-01,
+ -2.00000000e+00,
+  1.50000000e+00,
+};
+
+const double pylith::feassemble::QuadratureData1Din2DQuadratic::_jacobianVert[] = {
+  5.50000000e-01,  2.00000000e-01,
+  4.50000000e-01,  4.00000000e-01,
+  3.50000000e-01,  6.00000000e-01,
+};
+
+const double pylith::feassemble::QuadratureData1Din2DQuadratic::_jacobianDetVert[] = {
+  5.85234996e-01,  6.02079729e-01,  6.94622199e-01,
+};
+
+const double pylith::feassemble::QuadratureData1Din2DQuadratic::_basisQuad[] = {
   4.55341801e-01,
   6.66666667e-01,
  -1.22008468e-01,
@@ -55,7 +94,7 @@
   4.55341801e-01,
 };
 
-const double pylith::feassemble::QuadratureData1Din2DQuadratic::_basisDeriv[] = {
+const double pylith::feassemble::QuadratureData1Din2DQuadratic::_basisDerivQuad[] = {
  -1.07735027e+00,
   1.15470054e+00,
  -7.73502692e-02,
@@ -64,21 +103,16 @@
   1.07735027e+00,
 };
 
-const double pylith::feassemble::QuadratureData1Din2DQuadratic::_quadPts[] = {
-  2.35257122e-02, -3.97606774e-01,
-  5.43140954e-01,  6.42734410e-02,
-};
-
-const double pylith::feassemble::QuadratureData1Din2DQuadratic::_jacobian[] = {
+const double pylith::feassemble::QuadratureData1Din2DQuadratic::_jacobianQuad[] = {
   5.07735027e-01,  2.84529946e-01,
   3.92264973e-01,  5.15470054e-01,
 };
 
-const double pylith::feassemble::QuadratureData1Din2DQuadratic::_jacobianDet[] = {
+const double pylith::feassemble::QuadratureData1Din2DQuadratic::_jacobianDetQuad[] = {
   5.82024181e-01,  6.47750867e-01,
 };
 
-const double pylith::feassemble::QuadratureData1Din2DQuadratic::_jacobianInv[] = {
+const double pylith::feassemble::QuadratureData1Din2DQuadratic::_jacobianInvQuad[] = {
   1.96953125e+00,
   3.51456855e+00,
   2.54929721e+00,
@@ -97,12 +131,16 @@
   cells = const_cast<int*>(_cells);
   quadPtsRef = const_cast<double*>(_quadPtsRef);
   quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDeriv = const_cast<double*>(_basisDeriv);
   quadPts = const_cast<double*>(_quadPts);
-  jacobian = const_cast<double*>(_jacobian);
-  jacobianDet = const_cast<double*>(_jacobianDet);
-  jacobianInv = const_cast<double*>(_jacobianInv);
+  basisVert = const_cast<double*>(_basisVert);
+  basisDerivVert = const_cast<double*>(_basisDerivVert);
+  jacobianVert = const_cast<double*>(_jacobianVert);
+  jacobianDetVert = const_cast<double*>(_jacobianDetVert);
+  basisQuad = const_cast<double*>(_basisQuad);
+  basisDerivQuad = const_cast<double*>(_basisDerivQuad);
+  jacobianQuad = const_cast<double*>(_jacobianQuad);
+  jacobianDetQuad = const_cast<double*>(_jacobianDetQuad);
+  jacobianInvQuad = const_cast<double*>(_jacobianInvQuad);
 } // constructor
 
 pylith::feassemble::QuadratureData1Din2DQuadratic::~QuadratureData1Din2DQuadratic(void)

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din2DQuadratic.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din2DQuadratic.hh	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din2DQuadratic.hh	2007-04-27 20:27:03 UTC (rev 6715)
@@ -57,18 +57,26 @@
 
   static const double _quadWts[];
 
-  static const double _basis[];
+  static const double _quadPts[];
 
-  static const double _basisDeriv[];
+  static const double _basisVert[];
 
-  static const double _quadPts[];
+  static const double _basisDerivVert[];
 
-  static const double _jacobian[];
+  static const double _jacobianVert[];
 
-  static const double _jacobianDet[];
+  static const double _jacobianDetVert[];
 
-  static const double _jacobianInv[];
+  static const double _basisQuad[];
 
+  static const double _basisDerivQuad[];
+
+  static const double _jacobianQuad[];
+
+  static const double _jacobianDetQuad[];
+
+  static const double _jacobianInvQuad[];
+
 };
 
 #endif // pylith_feassemble_quadraturedata1din2dquadratic_hh

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din3DLinear.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din3DLinear.cc	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din3DLinear.cc	2007-04-27 20:27:03 UTC (rev 6715)
@@ -44,29 +44,52 @@
   2.00000000e+00,
 };
 
-const double pylith::feassemble::QuadratureData1Din3DLinear::_basis[] = {
+const double pylith::feassemble::QuadratureData1Din3DLinear::_quadPts[] = {
+  2.50000000e-01,  2.50000000e-01,  5.00000000e-01,
+};
+
+const double pylith::feassemble::QuadratureData1Din3DLinear::_basisVert[] = {
+  1.00000000e+00,
+  0.00000000e+00,
+  0.00000000e+00,
+  1.00000000e+00,
+};
+
+const double pylith::feassemble::QuadratureData1Din3DLinear::_basisDerivVert[] = {
+ -5.00000000e-01,
   5.00000000e-01,
+ -5.00000000e-01,
   5.00000000e-01,
 };
 
-const double pylith::feassemble::QuadratureData1Din3DLinear::_basisDeriv[] = {
- -5.00000000e-01,
+const double pylith::feassemble::QuadratureData1Din3DLinear::_jacobianVert[] = {
+ -7.50000000e-01,  1.75000000e+00,  2.50000000e+00,
+ -7.50000000e-01,  1.75000000e+00,  2.50000000e+00,
+};
+
+const double pylith::feassemble::QuadratureData1Din3DLinear::_jacobianDetVert[] = {
+  3.14245127e+00,  3.14245127e+00,
+};
+
+const double pylith::feassemble::QuadratureData1Din3DLinear::_basisQuad[] = {
   5.00000000e-01,
+  5.00000000e-01,
 };
 
-const double pylith::feassemble::QuadratureData1Din3DLinear::_quadPts[] = {
-  2.50000000e-01,  2.50000000e-01,  5.00000000e-01,
+const double pylith::feassemble::QuadratureData1Din3DLinear::_basisDerivQuad[] = {
+ -5.00000000e-01,
+  5.00000000e-01,
 };
 
-const double pylith::feassemble::QuadratureData1Din3DLinear::_jacobian[] = {
+const double pylith::feassemble::QuadratureData1Din3DLinear::_jacobianQuad[] = {
  -7.50000000e-01,  1.75000000e+00,  2.50000000e+00,
 };
 
-const double pylith::feassemble::QuadratureData1Din3DLinear::_jacobianDet[] = {
+const double pylith::feassemble::QuadratureData1Din3DLinear::_jacobianDetQuad[] = {
   3.14245127e+00,
 };
 
-const double pylith::feassemble::QuadratureData1Din3DLinear::_jacobianInv[] = {
+const double pylith::feassemble::QuadratureData1Din3DLinear::_jacobianInvQuad[] = {
  -1.33333333e+00,
   5.71428571e-01,
   4.00000000e-01,
@@ -84,12 +107,16 @@
   cells = const_cast<int*>(_cells);
   quadPtsRef = const_cast<double*>(_quadPtsRef);
   quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDeriv = const_cast<double*>(_basisDeriv);
   quadPts = const_cast<double*>(_quadPts);
-  jacobian = const_cast<double*>(_jacobian);
-  jacobianDet = const_cast<double*>(_jacobianDet);
-  jacobianInv = const_cast<double*>(_jacobianInv);
+  basisVert = const_cast<double*>(_basisVert);
+  basisDerivVert = const_cast<double*>(_basisDerivVert);
+  jacobianVert = const_cast<double*>(_jacobianVert);
+  jacobianDetVert = const_cast<double*>(_jacobianDetVert);
+  basisQuad = const_cast<double*>(_basisQuad);
+  basisDerivQuad = const_cast<double*>(_basisDerivQuad);
+  jacobianQuad = const_cast<double*>(_jacobianQuad);
+  jacobianDetQuad = const_cast<double*>(_jacobianDetQuad);
+  jacobianInvQuad = const_cast<double*>(_jacobianInvQuad);
 } // constructor
 
 pylith::feassemble::QuadratureData1Din3DLinear::~QuadratureData1Din3DLinear(void)

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din3DLinear.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din3DLinear.hh	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din3DLinear.hh	2007-04-27 20:27:03 UTC (rev 6715)
@@ -57,18 +57,26 @@
 
   static const double _quadWts[];
 
-  static const double _basis[];
+  static const double _quadPts[];
 
-  static const double _basisDeriv[];
+  static const double _basisVert[];
 
-  static const double _quadPts[];
+  static const double _basisDerivVert[];
 
-  static const double _jacobian[];
+  static const double _jacobianVert[];
 
-  static const double _jacobianDet[];
+  static const double _jacobianDetVert[];
 
-  static const double _jacobianInv[];
+  static const double _basisQuad[];
 
+  static const double _basisDerivQuad[];
+
+  static const double _jacobianQuad[];
+
+  static const double _jacobianDetQuad[];
+
+  static const double _jacobianInvQuad[];
+
 };
 
 #endif // pylith_feassemble_quadraturedata1din3dlinear_hh

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din3DQuadratic.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din3DQuadratic.cc	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din3DQuadratic.cc	2007-04-27 20:27:03 UTC (rev 6715)
@@ -46,7 +46,46 @@
   1.00000000e+00,  1.00000000e+00,
 };
 
-const double pylith::feassemble::QuadratureData1Din3DQuadratic::_basis[] = {
+const double pylith::feassemble::QuadratureData1Din3DQuadratic::_quadPts[] = {
+  7.16346035e-01, -7.27029638e-01, -7.43375673e-01,
+ -1.49679369e-01,  1.29369630e+00,  2.14337567e+00,
+};
+
+const double pylith::feassemble::QuadratureData1Din3DQuadratic::_basisVert[] = {
+  1.00000000e+00,
+  0.00000000e+00,
+ -0.00000000e+00,
+ -0.00000000e+00,
+  1.00000000e+00,
+  0.00000000e+00,
+ -0.00000000e+00,
+  0.00000000e+00,
+  1.00000000e+00,
+};
+
+const double pylith::feassemble::QuadratureData1Din3DQuadratic::_basisDerivVert[] = {
+ -1.50000000e+00,
+  2.00000000e+00,
+ -5.00000000e-01,
+ -5.00000000e-01,
+ -0.00000000e+00,
+  5.00000000e-01,
+  5.00000000e-01,
+ -2.00000000e+00,
+  1.50000000e+00,
+};
+
+const double pylith::feassemble::QuadratureData1Din3DQuadratic::_jacobianVert[] = {
+ -6.50000000e-01,  1.85000000e+00,  3.10000000e+00,
+ -7.50000000e-01,  1.75000000e+00,  2.50000000e+00,
+ -8.50000000e-01,  1.65000000e+00,  1.90000000e+00,
+};
+
+const double pylith::feassemble::QuadratureData1Din3DQuadratic::_jacobianDetVert[] = {
+  3.66810578e+00,  3.14245127e+00,  2.65612500e+00,
+};
+
+const double pylith::feassemble::QuadratureData1Din3DQuadratic::_basisQuad[] = {
   4.55341801e-01,
   6.66666667e-01,
  -1.22008468e-01,
@@ -55,7 +94,7 @@
   4.55341801e-01,
 };
 
-const double pylith::feassemble::QuadratureData1Din3DQuadratic::_basisDeriv[] = {
+const double pylith::feassemble::QuadratureData1Din3DQuadratic::_basisDerivQuad[] = {
  -1.07735027e+00,
   1.15470054e+00,
  -7.73502692e-02,
@@ -64,21 +103,16 @@
   1.07735027e+00,
 };
 
-const double pylith::feassemble::QuadratureData1Din3DQuadratic::_quadPts[] = {
-  7.16346035e-01, -7.27029638e-01, -7.43375673e-01,
- -1.49679369e-01,  1.29369630e+00,  2.14337567e+00,
-};
-
-const double pylith::feassemble::QuadratureData1Din3DQuadratic::_jacobian[] = {
+const double pylith::feassemble::QuadratureData1Din3DQuadratic::_jacobianQuad[] = {
  -6.92264973e-01,  1.80773503e+00,  2.84641016e+00,
  -8.07735027e-01,  1.69226497e+00,  2.15358984e+00,
 };
 
-const double pylith::feassemble::QuadratureData1Din3DQuadratic::_jacobianDet[] = {
+const double pylith::feassemble::QuadratureData1Din3DQuadratic::_jacobianDetQuad[] = {
   3.44226488e+00,  2.85554650e+00,
 };
 
-const double pylith::feassemble::QuadratureData1Din3DQuadratic::_jacobianInv[] = {
+const double pylith::feassemble::QuadratureData1Din3DQuadratic::_jacobianInvQuad[] = {
  -1.44453358e+00,
   5.53178417e-01,
   3.51319713e-01,
@@ -99,12 +133,16 @@
   cells = const_cast<int*>(_cells);
   quadPtsRef = const_cast<double*>(_quadPtsRef);
   quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDeriv = const_cast<double*>(_basisDeriv);
   quadPts = const_cast<double*>(_quadPts);
-  jacobian = const_cast<double*>(_jacobian);
-  jacobianDet = const_cast<double*>(_jacobianDet);
-  jacobianInv = const_cast<double*>(_jacobianInv);
+  basisVert = const_cast<double*>(_basisVert);
+  basisDerivVert = const_cast<double*>(_basisDerivVert);
+  jacobianVert = const_cast<double*>(_jacobianVert);
+  jacobianDetVert = const_cast<double*>(_jacobianDetVert);
+  basisQuad = const_cast<double*>(_basisQuad);
+  basisDerivQuad = const_cast<double*>(_basisDerivQuad);
+  jacobianQuad = const_cast<double*>(_jacobianQuad);
+  jacobianDetQuad = const_cast<double*>(_jacobianDetQuad);
+  jacobianInvQuad = const_cast<double*>(_jacobianInvQuad);
 } // constructor
 
 pylith::feassemble::QuadratureData1Din3DQuadratic::~QuadratureData1Din3DQuadratic(void)

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din3DQuadratic.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din3DQuadratic.hh	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din3DQuadratic.hh	2007-04-27 20:27:03 UTC (rev 6715)
@@ -57,18 +57,26 @@
 
   static const double _quadWts[];
 
-  static const double _basis[];
+  static const double _quadPts[];
 
-  static const double _basisDeriv[];
+  static const double _basisVert[];
 
-  static const double _quadPts[];
+  static const double _basisDerivVert[];
 
-  static const double _jacobian[];
+  static const double _jacobianVert[];
 
-  static const double _jacobianDet[];
+  static const double _jacobianDetVert[];
 
-  static const double _jacobianInv[];
+  static const double _basisQuad[];
 
+  static const double _basisDerivQuad[];
+
+  static const double _jacobianQuad[];
+
+  static const double _jacobianDetQuad[];
+
+  static const double _jacobianInvQuad[];
+
 };
 
 #endif // pylith_feassemble_quadraturedata1din3dquadratic_hh

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2DLinear.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2DLinear.cc	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2DLinear.cc	2007-04-27 20:27:03 UTC (rev 6715)
@@ -45,30 +45,62 @@
   5.00000000e-01,
 };
 
-const double pylith::feassemble::QuadratureData2DLinear::_basis[] = {
+const double pylith::feassemble::QuadratureData2DLinear::_quadPts[] = {
+ -1.66666667e-01, -3.33333333e-02,
+};
+
+const double pylith::feassemble::QuadratureData2DLinear::_basisVert[] = {
+  1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,
+  1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,
+  1.00000000e+00,};
+
+const double pylith::feassemble::QuadratureData2DLinear::_basisDerivVert[] = {
+ -1.00000000e+00, -1.00000000e+00,
+  1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  1.00000000e+00,
+ -1.00000000e+00, -1.00000000e+00,
+  1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  1.00000000e+00,
+ -1.00000000e+00, -1.00000000e+00,
+  1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  1.00000000e+00,
+};
+
+const double pylith::feassemble::QuadratureData2DLinear::_jacobianVert[] = {
+  1.00000000e-01,  9.00000000e-01,
+ -1.20000000e+00,  2.00000000e-01,
+  1.00000000e-01,  9.00000000e-01,
+ -1.20000000e+00,  2.00000000e-01,
+  1.00000000e-01,  9.00000000e-01,
+ -1.20000000e+00,  2.00000000e-01,
+};
+
+const double pylith::feassemble::QuadratureData2DLinear::_jacobianDetVert[] = {
+  1.10000000e+00,  1.10000000e+00,  1.10000000e+00,
+};
+
+const double pylith::feassemble::QuadratureData2DLinear::_basisQuad[] = {
   3.33333333e-01,  3.33333333e-01,
   3.33333333e-01,};
 
-const double pylith::feassemble::QuadratureData2DLinear::_basisDeriv[] = {
+const double pylith::feassemble::QuadratureData2DLinear::_basisDerivQuad[] = {
  -1.00000000e+00, -1.00000000e+00,
   1.00000000e+00,  0.00000000e+00,
   0.00000000e+00,  1.00000000e+00,
 };
 
-const double pylith::feassemble::QuadratureData2DLinear::_quadPts[] = {
- -1.66666667e-01, -3.33333333e-02,
-};
-
-const double pylith::feassemble::QuadratureData2DLinear::_jacobian[] = {
+const double pylith::feassemble::QuadratureData2DLinear::_jacobianQuad[] = {
   1.00000000e-01,  9.00000000e-01,
  -1.20000000e+00,  2.00000000e-01,
 };
 
-const double pylith::feassemble::QuadratureData2DLinear::_jacobianDet[] = {
+const double pylith::feassemble::QuadratureData2DLinear::_jacobianDetQuad[] = {
   1.10000000e+00,
 };
 
-const double pylith::feassemble::QuadratureData2DLinear::_jacobianInv[] = {
+const double pylith::feassemble::QuadratureData2DLinear::_jacobianInvQuad[] = {
   1.81818182e-01, -8.18181818e-01,
   1.09090909e+00,  9.09090909e-02,
 };
@@ -85,12 +117,16 @@
   cells = const_cast<int*>(_cells);
   quadPtsRef = const_cast<double*>(_quadPtsRef);
   quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDeriv = const_cast<double*>(_basisDeriv);
   quadPts = const_cast<double*>(_quadPts);
-  jacobian = const_cast<double*>(_jacobian);
-  jacobianDet = const_cast<double*>(_jacobianDet);
-  jacobianInv = const_cast<double*>(_jacobianInv);
+  basisVert = const_cast<double*>(_basisVert);
+  basisDerivVert = const_cast<double*>(_basisDerivVert);
+  jacobianVert = const_cast<double*>(_jacobianVert);
+  jacobianDetVert = const_cast<double*>(_jacobianDetVert);
+  basisQuad = const_cast<double*>(_basisQuad);
+  basisDerivQuad = const_cast<double*>(_basisDerivQuad);
+  jacobianQuad = const_cast<double*>(_jacobianQuad);
+  jacobianDetQuad = const_cast<double*>(_jacobianDetQuad);
+  jacobianInvQuad = const_cast<double*>(_jacobianInvQuad);
 } // constructor
 
 pylith::feassemble::QuadratureData2DLinear::~QuadratureData2DLinear(void)

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2DLinear.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2DLinear.hh	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2DLinear.hh	2007-04-27 20:27:03 UTC (rev 6715)
@@ -57,18 +57,26 @@
 
   static const double _quadWts[];
 
-  static const double _basis[];
+  static const double _quadPts[];
 
-  static const double _basisDeriv[];
+  static const double _basisVert[];
 
-  static const double _quadPts[];
+  static const double _basisDerivVert[];
 
-  static const double _jacobian[];
+  static const double _jacobianVert[];
 
-  static const double _jacobianDet[];
+  static const double _jacobianDetVert[];
 
-  static const double _jacobianInv[];
+  static const double _basisQuad[];
 
+  static const double _basisDerivQuad[];
+
+  static const double _jacobianQuad[];
+
+  static const double _jacobianDetQuad[];
+
+  static const double _jacobianInvQuad[];
+
 };
 
 #endif // pylith_feassemble_quadraturedata2dlinear_hh

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2DQuadratic.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2DQuadratic.cc	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2DQuadratic.cc	2007-04-27 20:27:03 UTC (rev 6715)
@@ -50,7 +50,92 @@
   1.66666667e-01,  1.66666667e-01,  1.66666667e-01,
 };
 
-const double pylith::feassemble::QuadratureData2DQuadratic::_basis[] = {
+const double pylith::feassemble::QuadratureData2DQuadratic::_quadPts[] = {
+  4.72222222e-01, -3.88888889e-02,
+ -7.77777778e-01,  1.77777778e-01,
+ -6.94444444e-01, -6.38888889e-01,
+};
+
+const double pylith::feassemble::QuadratureData2DQuadratic::_basisVert[] = {
+  1.00000000e+00, -0.00000000e+00,
+ -0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,
+ -0.00000000e+00,  1.00000000e+00,
+ -0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,
+ -0.00000000e+00, -0.00000000e+00,
+  1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,
+ -0.00000000e+00,  1.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00, -0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  1.00000000e+00,
+ -0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,
+  1.00000000e+00,  0.00000000e+00,
+};
+
+const double pylith::feassemble::QuadratureData2DQuadratic::_basisDerivVert[] = {
+ -3.00000000e+00, -3.00000000e+00,
+ -1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00, -1.00000000e+00,
+  4.00000000e+00, -0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,
+ -0.00000000e+00,  4.00000000e+00,
+  1.00000000e+00,  1.00000000e+00,
+  3.00000000e+00,  0.00000000e+00,
+  0.00000000e+00, -1.00000000e+00,
+ -4.00000000e+00, -4.00000000e+00,
+  0.00000000e+00,  4.00000000e+00,
+ -0.00000000e+00,  0.00000000e+00,
+  1.00000000e+00,  1.00000000e+00,
+ -1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  3.00000000e+00,
+  0.00000000e+00, -0.00000000e+00,
+  4.00000000e+00,  0.00000000e+00,
+ -4.00000000e+00, -4.00000000e+00,
+ -1.00000000e+00, -1.00000000e+00,
+  1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00, -1.00000000e+00,
+  0.00000000e+00, -2.00000000e+00,
+  0.00000000e+00,  2.00000000e+00,
+ -0.00000000e+00,  2.00000000e+00,
+ -1.00000000e+00, -1.00000000e+00,
+ -1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  1.00000000e+00,
+  2.00000000e+00, -0.00000000e+00,
+  2.00000000e+00,  0.00000000e+00,
+ -2.00000000e+00,  0.00000000e+00,
+  1.00000000e+00,  1.00000000e+00,
+  1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  1.00000000e+00,
+ -2.00000000e+00, -2.00000000e+00,
+  2.00000000e+00,  2.00000000e+00,
+ -2.00000000e+00, -2.00000000e+00,
+};
+
+const double pylith::feassemble::QuadratureData2DQuadratic::_jacobianVert[] = {
+  2.00000000e+00,  4.00000000e-01,
+ -5.00000000e-01,  1.50000000e+00,
+  2.00000000e+00,  2.00000000e+00,
+  1.50000000e+00,  2.30000000e+00,
+  4.00000000e+00,  1.20000000e+00,
+ -5.00000000e-01,  1.50000000e+00,
+  2.00000000e+00,  1.20000000e+00,
+  5.00000000e-01,  1.90000000e+00,
+  3.00000000e+00,  8.00000000e-01,
+ -5.00000000e-01,  1.50000000e+00,
+  3.00000000e+00,  1.60000000e+00,
+  5.00000000e-01,  1.90000000e+00,
+};
+
+const double pylith::feassemble::QuadratureData2DQuadratic::_jacobianDetVert[] = {
+  3.20000000e+00,  1.60000000e+00,  6.60000000e+00,  3.20000000e+00,  4.90000000e+00,  4.90000000e+00,
+};
+
+const double pylith::feassemble::QuadratureData2DQuadratic::_basisQuad[] = {
  -1.11111111e-01,  2.22222222e-01,
  -1.11111111e-01,  4.44444444e-01,
   4.44444444e-01,  1.11111111e-01,
@@ -62,7 +147,7 @@
   1.11111111e-01,  4.44444444e-01,
 };
 
-const double pylith::feassemble::QuadratureData2DQuadratic::_basisDeriv[] = {
+const double pylith::feassemble::QuadratureData2DQuadratic::_basisDerivQuad[] = {
   3.33333333e-01,  3.33333333e-01,
   1.66666667e+00,  0.00000000e+00,
   0.00000000e+00, -3.33333333e-01,
@@ -83,13 +168,7 @@
  -6.66666667e-01,  2.00000000e+00,
 };
 
-const double pylith::feassemble::QuadratureData2DQuadratic::_quadPts[] = {
-  4.72222222e-01, -3.88888889e-02,
- -7.77777778e-01,  1.77777778e-01,
- -6.94444444e-01, -6.38888889e-01,
-};
-
-const double pylith::feassemble::QuadratureData2DQuadratic::_jacobian[] = {
+const double pylith::feassemble::QuadratureData2DQuadratic::_jacobianQuad[] = {
   2.33333333e+00,  1.60000000e+00,
   8.33333333e-01,  2.03333333e+00,
   3.33333333e+00,  1.20000000e+00,
@@ -98,11 +177,11 @@
  -1.66666667e-01,  1.63333333e+00,
 };
 
-const double pylith::feassemble::QuadratureData2DQuadratic::_jacobianDet[] = {
+const double pylith::feassemble::QuadratureData2DQuadratic::_jacobianDetQuad[] = {
   3.41111111e+00,  5.64444444e+00,  3.94444444e+00,
 };
 
-const double pylith::feassemble::QuadratureData2DQuadratic::_jacobianInv[] = {
+const double pylith::feassemble::QuadratureData2DQuadratic::_jacobianInvQuad[] = {
   5.96091205e-01, -4.69055375e-01,
  -2.44299674e-01,  6.84039088e-01,
   2.89370079e-01, -2.12598425e-01,
@@ -123,12 +202,16 @@
   cells = const_cast<int*>(_cells);
   quadPtsRef = const_cast<double*>(_quadPtsRef);
   quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDeriv = const_cast<double*>(_basisDeriv);
   quadPts = const_cast<double*>(_quadPts);
-  jacobian = const_cast<double*>(_jacobian);
-  jacobianDet = const_cast<double*>(_jacobianDet);
-  jacobianInv = const_cast<double*>(_jacobianInv);
+  basisVert = const_cast<double*>(_basisVert);
+  basisDerivVert = const_cast<double*>(_basisDerivVert);
+  jacobianVert = const_cast<double*>(_jacobianVert);
+  jacobianDetVert = const_cast<double*>(_jacobianDetVert);
+  basisQuad = const_cast<double*>(_basisQuad);
+  basisDerivQuad = const_cast<double*>(_basisDerivQuad);
+  jacobianQuad = const_cast<double*>(_jacobianQuad);
+  jacobianDetQuad = const_cast<double*>(_jacobianDetQuad);
+  jacobianInvQuad = const_cast<double*>(_jacobianInvQuad);
 } // constructor
 
 pylith::feassemble::QuadratureData2DQuadratic::~QuadratureData2DQuadratic(void)

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2DQuadratic.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2DQuadratic.hh	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2DQuadratic.hh	2007-04-27 20:27:03 UTC (rev 6715)
@@ -57,18 +57,26 @@
 
   static const double _quadWts[];
 
-  static const double _basis[];
+  static const double _quadPts[];
 
-  static const double _basisDeriv[];
+  static const double _basisVert[];
 
-  static const double _quadPts[];
+  static const double _basisDerivVert[];
 
-  static const double _jacobian[];
+  static const double _jacobianVert[];
 
-  static const double _jacobianDet[];
+  static const double _jacobianDetVert[];
 
-  static const double _jacobianInv[];
+  static const double _basisQuad[];
 
+  static const double _basisDerivQuad[];
+
+  static const double _jacobianQuad[];
+
+  static const double _jacobianDetQuad[];
+
+  static const double _jacobianInvQuad[];
+
 };
 
 #endif // pylith_feassemble_quadraturedata2dquadratic_hh

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearXY.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearXY.cc	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearXY.cc	2007-04-27 20:27:03 UTC (rev 6715)
@@ -45,30 +45,62 @@
   5.00000000e-01,
 };
 
-const double pylith::feassemble::QuadratureData2Din3DLinearXY::_basis[] = {
+const double pylith::feassemble::QuadratureData2Din3DLinearXY::_quadPts[] = {
+  3.33333333e-01,  3.33333333e-01,  0.00000000e+00,
+};
+
+const double pylith::feassemble::QuadratureData2Din3DLinearXY::_basisVert[] = {
+  1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,
+  1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,
+  1.00000000e+00,};
+
+const double pylith::feassemble::QuadratureData2Din3DLinearXY::_basisDerivVert[] = {
+ -1.00000000e+00, -1.00000000e+00,
+  1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  1.00000000e+00,
+ -1.00000000e+00, -1.00000000e+00,
+  1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  1.00000000e+00,
+ -1.00000000e+00, -1.00000000e+00,
+  1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  1.00000000e+00,
+};
+
+const double pylith::feassemble::QuadratureData2Din3DLinearXY::_jacobianVert[] = {
+  1.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  1.00000000e+00,  0.00000000e+00,
+  1.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  1.00000000e+00,  0.00000000e+00,
+  1.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  1.00000000e+00,  0.00000000e+00,
+};
+
+const double pylith::feassemble::QuadratureData2Din3DLinearXY::_jacobianDetVert[] = {
+  1.00000000e+00,  1.00000000e+00,  1.00000000e+00,
+};
+
+const double pylith::feassemble::QuadratureData2Din3DLinearXY::_basisQuad[] = {
   3.33333333e-01,  3.33333333e-01,
   3.33333333e-01,};
 
-const double pylith::feassemble::QuadratureData2Din3DLinearXY::_basisDeriv[] = {
+const double pylith::feassemble::QuadratureData2Din3DLinearXY::_basisDerivQuad[] = {
  -1.00000000e+00, -1.00000000e+00,
   1.00000000e+00,  0.00000000e+00,
   0.00000000e+00,  1.00000000e+00,
 };
 
-const double pylith::feassemble::QuadratureData2Din3DLinearXY::_quadPts[] = {
-  3.33333333e-01,  3.33333333e-01,  0.00000000e+00,
-};
-
-const double pylith::feassemble::QuadratureData2Din3DLinearXY::_jacobian[] = {
+const double pylith::feassemble::QuadratureData2Din3DLinearXY::_jacobianQuad[] = {
   1.00000000e+00,  0.00000000e+00,  0.00000000e+00,
   0.00000000e+00,  1.00000000e+00,  0.00000000e+00,
 };
 
-const double pylith::feassemble::QuadratureData2Din3DLinearXY::_jacobianDet[] = {
+const double pylith::feassemble::QuadratureData2Din3DLinearXY::_jacobianDetQuad[] = {
   1.00000000e+00,
 };
 
-const double pylith::feassemble::QuadratureData2Din3DLinearXY::_jacobianInv[] = {
+const double pylith::feassemble::QuadratureData2Din3DLinearXY::_jacobianInvQuad[] = {
   1.00000000e+00,  0.00000000e+00,
   0.00000000e+00,  1.00000000e+00,
   0.00000000e+00,  0.00000000e+00,
@@ -86,12 +118,16 @@
   cells = const_cast<int*>(_cells);
   quadPtsRef = const_cast<double*>(_quadPtsRef);
   quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDeriv = const_cast<double*>(_basisDeriv);
   quadPts = const_cast<double*>(_quadPts);
-  jacobian = const_cast<double*>(_jacobian);
-  jacobianDet = const_cast<double*>(_jacobianDet);
-  jacobianInv = const_cast<double*>(_jacobianInv);
+  basisVert = const_cast<double*>(_basisVert);
+  basisDerivVert = const_cast<double*>(_basisDerivVert);
+  jacobianVert = const_cast<double*>(_jacobianVert);
+  jacobianDetVert = const_cast<double*>(_jacobianDetVert);
+  basisQuad = const_cast<double*>(_basisQuad);
+  basisDerivQuad = const_cast<double*>(_basisDerivQuad);
+  jacobianQuad = const_cast<double*>(_jacobianQuad);
+  jacobianDetQuad = const_cast<double*>(_jacobianDetQuad);
+  jacobianInvQuad = const_cast<double*>(_jacobianInvQuad);
 } // constructor
 
 pylith::feassemble::QuadratureData2Din3DLinearXY::~QuadratureData2Din3DLinearXY(void)

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearXY.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearXY.hh	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearXY.hh	2007-04-27 20:27:03 UTC (rev 6715)
@@ -57,18 +57,26 @@
 
   static const double _quadWts[];
 
-  static const double _basis[];
+  static const double _quadPts[];
 
-  static const double _basisDeriv[];
+  static const double _basisVert[];
 
-  static const double _quadPts[];
+  static const double _basisDerivVert[];
 
-  static const double _jacobian[];
+  static const double _jacobianVert[];
 
-  static const double _jacobianDet[];
+  static const double _jacobianDetVert[];
 
-  static const double _jacobianInv[];
+  static const double _basisQuad[];
 
+  static const double _basisDerivQuad[];
+
+  static const double _jacobianQuad[];
+
+  static const double _jacobianDetQuad[];
+
+  static const double _jacobianInvQuad[];
+
 };
 
 #endif // pylith_feassemble_quadraturedata2din3dlinearxy_hh

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearXYZ.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearXYZ.cc	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearXYZ.cc	2007-04-27 20:27:03 UTC (rev 6715)
@@ -45,30 +45,62 @@
   5.00000000e-01,
 };
 
-const double pylith::feassemble::QuadratureData2Din3DLinearXYZ::_basis[] = {
+const double pylith::feassemble::QuadratureData2Din3DLinearXYZ::_quadPts[] = {
+  8.33333333e-01,  1.66666667e-01,  1.16666667e+00,
+};
+
+const double pylith::feassemble::QuadratureData2Din3DLinearXYZ::_basisVert[] = {
+  1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,
+  1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,
+  1.00000000e+00,};
+
+const double pylith::feassemble::QuadratureData2Din3DLinearXYZ::_basisDerivVert[] = {
+ -1.00000000e+00, -1.00000000e+00,
+  1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  1.00000000e+00,
+ -1.00000000e+00, -1.00000000e+00,
+  1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  1.00000000e+00,
+ -1.00000000e+00, -1.00000000e+00,
+  1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  1.00000000e+00,
+};
+
+const double pylith::feassemble::QuadratureData2Din3DLinearXYZ::_jacobianVert[] = {
+  2.50000000e+00,  2.50000000e+00,  5.00000000e-01,
+ -1.50000000e+00,  4.00000000e+00,  4.50000000e+00,
+  2.50000000e+00,  2.50000000e+00,  5.00000000e-01,
+ -1.50000000e+00,  4.00000000e+00,  4.50000000e+00,
+  2.50000000e+00,  2.50000000e+00,  5.00000000e-01,
+ -1.50000000e+00,  4.00000000e+00,  4.50000000e+00,
+};
+
+const double pylith::feassemble::QuadratureData2Din3DLinearXYZ::_jacobianDetVert[] = {
+  2.04603275e+01,  2.04603275e+01,  2.04603275e+01,
+};
+
+const double pylith::feassemble::QuadratureData2Din3DLinearXYZ::_basisQuad[] = {
   3.33333333e-01,  3.33333333e-01,
   3.33333333e-01,};
 
-const double pylith::feassemble::QuadratureData2Din3DLinearXYZ::_basisDeriv[] = {
+const double pylith::feassemble::QuadratureData2Din3DLinearXYZ::_basisDerivQuad[] = {
  -1.00000000e+00, -1.00000000e+00,
   1.00000000e+00,  0.00000000e+00,
   0.00000000e+00,  1.00000000e+00,
 };
 
-const double pylith::feassemble::QuadratureData2Din3DLinearXYZ::_quadPts[] = {
-  8.33333333e-01,  1.66666667e-01,  1.16666667e+00,
-};
-
-const double pylith::feassemble::QuadratureData2Din3DLinearXYZ::_jacobian[] = {
+const double pylith::feassemble::QuadratureData2Din3DLinearXYZ::_jacobianQuad[] = {
   2.50000000e+00,  2.50000000e+00,  5.00000000e-01,
  -1.50000000e+00,  4.00000000e+00,  4.50000000e+00,
 };
 
-const double pylith::feassemble::QuadratureData2Din3DLinearXYZ::_jacobianDet[] = {
+const double pylith::feassemble::QuadratureData2Din3DLinearXYZ::_jacobianDetQuad[] = {
   2.04603275e+01,
 };
 
-const double pylith::feassemble::QuadratureData2Din3DLinearXYZ::_jacobianInv[] = {
+const double pylith::feassemble::QuadratureData2Din3DLinearXYZ::_jacobianInvQuad[] = {
   2.90909091e-01, -1.81818182e-01,
   1.09090909e-01,  1.81818182e-01,
  -4.32432432e-01,  2.70270270e-01,
@@ -86,12 +118,16 @@
   cells = const_cast<int*>(_cells);
   quadPtsRef = const_cast<double*>(_quadPtsRef);
   quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDeriv = const_cast<double*>(_basisDeriv);
   quadPts = const_cast<double*>(_quadPts);
-  jacobian = const_cast<double*>(_jacobian);
-  jacobianDet = const_cast<double*>(_jacobianDet);
-  jacobianInv = const_cast<double*>(_jacobianInv);
+  basisVert = const_cast<double*>(_basisVert);
+  basisDerivVert = const_cast<double*>(_basisDerivVert);
+  jacobianVert = const_cast<double*>(_jacobianVert);
+  jacobianDetVert = const_cast<double*>(_jacobianDetVert);
+  basisQuad = const_cast<double*>(_basisQuad);
+  basisDerivQuad = const_cast<double*>(_basisDerivQuad);
+  jacobianQuad = const_cast<double*>(_jacobianQuad);
+  jacobianDetQuad = const_cast<double*>(_jacobianDetQuad);
+  jacobianInvQuad = const_cast<double*>(_jacobianInvQuad);
 } // constructor
 
 pylith::feassemble::QuadratureData2Din3DLinearXYZ::~QuadratureData2Din3DLinearXYZ(void)

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearXYZ.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearXYZ.hh	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearXYZ.hh	2007-04-27 20:27:03 UTC (rev 6715)
@@ -57,18 +57,26 @@
 
   static const double _quadWts[];
 
-  static const double _basis[];
+  static const double _quadPts[];
 
-  static const double _basisDeriv[];
+  static const double _basisVert[];
 
-  static const double _quadPts[];
+  static const double _basisDerivVert[];
 
-  static const double _jacobian[];
+  static const double _jacobianVert[];
 
-  static const double _jacobianDet[];
+  static const double _jacobianDetVert[];
 
-  static const double _jacobianInv[];
+  static const double _basisQuad[];
 
+  static const double _basisDerivQuad[];
+
+  static const double _jacobianQuad[];
+
+  static const double _jacobianDetQuad[];
+
+  static const double _jacobianInvQuad[];
+
 };
 
 #endif // pylith_feassemble_quadraturedata2din3dlinearxyz_hh

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearXZ.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearXZ.cc	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearXZ.cc	2007-04-27 20:27:03 UTC (rev 6715)
@@ -45,30 +45,62 @@
   5.00000000e-01,
 };
 
-const double pylith::feassemble::QuadratureData2Din3DLinearXZ::_basis[] = {
+const double pylith::feassemble::QuadratureData2Din3DLinearXZ::_quadPts[] = {
+ -3.33333333e-01,  0.00000000e+00,  3.33333333e-01,
+};
+
+const double pylith::feassemble::QuadratureData2Din3DLinearXZ::_basisVert[] = {
+  1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,
+  1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,
+  1.00000000e+00,};
+
+const double pylith::feassemble::QuadratureData2Din3DLinearXZ::_basisDerivVert[] = {
+ -1.00000000e+00, -1.00000000e+00,
+  1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  1.00000000e+00,
+ -1.00000000e+00, -1.00000000e+00,
+  1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  1.00000000e+00,
+ -1.00000000e+00, -1.00000000e+00,
+  1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  1.00000000e+00,
+};
+
+const double pylith::feassemble::QuadratureData2Din3DLinearXZ::_jacobianVert[] = {
+ -1.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  1.00000000e+00,
+ -1.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  1.00000000e+00,
+ -1.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  1.00000000e+00,
+};
+
+const double pylith::feassemble::QuadratureData2Din3DLinearXZ::_jacobianDetVert[] = {
+  1.00000000e+00,  1.00000000e+00,  1.00000000e+00,
+};
+
+const double pylith::feassemble::QuadratureData2Din3DLinearXZ::_basisQuad[] = {
   3.33333333e-01,  3.33333333e-01,
   3.33333333e-01,};
 
-const double pylith::feassemble::QuadratureData2Din3DLinearXZ::_basisDeriv[] = {
+const double pylith::feassemble::QuadratureData2Din3DLinearXZ::_basisDerivQuad[] = {
  -1.00000000e+00, -1.00000000e+00,
   1.00000000e+00,  0.00000000e+00,
   0.00000000e+00,  1.00000000e+00,
 };
 
-const double pylith::feassemble::QuadratureData2Din3DLinearXZ::_quadPts[] = {
- -3.33333333e-01,  0.00000000e+00,  3.33333333e-01,
-};
-
-const double pylith::feassemble::QuadratureData2Din3DLinearXZ::_jacobian[] = {
+const double pylith::feassemble::QuadratureData2Din3DLinearXZ::_jacobianQuad[] = {
  -1.00000000e+00,  0.00000000e+00,  0.00000000e+00,
   0.00000000e+00,  0.00000000e+00,  1.00000000e+00,
 };
 
-const double pylith::feassemble::QuadratureData2Din3DLinearXZ::_jacobianDet[] = {
+const double pylith::feassemble::QuadratureData2Din3DLinearXZ::_jacobianDetQuad[] = {
   1.00000000e+00,
 };
 
-const double pylith::feassemble::QuadratureData2Din3DLinearXZ::_jacobianInv[] = {
+const double pylith::feassemble::QuadratureData2Din3DLinearXZ::_jacobianInvQuad[] = {
  -1.00000000e+00, -0.00000000e+00,
   0.00000000e+00,  0.00000000e+00,
   0.00000000e+00,  1.00000000e+00,
@@ -86,12 +118,16 @@
   cells = const_cast<int*>(_cells);
   quadPtsRef = const_cast<double*>(_quadPtsRef);
   quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDeriv = const_cast<double*>(_basisDeriv);
   quadPts = const_cast<double*>(_quadPts);
-  jacobian = const_cast<double*>(_jacobian);
-  jacobianDet = const_cast<double*>(_jacobianDet);
-  jacobianInv = const_cast<double*>(_jacobianInv);
+  basisVert = const_cast<double*>(_basisVert);
+  basisDerivVert = const_cast<double*>(_basisDerivVert);
+  jacobianVert = const_cast<double*>(_jacobianVert);
+  jacobianDetVert = const_cast<double*>(_jacobianDetVert);
+  basisQuad = const_cast<double*>(_basisQuad);
+  basisDerivQuad = const_cast<double*>(_basisDerivQuad);
+  jacobianQuad = const_cast<double*>(_jacobianQuad);
+  jacobianDetQuad = const_cast<double*>(_jacobianDetQuad);
+  jacobianInvQuad = const_cast<double*>(_jacobianInvQuad);
 } // constructor
 
 pylith::feassemble::QuadratureData2Din3DLinearXZ::~QuadratureData2Din3DLinearXZ(void)

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearXZ.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearXZ.hh	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearXZ.hh	2007-04-27 20:27:03 UTC (rev 6715)
@@ -57,18 +57,26 @@
 
   static const double _quadWts[];
 
-  static const double _basis[];
+  static const double _quadPts[];
 
-  static const double _basisDeriv[];
+  static const double _basisVert[];
 
-  static const double _quadPts[];
+  static const double _basisDerivVert[];
 
-  static const double _jacobian[];
+  static const double _jacobianVert[];
 
-  static const double _jacobianDet[];
+  static const double _jacobianDetVert[];
 
-  static const double _jacobianInv[];
+  static const double _basisQuad[];
 
+  static const double _basisDerivQuad[];
+
+  static const double _jacobianQuad[];
+
+  static const double _jacobianDetQuad[];
+
+  static const double _jacobianInvQuad[];
+
 };
 
 #endif // pylith_feassemble_quadraturedata2din3dlinearxz_hh

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearYZ.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearYZ.cc	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearYZ.cc	2007-04-27 20:27:03 UTC (rev 6715)
@@ -45,30 +45,62 @@
   5.00000000e-01,
 };
 
-const double pylith::feassemble::QuadratureData2Din3DLinearYZ::_basis[] = {
+const double pylith::feassemble::QuadratureData2Din3DLinearYZ::_quadPts[] = {
+  0.00000000e+00,  3.33333333e-01,  3.33333333e-01,
+};
+
+const double pylith::feassemble::QuadratureData2Din3DLinearYZ::_basisVert[] = {
+  1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,
+  1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,
+  1.00000000e+00,};
+
+const double pylith::feassemble::QuadratureData2Din3DLinearYZ::_basisDerivVert[] = {
+ -1.00000000e+00, -1.00000000e+00,
+  1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  1.00000000e+00,
+ -1.00000000e+00, -1.00000000e+00,
+  1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  1.00000000e+00,
+ -1.00000000e+00, -1.00000000e+00,
+  1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  1.00000000e+00,
+};
+
+const double pylith::feassemble::QuadratureData2Din3DLinearYZ::_jacobianVert[] = {
+  0.00000000e+00,  1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  1.00000000e+00,
+  0.00000000e+00,  1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  1.00000000e+00,
+  0.00000000e+00,  1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  1.00000000e+00,
+};
+
+const double pylith::feassemble::QuadratureData2Din3DLinearYZ::_jacobianDetVert[] = {
+  1.00000000e+00,  1.00000000e+00,  1.00000000e+00,
+};
+
+const double pylith::feassemble::QuadratureData2Din3DLinearYZ::_basisQuad[] = {
   3.33333333e-01,  3.33333333e-01,
   3.33333333e-01,};
 
-const double pylith::feassemble::QuadratureData2Din3DLinearYZ::_basisDeriv[] = {
+const double pylith::feassemble::QuadratureData2Din3DLinearYZ::_basisDerivQuad[] = {
  -1.00000000e+00, -1.00000000e+00,
   1.00000000e+00,  0.00000000e+00,
   0.00000000e+00,  1.00000000e+00,
 };
 
-const double pylith::feassemble::QuadratureData2Din3DLinearYZ::_quadPts[] = {
-  0.00000000e+00,  3.33333333e-01,  3.33333333e-01,
-};
-
-const double pylith::feassemble::QuadratureData2Din3DLinearYZ::_jacobian[] = {
+const double pylith::feassemble::QuadratureData2Din3DLinearYZ::_jacobianQuad[] = {
   0.00000000e+00,  1.00000000e+00,  0.00000000e+00,
   0.00000000e+00,  0.00000000e+00,  1.00000000e+00,
 };
 
-const double pylith::feassemble::QuadratureData2Din3DLinearYZ::_jacobianDet[] = {
+const double pylith::feassemble::QuadratureData2Din3DLinearYZ::_jacobianDetQuad[] = {
   1.00000000e+00,
 };
 
-const double pylith::feassemble::QuadratureData2Din3DLinearYZ::_jacobianInv[] = {
+const double pylith::feassemble::QuadratureData2Din3DLinearYZ::_jacobianInvQuad[] = {
   0.00000000e+00,  0.00000000e+00,
   1.00000000e+00,  0.00000000e+00,
   0.00000000e+00,  1.00000000e+00,
@@ -86,12 +118,16 @@
   cells = const_cast<int*>(_cells);
   quadPtsRef = const_cast<double*>(_quadPtsRef);
   quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDeriv = const_cast<double*>(_basisDeriv);
   quadPts = const_cast<double*>(_quadPts);
-  jacobian = const_cast<double*>(_jacobian);
-  jacobianDet = const_cast<double*>(_jacobianDet);
-  jacobianInv = const_cast<double*>(_jacobianInv);
+  basisVert = const_cast<double*>(_basisVert);
+  basisDerivVert = const_cast<double*>(_basisDerivVert);
+  jacobianVert = const_cast<double*>(_jacobianVert);
+  jacobianDetVert = const_cast<double*>(_jacobianDetVert);
+  basisQuad = const_cast<double*>(_basisQuad);
+  basisDerivQuad = const_cast<double*>(_basisDerivQuad);
+  jacobianQuad = const_cast<double*>(_jacobianQuad);
+  jacobianDetQuad = const_cast<double*>(_jacobianDetQuad);
+  jacobianInvQuad = const_cast<double*>(_jacobianInvQuad);
 } // constructor
 
 pylith::feassemble::QuadratureData2Din3DLinearYZ::~QuadratureData2Din3DLinearYZ(void)

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearYZ.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearYZ.hh	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearYZ.hh	2007-04-27 20:27:03 UTC (rev 6715)
@@ -57,18 +57,26 @@
 
   static const double _quadWts[];
 
-  static const double _basis[];
+  static const double _quadPts[];
 
-  static const double _basisDeriv[];
+  static const double _basisVert[];
 
-  static const double _quadPts[];
+  static const double _basisDerivVert[];
 
-  static const double _jacobian[];
+  static const double _jacobianVert[];
 
-  static const double _jacobianDet[];
+  static const double _jacobianDetVert[];
 
-  static const double _jacobianInv[];
+  static const double _basisQuad[];
 
+  static const double _basisDerivQuad[];
+
+  static const double _jacobianQuad[];
+
+  static const double _jacobianDetQuad[];
+
+  static const double _jacobianInvQuad[];
+
 };
 
 #endif // pylith_feassemble_quadraturedata2din3dlinearyz_hh

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2Din3DQuadratic.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2Din3DQuadratic.cc	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2Din3DQuadratic.cc	2007-04-27 20:27:03 UTC (rev 6715)
@@ -50,7 +50,92 @@
   1.66666667e-01,  1.66666667e-01,  1.66666667e-01,
 };
 
-const double pylith::feassemble::QuadratureData2Din3DQuadratic::_basis[] = {
+const double pylith::feassemble::QuadratureData2Din3DQuadratic::_quadPts[] = {
+  6.55555556e-01,  1.84444444e+00,  1.77777778e-01,
+  1.55555556e-01,  3.44444444e-01,  1.17777778e+00,
+  1.38888889e+00,  1.11111111e-01, -5.55555556e-02,
+};
+
+const double pylith::feassemble::QuadratureData2Din3DQuadratic::_basisVert[] = {
+  1.00000000e+00, -0.00000000e+00,
+ -0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,
+ -0.00000000e+00,  1.00000000e+00,
+ -0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,
+ -0.00000000e+00, -0.00000000e+00,
+  1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,
+ -0.00000000e+00,  1.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00, -0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  1.00000000e+00,
+ -0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,
+  1.00000000e+00,  0.00000000e+00,
+};
+
+const double pylith::feassemble::QuadratureData2Din3DQuadratic::_basisDerivVert[] = {
+ -3.00000000e+00, -3.00000000e+00,
+ -1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00, -1.00000000e+00,
+  4.00000000e+00, -0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,
+ -0.00000000e+00,  4.00000000e+00,
+  1.00000000e+00,  1.00000000e+00,
+  3.00000000e+00,  0.00000000e+00,
+  0.00000000e+00, -1.00000000e+00,
+ -4.00000000e+00, -4.00000000e+00,
+  0.00000000e+00,  4.00000000e+00,
+ -0.00000000e+00,  0.00000000e+00,
+  1.00000000e+00,  1.00000000e+00,
+ -1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  3.00000000e+00,
+  0.00000000e+00, -0.00000000e+00,
+  4.00000000e+00,  0.00000000e+00,
+ -4.00000000e+00, -4.00000000e+00,
+ -1.00000000e+00, -1.00000000e+00,
+  1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00, -1.00000000e+00,
+  0.00000000e+00, -2.00000000e+00,
+  0.00000000e+00,  2.00000000e+00,
+ -0.00000000e+00,  2.00000000e+00,
+ -1.00000000e+00, -1.00000000e+00,
+ -1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  1.00000000e+00,
+  2.00000000e+00, -0.00000000e+00,
+  2.00000000e+00,  0.00000000e+00,
+ -2.00000000e+00,  0.00000000e+00,
+  1.00000000e+00,  1.00000000e+00,
+  1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  1.00000000e+00,
+ -2.00000000e+00, -2.00000000e+00,
+  2.00000000e+00,  2.00000000e+00,
+ -2.00000000e+00, -2.00000000e+00,
+};
+
+const double pylith::feassemble::QuadratureData2Din3DQuadratic::_jacobianVert[] = {
+ -1.30000000e+00,  3.30000000e+00,  3.00000000e-01,
+ -2.30000000e+00,  3.00000000e-01,  2.30000000e+00,
+ -1.70000000e+00,  3.70000000e+00,  7.00000000e-01,
+ -2.30000000e+00,  3.00000000e-01,  2.30000000e+00,
+ -1.30000000e+00,  3.30000000e+00,  3.00000000e-01,
+ -2.70000000e+00,  7.00000000e-01,  2.70000000e+00,
+ -1.50000000e+00,  3.50000000e+00,  5.00000000e-01,
+ -2.30000000e+00,  3.00000000e-01,  2.30000000e+00,
+ -1.30000000e+00,  3.30000000e+00,  3.00000000e-01,
+ -2.50000000e+00,  5.00000000e-01,  2.50000000e+00,
+ -1.50000000e+00,  3.50000000e+00,  5.00000000e-01,
+ -2.50000000e+00,  5.00000000e-01,  2.50000000e+00,
+};
+
+const double pylith::feassemble::QuadratureData2Din3DQuadratic::_jacobianDetVert[] = {
+  1.06480045e+01,  1.17549989e+01,  1.21235308e+01,  1.12008928e+01,  1.13850780e+01,  1.19373364e+01,
+};
+
+const double pylith::feassemble::QuadratureData2Din3DQuadratic::_basisQuad[] = {
  -1.11111111e-01,  2.22222222e-01,
  -1.11111111e-01,  4.44444444e-01,
   4.44444444e-01,  1.11111111e-01,
@@ -62,7 +147,7 @@
   1.11111111e-01,  4.44444444e-01,
 };
 
-const double pylith::feassemble::QuadratureData2Din3DQuadratic::_basisDeriv[] = {
+const double pylith::feassemble::QuadratureData2Din3DQuadratic::_basisDerivQuad[] = {
   3.33333333e-01,  3.33333333e-01,
   1.66666667e+00,  0.00000000e+00,
   0.00000000e+00, -3.33333333e-01,
@@ -83,13 +168,7 @@
  -6.66666667e-01,  2.00000000e+00,
 };
 
-const double pylith::feassemble::QuadratureData2Din3DQuadratic::_quadPts[] = {
-  6.55555556e-01,  1.84444444e+00,  1.77777778e-01,
-  1.55555556e-01,  3.44444444e-01,  1.17777778e+00,
-  1.38888889e+00,  1.11111111e-01, -5.55555556e-02,
-};
-
-const double pylith::feassemble::QuadratureData2Din3DQuadratic::_jacobian[] = {
+const double pylith::feassemble::QuadratureData2Din3DQuadratic::_jacobianQuad[] = {
  -1.56666667e+00,  3.56666667e+00,  5.66666667e-01,
  -2.36666667e+00,  3.66666667e-01,  2.36666667e+00,
  -1.36666667e+00,  3.36666667e+00,  3.66666667e-01,
@@ -98,11 +177,11 @@
  -2.36666667e+00,  3.66666667e-01,  2.36666667e+00,
 };
 
-const double pylith::feassemble::QuadratureData2Din3DQuadratic::_jacobianDet[] = {
+const double pylith::feassemble::QuadratureData2Din3DQuadratic::_jacobianDetQuad[] = {
   1.16307065e+01,  1.18149623e+01,  1.10776050e+01,
 };
 
-const double pylith::feassemble::QuadratureData2Din3DQuadratic::_jacobianInv[] = {
+const double pylith::feassemble::QuadratureData2Din3DQuadratic::_jacobianInvQuad[] = {
   4.66101695e-02, -4.53389831e-01,
   3.00847458e-01, -1.99152542e-01,
  -4.45344130e-02,  4.33198381e-01,
@@ -126,12 +205,16 @@
   cells = const_cast<int*>(_cells);
   quadPtsRef = const_cast<double*>(_quadPtsRef);
   quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDeriv = const_cast<double*>(_basisDeriv);
   quadPts = const_cast<double*>(_quadPts);
-  jacobian = const_cast<double*>(_jacobian);
-  jacobianDet = const_cast<double*>(_jacobianDet);
-  jacobianInv = const_cast<double*>(_jacobianInv);
+  basisVert = const_cast<double*>(_basisVert);
+  basisDerivVert = const_cast<double*>(_basisDerivVert);
+  jacobianVert = const_cast<double*>(_jacobianVert);
+  jacobianDetVert = const_cast<double*>(_jacobianDetVert);
+  basisQuad = const_cast<double*>(_basisQuad);
+  basisDerivQuad = const_cast<double*>(_basisDerivQuad);
+  jacobianQuad = const_cast<double*>(_jacobianQuad);
+  jacobianDetQuad = const_cast<double*>(_jacobianDetQuad);
+  jacobianInvQuad = const_cast<double*>(_jacobianInvQuad);
 } // constructor
 
 pylith::feassemble::QuadratureData2Din3DQuadratic::~QuadratureData2Din3DQuadratic(void)

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2Din3DQuadratic.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2Din3DQuadratic.hh	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2Din3DQuadratic.hh	2007-04-27 20:27:03 UTC (rev 6715)
@@ -57,18 +57,26 @@
 
   static const double _quadWts[];
 
-  static const double _basis[];
+  static const double _quadPts[];
 
-  static const double _basisDeriv[];
+  static const double _basisVert[];
 
-  static const double _quadPts[];
+  static const double _basisDerivVert[];
 
-  static const double _jacobian[];
+  static const double _jacobianVert[];
 
-  static const double _jacobianDet[];
+  static const double _jacobianDetVert[];
 
-  static const double _jacobianInv[];
+  static const double _basisQuad[];
 
+  static const double _basisDerivQuad[];
+
+  static const double _jacobianQuad[];
+
+  static const double _jacobianDetQuad[];
+
+  static const double _jacobianInvQuad[];
+
 };
 
 #endif // pylith_feassemble_quadraturedata2din3dquadratic_hh

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData3DLinear.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData3DLinear.cc	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData3DLinear.cc	2007-04-27 20:27:03 UTC (rev 6715)
@@ -46,32 +46,78 @@
   1.66666667e-01,
 };
 
-const double pylith::feassemble::QuadratureData3DLinear::_basis[] = {
+const double pylith::feassemble::QuadratureData3DLinear::_quadPts[] = {
+  5.75000000e-01, -2.75000000e-01,  2.00000000e-01,
+};
+
+const double pylith::feassemble::QuadratureData3DLinear::_basisVert[] = {
+  1.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  1.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+  1.00000000e+00,};
+
+const double pylith::feassemble::QuadratureData3DLinear::_basisDerivVert[] = {
+ -1.00000000e+00, -1.00000000e+00, -1.00000000e+00,
+  1.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  1.00000000e+00,
+ -1.00000000e+00, -1.00000000e+00, -1.00000000e+00,
+  1.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  1.00000000e+00,
+ -1.00000000e+00, -1.00000000e+00, -1.00000000e+00,
+  1.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  1.00000000e+00,
+ -1.00000000e+00, -1.00000000e+00, -1.00000000e+00,
+  1.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  1.00000000e+00,
+};
+
+const double pylith::feassemble::QuadratureData3DLinear::_jacobianVert[] = {
+  2.50000000e+00,  5.00000000e-01,  1.00000000e-01,
+  1.50000000e+00,  9.00000000e-01,  2.00000000e-01,
+  3.00000000e-01,  1.50000000e+00,  2.50000000e+00,
+  2.50000000e+00,  5.00000000e-01,  1.00000000e-01,
+  1.50000000e+00,  9.00000000e-01,  2.00000000e-01,
+  3.00000000e-01,  1.50000000e+00,  2.50000000e+00,
+  2.50000000e+00,  5.00000000e-01,  1.00000000e-01,
+  1.50000000e+00,  9.00000000e-01,  2.00000000e-01,
+  3.00000000e-01,  1.50000000e+00,  2.50000000e+00,
+  2.50000000e+00,  5.00000000e-01,  1.00000000e-01,
+  1.50000000e+00,  9.00000000e-01,  2.00000000e-01,
+  3.00000000e-01,  1.50000000e+00,  2.50000000e+00,
+};
+
+const double pylith::feassemble::QuadratureData3DLinear::_jacobianDetVert[] = {
+  3.22800000e+00,  3.22800000e+00,  3.22800000e+00,  3.22800000e+00,
+};
+
+const double pylith::feassemble::QuadratureData3DLinear::_basisQuad[] = {
   2.50000000e-01,  2.50000000e-01,  2.50000000e-01,
   2.50000000e-01,};
 
-const double pylith::feassemble::QuadratureData3DLinear::_basisDeriv[] = {
+const double pylith::feassemble::QuadratureData3DLinear::_basisDerivQuad[] = {
  -1.00000000e+00, -1.00000000e+00, -1.00000000e+00,
   1.00000000e+00,  0.00000000e+00,  0.00000000e+00,
   0.00000000e+00,  1.00000000e+00,  0.00000000e+00,
   0.00000000e+00,  0.00000000e+00,  1.00000000e+00,
 };
 
-const double pylith::feassemble::QuadratureData3DLinear::_quadPts[] = {
-  5.75000000e-01, -2.75000000e-01,  2.00000000e-01,
-};
-
-const double pylith::feassemble::QuadratureData3DLinear::_jacobian[] = {
+const double pylith::feassemble::QuadratureData3DLinear::_jacobianQuad[] = {
   2.50000000e+00,  5.00000000e-01,  1.00000000e-01,
   1.50000000e+00,  9.00000000e-01,  2.00000000e-01,
   3.00000000e-01,  1.50000000e+00,  2.50000000e+00,
 };
 
-const double pylith::feassemble::QuadratureData3DLinear::_jacobianDet[] = {
+const double pylith::feassemble::QuadratureData3DLinear::_jacobianDetQuad[] = {
   3.22800000e+00,
 };
 
-const double pylith::feassemble::QuadratureData3DLinear::_jacobianInv[] = {
+const double pylith::feassemble::QuadratureData3DLinear::_jacobianInvQuad[] = {
   6.04089219e-01, -3.40768278e-01,  3.09789343e-03,
  -1.14312268e+00,  1.92688971e+00, -1.08426270e-01,
   6.13382900e-01, -1.11524164e+00,  4.64684015e-01,
@@ -89,12 +135,16 @@
   cells = const_cast<int*>(_cells);
   quadPtsRef = const_cast<double*>(_quadPtsRef);
   quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDeriv = const_cast<double*>(_basisDeriv);
   quadPts = const_cast<double*>(_quadPts);
-  jacobian = const_cast<double*>(_jacobian);
-  jacobianDet = const_cast<double*>(_jacobianDet);
-  jacobianInv = const_cast<double*>(_jacobianInv);
+  basisVert = const_cast<double*>(_basisVert);
+  basisDerivVert = const_cast<double*>(_basisDerivVert);
+  jacobianVert = const_cast<double*>(_jacobianVert);
+  jacobianDetVert = const_cast<double*>(_jacobianDetVert);
+  basisQuad = const_cast<double*>(_basisQuad);
+  basisDerivQuad = const_cast<double*>(_basisDerivQuad);
+  jacobianQuad = const_cast<double*>(_jacobianQuad);
+  jacobianDetQuad = const_cast<double*>(_jacobianDetQuad);
+  jacobianInvQuad = const_cast<double*>(_jacobianInvQuad);
 } // constructor
 
 pylith::feassemble::QuadratureData3DLinear::~QuadratureData3DLinear(void)

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData3DLinear.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData3DLinear.hh	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData3DLinear.hh	2007-04-27 20:27:03 UTC (rev 6715)
@@ -57,18 +57,26 @@
 
   static const double _quadWts[];
 
-  static const double _basis[];
+  static const double _quadPts[];
 
-  static const double _basisDeriv[];
+  static const double _basisVert[];
 
-  static const double _quadPts[];
+  static const double _basisDerivVert[];
 
-  static const double _jacobian[];
+  static const double _jacobianVert[];
 
-  static const double _jacobianDet[];
+  static const double _jacobianDetVert[];
 
-  static const double _jacobianInv[];
+  static const double _basisQuad[];
 
+  static const double _basisDerivQuad[];
+
+  static const double _jacobianQuad[];
+
+  static const double _jacobianDetQuad[];
+
+  static const double _jacobianInvQuad[];
+
 };
 
 #endif // pylith_feassemble_quadraturedata3dlinear_hh

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData3DQuadratic.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData3DQuadratic.cc	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData3DQuadratic.cc	2007-04-27 20:27:03 UTC (rev 6715)
@@ -55,7 +55,190 @@
   1.25000000e-01,  1.25000000e-01,  1.25000000e-01,  1.25000000e-01,
 };
 
-const double pylith::feassemble::QuadratureData3DQuadratic::_basis[] = {
+const double pylith::feassemble::QuadratureData3DQuadratic::_quadPts[] = {
+ -1.20833333e-01, -1.58194444e+00, -6.40277778e-01,
+  1.54583333e+00, -1.60416667e+00, -3.06944444e-01,
+  9.01388889e-01,  4.40277778e-01,  2.63888889e-02,
+  3.45833333e-01,  1.06944444e-01,  1.33750000e+00,
+};
+
+const double pylith::feassemble::QuadratureData3DQuadratic::_basisVert[] = {
+  1.00000000e+00, -0.00000000e+00, -0.00000000e+00,
+ -0.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00, -0.00000000e+00,  1.00000000e+00,
+ -0.00000000e+00, -0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00, -0.00000000e+00,
+ -0.00000000e+00,  1.00000000e+00, -0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+ -0.00000000e+00, -0.00000000e+00, -0.00000000e+00,
+  1.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+ -0.00000000e+00, -0.00000000e+00,  1.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+ -0.00000000e+00,  0.00000000e+00, -0.00000000e+00,
+  0.00000000e+00,  1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00, -0.00000000e+00, -0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+  1.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00, -0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00, -0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  1.00000000e+00,
+  0.00000000e+00,  0.00000000e+00, -0.00000000e+00,
+ -0.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  1.00000000e+00,  0.00000000e+00,
+ -0.00000000e+00,  0.00000000e+00, -0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+  1.00000000e+00,};
+
+const double pylith::feassemble::QuadratureData3DQuadratic::_basisDerivVert[] = {
+ -3.00000000e+00, -3.00000000e+00, -3.00000000e+00,
+ -1.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00, -1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00, -1.00000000e+00,
+  4.00000000e+00, -0.00000000e+00, -0.00000000e+00,
+ -0.00000000e+00,  4.00000000e+00, -0.00000000e+00,
+ -0.00000000e+00, -0.00000000e+00,  4.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+  1.00000000e+00,  1.00000000e+00,  1.00000000e+00,
+  3.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00, -1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00, -1.00000000e+00,
+ -4.00000000e+00, -4.00000000e+00, -4.00000000e+00,
+ -0.00000000e+00,  0.00000000e+00, -0.00000000e+00,
+ -0.00000000e+00, -0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  4.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  4.00000000e+00,
+  1.00000000e+00,  1.00000000e+00,  1.00000000e+00,
+ -1.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  3.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00, -1.00000000e+00,
+  0.00000000e+00, -0.00000000e+00, -0.00000000e+00,
+ -4.00000000e+00, -4.00000000e+00, -4.00000000e+00,
+ -0.00000000e+00, -0.00000000e+00,  0.00000000e+00,
+  4.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  4.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+  1.00000000e+00,  1.00000000e+00,  1.00000000e+00,
+ -1.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00, -1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  3.00000000e+00,
+  0.00000000e+00, -0.00000000e+00, -0.00000000e+00,
+ -0.00000000e+00,  0.00000000e+00, -0.00000000e+00,
+ -4.00000000e+00, -4.00000000e+00, -4.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  4.00000000e+00,  0.00000000e+00,
+  4.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+ -1.00000000e+00, -1.00000000e+00, -1.00000000e+00,
+  1.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00, -1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00, -1.00000000e+00,
+  0.00000000e+00, -2.00000000e+00, -2.00000000e+00,
+ -0.00000000e+00,  2.00000000e+00, -0.00000000e+00,
+ -0.00000000e+00, -0.00000000e+00,  2.00000000e+00,
+  0.00000000e+00,  2.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  2.00000000e+00,
+ -1.00000000e+00, -1.00000000e+00, -1.00000000e+00,
+ -1.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00, -1.00000000e+00,
+  2.00000000e+00, -0.00000000e+00, -0.00000000e+00,
+ -2.00000000e+00,  0.00000000e+00, -2.00000000e+00,
+ -0.00000000e+00, -0.00000000e+00,  2.00000000e+00,
+  2.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  2.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+ -1.00000000e+00, -1.00000000e+00, -1.00000000e+00,
+ -1.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00, -1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  1.00000000e+00,
+  2.00000000e+00, -0.00000000e+00, -0.00000000e+00,
+ -0.00000000e+00,  2.00000000e+00, -0.00000000e+00,
+ -2.00000000e+00, -2.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  2.00000000e+00,  0.00000000e+00,
+  2.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+  1.00000000e+00,  1.00000000e+00,  1.00000000e+00,
+  1.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00, -1.00000000e+00,
+ -2.00000000e+00, -2.00000000e+00, -2.00000000e+00,
+ -2.00000000e+00, -2.00000000e+00, -2.00000000e+00,
+ -0.00000000e+00, -0.00000000e+00,  0.00000000e+00,
+  2.00000000e+00,  2.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  2.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  2.00000000e+00,
+  1.00000000e+00,  1.00000000e+00,  1.00000000e+00,
+ -1.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  1.00000000e+00,
+  0.00000000e+00, -0.00000000e+00, -0.00000000e+00,
+ -2.00000000e+00, -2.00000000e+00, -2.00000000e+00,
+ -2.00000000e+00, -2.00000000e+00, -2.00000000e+00,
+  2.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  2.00000000e+00,  2.00000000e+00,
+  2.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+  1.00000000e+00,  1.00000000e+00,  1.00000000e+00,
+  1.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00, -1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  1.00000000e+00,
+ -2.00000000e+00, -2.00000000e+00, -2.00000000e+00,
+ -0.00000000e+00,  0.00000000e+00, -0.00000000e+00,
+ -2.00000000e+00, -2.00000000e+00, -2.00000000e+00,
+  0.00000000e+00,  2.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  2.00000000e+00,  0.00000000e+00,
+  2.00000000e+00,  0.00000000e+00,  2.00000000e+00,
+};
+
+const double pylith::feassemble::QuadratureData3DQuadratic::_jacobianVert[] = {
+  2.30000000e+00, -4.00000000e-01,  3.00000000e-01,
+  1.70000000e+00,  3.00000000e+00,  1.00000000e+00,
+  5.00000000e-01,  2.30000000e+00,  3.00000000e+00,
+  2.70000000e+00,  4.00000000e-01,  7.00000000e-01,
+  1.70000000e+00,  3.00000000e+00,  1.40000000e+00,
+  9.00000000e-01,  2.70000000e+00,  3.00000000e+00,
+  2.30000000e+00, -4.00000000e-01,  7.00000000e-01,
+  1.30000000e+00,  3.00000000e+00,  1.00000000e+00,
+  5.00000000e-01,  2.70000000e+00,  2.60000000e+00,
+  2.70000000e+00,  0.00000000e+00,  3.00000000e-01,
+  1.70000000e+00,  3.40000000e+00,  6.00000000e-01,
+  9.00000000e-01,  2.70000000e+00,  3.00000000e+00,
+  2.50000000e+00,  0.00000000e+00,  5.00000000e-01,
+  1.70000000e+00,  3.00000000e+00,  1.20000000e+00,
+  7.00000000e-01,  2.50000000e+00,  3.00000000e+00,
+  2.30000000e+00, -4.00000000e-01,  5.00000000e-01,
+  1.50000000e+00,  3.00000000e+00,  1.00000000e+00,
+  5.00000000e-01,  2.50000000e+00,  2.80000000e+00,
+  2.50000000e+00, -2.00000000e-01,  3.00000000e-01,
+  1.70000000e+00,  3.20000000e+00,  8.00000000e-01,
+  7.00000000e-01,  2.50000000e+00,  3.00000000e+00,
+  2.50000000e+00,  2.22044605e-16,  7.00000000e-01,
+  1.50000000e+00,  3.00000000e+00,  1.20000000e+00,
+  7.00000000e-01,  2.70000000e+00,  2.80000000e+00,
+  2.50000000e+00, -2.00000000e-01,  5.00000000e-01,
+  1.50000000e+00,  3.20000000e+00,  8.00000000e-01,
+  7.00000000e-01,  2.70000000e+00,  2.80000000e+00,
+  2.70000000e+00,  2.00000000e-01,  5.00000000e-01,
+  1.70000000e+00,  3.20000000e+00,  1.00000000e+00,
+  9.00000000e-01,  2.70000000e+00,  3.00000000e+00,
+};
+
+const double pylith::feassemble::QuadratureData3DQuadratic::_jacobianDetVert[] = {
+  1.79730000e+01,  1.38810000e+01,  1.42890000e+01,  2.36250000e+01,  1.60750000e+01,  1.61750000e+01,  2.05110000e+01,  1.42650000e+01,  1.86330000e+01,  1.86450000e+01,
+};
+
+const double pylith::feassemble::QuadratureData3DQuadratic::_basisQuad[] = {
   3.75000000e-01, -6.94444444e-02, -6.94444444e-02,
  -6.94444444e-02,  2.50000000e-01,  2.50000000e-01,
   2.50000000e-01,  2.77777778e-02,  2.77777778e-02,
@@ -71,7 +254,7 @@
   2.50000000e-01,  2.77777778e-02,  2.50000000e-01,
   2.50000000e-01,};
 
-const double pylith::feassemble::QuadratureData3DQuadratic::_basisDeriv[] = {
+const double pylith::feassemble::QuadratureData3DQuadratic::_basisDerivQuad[] = {
  -2.00000000e+00, -2.00000000e+00, -2.00000000e+00,
  -6.66666667e-01,  0.00000000e+00,  0.00000000e+00,
   0.00000000e+00, -6.66666667e-01,  0.00000000e+00,
@@ -114,14 +297,7 @@
   3.00000000e+00,  0.00000000e+00,  3.33333333e-01,
 };
 
-const double pylith::feassemble::QuadratureData3DQuadratic::_quadPts[] = {
- -1.20833333e-01, -1.58194444e+00, -6.40277778e-01,
-  1.54583333e+00, -1.60416667e+00, -3.06944444e-01,
-  9.01388889e-01,  4.40277778e-01,  2.63888889e-02,
-  3.45833333e-01,  1.06944444e-01,  1.33750000e+00,
-};
-
-const double pylith::feassemble::QuadratureData3DQuadratic::_jacobian[] = {
+const double pylith::feassemble::QuadratureData3DQuadratic::_jacobianQuad[] = {
   2.36666667e+00, -3.00000000e-01,  3.66666667e-01,
   1.66666667e+00,  3.03333333e+00,  1.00000000e+00,
   5.66666667e-01,  2.40000000e+00,  2.96666667e+00,
@@ -136,11 +312,11 @@
   8.33333333e-01,  2.66666667e+00,  2.96666667e+00,
 };
 
-const double pylith::feassemble::QuadratureData3DQuadratic::_jacobianDet[] = {
+const double pylith::feassemble::QuadratureData3DQuadratic::_jacobianDetQuad[] = {
   1.77671111e+01,  1.51087407e+01,  1.53117037e+01,  2.13964444e+01,
 };
 
-const double pylith::feassemble::QuadratureData3DQuadratic::_jacobianInv[] = {
+const double pylith::feassemble::QuadratureData3DQuadratic::_jacobianInvQuad[] = {
   3.71410346e-01,  9.96222734e-02, -7.94851911e-02,
  -2.46397839e-01,  3.83480088e-01, -9.88092856e-02,
   1.28389534e-01, -3.29260056e-01,  4.32196818e-01,
@@ -167,12 +343,16 @@
   cells = const_cast<int*>(_cells);
   quadPtsRef = const_cast<double*>(_quadPtsRef);
   quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDeriv = const_cast<double*>(_basisDeriv);
   quadPts = const_cast<double*>(_quadPts);
-  jacobian = const_cast<double*>(_jacobian);
-  jacobianDet = const_cast<double*>(_jacobianDet);
-  jacobianInv = const_cast<double*>(_jacobianInv);
+  basisVert = const_cast<double*>(_basisVert);
+  basisDerivVert = const_cast<double*>(_basisDerivVert);
+  jacobianVert = const_cast<double*>(_jacobianVert);
+  jacobianDetVert = const_cast<double*>(_jacobianDetVert);
+  basisQuad = const_cast<double*>(_basisQuad);
+  basisDerivQuad = const_cast<double*>(_basisDerivQuad);
+  jacobianQuad = const_cast<double*>(_jacobianQuad);
+  jacobianDetQuad = const_cast<double*>(_jacobianDetQuad);
+  jacobianInvQuad = const_cast<double*>(_jacobianInvQuad);
 } // constructor
 
 pylith::feassemble::QuadratureData3DQuadratic::~QuadratureData3DQuadratic(void)

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData3DQuadratic.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData3DQuadratic.hh	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData3DQuadratic.hh	2007-04-27 20:27:03 UTC (rev 6715)
@@ -57,18 +57,26 @@
 
   static const double _quadWts[];
 
-  static const double _basis[];
+  static const double _quadPts[];
 
-  static const double _basisDeriv[];
+  static const double _basisVert[];
 
-  static const double _quadPts[];
+  static const double _basisDerivVert[];
 
-  static const double _jacobian[];
+  static const double _jacobianVert[];
 
-  static const double _jacobianDet[];
+  static const double _jacobianDetVert[];
 
-  static const double _jacobianInv[];
+  static const double _basisQuad[];
 
+  static const double _basisDerivQuad[];
+
+  static const double _jacobianQuad[];
+
+  static const double _jacobianDetQuad[];
+
+  static const double _jacobianInvQuad[];
+
 };
 
 #endif // pylith_feassemble_quadraturedata3dquadratic_hh

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/feutils.py
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/feutils.py	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/feutils.py	2007-04-27 20:27:03 UTC (rev 6715)
@@ -18,8 +18,36 @@
 import numpy
 
 # ----------------------------------------------------------------------
-def calculateJacobian(quadrature, vertices):
+def calculateJacobianVert(quadrature, vertices):
   """
+  Calculate jacobian and its determinant at vertices.
+
+  @param quadrature Quadrature information
+  @param vertices Coordinates of cell's vertices
+  """
+  jacobian = numpy.zeros( (quadrature.numBasis,
+                           quadrature.cellDim, quadrature.spaceDim),
+                          dtype=numpy.float64)
+  jacobianDet = numpy.zeros( (quadrature.numBasis,), dtype=numpy.float64)
+    
+  for iVertex in xrange(quadrature.numBasis):
+    # Jacobian
+    deriv = quadrature.basisDerivVert[iVertex]
+    j = numpy.dot(deriv.transpose(), vertices)
+    jacobian[iVertex] = j
+
+    # Determinant of Jacobian
+    if quadrature.spaceDim == quadrature.cellDim:
+      jacobianDet[iVertex] = numpy.linalg.det(j)
+    else:
+      det = numpy.linalg.det(numpy.dot(j, j.transpose()))**0.5
+      jacobianDet[iVertex] = det
+  return (jacobian, jacobianDet)
+    
+
+# ----------------------------------------------------------------------
+def calculateJacobianQuad(quadrature, vertices):
+  """
   Calculate jacobian, its determinant, and its inverse at quadrature
   points for a given cell.
 
@@ -37,7 +65,7 @@
   iQuad = 0
   for q in quadrature.quadPtsRef:
     # Jacobian at quadrature points
-    deriv = quadrature.basisDeriv[iQuad]
+    deriv = quadrature.basisDerivQuad[iQuad]
     j = numpy.dot(deriv.transpose(), vertices)
     jacobian[iQuad] = j
 

Modified: short/3D/PyLith/trunk/unittests/pytests/feassemble/TestFIATSimplex.py
===================================================================
--- short/3D/PyLith/trunk/unittests/pytests/feassemble/TestFIATSimplex.py	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/unittests/pytests/feassemble/TestFIATSimplex.py	2007-04-27 20:27:03 UTC (rev 6715)
@@ -37,7 +37,10 @@
 def N2p(p):
   return -2.0*p
 
+def verticesRef():
+  return [-1.0, 1.0, 0.5]
 
+
 # ----------------------------------------------------------------------
 class TestFIATSimplex(unittest.TestCase):
   """
@@ -81,15 +84,29 @@
                              (+1.0/3**0.5,)],
                             dtype=numpy.float64 )
     quadWtsE = numpy.array( [1.0, 1.0], dtype=numpy.float64 )
-    basis = numpy.zeros( (2, 3), dtype=numpy.float64)
-    basisDeriv = numpy.zeros( (2, 3, 1), dtype=numpy.float64)
+
+    # Compute basis fns and derivatives at vertices
+    basisVert = numpy.zeros( (3, 3), dtype=numpy.float64)
+    basisDerivVert = numpy.zeros( (3, 3, 1), dtype=numpy.float64)
+    iVertex = 0
+    for v in verticesRef():
+      basisVert[iVertex] = numpy.array([N0(v), N1(v), N2(v)],
+                                       dtype=numpy.float64).reshape( (3,) )
+      deriv = numpy.array([[N0p(v)], [N1p(v)], [N2p(v)]],
+                          dtype=numpy.float64)      
+      basisDerivVert[iVertex] = deriv.reshape((3, 1))
+      iVertex += 1
+
+    # Compute basis fns and derivatives at quadrature points
+    basisQuad = numpy.zeros( (2, 3), dtype=numpy.float64)
+    basisDerivQuad = numpy.zeros( (2, 3, 1), dtype=numpy.float64)
     iQuad = 0
     for q in quadPtsE:
-      basis[iQuad] = numpy.array([N0(q), N1(q), N2(q)],
+      basisQuad[iQuad] = numpy.array([N0(q), N1(q), N2(q)],
                                  dtype=numpy.float64).reshape( (3,) )
       deriv = numpy.array([[N0p(q)], [N1p(q)], [N2p(q)]],
                           dtype=numpy.float64)      
-      basisDeriv[iQuad] = deriv.reshape((3, 1))
+      basisDerivQuad[iQuad] = deriv.reshape((3, 1))
       iQuad += 1
 
     cell.initialize()
@@ -102,8 +119,10 @@
     # Check arrays
     test_double(self, quadPtsE, cell.quadPts)
     test_double(self, quadWtsE, cell.quadWts)
-    test_double(self, basis, cell.basis)
-    test_double(self, basisDeriv, cell.basisDeriv)
+    test_double(self, basisVert, cell.basisVert)
+    test_double(self, basisDerivVert, cell.basisDerivVert)
+    test_double(self, basisQuad, cell.basisQuad)
+    test_double(self, basisDerivQuad, cell.basisDerivQuad)
 
     return
 

Deleted: short/3D/PyLith/trunk/unittests/pytests/feassemble/TestQuadrature.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/pytests/feassemble/TestQuadrature.cc	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/unittests/pytests/feassemble/TestQuadrature.cc	2007-04-27 20:27:03 UTC (rev 6715)
@@ -1,272 +0,0 @@
-// -*- C++ -*-
-//
-// ----------------------------------------------------------------------
-//
-//                           Brad T. Aagaard
-//                        U.S. Geological Survey
-//
-// {LicenseText}
-//
-// ----------------------------------------------------------------------
-//
-
-#include <portinfo>
-
-#include "TestQuadrature.hh" // Implementation of class methods
-
-// ----------------------------------------------------------------------
-// Test clone
-void
-pylith::feassemble::TestQuadrature::testClone(void)
-{ // testClone
-  // Semi-random values manually set to check cloning
-  const double minJacobian = 1.0;
-  const int cellDim = 1;
-  const int numBasis = 2;
-  const int numQuadPts = 1;
-  const int spaceDim = 1;
-  const double basis[] = { 0.2, 0.4 };
-  const double basisDeriv[] = { 0.8, 1.6 };
-  const double quadPtsRef[] = { 3.2 };
-  const double quadWts[] = { 6.4 };
-  const double quadPts[] = { 12.8 };
-  const double jacobian[] = { 2.56 };
-  const double jacobianInv[] = { 5.12 };
-  const double jacobianDet[] = { 10.24 };
-
-  // Set values
-  Quadrature1D qOrig;
-  qOrig._minJacobian = minJacobian;
-  qOrig._cellDim = cellDim;
-  qOrig._numBasis = numBasis;
-  qOrig._numQuadPts = numQuadPts;
-  qOrig._spaceDim = spaceDim;
-
-  int size = 2;
-  qOrig._basis = (size > 0) ? new double[size] : 0;
-  memcpy(qOrig._basis, basis, size*sizeof(double));
-  
-  size = 2;
-  qOrig._basisDeriv = (size > 0) ? new double[size] : 0;
-  memcpy(qOrig._basisDeriv, basisDeriv, size*sizeof(double));
-
-  size = 1;
-  qOrig._quadPtsRef = (size > 0) ? new double[size] : 0;
-  memcpy(qOrig._quadPtsRef, quadPtsRef, size*sizeof(double));
-
-  size = 1;
-  qOrig._quadWts = (size > 0) ? new double[size] : 0;
-  memcpy(qOrig._quadWts, quadWts, size*sizeof(double));
-
-  size = 1;
-  qOrig._quadPts = (size > 0) ? new double[size] : 0;
-  memcpy(qOrig._quadPts, quadPts, size*sizeof(double));
-
-  size = 1;
-  qOrig._jacobian = (size > 0) ? new double[size] : 0;
-  memcpy(qOrig._jacobian, jacobian, size*sizeof(double));
-
-  size = 1;
-  qOrig._jacobianInv = (size > 0) ? new double[size] : 0;
-  memcpy(qOrig._jacobianInv, jacobianInv, size*sizeof(double));
-
-  size = 1;
-  qOrig._jacobianDet = (size > 0) ? new double[size] : 0;
-  memcpy(qOrig._jacobianDet, jacobianDet, size*sizeof(double));
-
-  // Clone
-  const Quadrature* qCopy = qOrig.clone();
-
-  // Check clone
-  CPPUNIT_ASSERT(0 != qCopy);
-
-  CPPUNIT_ASSERT_EQUAL(minJacobian, qCopy->_minJacobian);
-  CPPUNIT_ASSERT_EQUAL(cellDim, qCopy->_cellDim);
-  CPPUNIT_ASSERT_EQUAL(numBasis, qCopy->_numBasis);
-  CPPUNIT_ASSERT_EQUAL(numQuadPts, qCopy->_numQuadPts);
-  CPPUNIT_ASSERT_EQUAL(spaceDim, qCopy->_spaceDim);
-
-  CPPUNIT_ASSERT(0 != qCopy->_basis);
-  size = numBasis * numQuadPts;
-  for (int i=0; i < size; ++i)
-    CPPUNIT_ASSERT_EQUAL(basis[i], qCopy->_basis[i]);
-
-  CPPUNIT_ASSERT(0 != qCopy->_basisDeriv);
-  size = numBasis * numQuadPts * spaceDim;
-  for (int i=0; i < size; ++i)
-    CPPUNIT_ASSERT_EQUAL(basisDeriv[i], qCopy->_basisDeriv[i]);
-
-  CPPUNIT_ASSERT(0 != qCopy->_quadPtsRef);
-  size = numQuadPts * cellDim;
-  for (int i=0; i < size; ++i)
-    CPPUNIT_ASSERT_EQUAL(quadPtsRef[i], qCopy->_quadPtsRef[i]);
-
-  CPPUNIT_ASSERT(0 != qCopy->_quadWts);
-  size = numQuadPts;
-  for (int i=0; i < size; ++i)
-    CPPUNIT_ASSERT_EQUAL(quadWts[i], qCopy->_quadWts[i]);
-
-  size = 1;
-
-  CPPUNIT_ASSERT(0 != qCopy->_quadPts);
-  for (int i=0; i < size; ++i)
-    CPPUNIT_ASSERT_EQUAL(quadPts[i], qCopy->_quadPts[i]);
-  CPPUNIT_ASSERT(0 != qCopy->_jacobian);
-  for (int i=0; i < size; ++i)
-    CPPUNIT_ASSERT_EQUAL(jacobian[i], qCopy->_jacobian[i]);
-  CPPUNIT_ASSERT(0 != qCopy->_jacobianInv);
-  for (int i=0; i < size; ++i)
-    CPPUNIT_ASSERT_EQUAL(jacobianInv[i], qCopy->_jacobianInv[i]);
-  CPPUNIT_ASSERT(0 != qCopy->_jacobianDet);
-  for (int i=0; i < size; ++i)
-    CPPUNIT_ASSERT_EQUAL(jacobianDet[i], qCopy->_jacobianDet[i]);
-} // testCopy
-
-// ----------------------------------------------------------------------
-// Test minJacobian()
-void
-pylith::feassemble::TestQuadrature::testMinJacobian(void)
-{ // testMinJacobian
-  Quadrature1D q;
-  const double min = 1.0;
-  q.minJacobian(min);
-  CPPUNIT_ASSERT_EQUAL(min, q._minJacobian);
-} // testMinJacobian
-
-// ----------------------------------------------------------------------
-// Test initialize()
-void
-pylith::feassemble::TestQuadrature::testInitialize(void)
-{ // initialize
-  
-  const int cellDim = 1;
-  const int numBasis = 2;
-  const int numQuadPts = 1;
-  const int spaceDim = 1;
-  const double basis[] = { 0.5, 0.5 };
-  const double basisDeriv[] = { -0.5, 0.5 };
-  const double quadPtsRef[] = { 0.0 };
-  const double quadWts[] = { 2.0 };
-  const double minJacobian = 1.0;
-
-  Quadrature1D q;
-  q.initialize(basis, basisDeriv, quadPtsRef, quadWts,
-	       cellDim, numBasis, numQuadPts, spaceDim);
-  
-  CPPUNIT_ASSERT_EQUAL(cellDim, q._cellDim);
-  CPPUNIT_ASSERT_EQUAL(numBasis, q._numBasis);
-  CPPUNIT_ASSERT_EQUAL(numQuadPts, q._numQuadPts);
-  CPPUNIT_ASSERT_EQUAL(spaceDim, q._spaceDim);
-
-  int size = numBasis * numQuadPts;
-  for (int i=0; i < size; ++i)
-    CPPUNIT_ASSERT_EQUAL(basis[i], q._basis[i]);
-
-  size = numBasis * numQuadPts * spaceDim;
-  for (int i=0; i < size; ++i)
-    CPPUNIT_ASSERT_EQUAL(basisDeriv[i], q._basisDeriv[i]);
-
-  size = numQuadPts * cellDim;
-  for (int i=0; i < size; ++i)
-    CPPUNIT_ASSERT_EQUAL(quadPtsRef[i], q._quadPtsRef[i]);
-
-  size = numQuadPts;
-  for (int i=0; i < size; ++i)
-    CPPUNIT_ASSERT_EQUAL(quadWts[i], q._quadWts[i]);
-
-  // Make sure Jacobian stuff has been allocated
-  CPPUNIT_ASSERT(0 != q._jacobian);
-  CPPUNIT_ASSERT(0 != q._jacobianInv);
-  CPPUNIT_ASSERT(0 != q._jacobianDet);
-  CPPUNIT_ASSERT(0 != q._quadPts);
-} // initialize
-
-// ----------------------------------------------------------------------
-// Test initialize() & computeGeometry()
-void
-pylith::feassemble::TestQuadrature::_testComputeGeometry(
-					    Quadrature* pQuad,
-					    const QuadratureData& data) const
-{ // testComputeGeometry
-  const int cellDim = data.cellDim;
-  const int numBasis = data.numBasis;
-  const int numQuadPts = data.numQuadPts;
-  const int spaceDim = data.spaceDim;
-  const double* basis = data.basis;
-  const double* basisDeriv = data.basisDeriv;
-  const double* quadPtsRef = data.quadPtsRef;
-  const double* quadWts = data.quadWts;
-
-  const int numVertices = data.numVertices;
-  const int numCells = data.numCells;
-  const double* vertCoords = data.vertices;
-  const int* cells = data.cells;
-  const double* quadPts = data.quadPts;
-  const double* jacobian = data.jacobian;
-  const double* jacobianInv = data.jacobianInv;
-  const double* jacobianDet = data.jacobianDet;
-
-  const double minJacobian = 1.0e-06;
-
-  CPPUNIT_ASSERT(0 != basis);
-  CPPUNIT_ASSERT(0 != basisDeriv);
-  CPPUNIT_ASSERT(0 != quadPtsRef);
-  CPPUNIT_ASSERT(0 != quadWts);
-  CPPUNIT_ASSERT(0 != vertCoords);
-  CPPUNIT_ASSERT(0 != cells);
-  CPPUNIT_ASSERT(0 != quadPts);
-  CPPUNIT_ASSERT(0 != jacobian);
-  CPPUNIT_ASSERT(0 != jacobianInv);
-  CPPUNIT_ASSERT(0 != jacobianDet);
-
-  pQuad->minJacobian(minJacobian);
-  pQuad->initialize(basis, basisDeriv, quadPtsRef, quadWts,
-		    cellDim, numBasis, numQuadPts, spaceDim);
-
-  // Create mesh with test cell
-  typedef ALE::Field::Mesh mesh;
-  typedef Mesh::sieve_type sieve_type;
-  ALE::Obj<Mesh> mesh = new Mesh(PETSC_COMM_WORLD, cellDim);
-  ALE::Obj<sieve_type> sieve = new sieve_type(mesh->comm());
-
-  const bool interpolate = false;
-  ALE::New::SieveBuilder<Mesh>::buildTopology(sieve, cellDim, numCells,
-		     (int*) cells, numVertices, interpolate, numBasis);
-  mesh->setSieve(sieve);
-  mesh->stratify();
-  ALE::New::SieveBuilder<Mesh>::buildCoordinatesNew(mesh, spaceDim, vertCoords);
-  
-  // Check values from _computeGeometry()
-  const ALE::Obj<Mesh::label_sequence>& elements = mesh->heightStratum(0);
-  const Mesh::label_sequence::iterator e_iter = elements->begin(); 
-  const ALE::Obj<Mesh::real_section_type>& coordinates = 
-    mesh->getRealSection("coordinates");
-  pQuad->_computeGeometry(coordinates, *e_iter);
-
-  CPPUNIT_ASSERT(1 == numCells);
-
-  const double tolerance = 1.0e-06;
-  int size = numQuadPts * spaceDim;
-  CPPUNIT_ASSERT(0 != pQuad->_quadPts);
-  for (int i=0; i < size; ++i)
-    CPPUNIT_ASSERT_DOUBLES_EQUAL(quadPts[i], pQuad->_quadPts[i], tolerance);
-
-  size = numQuadPts * cellDim * spaceDim;
-  CPPUNIT_ASSERT(0 != pQuad->_jacobian);
-  for (int i=0; i < size; ++i)
-    CPPUNIT_ASSERT_DOUBLES_EQUAL(jacobian[i], pQuad->_jacobian[i], tolerance);
-
-  size = numQuadPts * spaceDim * cellDim;
-  CPPUNIT_ASSERT(0 != pQuad->_jacobianInv);
-  for (int i=0; i < size; ++i)
-    CPPUNIT_ASSERT_DOUBLES_EQUAL(jacobianInv[i], pQuad->_jacobianInv[i], 
-				 tolerance);
-
-  size = numQuadPts;
-  CPPUNIT_ASSERT(0 != pQuad->_jacobianDet);
-  for (int i=0; i < size; ++i)
-    CPPUNIT_ASSERT_DOUBLES_EQUAL(jacobianDet[i], pQuad->_jacobianDet[i], 
-				 tolerance);
-} // testQuadratic
-
-// End of file 

Modified: short/3D/PyLith/trunk/unittests/pytests/feassemble/TestQuadrature.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/pytests/feassemble/TestQuadrature.hh	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/unittests/pytests/feassemble/TestQuadrature.hh	2007-04-27 20:27:03 UTC (rev 6715)
@@ -61,17 +61,29 @@
    */
   static int spaceDim(const Quadrature& q);
 
+  /** Get basis functions evaluated at vertices.
+   *
+   * @returns Array of basis functions evaluated at vertices
+   */
+  static const double* basisVert(const Quadrature& q);
+
+  /** Get derivatives of basis functions evaluated at vertices.
+   *
+   * @returns Array of derivatives of basis fns evaluated at vertices
+   */
+  static const double* basisDerivVert(const Quadrature& q);
+
   /** Get basis functions evaluated at quadrature points.
    *
    * @returns Array of basis functions evaluated at quadrature points
    */
-  static const double* basis(const Quadrature& q);
+  static const double* basisQuad(const Quadrature& q);
 
   /** Get derivatives of basis functions evaluated at quadrature points.
    *
    * @returns Array of derivatives of basis fns evaluated at quad pts
    */
-  static const double* basisDeriv(const Quadrature& q);
+  static const double* basisDerivQuad(const Quadrature& q);
 
   /** Get coordinates of quadrature points in reference cell.
    *

Modified: short/3D/PyLith/trunk/unittests/pytests/feassemble/TestQuadrature.icc
===================================================================
--- short/3D/PyLith/trunk/unittests/pytests/feassemble/TestQuadrature.icc	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/unittests/pytests/feassemble/TestQuadrature.icc	2007-04-27 20:27:03 UTC (rev 6715)
@@ -15,48 +15,70 @@
 #else
 
 // Get number of dimensions in reference cell.
+inline
 int
 pylith::feassemble::TestQuadrature::cellDim(const Quadrature& q) {
   return q._cellDim;
 }
 
 // Get number of vertices in cell.
+inline
 int
 pylith::feassemble::TestQuadrature::numBasis(const Quadrature& q) {
   return q._numBasis;
 }
 
 // Get number of quadrature points.
+inline
 int
 pylith::feassemble::TestQuadrature::numQuadPts(const Quadrature& q) {
   return q._numQuadPts;
 }
 
 // Get number of dimensions in coordinates of cell vertices.
+inline
 int
 pylith::feassemble::TestQuadrature::spaceDim(const Quadrature& q) {
   return q._spaceDim;
 }
 
+// Get basis functions evaluated at vertices.
+inline
+const double*
+pylith::feassemble::TestQuadrature::basisVert(const Quadrature& q) {
+  return &q._basisVert[0];
+}
+
+// Get derivatives of basis functions evaluated at vertices.
+inline
+const double*
+pylith::feassemble::TestQuadrature::basisDerivVert(const Quadrature& q) {
+  return &q._basisDerivVert[0];
+}
+
 // Get basis functions evaluated at quadrature points.
+inline
 const double*
-pylith::feassemble::TestQuadrature::basis(const Quadrature& q) {
-  return &q._basis[0];
+pylith::feassemble::TestQuadrature::basisQuad(const Quadrature& q) {
+  return &q._basisQuad[0];
 }
 
 // Get derivatives of basis functions evaluated at quadrature points.
+inline
 const double*
-pylith::feassemble::TestQuadrature::basisDeriv(const Quadrature& q) {
-  return &q._basisDeriv[0];
+pylith::feassemble::TestQuadrature::basisDerivQuad(const Quadrature& q) {
+  return &q._basisDerivQuad[0];
 }
 
 // Get coordinates of quadrature points
+inline
 const double*
 pylith::feassemble::TestQuadrature::quadPtsRef(const Quadrature& q) {
   return &q._quadPtsRef[0];
 }
 
 // Get weights of quadrature points
+inline
 const double*
 pylith::feassemble::TestQuadrature::quadWts(const Quadrature& q) {
   return &q._quadWts[0];

Modified: short/3D/PyLith/trunk/unittests/pytests/feassemble/TestQuadrature.py
===================================================================
--- short/3D/PyLith/trunk/unittests/pytests/feassemble/TestQuadrature.py	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/unittests/pytests/feassemble/TestQuadrature.py	2007-04-27 20:27:03 UTC (rev 6715)
@@ -44,6 +44,8 @@
 def N2p(p):
   return -2.0*p
 
+def verticesRef():
+  return [-1.0, 1.0, 0.0]
 
 # ----------------------------------------------------------------------
 class TestQuadrature(unittest.TestCase):
@@ -75,15 +77,29 @@
                              (+1.0/3**0.5,)],
                             dtype=numpy.float64 )
     quadWtsE = numpy.array( [1.0, 1.0], dtype=numpy.float64 )
-    basisE = numpy.zeros( (2, 3), dtype=numpy.float64)
-    basisDerivE = numpy.zeros( (2, 3, 1), dtype=numpy.float64)
+
+    # Compute basis functions and derivatives at vertices
+    basisVertE = numpy.zeros( (3, 3), dtype=numpy.float64)
+    basisDerivVertE = numpy.zeros( (3, 3, 1), dtype=numpy.float64)
+    iVertex = 0
+    for v in verticesRef():
+      basisVertE[iVertex] = numpy.array([N0(v), N1(v), N2(v)],
+                                        dtype=numpy.float64).reshape( (3,) )
+      deriv = numpy.array([[N0p(v)], [N1p(v)], [N2p(v)]],
+                          dtype=numpy.float64)      
+      basisDerivVertE[iVertex] = deriv.reshape((3, 1))
+      iVertex += 1
+
+    # Compute basis functions and derivatives at quadrature points
+    basisQuadE = numpy.zeros( (2, 3), dtype=numpy.float64)
+    basisDerivQuadE = numpy.zeros( (2, 3, 1), dtype=numpy.float64)
     iQuad = 0
     for q in quadPtsE:
-      basisE[iQuad] = numpy.array([N0(q), N1(q), N2(q)],
-                                 dtype=numpy.float64).reshape( (3,) )
+      basisQuadE[iQuad] = numpy.array([N0(q), N1(q), N2(q)],
+                                      dtype=numpy.float64).reshape( (3,) )
       deriv = numpy.array([[N0p(q)], [N1p(q)], [N2p(q)]],
                           dtype=numpy.float64)      
-      basisDerivE[iQuad] = deriv.reshape((3, 1))
+      basisDerivQuadE[iQuad] = deriv.reshape((3, 1))
       iQuad += 1
 
     quadrature = Quadrature1D()
@@ -94,12 +110,18 @@
     from pylith.utils.testarray import test_double
     import pylith.feassemble.testfeassemble as testmodule
 
-    basis = testmodule.basis(quadrature.cppHandle)
-    test_double(self, basisE, basis)
+    basisVert = testmodule.basisVert(quadrature.cppHandle)
+    test_double(self, basisVertE, basisVert)
 
-    basisDeriv = testmodule.basisDeriv(quadrature.cppHandle)
-    test_double(self, basisDerivE, basisDeriv)
+    basisDerivVert = testmodule.basisDerivVert(quadrature.cppHandle)
+    test_double(self, basisDerivVertE, basisDerivVert)
 
+    basisQuad = testmodule.basisQuad(quadrature.cppHandle)
+    test_double(self, basisQuadE, basisQuad)
+
+    basisDerivQuad = testmodule.basisDerivQuad(quadrature.cppHandle)
+    test_double(self, basisDerivQuadE, basisDerivQuad)
+
     quadWts = testmodule.quadWts(quadrature.cppHandle)
     test_double(self, quadWtsE, quadWts)
     

Modified: short/3D/PyLith/trunk/unittests/pytests/feassemble/testfeassemble.pyxe.src
===================================================================
--- short/3D/PyLith/trunk/unittests/pytests/feassemble/testfeassemble.pyxe.src	2007-04-27 19:47:42 UTC (rev 6714)
+++ short/3D/PyLith/trunk/unittests/pytests/feassemble/testfeassemble.pyxe.src	2007-04-27 20:27:03 UTC (rev 6715)
@@ -59,27 +59,27 @@
 return pylith::feassemble::TestQuadrature::spaceDim(*q);
 #}embed
 
-# create shim for TestQuadrature::basis
-#embed{ double* TestQuadrature_basis(void* obj)
+# create shim for TestQuadrature::basisQuad
+#embed{ double* TestQuadrature_basisQuad(void* obj)
 const pylith::feassemble::Quadrature* q =
   (pylith::feassemble::Quadrature*) obj;
 const int size = TestQuadrature_numQuadPts(obj) *
                  TestQuadrature_numBasis(obj);
 double* vals = (size > 0) ? new double[size] : 0;
-const double* basis = pylith::feassemble::TestQuadrature::basis(*q);
+const double* basis = pylith::feassemble::TestQuadrature::basisQuad(*q);
 memcpy(vals, basis, size*sizeof(double));
 return vals;
 #}embed
 
-# create shim for TestQuadrature::basisDeriv
-#embed{ double* TestQuadrature_basisDeriv(void* obj)
+# create shim for TestQuadrature::basisDerivQuad
+#embed{ double* TestQuadrature_basisDerivQuad(void* obj)
 const pylith::feassemble::Quadrature* q =
   (pylith::feassemble::Quadrature*) obj;
 const int size = TestQuadrature_numQuadPts(obj) *
                  TestQuadrature_numBasis(obj) *
                  TestQuadrature_cellDim(obj);
 double* vals = (size > 0) ? new double[size] : 0;
-const double* basisDeriv = pylith::feassemble::TestQuadrature::basisDeriv(*q);
+const double* basisDeriv = pylith::feassemble::TestQuadrature::basisDerivQuad(*q);
 memcpy(vals, basisDeriv, size*sizeof(double));
 return vals;
 #}embed
@@ -108,9 +108,9 @@
 #}embed
 
 # ----------------------------------------------------------------------
-def basis(qhandle):
+def basisQuad(qhandle):
   """
-  Call TestQuadrature::basis().
+  Call TestQuadrature::basisQuad().
   """
   if not qhandle.name == "pylith_feassemble_Quadrature":
     raise TypeError, \
@@ -125,16 +125,16 @@
   numBasis = TestQuadrature_numBasis(qptr)
 
   cdef double* values
-  values = TestQuadrature_basis(qptr)
+  values = TestQuadrature_basisQuad(qptr)
   dims = [numQuadPts, numBasis]
   valuesObj = PyCObject_FromVoidPtr(values, NULL)
   return spatialdata.utils.simplearray.SimpleCppArray(valuesObj, dims, "double")
   
 
 # ----------------------------------------------------------------------
-def basisDeriv(qhandle):
+def basisDerivQuad(qhandle):
   """
-  Call TestQuadrature::basisDeriv().
+  Call TestQuadrature::basisDerivQuad().
   """
   if not qhandle.name == "pylith_feassemble_Quadrature":
     raise TypeError, \
@@ -151,7 +151,7 @@
   cellDim = TestQuadrature_cellDim(qptr)
 
   cdef double* values
-  values = TestQuadrature_basisDeriv(qptr)
+  values = TestQuadrature_basisDerivQuad(qptr)
   dims = [numQuadPts, numBasis, cellDim]
   valuesObj = PyCObject_FromVoidPtr(values, NULL)
   return spatialdata.utils.simplearray.SimpleCppArray(valuesObj, dims,



More information about the cig-commits mailing list