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

baagaard at geodynamics.org baagaard at geodynamics.org
Sun Sep 24 20:00:41 PDT 2006


Author: baagaard
Date: 2006-09-24 20:00:40 -0700 (Sun, 24 Sep 2006)
New Revision: 4600

Added:
   short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din2D.cc
   short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din2D.hh
   short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din2D.icc
   short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din3D.cc
   short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din3D.hh
   short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din3D.icc
   short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2D.cc
   short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2D.hh
   short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2D.icc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature1Din2D.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature1Din2D.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature1Din3D.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature1Din3D.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature2D.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature2D.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature1Din2DLinear.py
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature1Din2DQuadratic.py
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature1Din3DLinear.py
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature1Din3DQuadratic.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/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
Modified:
   short/3D/PyLith/trunk/libsrc/feassemble/Makefile.am
   short/3D/PyLith/trunk/libsrc/feassemble/Quadrature.cc
   short/3D/PyLith/trunk/libsrc/feassemble/Quadrature.hh
   short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1D.cc
   short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1D.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/Makefile.am
   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/QuadratureApp.py
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/generate.sh
Log:
Added quadrature and unit tests for 1-D cells in 2D & 3-D space and 2-D cells in 2-D space.

Modified: short/3D/PyLith/trunk/libsrc/feassemble/Makefile.am
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Makefile.am	2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Makefile.am	2006-09-25 03:00:40 UTC (rev 4600)
@@ -17,13 +17,22 @@
 
 libpylithfeassemble_la_SOURCES = \
 	Quadrature.cc \
-	Quadrature1D.cc
+	Quadrature1D.cc \
+	Quadrature1Din2D.cc \
+	Quadrature1Din3D.cc \
+	Quadrature2D.cc
 
 subpkginclude_HEADERS = \
 	Quadrature.hh \
 	Quadrature.icc \
 	Quadrature1D.hh \
-	Quadrature1D.icc
+	Quadrature1D.icc \
+	Quadrature1Din2D.hh \
+	Quadrature1Din2D.icc \
+	Quadrature1Din3D.hh \
+	Quadrature1Din3D.icc \
+	Quadrature2D.hh \
+	Quadrature2D.icc
 
 noinst_HEADERS =
 

Modified: short/3D/PyLith/trunk/libsrc/feassemble/Quadrature.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Quadrature.cc	2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Quadrature.cc	2006-09-25 03:00:40 UTC (rev 4600)
@@ -194,4 +194,27 @@
   delete[] _quadPts; _quadPts = (size > 0) ? new double[size] : 0;
 } // initialize
 
+// ----------------------------------------------------------------------
+// Set entries in geometry arrays to zero.
+void
+pylith::feassemble::Quadrature::_resetGeometry(void)
+{ // _resetGeometry
+  // Zero out Jacobian and its inverse
+  int size = _numQuadPts*_cellDim*_spaceDim;
+  for (int i=0; i < size; ++i)
+    _jacobian[i] = 0.0;
+  for (int i=0; i < size; ++i)
+    _jacobianInv[i] = 0.0;
+
+  // Zero out Jacobian determinant
+  size = _numQuadPts;
+  for (int i=0; i < size; ++i)
+    _jacobianDet[i] = 0.0;
+
+  // Zero out quad pts
+  size = _numQuadPts*_spaceDim;
+  for (int i=0; i < size; ++i)
+    _quadPts[i] = 0.0;
+} // _resetGeometry
+
 // End of file 

Modified: short/3D/PyLith/trunk/libsrc/feassemble/Quadrature.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Quadrature.hh	2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Quadrature.hh	2006-09-25 03:00:40 UTC (rev 4600)
@@ -130,6 +130,9 @@
   void _computeGeometry(const ALE::Obj<ALE::Mesh::section_type>& coordinates,
 			const ALE::Mesh::point_type& cell) = 0;
 
+  /// Set entries in geometry arrays to zero.
+  void _resetGeometry(void);
+
 // PRIVATE METHODS //////////////////////////////////////////////////////
 private :
 

Modified: short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1D.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1D.cc	2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1D.cc	2006-09-25 03:00:40 UTC (rev 4600)
@@ -53,6 +53,8 @@
   assert(0 != _jacobian);
   assert(0 != _jacobianInv);
 
+  _resetGeometry();
+
   // Get coordinates of cell's vertices
   const ALE::Mesh::topology_type::patch_type patch  = 0;
   const ALE::Mesh::section_type::value_type* vertCoords = 
@@ -63,15 +65,13 @@
   for (int iQuadPt=0; iQuadPt < _numQuadPts; ++iQuadPt) {
 
     // Compute coordinates of quadrature point in cell
-    // x = sum[i=1,n] (Ni * xi)
-    _quadPts[iQuadPt] = 0.0;
+    // x = sum[i=0,n-1] (Ni * xi)
     for (int iVertex=0; iVertex < _numCorners; ++iVertex)
       _quadPts[iQuadPt] += 
 	_basis[iQuadPt*_numCorners+iVertex]*vertCoords[iVertex];
 
     // Compute Jacobian at quadrature point
-    // J = dx/dp = sum[i=1,n] (dNi/dp * xi)
-    _jacobian[iQuadPt] = 0.0;
+    // J = dx/dp = sum[i=0,n-1] (dNi/dp * xi)
     for (int iVertex=0; iVertex < _numCorners; ++iVertex)
       _jacobian[iQuadPt] += 
 	_basisDeriv[iQuadPt*_numCorners+iVertex] * vertCoords[iVertex];

Modified: short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1D.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1D.hh	2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1D.hh	2006-09-25 03:00:40 UTC (rev 4600)
@@ -65,7 +65,7 @@
 // PRIVATE METHODS //////////////////////////////////////////////////////
 private :
 
-  const Quadrature& operator=(const Quadrature&); ///< Not implemented
+  const Quadrature1D& operator=(const Quadrature1D&); ///< Not implemented
 
 }; // Quadrature1D
 

Added: short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din2D.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din2D.cc	2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din2D.cc	2006-09-25 03:00:40 UTC (rev 4600)
@@ -0,0 +1,115 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+#include <portinfo>
+
+#include "Quadrature1Din2D.hh" // implementation of class methods
+
+#include <assert.h> // USES assert()
+#include <stdexcept> // USES std::runtime_error
+#include <sstream> // USES std::ostringstream
+
+// ----------------------------------------------------------------------
+// Constructor
+pylith::feassemble::Quadrature1Din2D::Quadrature1Din2D(void)
+{ // constructor
+} // constructor
+
+// ----------------------------------------------------------------------
+// Destructor
+pylith::feassemble::Quadrature1Din2D::~Quadrature1Din2D(void)
+{ // destructor
+} // destructor
+  
+// ----------------------------------------------------------------------
+// Copy constructor.
+pylith::feassemble::Quadrature1Din2D::Quadrature1Din2D(const Quadrature1Din2D& q) :
+  Quadrature(q)
+{ // copy constructor
+} // copy constructor
+
+// ----------------------------------------------------------------------
+// Compute geometric quantities for a cell.
+void
+pylith::feassemble::Quadrature1Din2D::_computeGeometry(
+		       const ALE::Obj<ALE::Mesh::section_type>& coordinates,
+		       const ALE::Mesh::point_type& cell)
+{ // _computeGeometry
+  assert(1 == _cellDim);
+  assert(2 == _spaceDim);
+  assert(0 != _basisDeriv);
+  assert(0 != _quadPtsRef);
+  assert(0 != _quadPts);
+  assert(0 != _quadWts);
+  assert(0 != _jacobian);
+  assert(0 != _jacobianInv);
+
+  _resetGeometry();
+
+  // Get coordinates of cell's vertices
+  const ALE::Mesh::topology_type::patch_type patch  = 0;
+  const ALE::Mesh::section_type::value_type* vertCoords = 
+    coordinates->restrict(patch, cell);
+  //assert(1 == coordinates.GetFiberDimension(patch, *vertices->begin()));
+
+  // Loop over quadrature points
+  for (int iQuadPt=0; iQuadPt < _numQuadPts; ++iQuadPt) {
+    
+    // Compute coordinates of quadrature point in cell
+    // x = sum[i=0,n-1] (Ni * xi)
+    // y = sum[i=0,n-1] (Ni * yi)
+    for (int iVertex=0, iB=iQuadPt*_numCorners;
+	 iVertex < _numCorners;
+	 ++iVertex) {
+      const double basis = _basis[iB+iVertex];
+      for (int iDim=0, iQ=iQuadPt*_spaceDim, iV=iVertex*_spaceDim;
+	   iDim < _spaceDim;
+	   ++iDim)
+	_quadPts[iQ+iDim] +=  basis * vertCoords[iV+iDim];
+    } // for
+    
+    // Compute Jacobian at quadrature point
+    // 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 iVertex=0, iB=iQuadPt*_numCorners;
+	 iVertex < _numCorners;
+	 ++iVertex) {
+      const double deriv = _basisDeriv[iB+iVertex];
+      for (int iDim=0, iJ=iQuadPt*_spaceDim, iV=iVertex*_spaceDim;
+	   iDim < _spaceDim;
+	   ++iDim)
+	_jacobian[iJ+iDim] += deriv * vertCoords[iV+iDim];
+    } // for
+
+    // Compute determinant of Jacobian at quadrature point
+    // |J| = sqrt(J transpose(J))
+    double det = 0.0;
+    for (int iDim=0, iJ=iQuadPt*_spaceDim; iDim < _spaceDim; ++iDim)
+      det += _jacobian[iJ+iDim]*_jacobian[iJ+iDim];
+    det = sqrt(det);
+    if (det < _jacobianTol) {
+      std::ostringstream msg;
+      msg << "Determinant of Jacobian (" << det << ") is below minimum\n"
+	  << "permissible value (" << _jacobianTol << ")!\n";
+      throw std::runtime_error(msg.str());
+    } // for
+    _jacobianDet[iQuadPt] = det;
+
+    // Compute inverse of Jacobian at quadrature point
+    // Jinv = 1.0/[J]
+    for (int iDim=0, iJ=iQuadPt*_spaceDim; iDim < _spaceDim; ++iDim)
+      _jacobianInv[iJ+iDim] = 1.0/_jacobian[iJ+iDim];
+  } // for
+} // _computeGeometry
+
+// End of file 

Added: short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din2D.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din2D.hh	2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din2D.hh	2006-09-25 03:00:40 UTC (rev 4600)
@@ -0,0 +1,77 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+/**
+ * @file pylith/feassemble/Quadrature1Din2D.hh
+ *
+ * @brief Quadrature for 1-D finite-elements in 2-D space.
+ */
+
+#if !defined(pylith_feassemble_quadrature1din2d_hh)
+#define pylith_feassemble_quadrature1din2d_hh
+
+#include "Quadrature.hh"
+
+namespace pylith {
+  namespace feassemble {
+    class Quadrature1Din2D;
+    class TestQuadrature1Din2D;
+  } // feassemble
+} // pylith
+
+class pylith::feassemble::Quadrature1Din2D : public Quadrature
+{ // Quadrature1D
+  friend class TestQuadrature1Din2D; // unit testing
+
+// PUBLIC MEMBERS ///////////////////////////////////////////////////////
+public :
+
+  /// Constructor
+  Quadrature1Din2D(void);
+
+  /// Destructor
+  virtual ~Quadrature1Din2D(void);
+
+  /// Create a copy of this object.
+  virtual
+  Quadrature* clone(void) const;
+
+// PROTECTED METHODS ////////////////////////////////////////////////////
+protected :
+
+  /** Copy constructor.
+   *
+   * @param q Quadrature to copy
+   */
+  Quadrature1Din2D(const Quadrature1Din2D& q);
+
+  /** Compute geometric quantities for a cell.
+   *
+   * @param coordinates Section containing vertex coordinates
+   * @param cell Finite-element cell
+   */
+  void _computeGeometry(const ALE::Obj<ALE::Mesh::section_type>& coordinates,
+			const ALE::Mesh::point_type& cell);
+
+// PRIVATE METHODS //////////////////////////////////////////////////////
+private :
+
+  /// Not implemented
+  const Quadrature1Din2D& operator=(const Quadrature1Din2D&);
+
+}; // Quadrature1Din2D
+
+#include "Quadrature1Din2D.icc" // inline methods
+
+#endif // pylith_feassemble_quadrature1din2d_hh
+
+// End of file 

Added: short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din2D.icc
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din2D.icc	2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din2D.icc	2006-09-25 03:00:40 UTC (rev 4600)
@@ -0,0 +1,26 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+#if !defined(pylith_feassemble_quadrature1din2d_hh)
+#error "Quadrature1Din2D.icc must be included only from Quadrature1Din2D.hh"
+#else
+
+// Create a copy of this object.
+inline
+pylith::feassemble::Quadrature*
+pylith::feassemble::Quadrature1Din2D::clone(void) const {
+  return new Quadrature1Din2D(*this);
+} // clone
+
+#endif
+
+// End of file

Added: short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din3D.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din3D.cc	2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din3D.cc	2006-09-25 03:00:40 UTC (rev 4600)
@@ -0,0 +1,117 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+#include <portinfo>
+
+#include "Quadrature1Din3D.hh" // implementation of class methods
+
+#include <assert.h> // USES assert()
+#include <stdexcept> // USES std::runtime_error
+#include <sstream> // USES std::ostringstream
+
+// ----------------------------------------------------------------------
+// Constructor
+pylith::feassemble::Quadrature1Din3D::Quadrature1Din3D(void)
+{ // constructor
+} // constructor
+
+// ----------------------------------------------------------------------
+// Destructor
+pylith::feassemble::Quadrature1Din3D::~Quadrature1Din3D(void)
+{ // destructor
+} // destructor
+  
+// ----------------------------------------------------------------------
+// Copy constructor.
+pylith::feassemble::Quadrature1Din3D::Quadrature1Din3D(const Quadrature1Din3D& q) :
+  Quadrature(q)
+{ // copy constructor
+} // copy constructor
+
+// ----------------------------------------------------------------------
+// Compute geometric quantities for a cell.
+void
+pylith::feassemble::Quadrature1Din3D::_computeGeometry(
+		       const ALE::Obj<ALE::Mesh::section_type>& coordinates,
+		       const ALE::Mesh::point_type& cell)
+{ // _computeGeometry
+  assert(1 == _cellDim);
+  assert(3 == _spaceDim);
+  assert(0 != _basisDeriv);
+  assert(0 != _quadPtsRef);
+  assert(0 != _quadPts);
+  assert(0 != _quadWts);
+  assert(0 != _jacobian);
+  assert(0 != _jacobianInv);
+
+  _resetGeometry();
+
+  // Get coordinates of cell's vertices
+  const ALE::Mesh::topology_type::patch_type patch  = 0;
+  const ALE::Mesh::section_type::value_type* vertCoords = 
+    coordinates->restrict(patch, cell);
+  //assert(3 == coordinates.GetFiberDimension(patch, *vertices->begin()));
+
+  // Loop over quadrature points
+  for (int iQuadPt=0; iQuadPt < _numQuadPts; ++iQuadPt) {
+    
+    // Compute coordinates of quadrature point in cell
+    // x = sum[i=0,n-1] (Ni * xi)
+    // y = sum[i=0,n-1] (Ni * yi)
+    // z = sum[i=0,n-1] (Ni * zi)
+    for (int iVertex=0, iB=iQuadPt*_numCorners;
+	 iVertex < _numCorners;
+	 ++iVertex) {
+      const double basis = _basis[iB+iVertex];
+      for (int iDim=0, iQ=iQuadPt*_spaceDim, iV=iVertex*_spaceDim;
+	   iDim < _spaceDim;
+	   ++iDim)
+	_quadPts[iQ+iDim] +=  basis * vertCoords[iV+iDim];
+    } // for
+    
+    // Compute Jacobian at quadrature point
+    // 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 iVertex=0, iB=iQuadPt*_numCorners;
+	 iVertex < _numCorners;
+	 ++iVertex) {
+      const double deriv = _basisDeriv[iB+iVertex];
+      for (int iDim=0, iJ=iQuadPt*_spaceDim, iV=iVertex*_spaceDim;
+	   iDim < _spaceDim;
+	   ++iDim)
+	_jacobian[iJ+iDim] += deriv * vertCoords[iV+iDim];
+    } // for
+
+    // Compute determinant of Jacobian at quadrature point
+    // |J| = sqrt(J transpose(J))
+    double det = 0.0;
+    for (int iDim=0, iJ=iQuadPt*_spaceDim; iDim < _spaceDim; ++iDim)
+      det += _jacobian[iJ+iDim]*_jacobian[iJ+iDim];
+    det = sqrt(det);
+    if (det < _jacobianTol) {
+      std::ostringstream msg;
+      msg << "Determinant of Jacobian (" << det << ") is below minimum\n"
+	  << "permissible value (" << _jacobianTol << ")!\n";
+      throw std::runtime_error(msg.str());
+    } // for
+    _jacobianDet[iQuadPt] = det;
+
+    // Compute inverse of Jacobian at quadrature point
+    // Jinv = 1.0/[J]
+    for (int iDim=0, iJ=iQuadPt*_spaceDim; iDim < _spaceDim; ++iDim)
+      _jacobianInv[iJ+iDim] = 1.0/_jacobian[iJ+iDim];
+  } // for
+} // _computeGeometry
+
+// End of file 

Added: short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din3D.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din3D.hh	2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din3D.hh	2006-09-25 03:00:40 UTC (rev 4600)
@@ -0,0 +1,77 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+/**
+ * @file pylith/feassemble/Quadrature1Din3D.hh
+ *
+ * @brief Quadrature for 1-D finite-elements in 3-D space.
+ */
+
+#if !defined(pylith_feassemble_quadrature1din3d_hh)
+#define pylith_feassemble_quadrature1din3d_hh
+
+#include "Quadrature.hh"
+
+namespace pylith {
+  namespace feassemble {
+    class Quadrature1Din3D;
+    class TestQuadrature1Din3D;
+  } // feassemble
+} // pylith
+
+class pylith::feassemble::Quadrature1Din3D : public Quadrature
+{ // Quadrature1D
+  friend class TestQuadrature1Din3D; // unit testing
+
+// PUBLIC MEMBERS ///////////////////////////////////////////////////////
+public :
+
+  /// Constructor
+  Quadrature1Din3D(void);
+
+  /// Destructor
+  virtual ~Quadrature1Din3D(void);
+
+  /// Create a copy of this object.
+  virtual
+  Quadrature* clone(void) const;
+
+// PROTECTED METHODS ////////////////////////////////////////////////////
+protected :
+
+  /** Copy constructor.
+   *
+   * @param q Quadrature to copy
+   */
+  Quadrature1Din3D(const Quadrature1Din3D& q);
+
+  /** Compute geometric quantities for a cell.
+   *
+   * @param coordinates Section containing vertex coordinates
+   * @param cell Finite-element cell
+   */
+  void _computeGeometry(const ALE::Obj<ALE::Mesh::section_type>& coordinates,
+			const ALE::Mesh::point_type& cell);
+
+// PRIVATE METHODS //////////////////////////////////////////////////////
+private :
+
+  /// Not implemented
+  const Quadrature1Din3D& operator=(const Quadrature1Din3D&);
+
+}; // Quadrature1Din3D
+
+#include "Quadrature1Din3D.icc" // inline methods
+
+#endif // pylith_feassemble_quadrature1din3d_hh
+
+// End of file 

Added: short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din3D.icc
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din3D.icc	2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din3D.icc	2006-09-25 03:00:40 UTC (rev 4600)
@@ -0,0 +1,26 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+#if !defined(pylith_feassemble_quadrature1din3d_hh)
+#error "Quadrature1Din3D.icc must be included only from Quadrature1Din3D.hh"
+#else
+
+// Create a copy of this object.
+inline
+pylith::feassemble::Quadrature*
+pylith::feassemble::Quadrature1Din3D::clone(void) const {
+  return new Quadrature1Din3D(*this);
+} // clone
+
+#endif
+
+// End of file

Added: short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2D.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2D.cc	2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2D.cc	2006-09-25 03:00:40 UTC (rev 4600)
@@ -0,0 +1,127 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+#include <portinfo>
+
+#include "Quadrature2D.hh" // implementation of class methods
+
+#include <assert.h> // USES assert()
+#include <stdexcept> // USES std::runtime_error
+#include <sstream> // USES std::ostringstream
+
+// ----------------------------------------------------------------------
+// Constructor
+pylith::feassemble::Quadrature2D::Quadrature2D(void)
+{ // constructor
+} // constructor
+
+// ----------------------------------------------------------------------
+// Destructor
+pylith::feassemble::Quadrature2D::~Quadrature2D(void)
+{ // destructor
+} // destructor
+  
+// ----------------------------------------------------------------------
+// Copy constructor.
+pylith::feassemble::Quadrature2D::Quadrature2D(const Quadrature2D& q) :
+  Quadrature(q)
+{ // copy constructor
+} // copy constructor
+
+// ----------------------------------------------------------------------
+// Compute geometric quantities for a cell.
+void
+pylith::feassemble::Quadrature2D::_computeGeometry(
+		       const ALE::Obj<ALE::Mesh::section_type>& coordinates,
+		       const ALE::Mesh::point_type& cell)
+{ // _computeGeometry
+  assert(2 == _cellDim);
+  assert(2 == _spaceDim);
+  assert(0 != _basisDeriv);
+  assert(0 != _quadPtsRef);
+  assert(0 != _quadPts);
+  assert(0 != _quadWts);
+  assert(0 != _jacobian);
+  assert(0 != _jacobianInv);
+
+  _resetGeometry();
+
+  // Get coordinates of cell's vertices
+  const ALE::Mesh::topology_type::patch_type patch  = 0;
+  const ALE::Mesh::section_type::value_type* vertCoords = 
+    coordinates->restrict(patch, cell);
+  //assert(3 == coordinates.GetFiberDimension(patch, *vertices->begin()));
+
+  // Loop over quadrature points
+  for (int iQuadPt=0; iQuadPt < _numQuadPts; ++iQuadPt) {
+    
+    // Compute coordinates of quadrature point in cell
+    // x = sum[i=0,n-1] (Ni * xi)
+    // y = sum[i=0,n-1] (Ni * yi)
+    for (int iVertex=0, iB=iQuadPt*_numCorners;
+	 iVertex < _numCorners;
+	 ++iVertex) {
+      const double basis = _basis[iB+iVertex];
+      for (int iDim=0, iQ=iQuadPt*_spaceDim, iV=iVertex*_spaceDim;
+	   iDim < _spaceDim;
+	   ++iDim)
+	_quadPts[iQ+iDim] +=  basis * vertCoords[iV+iDim];
+    } // for
+    
+    // Compute Jacobian at quadrature point
+    // 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 iVertex=0;
+	 iVertex < _numCorners;
+	 ++iVertex)
+      for (int iRow=0, 
+	     iB=iQuadPt*_numCorners*_spaceDim+iVertex*_spaceDim;
+	   iRow < _cellDim;
+	   ++iRow) {
+	const double deriv = _basisDeriv[iB+iRow];
+	for (int iCol=0, iJ=iQuadPt*_cellDim*_spaceDim + iRow*_spaceDim;
+	     iCol < _spaceDim; ++iCol)
+	  _jacobian[iJ + iCol] += deriv * vertCoords[iVertex*_spaceDim+iCol];
+      } // for
+  
+    // Compute determinant of Jacobian at quadrature point
+    // |J| = j00*j11-j01*j10
+    const int iJ = iQuadPt*_cellDim*_spaceDim;
+    const int i00 = iJ + 0*_spaceDim + 0;
+    const int i11 = iJ + 1*_spaceDim + 1;
+    const int i01 = iJ + 0*_spaceDim + 1;
+    const int i10 = iJ + 1*_spaceDim + 0;
+    const double det = 
+      _jacobian[i00]*_jacobian[i11] - _jacobian[i01]*_jacobian[i10];
+    if (det < _jacobianTol) {
+      std::ostringstream msg;
+      msg << "Determinant of Jacobian (" << det << ") is below minimum\n"
+	  << "permissible value (" << _jacobianTol << ")!\n";
+      throw std::runtime_error(msg.str());
+    } // for
+    _jacobianDet[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;
+  } // for
+} // _computeGeometry
+
+// End of file 

Added: short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2D.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2D.hh	2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2D.hh	2006-09-25 03:00:40 UTC (rev 4600)
@@ -0,0 +1,76 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+/**
+ * @file pylith/feassemble/Quadrature2D.hh
+ *
+ * @brief Quadrature for 2-D finite-elements in 2-D space.
+ */
+
+#if !defined(pylith_feassemble_quadrature2d_hh)
+#define pylith_feassemble_quadrature2d_hh
+
+#include "Quadrature.hh"
+
+namespace pylith {
+  namespace feassemble {
+    class Quadrature2D;
+    class TestQuadrature2D;
+  } // feassemble
+} // pylith
+
+class pylith::feassemble::Quadrature2D : public Quadrature
+{ // Quadrature1D
+  friend class TestQuadrature2D; // unit testing
+
+// PUBLIC MEMBERS ///////////////////////////////////////////////////////
+public :
+
+  /// Constructor
+  Quadrature2D(void);
+
+  /// Destructor
+  virtual ~Quadrature2D(void);
+
+  /// Create a copy of this object.
+  virtual
+  Quadrature* clone(void) const;
+
+// PROTECTED METHODS ////////////////////////////////////////////////////
+protected :
+
+  /** Copy constructor.
+   *
+   * @param q Quadrature to copy
+   */
+  Quadrature2D(const Quadrature2D& q);
+
+  /** Compute geometric quantities for a cell.
+   *
+   * @param coordinates Section containing vertex coordinates
+   * @param cell Finite-element cell
+   */
+  void _computeGeometry(const ALE::Obj<ALE::Mesh::section_type>& coordinates,
+			const ALE::Mesh::point_type& cell);
+
+// PRIVATE METHODS //////////////////////////////////////////////////////
+private :
+
+  const Quadrature2D& operator=(const Quadrature2D&); ///< Not implemented
+
+}; // Quadrature2D
+
+#include "Quadrature2D.icc" // inline methods
+
+#endif // pylith_feassemble_quadrature2d_hh
+
+// End of file 

Added: short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2D.icc
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2D.icc	2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2D.icc	2006-09-25 03:00:40 UTC (rev 4600)
@@ -0,0 +1,26 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+#if !defined(pylith_feassemble_quadrature2d_hh)
+#error "Quadrature2D.icc must be included only from Quadrature2D.hh"
+#else
+
+// Create a copy of this object.
+inline
+pylith::feassemble::Quadrature*
+pylith::feassemble::Quadrature2D::clone(void) const {
+  return new Quadrature2D(*this);
+} // clone
+
+#endif
+
+// End of file

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/Makefile.am
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/Makefile.am	2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/Makefile.am	2006-09-25 03:00:40 UTC (rev 4600)
@@ -20,17 +20,33 @@
 testfeassemble_SOURCES = \
 	TestQuadrature.cc \
 	TestQuadrature1D.cc \
+	TestQuadrature1Din2D.cc \
+	TestQuadrature2D.cc \
 	test_feassemble.cc \
 	data/QuadratureData.cc \
 	data/QuadratureData1DLinear.cc \
-	data/QuadratureData1DQuadratic.cc
+	data/QuadratureData1DQuadratic.cc \
+	data/QuadratureData1Din2DLinear.cc \
+	data/QuadratureData1Din2DQuadratic.cc \
+	data/QuadratureData1Din3DLinear.cc \
+	data/QuadratureData1Din3DQuadratic.cc \
+	data/QuadratureData2DLinear.cc \
+	data/QuadratureData2DQuadratic.cc
 
 noinst_HEADERS = \
 	TestQuadrature.hh \
-	TestQuadrature1D.hh
+	TestQuadrature1D.hh \
+	TestQuadrature1Din2D.hh \
+	TestQuadrature2D.hh \
 	data/QuadratureData.hh \
 	data/QuadratureData1DLinear.hh \
-	data/QuadratureData1DQuadratic.hh
+	data/QuadratureData1DQuadratic.hh \
+	data/QuadratureData1Din2DLinear.hh \
+	data/QuadratureData1Din2DQuadratic.hh \
+	data/QuadratureData1Din3DLinear.hh \
+	data/QuadratureData1Din3DQuadratic.hh \
+	data/QuadratureData2DLinear.hh \
+	data/QuadratureData2DQuadratic.hh 
 
 testfeassemble_LDFLAGS = $(PETSC_LIB)
 

Added: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature1Din2D.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature1Din2D.cc	2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature1Din2D.cc	2006-09-25 03:00:40 UTC (rev 4600)
@@ -0,0 +1,55 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "TestQuadrature1Din2D.hh" // Implementation of class methods
+
+#include "pylith/feassemble/Quadrature1Din2D.hh"
+
+#include "data/QuadratureData1Din2DLinear.hh"
+#include "data/QuadratureData1Din2DQuadratic.hh"
+
+// ----------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION( pylith::feassemble::TestQuadrature1Din2D );
+
+// ----------------------------------------------------------------------
+// Test constructor
+void
+pylith::feassemble::TestQuadrature1Din2D::testConstructor(void)
+{ // testConstructor
+  Quadrature1Din2D quadrature;
+} // testConstructor
+
+// ----------------------------------------------------------------------
+// Test computeGeometry() w/linear basis fns
+void
+pylith::feassemble::TestQuadrature1Din2D::testLinear(void)
+{ // testLinear
+  Quadrature1Din2D q;
+  QuadratureData1Din2DLinear data;
+
+  _testComputeGeometry(&q, data);
+} // testLinear
+
+// ----------------------------------------------------------------------
+// Test computeGeometry() w/quadratic basis fns
+void
+pylith::feassemble::TestQuadrature1Din2D::testQuadratic(void)
+{ // testQuadratic
+  Quadrature1Din2D q;
+  QuadratureData1Din2DQuadratic data;
+
+  _testComputeGeometry(&q, data);
+} // testQuadratic
+
+// End of file 

Added: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature1Din2D.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature1Din2D.hh	2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature1Din2D.hh	2006-09-25 03:00:40 UTC (rev 4600)
@@ -0,0 +1,60 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/**
+ * @file unittests/libtests/feassemble/TestQuadrature1Din2D.hh
+ *
+ * @brief C++ TestQuadrature1Din2D object
+ *
+ * C++ unit testing for Quadrature1Din2D.
+ */
+
+#if !defined(pylith_feassemble_testquadrature1din2d_hh)
+#define pylith_feassemble_testquadrature1din2d_hh
+
+#include "TestQuadrature.hh"
+
+/// Namespace for spatialdata package
+namespace pylith {
+  namespace feassemble {
+    class TestQuadrature1Din2D;
+  } // feassemble
+} // pylith
+
+/// C++ unit testing for Quadrature1Din2D
+class pylith::feassemble::TestQuadrature1Din2D : public TestQuadrature
+{ // class TestQuadrature1D
+
+  // CPPUNIT TEST SUITE /////////////////////////////////////////////////
+  CPPUNIT_TEST_SUITE( TestQuadrature1Din2D );
+  CPPUNIT_TEST( testConstructor );
+  CPPUNIT_TEST( testLinear );
+  CPPUNIT_TEST( testQuadratic );
+  CPPUNIT_TEST_SUITE_END();
+
+  // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+  /// Test constructor
+  void testConstructor(void);
+
+  /// Test initialize() & computeGeometry() w/linear basis fns
+  void testLinear(void);
+
+  /// Test initialize() & computeGeometry() w/quadratic basis fns
+  void testQuadratic(void);
+
+}; // class TestQuadrature
+
+#endif // pylith_feassemble_testquadrature1din2d_hh
+
+// End of file 

Added: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature1Din3D.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature1Din3D.cc	2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature1Din3D.cc	2006-09-25 03:00:40 UTC (rev 4600)
@@ -0,0 +1,55 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "TestQuadrature1Din3D.hh" // Implementation of class methods
+
+#include "pylith/feassemble/Quadrature1Din3D.hh"
+
+#include "data/QuadratureData1Din3DLinear.hh"
+#include "data/QuadratureData1Din3DQuadratic.hh"
+
+// ----------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION( pylith::feassemble::TestQuadrature1Din3D );
+
+// ----------------------------------------------------------------------
+// Test constructor
+void
+pylith::feassemble::TestQuadrature1Din3D::testConstructor(void)
+{ // testConstructor
+  Quadrature1Din3D quadrature;
+} // testConstructor
+
+// ----------------------------------------------------------------------
+// Test computeGeometry() w/linear basis fns
+void
+pylith::feassemble::TestQuadrature1Din3D::testLinear(void)
+{ // testLinear
+  Quadrature1Din3D q;
+  QuadratureData1Din3DLinear data;
+
+  _testComputeGeometry(&q, data);
+} // testLinear
+
+// ----------------------------------------------------------------------
+// Test computeGeometry() w/quadratic basis fns
+void
+pylith::feassemble::TestQuadrature1Din3D::testQuadratic(void)
+{ // testQuadratic
+  Quadrature1Din3D q;
+  QuadratureData1Din3DQuadratic data;
+
+  _testComputeGeometry(&q, data);
+} // testQuadratic
+
+// End of file 

Added: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature1Din3D.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature1Din3D.hh	2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature1Din3D.hh	2006-09-25 03:00:40 UTC (rev 4600)
@@ -0,0 +1,60 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/**
+ * @file unittests/libtests/feassemble/TestQuadrature1Din3D.hh
+ *
+ * @brief C++ TestQuadrature1Din3D object
+ *
+ * C++ unit testing for Quadrature1Din3D.
+ */
+
+#if !defined(pylith_feassemble_testquadrature1din3d_hh)
+#define pylith_feassemble_testquadrature1din3d_hh
+
+#include "TestQuadrature.hh"
+
+/// Namespace for spatialdata package
+namespace pylith {
+  namespace feassemble {
+    class TestQuadrature1Din3D;
+  } // feassemble
+} // pylith
+
+/// C++ unit testing for Quadrature1Din3D
+class pylith::feassemble::TestQuadrature1Din3D : public TestQuadrature
+{ // class TestQuadrature1D
+
+  // CPPUNIT TEST SUITE /////////////////////////////////////////////////
+  CPPUNIT_TEST_SUITE( TestQuadrature1Din3D );
+  CPPUNIT_TEST( testConstructor );
+  CPPUNIT_TEST( testLinear );
+  CPPUNIT_TEST( testQuadratic );
+  CPPUNIT_TEST_SUITE_END();
+
+  // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+  /// Test constructor
+  void testConstructor(void);
+
+  /// Test initialize() & computeGeometry() w/linear basis fns
+  void testLinear(void);
+
+  /// Test initialize() & computeGeometry() w/quadratic basis fns
+  void testQuadratic(void);
+
+}; // class TestQuadrature
+
+#endif // pylith_feassemble_testquadrature1din3d_hh
+
+// End of file 

Added: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature2D.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature2D.cc	2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature2D.cc	2006-09-25 03:00:40 UTC (rev 4600)
@@ -0,0 +1,55 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "TestQuadrature2D.hh" // Implementation of class methods
+
+#include "pylith/feassemble/Quadrature2D.hh"
+
+#include "data/QuadratureData2DLinear.hh"
+#include "data/QuadratureData2DQuadratic.hh"
+
+// ----------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION( pylith::feassemble::TestQuadrature2D );
+
+// ----------------------------------------------------------------------
+// Test constructor
+void
+pylith::feassemble::TestQuadrature2D::testConstructor(void)
+{ // testConstructor
+  Quadrature2D quadrature;
+} // testConstructor
+
+// ----------------------------------------------------------------------
+// Test computeGeometry() w/linear basis fns
+void
+pylith::feassemble::TestQuadrature2D::testLinear(void)
+{ // testLinear
+  Quadrature2D q;
+  QuadratureData2DLinear data;
+
+  _testComputeGeometry(&q, data);
+} // testLinear
+
+// ----------------------------------------------------------------------
+// Test computeGeometry() w/quadratic basis fns
+void
+pylith::feassemble::TestQuadrature2D::testQuadratic(void)
+{ // testQuadratic
+  Quadrature2D q;
+  QuadratureData2DQuadratic data;
+
+  _testComputeGeometry(&q, data);
+} // testQuadratic
+
+// End of file 

Added: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature2D.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature2D.hh	2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature2D.hh	2006-09-25 03:00:40 UTC (rev 4600)
@@ -0,0 +1,60 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/**
+ * @file unittests/libtests/feassemble/TestQuadrature2D.hh
+ *
+ * @brief C++ TestQuadrature2D object
+ *
+ * C++ unit testing for Quadrature2D.
+ */
+
+#if !defined(pylith_feassemble_testquadrature2d_hh)
+#define pylith_feassemble_testquadrature2d_hh
+
+#include "TestQuadrature.hh"
+
+/// Namespace for spatialdata package
+namespace pylith {
+  namespace feassemble {
+    class TestQuadrature2D;
+  } // feassemble
+} // pylith
+
+/// C++ unit testing for Quadrature2D
+class pylith::feassemble::TestQuadrature2D : public TestQuadrature
+{ // class TestQuadrature2D
+
+  // CPPUNIT TEST SUITE /////////////////////////////////////////////////
+  CPPUNIT_TEST_SUITE( TestQuadrature2D );
+  CPPUNIT_TEST( testConstructor );
+  CPPUNIT_TEST( testLinear );
+  CPPUNIT_TEST( testQuadratic );
+  CPPUNIT_TEST_SUITE_END();
+
+  // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+  /// Test constructor
+  void testConstructor(void);
+
+  /// Test initialize() & computeGeometry() w/linear basis fns
+  void testLinear(void);
+
+  /// Test initialize() & computeGeometry() w/quadratic basis fns
+  void testQuadratic(void);
+
+}; // class TestQuadrature
+
+#endif // pylith_feassemble_testquadrature2d_hh
+
+// End of file 

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature1DLinear.py
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature1DLinear.py	2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature1DLinear.py	2006-09-25 03:00:40 UTC (rev 4600)
@@ -24,13 +24,13 @@
   return 0.5*(1.0-p)
 
 def N0p(p):
-  return -0.5 * numpy.ones(p.shape)
+  return -0.5
 
 def N1(p):
   return 0.5*(1.0+p)
 
 def N1p(p):
-  return +0.5 * numpy.ones(p.shape)
+  return +0.5
 
 # ----------------------------------------------------------------------
 
@@ -65,37 +65,30 @@
 
   # PRIVATE METHODS ////////////////////////////////////////////////////
   
-  def _calculate(self):
+  def _calculateBasis(self):
     """
-    Calculate basis functions, derivatives, and Jacobian information
-    at quadrature points.
+    Calculate basis functions and their derivatives at quadrature points.
     """
 
-    # Basis functions at quadrature points
-    n0 = N0(self.quadPtsRef)
-    n1 = N1(self.quadPtsRef)
-    basis = numpy.array([n0, n1]).transpose()
-    self.basis = basis.reshape( (self.numQuadPts, self.numVertices) )
+    self.basis = numpy.zeros( (self.numQuadPts, self.numCorners),
+                              dtype=numpy.Float64)
+    self.basisDeriv = numpy.zeros( (self.numQuadPts,
+                                    self.numCorners, self.cellDim),
+                                   dtype=numpy.Float64)
 
-    # Derivatives of basis functions at quadrature points
-    n0p = N0p(self.quadPtsRef)
-    n1p = N1p(self.quadPtsRef)
-    deriv = numpy.array([n0p, n1p]).transpose()
-    self.basisDeriv = deriv.reshape( (self.numQuadPts, self.numVertices) )
+    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.numCorners,) )
 
-    # Jacobian at quadrature points
-    self.jacobian = numpy.dot(self.basisDeriv, self.vertices)
+      # Derivatives of basis functions at quadrature points
+      deriv = numpy.array([[N0p(q)], [N1p(q)]], dtype=numpy.Float64)      
+      self.basisDeriv[iQuad,:] = deriv.reshape((self.numCorners, self.cellDim))
 
-    # Determinant of Jacobian at quadrature points
-    self.jacobianDet = self.jacobian
-
-    # Inverse of Jacobian at quadrature points
-    self.jacobianInv = 1.0 / self.jacobian
-
-    # Quadrature points in cell
-    self.quadPts = numpy.dot(self.basis, self.vertices)
+      iQuad += 1
     return
-      
+    
 
 # MAIN /////////////////////////////////////////////////////////////////
 if __name__ == "__main__":

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature1DQuadratic.py
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature1DQuadratic.py	2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature1DQuadratic.py	2006-09-25 03:00:40 UTC (rev 4600)
@@ -75,39 +75,31 @@
 
   # PRIVATE METHODS ////////////////////////////////////////////////////
   
-  def _calculate(self):
+  def _calculateBasis(self):
     """
-    Calculate basis functions, derivatives, and Jacobian information
-    at quadrature points.
+    Calculate basis functions and their derivatives at quadrature points.
     """
 
-    # Basis functions at quadrature points
-    n0 = N0(self.quadPtsRef)
-    n1 = N1(self.quadPtsRef)
-    n2 = N2(self.quadPtsRef)
-    basis = numpy.array([n0, n1, n2]).transpose()
-    self.basis = basis.reshape( (self.numQuadPts, self.numVertices) )
+    self.basis = numpy.zeros( (self.numQuadPts, self.numCorners),
+                              dtype=numpy.Float64)
+    self.basisDeriv = numpy.zeros( (self.numQuadPts,
+                                    self.numCorners, self.cellDim),
+                                   dtype=numpy.Float64)
 
-    # Derivatives of basis functions at quadrature points
-    n0p = N0p(self.quadPtsRef)
-    n1p = N1p(self.quadPtsRef)
-    n2p = N2p(self.quadPtsRef)
-    deriv = numpy.array([n0p, n1p, n2p]).transpose()
-    self.basisDeriv = deriv.reshape( (self.numQuadPts, self.numVertices) )
+    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.numCorners,) )
 
-    # Jacobian at quadrature points
-    self.jacobian = numpy.dot(self.basisDeriv, self.vertices)
+      # 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.numCorners, self.cellDim))
 
-    # Determinant of Jacobian at quadrature points
-    self.jacobianDet = self.jacobian
-
-    # Inverse of Jacobian at quadrature points
-    self.jacobianInv = 1.0 / self.jacobian
-
-    # Quadrature points in cell
-    self.quadPts = numpy.dot(self.basis, self.vertices)
+      iQuad += 1
     return
-      
+    
 
 # MAIN /////////////////////////////////////////////////////////////////
 if __name__ == "__main__":

Added: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature1Din2DLinear.py
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature1Din2DLinear.py	2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature1Din2DLinear.py	2006-09-25 03:00:40 UTC (rev 4600)
@@ -0,0 +1,59 @@
+#!/usr/bin/env python
+#
+# ----------------------------------------------------------------------
+#
+#                           Brad T. Aagaard
+#                        U.S. Geological Survey
+#
+# <LicenseText>
+#
+# ----------------------------------------------------------------------
+#
+
+## @file unittests/libtests/feassemble/data/Quadrature1Din2DLinear.py
+
+## @brief Python application for generating C++ data files for testing
+## C++ Quadrature1Din2D object w/linear basis functions.
+
+from Quadrature1DLinear import *
+
+import numpy
+
+# ----------------------------------------------------------------------
+
+# Quadrature1Din2DLinear class
+class Quadrature1Din2DLinear(Quadrature1DLinear):
+  """
+  Python application for generating C++ data files for testing C++
+  Quadrature1Din2D object w/linear basis functions.
+  """
+  
+  # PUBLIC METHODS /////////////////////////////////////////////////////
+  
+  def __init__(self, name="quadrature1din2dlinear"):
+    """
+    Constructor.
+    """
+    Quadrature1DLinear.__init__(self, name)
+    
+    self.numVertices = 2
+    self.spaceDim = 2
+    self.numCells = 1
+    self.cellDim = 1
+    self.numCorners = 2
+    self.numQuadPts = 1
+    
+    self.vertices = numpy.array( [[-0.2, -0.5], [0.7, 0.3]],
+                                 dtype=numpy.Float64)
+    self.cells = numpy.array( [[0, 1]], dtype=numpy.Int32)
+    return
+  
+
+# MAIN /////////////////////////////////////////////////////////////////
+if __name__ == "__main__":
+
+  app = Quadrature1Din2DLinear()
+  app.run()
+
+
+# End of file 

Added: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature1Din2DQuadratic.py
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature1Din2DQuadratic.py	2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature1Din2DQuadratic.py	2006-09-25 03:00:40 UTC (rev 4600)
@@ -0,0 +1,60 @@
+#!/usr/bin/env python
+#
+# ----------------------------------------------------------------------
+#
+#                           Brad T. Aagaard
+#                        U.S. Geological Survey
+#
+# <LicenseText>
+#
+# ----------------------------------------------------------------------
+#
+
+## @file unittests/libtests/feassemble/data/Quadrature1Din2DQuadratic.py
+
+## @brief Python application for generating C++ data files for testing
+## C++ Quadrature1Din2D object w/quadratic basis functions.
+
+from Quadrature1DQuadratic import *
+
+import numpy
+
+# ----------------------------------------------------------------------
+
+# Quadrature1Din2DQuadratic class
+class Quadrature1Din2DQuadratic(Quadrature1DQuadratic):
+  """
+  Python application for generating C++ data files for testing C++
+  Quadrature1Din2D object w/quadratic basis functions.
+  """
+  
+  # PUBLIC METHODS /////////////////////////////////////////////////////
+
+  def __init__(self, name="quadrature1din2dquadratic"):
+    """
+    Constructor.
+    """
+    Quadrature1DQuadratic.__init__(self, name)
+    
+    self.numVertices = 3
+    self.spaceDim = 2
+    self.numCells = 1
+    self.cellDim = 1
+    self.numCorners = 3
+    self.numQuadPts = 2
+    
+    self.vertices = numpy.array( [[-0.2, -0.5], [0.3, -0.2], [0.7, 0.3]],
+                                 dtype=numpy.Float64)
+    self.cells = numpy.array( [[0, 1, 2]], dtype=numpy.Int32)
+    
+    return
+
+
+# MAIN /////////////////////////////////////////////////////////////////
+if __name__ == "__main__":
+
+  app = Quadrature1Din2DQuadratic()
+  app.run()
+
+
+# End of file 

Added: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature1Din3DLinear.py
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature1Din3DLinear.py	2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature1Din3DLinear.py	2006-09-25 03:00:40 UTC (rev 4600)
@@ -0,0 +1,60 @@
+#!/usr/bin/env python
+#
+# ----------------------------------------------------------------------
+#
+#                           Brad T. Aagaard
+#                        U.S. Geological Survey
+#
+# <LicenseText>
+#
+# ----------------------------------------------------------------------
+#
+
+## @file unittests/libtests/feassemble/data/Quadrature1Din3DLinear.py
+
+## @brief Python application for generating C++ data files for testing
+## C++ Quadrature1Din3D object w/linear basis functions.
+
+from Quadrature1DLinear import *
+
+import numpy
+
+# ----------------------------------------------------------------------
+
+# Quadrature1Din3DLinear class
+class Quadrature1Din3DLinear(Quadrature1DLinear):
+  """
+  Python application for generating C++ data files for testing C++
+  Quadrature1Din3D object w/linear basis functions.
+  """
+  
+  # PUBLIC METHODS /////////////////////////////////////////////////////
+  
+  def __init__(self, name="quadrature1din3dlinear"):
+    """
+    Constructor.
+    """
+    Quadrature1DLinear.__init__(self, name)
+    
+    self.numVertices = 2
+    self.spaceDim = 3
+    self.numCells = 1
+    self.cellDim = 1
+    self.numCorners = 2
+    self.numQuadPts = 1
+    
+    self.vertices = numpy.array( [[1.0, -1.5, -2.0],
+                                  [-0.5, 2.0,  3.0]],
+                                 dtype=numpy.Float64)
+    self.cells = numpy.array( [[0, 1]], dtype=numpy.Int32)
+    return
+  
+
+# MAIN /////////////////////////////////////////////////////////////////
+if __name__ == "__main__":
+
+  app = Quadrature1Din3DLinear()
+  app.run()
+
+
+# End of file 

Added: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature1Din3DQuadratic.py
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature1Din3DQuadratic.py	2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature1Din3DQuadratic.py	2006-09-25 03:00:40 UTC (rev 4600)
@@ -0,0 +1,62 @@
+#!/usr/bin/env python
+#
+# ----------------------------------------------------------------------
+#
+#                           Brad T. Aagaard
+#                        U.S. Geological Survey
+#
+# <LicenseText>
+#
+# ----------------------------------------------------------------------
+#
+
+## @file unittests/libtests/feassemble/data/Quadrature1Din3DQuadratic.py
+
+## @brief Python application for generating C++ data files for testing
+## C++ Quadrature1Din3D object w/quadratic basis functions.
+
+from Quadrature1DQuadratic import *
+
+import numpy
+
+# ----------------------------------------------------------------------
+
+# Quadrature1Din3DQuadratic class
+class Quadrature1Din3DQuadratic(Quadrature1DQuadratic):
+  """
+  Python application for generating C++ data files for testing C++
+  Quadrature1Din3D object w/quadratic basis functions.
+  """
+  
+  # PUBLIC METHODS /////////////////////////////////////////////////////
+
+  def __init__(self, name="quadrature1din3dquadratic"):
+    """
+    Constructor.
+    """
+    Quadrature1DQuadratic.__init__(self, name)
+    
+    self.numVertices = 3
+    self.spaceDim = 3
+    self.numCells = 1
+    self.cellDim = 1
+    self.numCorners = 3
+    self.numQuadPts = 2
+    
+    self.vertices = numpy.array( [[1.0, -1.5, -2.0],
+                                  [0.3, 0.3, 0.8],
+                                  [-0.5, 2.0, 3.0]],
+                                 dtype=numpy.Float64)
+    self.cells = numpy.array( [[0, 1, 2]], dtype=numpy.Int32)
+    
+    return
+
+
+# MAIN /////////////////////////////////////////////////////////////////
+if __name__ == "__main__":
+
+  app = Quadrature1Din3DQuadratic()
+  app.run()
+
+
+# End of file 

Added: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature2DLinear.py
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature2DLinear.py	2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature2DLinear.py	2006-09-25 03:00:40 UTC (rev 4600)
@@ -0,0 +1,119 @@
+#!/usr/bin/env python
+#
+# ----------------------------------------------------------------------
+#
+#                           Brad T. Aagaard
+#                        U.S. Geological Survey
+#
+# <LicenseText>
+#
+# ----------------------------------------------------------------------
+#
+
+## @file unittests/libtests/feassemble/data/Quadrature2DLinear.py
+
+## @brief Python application for generating C++ data files for testing
+## C++ Quadrature2D object w/linear basis functions.
+
+from QuadratureApp import QuadratureApp
+
+import numpy
+
+# ----------------------------------------------------------------------
+def N0(p):
+  return 1.0-p[0]-p[1]
+
+def N0p(p):
+  return -1.0
+
+def N0q(p):
+  return -1.0
+
+def N1(p):
+  return p[0]
+
+def N1p(p):
+  return 1.0
+
+def N1q(p):
+  return 0.0
+
+def N2(p):
+  return p[1]
+
+def N2p(p):
+  return 0.0
+
+def N2q(p):
+  return 1.0
+
+# ----------------------------------------------------------------------
+
+# Quadrature2DLinear class
+class Quadrature2DLinear(QuadratureApp):
+  """
+  Python application for generating C++ data files for testing C++
+  Quadrature2D object w/linear basis functions.
+  """
+  
+  # PUBLIC METHODS /////////////////////////////////////////////////////
+  
+  def __init__(self, name="quadrature1dlinear"):
+    """
+    Constructor.
+    """
+    QuadratureApp.__init__(self, name)
+    
+    self.numVertices = 3
+    self.spaceDim = 2
+    self.numCells = 1
+    self.cellDim = 2
+    self.numCorners = 3
+    self.numQuadPts = 1
+    
+    self.quadPtsRef = numpy.array( [[1.0/3.0, 1.0/3.0]], dtype=numpy.Float64)
+    self.quadWts = numpy.array([0.5], dtype=numpy.Float64)
+    self.vertices = numpy.array( [[0.2, -0.4],
+                                  [0.3, 0.5],
+                                  [-1.0, -0.2]], dtype=numpy.Float64)
+    self.cells = numpy.array( [[0, 1, 2]], dtype=numpy.Int32)
+    return
+  
+
+  # PRIVATE METHODS ////////////////////////////////////////////////////
+  
+  def _calculateBasis(self):
+    """
+    Calculate basis functions and their derivatives at quadrature points.
+    """
+
+    self.basis = numpy.zeros( (self.numQuadPts, self.numCorners),
+                              dtype=numpy.Float64)
+    self.basisDeriv = numpy.zeros( (self.numQuadPts,
+                                    self.numCorners, 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.numCorners,) )
+
+      # 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.numCorners, self.cellDim))
+
+      iQuad += 1
+    return
+    
+
+# MAIN /////////////////////////////////////////////////////////////////
+if __name__ == "__main__":
+
+  app = Quadrature2DLinear()
+  app.run()
+
+
+# End of file 

Added: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature2DQuadratic.py
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature2DQuadratic.py	2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature2DQuadratic.py	2006-09-25 03:00:40 UTC (rev 4600)
@@ -0,0 +1,160 @@
+#!/usr/bin/env python
+#
+# ----------------------------------------------------------------------
+#
+#                           Brad T. Aagaard
+#                        U.S. Geological Survey
+#
+# <LicenseText>
+#
+# ----------------------------------------------------------------------
+#
+
+## @file unittests/libtests/feassemble/data/Quadrature2DQuadratic.py
+
+## @brief Python application for generating C++ data files for testing
+## C++ Quadrature2D object w/quadratic basis functions.
+
+from QuadratureApp import QuadratureApp
+
+import numpy
+
+# ----------------------------------------------------------------------
+def N0(p):
+  return (1.0-p[0]-p[1])*(1-2.0*p[0]-2.0*p[1])
+
+def N0p(p):
+  return 4.0*p[0]+4.0*p[1]-3.0
+
+def N0q(p):
+  return 4.0*p[0]+4.0*p[1]-3.0
+
+def N1(p):
+  return p[0]*(2.0*p[0]-1.0)
+
+def N1p(p):
+  return 4.0*p[0]-1.0
+
+def N1q(p):
+  return 0.0
+
+def N2(p):
+  return p[1]*(2.0*p[1]-1.0)
+
+def N2p(p):
+  return 0.0
+
+def N2q(p):
+  return 4.0*p[1]-1.0
+
+def N3(p):
+  return 4.0*p[0]*(1.0-p[0]-p[1])
+
+def N3p(p):
+  return -8.0*p[0]-4.0*p[1]+4.0
+
+def N3q(p):
+  return -4.0*p[0]
+
+def N4(p):
+  return 4.0*p[0]*p[1]
+
+def N4p(p):
+  return 4.0*p[1]
+
+def N4q(p):
+  return 4.0*p[0]
+
+def N5(p):
+  return 4.0*p[1]*(1.0-p[0]-p[1])
+
+def N5p(p):
+  return -4.0*p[1]
+
+def N5q(p):
+  return -8.0*p[1]-4.0*p[0]+4.0
+
+# ----------------------------------------------------------------------
+
+# Quadrature2DQuadratic class
+class Quadrature2DQuadratic(QuadratureApp):
+  """
+  Python application for generating C++ data files for testing C++
+  Quadrature2D object w/quadratic basis functions.
+  """
+  
+  # PUBLIC METHODS /////////////////////////////////////////////////////
+
+  def __init__(self, name="quadrature2dquadratic"):
+    """
+    Constructor.
+    """
+    QuadratureApp.__init__(self, name)
+    
+    self.numVertices = 6
+    self.spaceDim = 2
+    self.numCells = 1
+    self.cellDim = 2
+    self.numCorners = 6
+    self.numQuadPts = 3
+    
+    self.quadPtsRef = numpy.array( [[2.0/3.0, 1.0/6.0],
+                                    [1.0/6.0, 2.0/3.0],
+                                    [1.0/6.0, 1.0/6.0]],
+                                   dtype=numpy.Float64)
+    self.quadWts = numpy.array([1.0/6.0, 1.0/6.0, 1.0/6.0],
+                               dtype=numpy.Float64)
+    self.vertices = numpy.array( [[-1.0, -1.0],
+                                  [+1.0, +0.2],
+                                  [-1.5, +0.5],
+                                  [+0.0, -0.6],
+                                  [+0.25, +0.35],
+                                  [-1.25, -0.25]],
+                                 dtype=numpy.Float64)
+    self.cells = numpy.array( [[0, 1, 2, 3, 4, 5]], dtype=numpy.Int32)
+    
+    return
+
+
+  # PRIVATE METHODS ////////////////////////////////////////////////////
+  
+  def _calculateBasis(self):
+    """
+    Calculate basis functions and their derivatives at quadrature points.
+    """
+
+    self.basis = numpy.zeros( (self.numQuadPts, self.numCorners),
+                              dtype=numpy.Float64)
+    self.basisDeriv = numpy.zeros( (self.numQuadPts,
+                                    self.numCorners, 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.numCorners,) )
+
+      # Derivatives of basis functions at quadrature points
+      deriv = numpy.array([[N0p(q), N0q(q)],
+                           [N1p(q), N1q(q)],
+                           [N2p(q), N2q(q)],
+                           [N3p(q), N3q(q)],
+                           [N4p(q), N4q(q)],
+                           [N5p(q), N5q(q)]],
+                          dtype=numpy.Float64)      
+      self.basisDeriv[iQuad] = deriv.reshape((self.numCorners, self.cellDim))
+
+      iQuad += 1
+    return
+    
+
+# MAIN /////////////////////////////////////////////////////////////////
+if __name__ == "__main__":
+
+  app = Quadrature2DQuadratic()
+  app.run()
+
+
+# End of file 

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureApp.py
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureApp.py	2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureApp.py	2006-09-25 03:00:40 UTC (rev 4600)
@@ -17,6 +17,8 @@
 
 from pyre.applications.Script import Script
 
+import numpy
+
 # QuadratureApp class
 class QuadratureApp(Script):
   """
@@ -78,7 +80,8 @@
     """
     Run the application.
     """
-    self._calculate()
+    self._calculateBasis()
+    self._calculateJacobian()
     self._initData()
     self.data.write(self.name)
     return
@@ -95,6 +98,47 @@
     return
 
 
+  def _calculateJacobian(self):
+    """
+    Calculate jacobian, its determinant, and its inverse at quadrature
+    pts plus coordinates of quadrature points in the cell.
+    """
+    self.jacobian = numpy.zeros( (self.numQuadPts,
+                                  self.cellDim, self.spaceDim),
+                                 dtype=numpy.Float64)
+    self.jacobianInv = numpy.zeros( (self.numQuadPts,
+                                     self.spaceDim, self.cellDim),
+                                    dtype=numpy.Float64)
+    self.jacobianDet = numpy.zeros( (self.numQuadPts,),
+                                    dtype=numpy.Float64)
+    
+    iQuad = 0
+    for q in self.quadPtsRef:
+      # Jacobian at quadrature points
+      deriv = self.basisDeriv[iQuad]
+      jacobian = numpy.dot(deriv.transpose(), self.vertices)
+      self.jacobian[iQuad] = jacobian
+
+      # Determinant of Jacobian and Jacobian inverse at quadrature points
+      if self.spaceDim == self.cellDim:
+        self.jacobianDet[iQuad] = numpy.linalg.det(jacobian)
+        self.jacobianInv[iQuad] = numpy.linalg.inv(jacobian)
+      else:
+        det = numpy.linalg.det(numpy.dot(jacobian, jacobian.transpose()))**0.5
+        self.jacobianDet[iQuad] = det
+
+        if 1 == self.cellDim:
+          self.jacobianInv[iQuad] = 1.0 / jacobian
+        elif 2 == self.cellDim:
+          error
+    
+      iQuad += 1
+
+    # Quadrature points in cell
+    self.quadPts = numpy.dot(self.basis, self.vertices)
+    return
+      
+
   def _initData(self):
     self.data.addScalar(vtype="int", name="_numVertices",
                         value=self.numVertices,

Added: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din2DLinear.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din2DLinear.cc	2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din2DLinear.cc	2006-09-25 03:00:40 UTC (rev 4600)
@@ -0,0 +1,98 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application quadrature1din2dlinear.
+
+#include "QuadratureData1Din2DLinear.hh"
+
+const int pylith::feassemble::QuadratureData1Din2DLinear::_numVertices = 2;
+
+const int pylith::feassemble::QuadratureData1Din2DLinear::_spaceDim = 2;
+
+const int pylith::feassemble::QuadratureData1Din2DLinear::_numCells = 1;
+
+const int pylith::feassemble::QuadratureData1Din2DLinear::_cellDim = 1;
+
+const int pylith::feassemble::QuadratureData1Din2DLinear::_numCorners = 2;
+
+const int pylith::feassemble::QuadratureData1Din2DLinear::_numQuadPts = 1;
+
+const double pylith::feassemble::QuadratureData1Din2DLinear::_vertices[] = {
+ -2.00000000e-01, -5.00000000e-01,
+  7.00000000e-01,  3.00000000e-01,
+};
+
+const int pylith::feassemble::QuadratureData1Din2DLinear::_cells[] = {
+       0,       1,
+};
+
+const double pylith::feassemble::QuadratureData1Din2DLinear::_quadPtsRef[] = {
+  0.00000000e+00,
+};
+
+const double pylith::feassemble::QuadratureData1Din2DLinear::_quadWts[] = {
+  2.00000000e+00,
+};
+
+const double pylith::feassemble::QuadratureData1Din2DLinear::_basis[] = {
+  5.00000000e-01,
+  5.00000000e-01,
+};
+
+const double pylith::feassemble::QuadratureData1Din2DLinear::_basisDeriv[] = {
+ -5.00000000e-01,
+  5.00000000e-01,
+};
+
+const double pylith::feassemble::QuadratureData1Din2DLinear::_quadPts[] = {
+  2.50000000e-01, -1.00000000e-01,
+};
+
+const double pylith::feassemble::QuadratureData1Din2DLinear::_jacobian[] = {
+  4.50000000e-01,  4.00000000e-01,
+};
+
+const double pylith::feassemble::QuadratureData1Din2DLinear::_jacobianDet[] = {
+  6.02079729e-01,
+};
+
+const double pylith::feassemble::QuadratureData1Din2DLinear::_jacobianInv[] = {
+  2.22222222e+00,
+  2.50000000e+00,
+};
+
+pylith::feassemble::QuadratureData1Din2DLinear::QuadratureData1Din2DLinear(void)
+{ // constructor
+  numVertices = _numVertices;
+  spaceDim = _spaceDim;
+  numCells = _numCells;
+  cellDim = _cellDim;
+  numCorners = _numCorners;
+  numQuadPts = _numQuadPts;
+  vertices = const_cast<double*>(_vertices);
+  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);
+} // constructor
+
+pylith::feassemble::QuadratureData1Din2DLinear::~QuadratureData1Din2DLinear(void)
+{}
+
+
+// End of file

Added: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din2DLinear.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din2DLinear.hh	2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din2DLinear.hh	2006-09-25 03:00:40 UTC (rev 4600)
@@ -0,0 +1,76 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application quadrature1din2dlinear.
+
+#if !defined(pylith_feassemble_quadraturedata1din2dlinear_hh)
+#define pylith_feassemble_quadraturedata1din2dlinear_hh
+
+#include "QuadratureData.hh"
+
+namespace pylith {
+  namespace feassemble {
+     class QuadratureData1Din2DLinear;
+  } // pylith
+} // feassemble
+
+class pylith::feassemble::QuadratureData1Din2DLinear : public QuadratureData
+{
+
+public: 
+
+  /// Constructor
+  QuadratureData1Din2DLinear(void);
+
+  /// Destructor
+  ~QuadratureData1Din2DLinear(void);
+
+private:
+
+  static const int _numVertices;
+
+  static const int _spaceDim;
+
+  static const int _numCells;
+
+  static const int _cellDim;
+
+  static const int _numCorners;
+
+  static const int _numQuadPts;
+
+  static const double _vertices[];
+
+  static const int _cells[];
+
+  static const double _quadPtsRef[];
+
+  static const double _quadWts[];
+
+  static const double _basis[];
+
+  static const double _basisDeriv[];
+
+  static const double _quadPts[];
+
+  static const double _jacobian[];
+
+  static const double _jacobianDet[];
+
+  static const double _jacobianInv[];
+
+};
+
+#endif // pylith_feassemble_quadraturedata1din2dlinear_hh
+
+// End of file

Added: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din2DQuadratic.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din2DQuadratic.cc	2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din2DQuadratic.cc	2006-09-25 03:00:40 UTC (rev 4600)
@@ -0,0 +1,112 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application quadrature1din2dquadratic.
+
+#include "QuadratureData1Din2DQuadratic.hh"
+
+const int pylith::feassemble::QuadratureData1Din2DQuadratic::_numVertices = 3;
+
+const int pylith::feassemble::QuadratureData1Din2DQuadratic::_spaceDim = 2;
+
+const int pylith::feassemble::QuadratureData1Din2DQuadratic::_numCells = 1;
+
+const int pylith::feassemble::QuadratureData1Din2DQuadratic::_cellDim = 1;
+
+const int pylith::feassemble::QuadratureData1Din2DQuadratic::_numCorners = 3;
+
+const int pylith::feassemble::QuadratureData1Din2DQuadratic::_numQuadPts = 2;
+
+const double pylith::feassemble::QuadratureData1Din2DQuadratic::_vertices[] = {
+ -2.00000000e-01, -5.00000000e-01,
+  3.00000000e-01, -2.00000000e-01,
+  7.00000000e-01,  3.00000000e-01,
+};
+
+const int pylith::feassemble::QuadratureData1Din2DQuadratic::_cells[] = {
+       0,       1,       2,
+};
+
+const double pylith::feassemble::QuadratureData1Din2DQuadratic::_quadPtsRef[] = {
+ -5.77350269e-01,
+  5.77350269e-01,
+};
+
+const double pylith::feassemble::QuadratureData1Din2DQuadratic::_quadWts[] = {
+  1.00000000e+00,  1.00000000e+00,
+};
+
+const double pylith::feassemble::QuadratureData1Din2DQuadratic::_basis[] = {
+  4.55341801e-01,
+  6.66666667e-01,
+ -1.22008468e-01,
+ -1.22008468e-01,
+  6.66666667e-01,
+  4.55341801e-01,
+};
+
+const double pylith::feassemble::QuadratureData1Din2DQuadratic::_basisDeriv[] = {
+ -1.07735027e+00,
+  1.15470054e+00,
+ -7.73502692e-02,
+  7.73502692e-02,
+ -1.15470054e+00,
+  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[] = {
+  5.07735027e-01,  2.84529946e-01,
+  3.92264973e-01,  5.15470054e-01,
+};
+
+const double pylith::feassemble::QuadratureData1Din2DQuadratic::_jacobianDet[] = {
+  5.82024181e-01,  6.47750867e-01,
+};
+
+const double pylith::feassemble::QuadratureData1Din2DQuadratic::_jacobianInv[] = {
+  1.96953125e+00,
+  3.51456855e+00,
+  2.54929721e+00,
+  1.93997691e+00,
+};
+
+pylith::feassemble::QuadratureData1Din2DQuadratic::QuadratureData1Din2DQuadratic(void)
+{ // constructor
+  numVertices = _numVertices;
+  spaceDim = _spaceDim;
+  numCells = _numCells;
+  cellDim = _cellDim;
+  numCorners = _numCorners;
+  numQuadPts = _numQuadPts;
+  vertices = const_cast<double*>(_vertices);
+  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);
+} // constructor
+
+pylith::feassemble::QuadratureData1Din2DQuadratic::~QuadratureData1Din2DQuadratic(void)
+{}
+
+
+// End of file

Added: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din2DQuadratic.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din2DQuadratic.hh	2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din2DQuadratic.hh	2006-09-25 03:00:40 UTC (rev 4600)
@@ -0,0 +1,76 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application quadrature1din2dquadratic.
+
+#if !defined(pylith_feassemble_quadraturedata1din2dquadratic_hh)
+#define pylith_feassemble_quadraturedata1din2dquadratic_hh
+
+#include "QuadratureData.hh"
+
+namespace pylith {
+  namespace feassemble {
+     class QuadratureData1Din2DQuadratic;
+  } // pylith
+} // feassemble
+
+class pylith::feassemble::QuadratureData1Din2DQuadratic : public QuadratureData
+{
+
+public: 
+
+  /// Constructor
+  QuadratureData1Din2DQuadratic(void);
+
+  /// Destructor
+  ~QuadratureData1Din2DQuadratic(void);
+
+private:
+
+  static const int _numVertices;
+
+  static const int _spaceDim;
+
+  static const int _numCells;
+
+  static const int _cellDim;
+
+  static const int _numCorners;
+
+  static const int _numQuadPts;
+
+  static const double _vertices[];
+
+  static const int _cells[];
+
+  static const double _quadPtsRef[];
+
+  static const double _quadWts[];
+
+  static const double _basis[];
+
+  static const double _basisDeriv[];
+
+  static const double _quadPts[];
+
+  static const double _jacobian[];
+
+  static const double _jacobianDet[];
+
+  static const double _jacobianInv[];
+
+};
+
+#endif // pylith_feassemble_quadraturedata1din2dquadratic_hh
+
+// End of file

Added: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din3DLinear.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din3DLinear.cc	2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din3DLinear.cc	2006-09-25 03:00:40 UTC (rev 4600)
@@ -0,0 +1,99 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application quadrature1din3dlinear.
+
+#include "QuadratureData1Din3DLinear.hh"
+
+const int pylith::feassemble::QuadratureData1Din3DLinear::_numVertices = 2;
+
+const int pylith::feassemble::QuadratureData1Din3DLinear::_spaceDim = 3;
+
+const int pylith::feassemble::QuadratureData1Din3DLinear::_numCells = 1;
+
+const int pylith::feassemble::QuadratureData1Din3DLinear::_cellDim = 1;
+
+const int pylith::feassemble::QuadratureData1Din3DLinear::_numCorners = 2;
+
+const int pylith::feassemble::QuadratureData1Din3DLinear::_numQuadPts = 1;
+
+const double pylith::feassemble::QuadratureData1Din3DLinear::_vertices[] = {
+  1.00000000e+00, -1.50000000e+00, -2.00000000e+00,
+ -5.00000000e-01,  2.00000000e+00,  3.00000000e+00,
+};
+
+const int pylith::feassemble::QuadratureData1Din3DLinear::_cells[] = {
+       0,       1,
+};
+
+const double pylith::feassemble::QuadratureData1Din3DLinear::_quadPtsRef[] = {
+  0.00000000e+00,
+};
+
+const double pylith::feassemble::QuadratureData1Din3DLinear::_quadWts[] = {
+  2.00000000e+00,
+};
+
+const double pylith::feassemble::QuadratureData1Din3DLinear::_basis[] = {
+  5.00000000e-01,
+  5.00000000e-01,
+};
+
+const double pylith::feassemble::QuadratureData1Din3DLinear::_basisDeriv[] = {
+ -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::_jacobian[] = {
+ -7.50000000e-01,  1.75000000e+00,  2.50000000e+00,
+};
+
+const double pylith::feassemble::QuadratureData1Din3DLinear::_jacobianDet[] = {
+  3.14245127e+00,
+};
+
+const double pylith::feassemble::QuadratureData1Din3DLinear::_jacobianInv[] = {
+ -1.33333333e+00,
+  5.71428571e-01,
+  4.00000000e-01,
+};
+
+pylith::feassemble::QuadratureData1Din3DLinear::QuadratureData1Din3DLinear(void)
+{ // constructor
+  numVertices = _numVertices;
+  spaceDim = _spaceDim;
+  numCells = _numCells;
+  cellDim = _cellDim;
+  numCorners = _numCorners;
+  numQuadPts = _numQuadPts;
+  vertices = const_cast<double*>(_vertices);
+  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);
+} // constructor
+
+pylith::feassemble::QuadratureData1Din3DLinear::~QuadratureData1Din3DLinear(void)
+{}
+
+
+// End of file

Added: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din3DLinear.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din3DLinear.hh	2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din3DLinear.hh	2006-09-25 03:00:40 UTC (rev 4600)
@@ -0,0 +1,76 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application quadrature1din3dlinear.
+
+#if !defined(pylith_feassemble_quadraturedata1din3dlinear_hh)
+#define pylith_feassemble_quadraturedata1din3dlinear_hh
+
+#include "QuadratureData.hh"
+
+namespace pylith {
+  namespace feassemble {
+     class QuadratureData1Din3DLinear;
+  } // pylith
+} // feassemble
+
+class pylith::feassemble::QuadratureData1Din3DLinear : public QuadratureData
+{
+
+public: 
+
+  /// Constructor
+  QuadratureData1Din3DLinear(void);
+
+  /// Destructor
+  ~QuadratureData1Din3DLinear(void);
+
+private:
+
+  static const int _numVertices;
+
+  static const int _spaceDim;
+
+  static const int _numCells;
+
+  static const int _cellDim;
+
+  static const int _numCorners;
+
+  static const int _numQuadPts;
+
+  static const double _vertices[];
+
+  static const int _cells[];
+
+  static const double _quadPtsRef[];
+
+  static const double _quadWts[];
+
+  static const double _basis[];
+
+  static const double _basisDeriv[];
+
+  static const double _quadPts[];
+
+  static const double _jacobian[];
+
+  static const double _jacobianDet[];
+
+  static const double _jacobianInv[];
+
+};
+
+#endif // pylith_feassemble_quadraturedata1din3dlinear_hh
+
+// End of file

Added: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din3DQuadratic.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din3DQuadratic.cc	2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din3DQuadratic.cc	2006-09-25 03:00:40 UTC (rev 4600)
@@ -0,0 +1,114 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application quadrature1din3dquadratic.
+
+#include "QuadratureData1Din3DQuadratic.hh"
+
+const int pylith::feassemble::QuadratureData1Din3DQuadratic::_numVertices = 3;
+
+const int pylith::feassemble::QuadratureData1Din3DQuadratic::_spaceDim = 3;
+
+const int pylith::feassemble::QuadratureData1Din3DQuadratic::_numCells = 1;
+
+const int pylith::feassemble::QuadratureData1Din3DQuadratic::_cellDim = 1;
+
+const int pylith::feassemble::QuadratureData1Din3DQuadratic::_numCorners = 3;
+
+const int pylith::feassemble::QuadratureData1Din3DQuadratic::_numQuadPts = 2;
+
+const double pylith::feassemble::QuadratureData1Din3DQuadratic::_vertices[] = {
+  1.00000000e+00, -1.50000000e+00, -2.00000000e+00,
+  3.00000000e-01,  3.00000000e-01,  8.00000000e-01,
+ -5.00000000e-01,  2.00000000e+00,  3.00000000e+00,
+};
+
+const int pylith::feassemble::QuadratureData1Din3DQuadratic::_cells[] = {
+       0,       1,       2,
+};
+
+const double pylith::feassemble::QuadratureData1Din3DQuadratic::_quadPtsRef[] = {
+ -5.77350269e-01,
+  5.77350269e-01,
+};
+
+const double pylith::feassemble::QuadratureData1Din3DQuadratic::_quadWts[] = {
+  1.00000000e+00,  1.00000000e+00,
+};
+
+const double pylith::feassemble::QuadratureData1Din3DQuadratic::_basis[] = {
+  4.55341801e-01,
+  6.66666667e-01,
+ -1.22008468e-01,
+ -1.22008468e-01,
+  6.66666667e-01,
+  4.55341801e-01,
+};
+
+const double pylith::feassemble::QuadratureData1Din3DQuadratic::_basisDeriv[] = {
+ -1.07735027e+00,
+  1.15470054e+00,
+ -7.73502692e-02,
+  7.73502692e-02,
+ -1.15470054e+00,
+  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[] = {
+ -6.92264973e-01,  1.80773503e+00,  2.84641016e+00,
+ -8.07735027e-01,  1.69226497e+00,  2.15358984e+00,
+};
+
+const double pylith::feassemble::QuadratureData1Din3DQuadratic::_jacobianDet[] = {
+  3.44226488e+00,  2.85554650e+00,
+};
+
+const double pylith::feassemble::QuadratureData1Din3DQuadratic::_jacobianInv[] = {
+ -1.44453358e+00,
+  5.53178417e-01,
+  3.51319713e-01,
+ -1.23802976e+00,
+  5.90924008e-01,
+  4.64340973e-01,
+};
+
+pylith::feassemble::QuadratureData1Din3DQuadratic::QuadratureData1Din3DQuadratic(void)
+{ // constructor
+  numVertices = _numVertices;
+  spaceDim = _spaceDim;
+  numCells = _numCells;
+  cellDim = _cellDim;
+  numCorners = _numCorners;
+  numQuadPts = _numQuadPts;
+  vertices = const_cast<double*>(_vertices);
+  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);
+} // constructor
+
+pylith::feassemble::QuadratureData1Din3DQuadratic::~QuadratureData1Din3DQuadratic(void)
+{}
+
+
+// End of file

Added: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din3DQuadratic.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din3DQuadratic.hh	2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din3DQuadratic.hh	2006-09-25 03:00:40 UTC (rev 4600)
@@ -0,0 +1,76 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application quadrature1din3dquadratic.
+
+#if !defined(pylith_feassemble_quadraturedata1din3dquadratic_hh)
+#define pylith_feassemble_quadraturedata1din3dquadratic_hh
+
+#include "QuadratureData.hh"
+
+namespace pylith {
+  namespace feassemble {
+     class QuadratureData1Din3DQuadratic;
+  } // pylith
+} // feassemble
+
+class pylith::feassemble::QuadratureData1Din3DQuadratic : public QuadratureData
+{
+
+public: 
+
+  /// Constructor
+  QuadratureData1Din3DQuadratic(void);
+
+  /// Destructor
+  ~QuadratureData1Din3DQuadratic(void);
+
+private:
+
+  static const int _numVertices;
+
+  static const int _spaceDim;
+
+  static const int _numCells;
+
+  static const int _cellDim;
+
+  static const int _numCorners;
+
+  static const int _numQuadPts;
+
+  static const double _vertices[];
+
+  static const int _cells[];
+
+  static const double _quadPtsRef[];
+
+  static const double _quadWts[];
+
+  static const double _basis[];
+
+  static const double _basisDeriv[];
+
+  static const double _quadPts[];
+
+  static const double _jacobian[];
+
+  static const double _jacobianDet[];
+
+  static const double _jacobianInv[];
+
+};
+
+#endif // pylith_feassemble_quadraturedata1din3dquadratic_hh
+
+// End of file

Added: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2DLinear.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2DLinear.cc	2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2DLinear.cc	2006-09-25 03:00:40 UTC (rev 4600)
@@ -0,0 +1,100 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application quadrature1dlinear.
+
+#include "QuadratureData2DLinear.hh"
+
+const int pylith::feassemble::QuadratureData2DLinear::_numVertices = 3;
+
+const int pylith::feassemble::QuadratureData2DLinear::_spaceDim = 2;
+
+const int pylith::feassemble::QuadratureData2DLinear::_numCells = 1;
+
+const int pylith::feassemble::QuadratureData2DLinear::_cellDim = 2;
+
+const int pylith::feassemble::QuadratureData2DLinear::_numCorners = 3;
+
+const int pylith::feassemble::QuadratureData2DLinear::_numQuadPts = 1;
+
+const double pylith::feassemble::QuadratureData2DLinear::_vertices[] = {
+  2.00000000e-01, -4.00000000e-01,
+  3.00000000e-01,  5.00000000e-01,
+ -1.00000000e+00, -2.00000000e-01,
+};
+
+const int pylith::feassemble::QuadratureData2DLinear::_cells[] = {
+       0,       1,       2,
+};
+
+const double pylith::feassemble::QuadratureData2DLinear::_quadPtsRef[] = {
+  3.33333333e-01,  3.33333333e-01,
+};
+
+const double pylith::feassemble::QuadratureData2DLinear::_quadWts[] = {
+  5.00000000e-01,
+};
+
+const double pylith::feassemble::QuadratureData2DLinear::_basis[] = {
+  3.33333333e-01,  3.33333333e-01,
+  3.33333333e-01,};
+
+const double pylith::feassemble::QuadratureData2DLinear::_basisDeriv[] = {
+ -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[] = {
+  1.00000000e-01,  9.00000000e-01,
+ -1.20000000e+00,  2.00000000e-01,
+};
+
+const double pylith::feassemble::QuadratureData2DLinear::_jacobianDet[] = {
+  1.10000000e+00,
+};
+
+const double pylith::feassemble::QuadratureData2DLinear::_jacobianInv[] = {
+  1.81818182e-01, -8.18181818e-01,
+  1.09090909e+00,  9.09090909e-02,
+};
+
+pylith::feassemble::QuadratureData2DLinear::QuadratureData2DLinear(void)
+{ // constructor
+  numVertices = _numVertices;
+  spaceDim = _spaceDim;
+  numCells = _numCells;
+  cellDim = _cellDim;
+  numCorners = _numCorners;
+  numQuadPts = _numQuadPts;
+  vertices = const_cast<double*>(_vertices);
+  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);
+} // constructor
+
+pylith::feassemble::QuadratureData2DLinear::~QuadratureData2DLinear(void)
+{}
+
+
+// End of file

Added: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2DLinear.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2DLinear.hh	2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2DLinear.hh	2006-09-25 03:00:40 UTC (rev 4600)
@@ -0,0 +1,76 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application quadrature1dlinear.
+
+#if !defined(pylith_feassemble_quadraturedata2dlinear_hh)
+#define pylith_feassemble_quadraturedata2dlinear_hh
+
+#include "QuadratureData.hh"
+
+namespace pylith {
+  namespace feassemble {
+     class QuadratureData2DLinear;
+  } // pylith
+} // feassemble
+
+class pylith::feassemble::QuadratureData2DLinear : public QuadratureData
+{
+
+public: 
+
+  /// Constructor
+  QuadratureData2DLinear(void);
+
+  /// Destructor
+  ~QuadratureData2DLinear(void);
+
+private:
+
+  static const int _numVertices;
+
+  static const int _spaceDim;
+
+  static const int _numCells;
+
+  static const int _cellDim;
+
+  static const int _numCorners;
+
+  static const int _numQuadPts;
+
+  static const double _vertices[];
+
+  static const int _cells[];
+
+  static const double _quadPtsRef[];
+
+  static const double _quadWts[];
+
+  static const double _basis[];
+
+  static const double _basisDeriv[];
+
+  static const double _quadPts[];
+
+  static const double _jacobian[];
+
+  static const double _jacobianDet[];
+
+  static const double _jacobianInv[];
+
+};
+
+#endif // pylith_feassemble_quadraturedata2dlinear_hh
+
+// End of file

Added: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2DQuadratic.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2DQuadratic.cc	2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2DQuadratic.cc	2006-09-25 03:00:40 UTC (rev 4600)
@@ -0,0 +1,138 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application quadrature2dquadratic.
+
+#include "QuadratureData2DQuadratic.hh"
+
+const int pylith::feassemble::QuadratureData2DQuadratic::_numVertices = 6;
+
+const int pylith::feassemble::QuadratureData2DQuadratic::_spaceDim = 2;
+
+const int pylith::feassemble::QuadratureData2DQuadratic::_numCells = 1;
+
+const int pylith::feassemble::QuadratureData2DQuadratic::_cellDim = 2;
+
+const int pylith::feassemble::QuadratureData2DQuadratic::_numCorners = 6;
+
+const int pylith::feassemble::QuadratureData2DQuadratic::_numQuadPts = 3;
+
+const double pylith::feassemble::QuadratureData2DQuadratic::_vertices[] = {
+ -1.00000000e+00, -1.00000000e+00,
+  1.00000000e+00,  2.00000000e-01,
+ -1.50000000e+00,  5.00000000e-01,
+  0.00000000e+00, -6.00000000e-01,
+  2.50000000e-01,  3.50000000e-01,
+ -1.25000000e+00, -2.50000000e-01,
+};
+
+const int pylith::feassemble::QuadratureData2DQuadratic::_cells[] = {
+       0,       1,       2,       3,       4,       5,
+};
+
+const double pylith::feassemble::QuadratureData2DQuadratic::_quadPtsRef[] = {
+  6.66666667e-01,  1.66666667e-01,
+  1.66666667e-01,  6.66666667e-01,
+  1.66666667e-01,  1.66666667e-01,
+};
+
+const double pylith::feassemble::QuadratureData2DQuadratic::_quadWts[] = {
+  1.66666667e-01,  1.66666667e-01,  1.66666667e-01,
+};
+
+const double pylith::feassemble::QuadratureData2DQuadratic::_basis[] = {
+ -1.11111111e-01,  2.22222222e-01,
+ -1.11111111e-01,  4.44444444e-01,
+  4.44444444e-01,  1.11111111e-01,
+ -1.11111111e-01, -1.11111111e-01,
+  2.22222222e-01,  1.11111111e-01,
+  4.44444444e-01,  4.44444444e-01,
+  2.22222222e-01, -1.11111111e-01,
+ -1.11111111e-01,  4.44444444e-01,
+  1.11111111e-01,  4.44444444e-01,
+};
+
+const double pylith::feassemble::QuadratureData2DQuadratic::_basisDeriv[] = {
+  3.33333333e-01,  3.33333333e-01,
+  1.66666667e+00,  0.00000000e+00,
+  0.00000000e+00, -3.33333333e-01,
+ -2.00000000e+00, -2.66666667e+00,
+  6.66666667e-01,  2.66666667e+00,
+ -6.66666667e-01,  0.00000000e+00,
+  3.33333333e-01,  3.33333333e-01,
+ -3.33333333e-01,  0.00000000e+00,
+  0.00000000e+00,  1.66666667e+00,
+  0.00000000e+00, -6.66666667e-01,
+  2.66666667e+00,  6.66666667e-01,
+ -2.66666667e+00, -2.00000000e+00,
+ -1.66666667e+00, -1.66666667e+00,
+ -3.33333333e-01,  0.00000000e+00,
+  0.00000000e+00, -3.33333333e-01,
+  2.00000000e+00, -6.66666667e-01,
+  6.66666667e-01,  6.66666667e-01,
+ -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[] = {
+  2.33333333e+00,  1.60000000e+00,
+  8.33333333e-01,  2.03333333e+00,
+  3.33333333e+00,  1.20000000e+00,
+ -1.66666667e-01,  1.63333333e+00,
+  2.33333333e+00,  8.00000000e-01,
+ -1.66666667e-01,  1.63333333e+00,
+};
+
+const double pylith::feassemble::QuadratureData2DQuadratic::_jacobianDet[] = {
+  3.41111111e+00,  5.64444444e+00,  3.94444444e+00,
+};
+
+const double pylith::feassemble::QuadratureData2DQuadratic::_jacobianInv[] = {
+  5.96091205e-01, -4.69055375e-01,
+ -2.44299674e-01,  6.84039088e-01,
+  2.89370079e-01, -2.12598425e-01,
+  2.95275591e-02,  5.90551181e-01,
+  4.14084507e-01, -2.02816901e-01,
+  4.22535211e-02,  5.91549296e-01,
+};
+
+pylith::feassemble::QuadratureData2DQuadratic::QuadratureData2DQuadratic(void)
+{ // constructor
+  numVertices = _numVertices;
+  spaceDim = _spaceDim;
+  numCells = _numCells;
+  cellDim = _cellDim;
+  numCorners = _numCorners;
+  numQuadPts = _numQuadPts;
+  vertices = const_cast<double*>(_vertices);
+  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);
+} // constructor
+
+pylith::feassemble::QuadratureData2DQuadratic::~QuadratureData2DQuadratic(void)
+{}
+
+
+// End of file

Added: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2DQuadratic.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2DQuadratic.hh	2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2DQuadratic.hh	2006-09-25 03:00:40 UTC (rev 4600)
@@ -0,0 +1,76 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application quadrature2dquadratic.
+
+#if !defined(pylith_feassemble_quadraturedata2dquadratic_hh)
+#define pylith_feassemble_quadraturedata2dquadratic_hh
+
+#include "QuadratureData.hh"
+
+namespace pylith {
+  namespace feassemble {
+     class QuadratureData2DQuadratic;
+  } // pylith
+} // feassemble
+
+class pylith::feassemble::QuadratureData2DQuadratic : public QuadratureData
+{
+
+public: 
+
+  /// Constructor
+  QuadratureData2DQuadratic(void);
+
+  /// Destructor
+  ~QuadratureData2DQuadratic(void);
+
+private:
+
+  static const int _numVertices;
+
+  static const int _spaceDim;
+
+  static const int _numCells;
+
+  static const int _cellDim;
+
+  static const int _numCorners;
+
+  static const int _numQuadPts;
+
+  static const double _vertices[];
+
+  static const int _cells[];
+
+  static const double _quadPtsRef[];
+
+  static const double _quadWts[];
+
+  static const double _basis[];
+
+  static const double _basisDeriv[];
+
+  static const double _quadPts[];
+
+  static const double _jacobian[];
+
+  static const double _jacobianDet[];
+
+  static const double _jacobianInv[];
+
+};
+
+#endif // pylith_feassemble_quadraturedata2dquadratic_hh
+
+// End of file

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/generate.sh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/generate.sh	2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/generate.sh	2006-09-25 03:00:40 UTC (rev 4600)
@@ -10,6 +10,8 @@
 # ======================================================================
 #
 
+# 1-D ------------------------------------------------------------------
+
 python Quadrature1DLinear.py \
     --data.namespace=pylith,feassemble \
     --data.object=QuadratureData1DLinear \
@@ -20,4 +22,36 @@
     --data.object=QuadratureData1DQuadratic \
     --data.parent=QuadratureData
 
+python Quadrature1Din2DLinear.py \
+    --data.namespace=pylith,feassemble \
+    --data.object=QuadratureData1Din2DLinear \
+    --data.parent=QuadratureData
+
+python Quadrature1Din2DQuadratic.py \
+    --data.namespace=pylith,feassemble \
+    --data.object=QuadratureData1Din2DQuadratic \
+    --data.parent=QuadratureData
+
+python Quadrature1Din3DLinear.py \
+    --data.namespace=pylith,feassemble \
+    --data.object=QuadratureData1Din3DLinear \
+    --data.parent=QuadratureData
+
+python Quadrature1Din3DQuadratic.py \
+    --data.namespace=pylith,feassemble \
+    --data.object=QuadratureData1Din3DQuadratic \
+    --data.parent=QuadratureData
+
+# 2-D ------------------------------------------------------------------
+
+python Quadrature2DLinear.py \
+    --data.namespace=pylith,feassemble \
+    --data.object=QuadratureData2DLinear \
+    --data.parent=QuadratureData
+
+python Quadrature2DQuadratic.py \
+    --data.namespace=pylith,feassemble \
+    --data.object=QuadratureData2DQuadratic \
+    --data.parent=QuadratureData
+
 # End of file 



More information about the cig-commits mailing list