[cig-commits] r4598 - in short/3D/PyLith/trunk: pylith pylith/utils unittests/libtests/feassemble unittests/libtests/feassemble/data

baagaard at geodynamics.org baagaard at geodynamics.org
Sat Sep 23 21:24:44 PDT 2006


Author: baagaard
Date: 2006-09-23 21:24:43 -0700 (Sat, 23 Sep 2006)
New Revision: 4598

Added:
   short/3D/PyLith/trunk/pylith/utils/CppData.py
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature1DLinear.py
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature1DQuadratic.py
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureApp.py
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1DLinear.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1DLinear.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1DQuadratic.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1DQuadratic.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/generate.sh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/header.hh
Removed:
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/quadrature1d.py
Modified:
   short/3D/PyLith/trunk/pylith/Makefile.am
   short/3D/PyLith/trunk/unittests/libtests/feassemble/Makefile.am
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature1D.cc
Log:
Switched to using Python generate code for unit tests. Streamlined unit testing for quadrature.

Modified: short/3D/PyLith/trunk/pylith/Makefile.am
===================================================================
--- short/3D/PyLith/trunk/pylith/Makefile.am	2006-09-22 23:47:35 UTC (rev 4597)
+++ short/3D/PyLith/trunk/pylith/Makefile.am	2006-09-24 04:24:43 UTC (rev 4598)
@@ -39,7 +39,8 @@
 	topology/MeshGenerator.py \
 	topology/MeshImporter.py \
 	utils/__init__.py \
-	utils/importing.py
+	utils/importing.py \
+	utils/CppData.py
 
 # version
 # $Id$

Added: short/3D/PyLith/trunk/pylith/utils/CppData.py
===================================================================
--- short/3D/PyLith/trunk/pylith/utils/CppData.py	2006-09-22 23:47:35 UTC (rev 4597)
+++ short/3D/PyLith/trunk/pylith/utils/CppData.py	2006-09-24 04:24:43 UTC (rev 4598)
@@ -0,0 +1,302 @@
+#!/usr/bin/env python
+#
+# ----------------------------------------------------------------------
+#
+#                           Brad T. Aagaard
+#                        U.S. Geological Survey
+#
+# {LicenseText}
+#
+# ----------------------------------------------------------------------
+#
+
+## @file pylith/utils/CppData.py
+
+## @brief Python object to create C++ object holding data values.
+
+## Useful in unit testing of C++ objects where data is generate with
+## Python code.
+##
+## If parent property is set, we assume object is providing only the
+## data, so data is private and object needs a constructor and
+## destructor. Otherwise, object just has public data and no methods.
+
+from pyre.components.Component import Component
+
+import string
+import numpy
+
+# CppData class
+class CppData(Component):
+  """
+  Python objec to create C++ object holding data values.
+  """
+
+  class Inventory(Component.Inventory):
+    """
+    Python object for managing CppData facilities and properties.
+    """
+
+    ## @class Inventory
+    ## Python object for managing CppData facilities and properties.
+    ##
+    ## \b Properties
+    ## @li \b header Filename for header for C++ files
+    ## @li \b objname Name of C++ object
+    ## @li \b namespace Tuple of strings forming namespace for object
+    ## @li \b parent Name of parent object
+    ##
+    ## \b Facilities
+    ## @li None
+
+    import pyre.inventory
+
+    header = pyre.inventory.str("header", default="header.hh")
+    header.meta['tip'] = "Filename for header for C++ files."
+
+    objname = pyre.inventory.str("object", default="object")
+    objname.meta['tip'] = "Name of C++ object"
+
+    namespace = pyre.inventory.list("namespace", default=["pylith"])
+    namespace.meta['tip'] = "Tuple of strings forming namspace for object."
+
+    parent = pyre.inventory.str("parent", default="")
+    parent.meta['tip'] = "Name of parent object."
+
+
+  # PUBLIC METHODS /////////////////////////////////////////////////////
+
+  def __init__(self, name="cppdata"):
+    """
+    Constructor.
+    """
+    Component.__init__(self, name, facility="cppdata")
+    self.scalars = []
+    self.arrays = []
+    self.app = ""
+    return
+
+
+  def write(self, app):
+    """
+    Write header and implementation file.
+    """
+    self.app = app
+    self._writeHeader()
+    self._writeSource()
+    return
+
+
+  def addScalar(self, vtype, name, value, format):
+    """
+    Add scalar to object's members.
+    """
+    data = {'type': vtype,
+            'name': name,
+            'value': value,
+            'format': format}
+    self.scalars.append(data)
+    return
+
+
+  def addArray(self, vtype, name, values, format, ncols):
+    """
+    Add array to object's members.
+    """
+    data = {'type': vtype,
+            'name': name,
+            'values': values,
+            'format': format,
+            'ncols': ncols}
+    self.arrays.append(data)
+    return
+
+
+  # PRIVATE METHODS ////////////////////////////////////////////////////
+
+  def _configure(self):
+    """
+    Set members based using inventory.
+    """
+    self.header = self.inventory.header
+    self.objname = self.inventory.objname
+    self.namespace = self.inventory.namespace
+    self.parent = self.inventory.parent
+    return
+
+
+  def _writeHeader(self):
+    """
+    Write C++ header file.
+    """
+
+    filename = "%s.hh" % self.objname
+
+    fileOut = open(filename, "w")
+    self._insertHeader(fileOut)
+
+    # Write define information
+    hhname = "%s_%s_hh" % (string.join(self.namespace, "_"),
+                           self.objname.lower())
+    fileOut.write("#if !defined(%s)\n" % hhname)
+    fileOut.write("#define %s\n" % hhname)
+    fileOut.write("\n")
+
+    if self.parent != "":
+      fileOut.write("#include \"%s.hh\"\n\n" % self.parent)
+
+    # Write namespace information
+    level = 0
+    for name in self.namespace:
+      fileOut.write("%s" % string.join(["  "]*level))
+      fileOut.write("namespace %s {\n" % name)
+      level += 1
+    fileOut.write("%s" % string.join(["  "]*level))
+    fileOut.write("class %s;\n" % self.objname)
+    level -= 1
+    for name in self.namespace:
+      fileOut.write("%s" % string.join(["  "]*level))
+      fileOut.write("} // %s\n" % name)
+      level -= 1
+    fileOut.write("\n")
+
+    # Write class opening
+    fileOut.write("class %s::%s" % \
+                  (string.join(self.namespace, "::"),
+                   self.objname))
+    if self.parent != "":
+      fileOut.write(" : public %s\n" % self.parent)
+    else:
+      fileOut.write("\n")
+    fileOut.write("{\n\n")
+
+    # Write data
+    if self.parent != "":
+      fileOut.write("public: \n\n")
+      fileOut.write("  /// Constructor\n")
+      fileOut.write("  %s(void);\n\n" % self.objname)
+      fileOut.write("  /// Destructor\n")
+      fileOut.write("  ~%s(void);\n\n" % self.objname)
+
+      fileOut.write("private:\n\n")
+    else:
+      fileOut.write("public:\n\n")
+
+    # Write scalar information
+    for scalar in self.scalars:
+      fileOut.write("  static const %s %s;\n\n" % \
+                    (scalar['type'], scalar['name']))
+
+    # Write array information
+    for array in self.arrays:
+      fileOut.write("  static const %s %s[];\n\n" % \
+                    (array['type'], array['name']))
+
+
+    # Write class closing
+    fileOut.write("};\n\n")
+    fileOut.write("#endif // %s\n" % hhname)
+
+    self._insertFooter(fileOut)
+    fileOut.close()
+    return
+
+
+  def _writeSource(self):
+    """
+    Write C++ source file.
+    """
+
+    filename = "%s.cc" % self.objname
+
+    fileOut = open(filename, "w")
+    self._insertHeader(fileOut)
+
+    fileOut.write("#include \"%s.hh\"\n" % self.objname)
+    fileOut.write("\n")
+
+    # Write scalar information
+    for scalar in self.scalars:
+      cppformat = "const %s %s::%s::%s = " + scalar['format'] + ";\n\n"
+      fileOut.write(cppformat % \
+                    (scalar['type'],
+                     string.join(self.namespace, "::"), self.objname,
+                     scalar['name'], scalar['value']))
+
+    # Write array information
+    for array in self.arrays:
+      cppformat = "const %s %s::%s::%s[] = {\n"
+      fileOut.write(cppformat % \
+                    (array['type'],
+                     string.join(self.namespace, "::"), self.objname,
+                     array['name']))
+      icol = 0
+      for value in numpy.ravel(array['values']):
+        cppformat = "%s," % array['format']
+        fileOut.write(cppformat % value)
+        icol += 1
+        if icol == array['ncols']:
+          fileOut.write("\n")
+          icol = 0
+      fileOut.write("};\n\n")
+
+    if self.parent != "":
+      self._writeLifecycle(fileOut)
+
+    self._insertFooter(fileOut)
+    fileOut.close()
+    return
+
+
+  def _writeLifecycle(self, fileOut):
+    """
+    Write default constructor and destructor.
+    """
+    # Constructor
+    fileOut.write("%s::%s::%s(void)\n" % \
+                  (string.join(self.namespace, "::"),
+                   self.objname, self.objname))
+
+    fileOut.write("{ // constructor\n")
+
+    for scalar in self.scalars:
+      n = scalar['name']
+      fileOut.write("  %s = %s;\n" % (n[1:], n))
+    for array in self.arrays:
+      n = array['name']
+      fileOut.write("  %s = const_cast<%s*>(%s);\n" % \
+                    (n[1:], array['type'], n))
+    fileOut.write("} // constructor\n\n")
+
+    # Destructor
+    fileOut.write("%s::%s::~%s(void)\n" % \
+                  (string.join(self.namespace, "::"),
+                   self.objname, self.objname))
+    fileOut.write("{}\n\n")
+    return
+
+
+  def _insertHeader(self, fileOut):
+    """
+    Insert header file into output file.
+    """
+    fileIn = open(self.header, "r")
+    for line in fileIn:
+      fileOut.write(line)
+    fileIn.close()
+
+    fileOut.write("// DO NOT EDIT THIS FILE\n")
+    fileOut.write("// This file was generated from python application "
+                  "%s.\n\n" % self.app)
+    return
+
+
+  def _insertFooter(self, fileOut):
+    """
+    Insert footer into output file.
+    """
+    fileOut.write("\n// End of file\n")
+    return
+
+
+# End of file 

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/Makefile.am
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/Makefile.am	2006-09-22 23:47:35 UTC (rev 4597)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/Makefile.am	2006-09-24 04:24:43 UTC (rev 4598)
@@ -20,11 +20,17 @@
 testfeassemble_SOURCES = \
 	TestQuadrature.cc \
 	TestQuadrature1D.cc \
-	test_feassemble.cc
+	test_feassemble.cc \
+	data/QuadratureData.cc \
+	data/QuadratureData1DLinear.cc \
+	data/QuadratureData1DQuadratic.cc
 
 noinst_HEADERS = \
 	TestQuadrature.hh \
 	TestQuadrature1D.hh
+	data/QuadratureData.hh \
+	data/QuadratureData1DLinear.hh \
+	data/QuadratureData1DQuadratic.hh
 
 testfeassemble_LDFLAGS = $(PETSC_LIB)
 

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature.cc	2006-09-22 23:47:35 UTC (rev 4597)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature.cc	2006-09-24 04:24:43 UTC (rev 4598)
@@ -15,6 +15,7 @@
 #include "TestQuadrature.hh" // Implementation of class methods
 
 #include "pylith/feassemble/Quadrature1D.hh" // USES Quadrature1D
+#include "data/QuadratureData.hh" // USES QuadratureData
 
 #include <sstream> // USES std::stringstream
 
@@ -151,9 +152,9 @@
   const int numQuadPts = 1;
   const int spaceDim = 1;
   const double basis[] = { 0.5, 0.5 };
-  const double basisDeriv[] = { -1.0, 1.0 };
-  const double quadPtsRef[] = { 0.5 };
-  const double quadWts[] = { 1.0 };
+  const double basisDeriv[] = { -0.5, 0.5 };
+  const double quadPtsRef[] = { 0.0 };
+  const double quadWts[] = { 2.0 };
   const double jacobianTol = 1.0;
 
   Quadrature1D q;
@@ -188,4 +189,99 @@
   CPPUNIT_ASSERT(0 != q._quadPts);
 } // initialize
 
+// ----------------------------------------------------------------------
+// Test initialize() & computeGeometry()
+void
+pylith::feassemble::TestQuadrature::_testComputeGeometry(
+					    Quadrature* pQuad,
+					    const QuadratureData& data) const
+{ // testComputeGeometry
+  const int cellDim = data.cellDim;
+  const int numCorners = data.numCorners;
+  const int numQuadPts = data.numQuadPts;
+  const int spaceDim = data.spaceDim;
+  const double* basis = data.basis;
+  const double* basisDeriv = data.basisDeriv;
+  const double* quadPtsRef = data.quadPtsRef;
+  const double* quadWts = data.quadWts;
+
+  const int numVertices = data.numVertices;
+  const int numCells = data.numCells;
+  const double* vertCoords = data.vertices;
+  const int* cells = data.cells;
+  const double* quadPts = data.quadPts;
+  const double* jacobian = data.jacobian;
+  const double* jacobianInv = data.jacobianInv;
+  const double* jacobianDet = data.jacobianDet;
+
+  const double jacobianTol = 1.0e-06;
+
+  CPPUNIT_ASSERT(0 != basis);
+  CPPUNIT_ASSERT(0 != basisDeriv);
+  CPPUNIT_ASSERT(0 != quadPtsRef);
+  CPPUNIT_ASSERT(0 != quadWts);
+  CPPUNIT_ASSERT(0 != vertCoords);
+  CPPUNIT_ASSERT(0 != cells);
+  CPPUNIT_ASSERT(0 != quadPts);
+  CPPUNIT_ASSERT(0 != jacobian);
+  CPPUNIT_ASSERT(0 != jacobianInv);
+  CPPUNIT_ASSERT(0 != jacobianDet);
+
+  pQuad->jacobianTolerance(jacobianTol);
+  pQuad->initialize(basis, basisDeriv, quadPtsRef, quadWts,
+		    cellDim, numCorners, numQuadPts, spaceDim);
+
+  // Create mesh with test cell
+  typedef ALE::Sieve<int, int, int> sieve_type;
+  typedef ALE::New::Topology<int, sieve_type> topology_type;
+  typedef ALE::New::Section<topology_type, double> section_type;
+  ALE::Obj<ALE::Mesh> mesh = ALE::Mesh(PETSC_COMM_WORLD, cellDim);
+  ALE::Obj<sieve_type> sieve = new sieve_type(mesh->comm());
+  ALE::Obj<topology_type> topology = new topology_type(mesh->comm());
+
+  const bool interpolate = false;
+  ALE::New::SieveBuilder<sieve_type>::buildTopology(sieve, cellDim, numCells,
+		     (int*) cells, numVertices, interpolate, numCorners);
+  sieve->stratify();
+  topology->setPatch(0, sieve);
+  topology->stratify();
+  mesh->setTopologyNew(topology);
+  ALE::New::SieveBuilder<sieve_type>::buildCoordinates(
+		    mesh->getSection("coordinates"), spaceDim, vertCoords);
+  
+  // Check values from _computeGeometry()
+  const ALE::Mesh::topology_type::patch_type patch = 0;
+  const ALE::Obj<topology_type::label_sequence>& elements = 
+    topology->heightStratum(patch, 0);
+  const topology_type::label_sequence::iterator e_iter = elements->begin(); 
+  const ALE::Obj<ALE::Mesh::section_type>& coordinates = 
+    mesh->getSection("coordinates");
+  pQuad->_computeGeometry(coordinates, *e_iter);
+
+  CPPUNIT_ASSERT(1 == numCells);
+
+  const double tolerance = 1.0e-06;
+  int size = numQuadPts * spaceDim;
+  CPPUNIT_ASSERT(0 != pQuad->_quadPts);
+  for (int i=0; i < size; ++i)
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(quadPts[i], pQuad->_quadPts[i], tolerance);
+
+  size = numQuadPts * cellDim * spaceDim;
+  CPPUNIT_ASSERT(0 != pQuad->_jacobian);
+  for (int i=0; i < size; ++i)
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(jacobian[i], pQuad->_jacobian[i], tolerance);
+
+  size = numQuadPts * spaceDim * cellDim;
+  CPPUNIT_ASSERT(0 != pQuad->_jacobianInv);
+  for (int i=0; i < size; ++i)
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(jacobianInv[i], pQuad->_jacobianInv[i], 
+				 tolerance);
+
+  size = numQuadPts;
+  CPPUNIT_ASSERT(0 != pQuad->_jacobianDet);
+  for (int i=0; i < size; ++i)
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(jacobianDet[i], pQuad->_jacobianDet[i], 
+				 tolerance);
+} // testQuadratic
+
 // End of file 

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature.hh	2006-09-22 23:47:35 UTC (rev 4597)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature.hh	2006-09-24 04:24:43 UTC (rev 4598)
@@ -26,7 +26,9 @@
 /// Namespace for spatialdata package
 namespace pylith {
   namespace feassemble {
+    class Quadrature;
     class TestQuadrature;
+    class QuadratureData;
   } // feassemble
 } // pylith
 
@@ -39,6 +41,7 @@
   CPPUNIT_TEST( testClone );
   CPPUNIT_TEST( testJacobianTol );
   CPPUNIT_TEST( testInitialize );
+
   CPPUNIT_TEST_SUITE_END();
 
   // PUBLIC METHODS /////////////////////////////////////////////////////
@@ -53,6 +56,17 @@
   /// Test initialize()
   void testInitialize(void);
 
+  // PROTECTED METHODS //////////////////////////////////////////////////
+protected :
+
+  /** Test initialize() & computeGeometry()
+   *
+   * @param pQuad Pointer to quadrature
+   * @param data Data for testing quadrature
+   */
+  void _testComputeGeometry(Quadrature* pQuad,
+			    const QuadratureData& data) const;
+
 }; // class TestQuadrature
 
 #endif // pylith_feassemble_testquadrature_hh

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature1D.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature1D.cc	2006-09-22 23:47:35 UTC (rev 4597)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature1D.cc	2006-09-24 04:24:43 UTC (rev 4598)
@@ -14,9 +14,10 @@
 
 #include "TestQuadrature1D.hh" // Implementation of class methods
 
-#include "pylith/feassemble/Quadrature1D.hh" // USES Quadrature1D
+#include "pylith/feassemble/Quadrature1D.hh"
 
-#include <sstream> // USES std::stringstream
+#include "data/QuadratureData1DLinear.hh"
+#include "data/QuadratureData1DQuadratic.hh"
 
 // ----------------------------------------------------------------------
 CPPUNIT_TEST_SUITE_REGISTRATION( pylith::feassemble::TestQuadrature1D );
@@ -34,80 +35,10 @@
 void
 pylith::feassemble::TestQuadrature1D::testLinear(void)
 { // testLinear
-  // Basis fns: N0 = 0.5*(1-p), N1 = 0.5*(1+p)
-  // Quadrature points: (p=0.0, wt=2.0)
-
-  const int cellDim = 1;
-  const int numCorners = 2;
-  const int numQuadPts = 1;
-  const int spaceDim = 1;
-  const double basis[] = { 0.5, 0.5 };
-  const double basisDeriv[] = { -0.5, 0.5 };
-  const double quadPtsRef[] = { 0.0 };
-  const double quadWts[] = { 2.0 };
-  const double jacobianTol = 1.0e-06;
-
   Quadrature1D q;
-  q.jacobianTolerance(jacobianTol);
-  q.initialize(basis, basisDeriv, quadPtsRef, quadWts,
-	       cellDim, numCorners, numQuadPts, spaceDim);
+  QuadratureData1DLinear data;
 
-  // Test cell: x0=-0.25, x1=2.0 
-  const int numVertices = 2;
-  const int numCells = 1;
-  const double vertCoords[] = { -0.25, 2.0 };
-  const int cells[] = { 0, 1 };
-  const double quadPts[] = { 0.875 };
-  const double jacobian[] = { 1.125 };
-  const double jacobianInv[] = { 1.0/1.125 };
-  const double jacobianDet[] = { 1.125 };
-
-  // Create mesh with test cell
-  typedef ALE::Sieve<int, int, int> sieve_type;
-  typedef ALE::New::Topology<int, sieve_type> topology_type;
-  typedef ALE::New::Section<topology_type, double> section_type;
-  ALE::Obj<ALE::Mesh> mesh = ALE::Mesh(PETSC_COMM_WORLD, cellDim);
-  ALE::Obj<sieve_type> sieve = new sieve_type(mesh->comm());
-  ALE::Obj<topology_type> topology = new topology_type(mesh->comm());
-
-  const bool interpolate = false;
-  ALE::New::SieveBuilder<sieve_type>::buildTopology(sieve, cellDim, numCells,
-		     (int*) cells, numVertices, interpolate, numCorners);
-  sieve->stratify();
-  topology->setPatch(0, sieve);
-  topology->stratify();
-  mesh->setTopologyNew(topology);
-  ALE::New::SieveBuilder<sieve_type>::buildCoordinates(
-		    mesh->getSection("coordinates"), spaceDim, vertCoords);
-  
-  // Check values from _computeGeometry()
-  const ALE::Mesh::topology_type::patch_type patch = 0;
-  const ALE::Obj<topology_type::label_sequence>& elements = 
-    topology->heightStratum(patch, 0);
-  const topology_type::label_sequence::iterator e_iter = elements->begin(); 
-  const ALE::Obj<ALE::Mesh::section_type>& coordinates = 
-    mesh->getSection("coordinates");
-  q._computeGeometry(coordinates, *e_iter);
-
-  int size = 1;
-  CPPUNIT_ASSERT(0 != q._quadPts);
-  for (int i=0; i < size; ++i)
-    CPPUNIT_ASSERT_EQUAL(quadPts[i], q._quadPts[i]);
-
-  size = 1;
-  CPPUNIT_ASSERT(0 != q._jacobian);
-  for (int i=0; i < size; ++i)
-    CPPUNIT_ASSERT_EQUAL(jacobian[i], q._jacobian[i]);
-
-  size = 1;
-  CPPUNIT_ASSERT(0 != q._jacobianInv);
-  for (int i=0; i < size; ++i)
-    CPPUNIT_ASSERT_EQUAL(jacobianInv[i], q._jacobianInv[i]);
-
-  size = 1;
-  CPPUNIT_ASSERT(0 != q._jacobianDet);
-  for (int i=0; i < size; ++i)
-    CPPUNIT_ASSERT_EQUAL(jacobianDet[i], q._jacobianDet[i]);
+  _testComputeGeometry(&q, data);
 } // testLinear
 
 // ----------------------------------------------------------------------
@@ -115,93 +46,10 @@
 void
 pylith::feassemble::TestQuadrature1D::testQuadratic(void)
 { // testQuadratic
-  // Basis fns:
-  //   N0 = 0.5*p*(1-p)
-  //   N1 = 1-p^2
-  //   N2 = 0.5*p*(1+p)
-  // Quadrature points
-  //   p=+1/sqrt(3), wt=1
-  //   p=-1/sqrt(3), wt=1
-
-
-  const int cellDim = 1;
-  const int numCorners = 3;
-  const int numQuadPts = 2;
-  const int spaceDim = 1;
-  const double basis[] = { 
-    4.55341801e-01,   6.66666667e-01,  -1.22008468e-01,
-    -1.22008468e-01,   6.66666667e-01,   4.55341801e-01,
-  };
-  const double basisDeriv[] = {
-    -1.07735027e+00,   1.15470054e+00,  -7.73502692e-02,
-     7.73502692e-02,  -1.15470054e+00,   1.07735027e+00,
-  };
-  const double quadPtsRef[] = { -1.0/sqrt(3.0), +1.0/sqrt(3.0) };
-  const double quadWts[] = { 1.0 };
-  const double jacobianTol = -10.0;
-
   Quadrature1D q;
-  q.jacobianTolerance(jacobianTol);
-  q.initialize(basis, basisDeriv, quadPtsRef, quadWts,
-	       cellDim, numCorners, numQuadPts, spaceDim);
+  QuadratureData1DQuadratic data;
 
-  // Test cell: x0=-0.25, x1=2.0, x2=2.0 
-  const int numVertices = 3;
-  const int numCells = 1;
-  const double vertCoords[] = { -0.25, 0.875, 2.0 };
-  const int cells[] = { 0, 1, 2 };
-  const double quadPts[] = { 2.25480947e-01, 1.52451905e+00 };
-  const double jacobian[] = { 1.125,  1.125 };
-  const double jacobianInv[] = { 1.0/1.125, 1.0/1.125 };
-  const double jacobianDet[] = { 1.125, 1.125 };
-
-  // Create mesh with test cell
-  typedef ALE::Sieve<int, int, int> sieve_type;
-  typedef ALE::New::Topology<int, sieve_type> topology_type;
-  typedef ALE::New::Section<topology_type, double> section_type;
-  ALE::Obj<ALE::Mesh> mesh = ALE::Mesh(PETSC_COMM_WORLD, cellDim);
-  ALE::Obj<sieve_type> sieve = new sieve_type(mesh->comm());
-  ALE::Obj<topology_type> topology = new topology_type(mesh->comm());
-
-  const bool interpolate = false;
-  ALE::New::SieveBuilder<sieve_type>::buildTopology(sieve, cellDim, numCells,
-		     (int*) cells, numVertices, interpolate, numCorners);
-  sieve->stratify();
-  topology->setPatch(0, sieve);
-  topology->stratify();
-  mesh->setTopologyNew(topology);
-  ALE::New::SieveBuilder<sieve_type>::buildCoordinates(
-		    mesh->getSection("coordinates"), spaceDim, vertCoords);
-  
-  // Check values from _computeGeometry()
-  const ALE::Mesh::topology_type::patch_type patch = 0;
-  const ALE::Obj<topology_type::label_sequence>& elements = 
-    topology->heightStratum(patch, 0);
-  const topology_type::label_sequence::iterator e_iter = elements->begin(); 
-  const ALE::Obj<ALE::Mesh::section_type>& coordinates = 
-    mesh->getSection("coordinates");
-  q._computeGeometry(coordinates, *e_iter);
-
-  const double tolerance = 1.0e-06;
-  int size = 1;
-  CPPUNIT_ASSERT(0 != q._quadPts);
-  for (int i=0; i < size; ++i)
-    CPPUNIT_ASSERT_DOUBLES_EQUAL(quadPts[i], q._quadPts[i], tolerance);
-
-  size = 1;
-  CPPUNIT_ASSERT(0 != q._jacobian);
-  for (int i=0; i < size; ++i)
-    CPPUNIT_ASSERT_DOUBLES_EQUAL(jacobian[i], q._jacobian[i], tolerance);
-
-  size = 1;
-  CPPUNIT_ASSERT(0 != q._jacobianInv);
-  for (int i=0; i < size; ++i)
-    CPPUNIT_ASSERT_DOUBLES_EQUAL(jacobianInv[i], q._jacobianInv[i], tolerance);
-
-  size = 1;
-  CPPUNIT_ASSERT(0 != q._jacobianDet);
-  for (int i=0; i < size; ++i)
-    CPPUNIT_ASSERT_DOUBLES_EQUAL(jacobianDet[i], q._jacobianDet[i], tolerance);
+  _testComputeGeometry(&q, data);
 } // testQuadratic
 
 // End of file 

Added: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature1DLinear.py
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature1DLinear.py	2006-09-22 23:47:35 UTC (rev 4597)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature1DLinear.py	2006-09-24 04:24:43 UTC (rev 4598)
@@ -0,0 +1,107 @@
+#!/usr/bin/env python
+#
+# ----------------------------------------------------------------------
+#
+#                           Brad T. Aagaard
+#                        U.S. Geological Survey
+#
+# <LicenseText>
+#
+# ----------------------------------------------------------------------
+#
+
+## @file unittests/libtests/feassemble/data/Quadrature1DLinear.py
+
+## @brief Python application for generating C++ data files for testing
+## C++ Quadrature1D object w/linear basis functions.
+
+from QuadratureApp import QuadratureApp
+
+import numpy
+
+# ----------------------------------------------------------------------
+def N0(p):
+  return 0.5*(1.0-p)
+
+def N0p(p):
+  return -0.5 * numpy.ones(p.shape)
+
+def N1(p):
+  return 0.5*(1.0+p)
+
+def N1p(p):
+  return +0.5 * numpy.ones(p.shape)
+
+# ----------------------------------------------------------------------
+
+# Quadrature1DLinear class
+class Quadrature1DLinear(QuadratureApp):
+  """
+  Python application for generating C++ data files for testing C++
+  Quadrature1D object w/linear basis functions.
+  """
+  
+  # PUBLIC METHODS /////////////////////////////////////////////////////
+  
+  def __init__(self, name="quadrature1dlinear"):
+    """
+    Constructor.
+    """
+    QuadratureApp.__init__(self, name)
+    
+    self.numVertices = 2
+    self.spaceDim = 1
+    self.numCells = 1
+    self.cellDim = 1
+    self.numCorners = 2
+    self.numQuadPts = 1
+    
+    self.quadPtsRef = numpy.array( [[0.0]], dtype=numpy.Float64)
+    self.quadWts = numpy.array([2.0], dtype=numpy.Float64)
+    self.vertices = numpy.array( [[-0.25], [2.0]], dtype=numpy.Float64)
+    self.cells = numpy.array( [[0, 1]], dtype=numpy.Int32)
+    return
+  
+
+  # PRIVATE METHODS ////////////////////////////////////////////////////
+  
+  def _calculate(self):
+    """
+    Calculate basis functions, derivatives, and Jacobian information
+    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) )
+
+    # 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) )
+
+    # Jacobian at quadrature points
+    self.jacobian = numpy.dot(self.basisDeriv, self.vertices)
+
+    # 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)
+    return
+      
+
+# MAIN /////////////////////////////////////////////////////////////////
+if __name__ == "__main__":
+
+  app = Quadrature1DLinear()
+  app.run()
+
+
+# End of file 

Added: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature1DQuadratic.py
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature1DQuadratic.py	2006-09-22 23:47:35 UTC (rev 4597)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature1DQuadratic.py	2006-09-24 04:24:43 UTC (rev 4598)
@@ -0,0 +1,119 @@
+#!/usr/bin/env python
+#
+# ----------------------------------------------------------------------
+#
+#                           Brad T. Aagaard
+#                        U.S. Geological Survey
+#
+# <LicenseText>
+#
+# ----------------------------------------------------------------------
+#
+
+## @file unittests/libtests/feassemble/data/Quadrature1DQuadratic.py
+
+## @brief Python application for generating C++ data files for testing
+## C++ Quadrature1D object w/quadratic basis functions.
+
+from QuadratureApp import QuadratureApp
+
+import numpy
+
+# ----------------------------------------------------------------------
+def N0(p):
+  return -0.5*p*(1.0-p)
+
+def N0p(p):
+  return -0.5*(1.0-p) + 0.5*p
+
+def N1(p):
+  return (1.0-p**2)
+
+def N1p(p):
+  return -2.0*p
+
+def N2(p):
+  return 0.5*p*(1.0+p)
+
+def N2p(p):
+  return +0.5*(1.0+p) + 0.5*p
+
+# ----------------------------------------------------------------------
+
+# Quadrature1DQuadratic class
+class Quadrature1DQuadratic(QuadratureApp):
+  """
+  Python application for generating C++ data files for testing C++
+  Quadrature1D object w/quadratic basis functions.
+  """
+  
+  # PUBLIC METHODS /////////////////////////////////////////////////////
+
+  def __init__(self, name="quadrature1dquadratic"):
+    """
+    Constructor.
+    """
+    QuadratureApp.__init__(self, name)
+    
+    self.numVertices = 3
+    self.spaceDim = 1
+    self.numCells = 1
+    self.cellDim = 1
+    self.numCorners = 3
+    self.numQuadPts = 2
+    
+    self.quadPtsRef = numpy.array( [[-1.0/3**0.5],
+                                    [+1.0/3**0.5]],
+                                   dtype=numpy.Float64)
+    self.quadWts = numpy.array([1.0, 1.0], dtype=numpy.Float64)
+    self.vertices = numpy.array( [[-0.25], [0.875], [2.0]],
+                                 dtype=numpy.Float64)
+    self.cells = numpy.array( [[0, 1, 2]], dtype=numpy.Int32)
+    
+    return
+
+
+  # PRIVATE METHODS ////////////////////////////////////////////////////
+  
+  def _calculate(self):
+    """
+    Calculate basis functions, derivatives, and Jacobian information
+    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) )
+
+    # 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) )
+
+    # Jacobian at quadrature points
+    self.jacobian = numpy.dot(self.basisDeriv, self.vertices)
+
+    # 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)
+    return
+      
+
+# MAIN /////////////////////////////////////////////////////////////////
+if __name__ == "__main__":
+
+  app = Quadrature1DQuadratic()
+  app.run()
+
+
+# End of file 

Added: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureApp.py
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureApp.py	2006-09-22 23:47:35 UTC (rev 4597)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureApp.py	2006-09-24 04:24:43 UTC (rev 4598)
@@ -0,0 +1,156 @@
+#!/usr/bin/env python
+#
+# ----------------------------------------------------------------------
+#
+#                           Brad T. Aagaard
+#                        U.S. Geological Survey
+#
+# <LicenseText>
+#
+# ----------------------------------------------------------------------
+#
+
+## @file unittests/libtests/feassemble/data/QuadratureApp.py
+
+## @brief Python application for generating C++ data files for testing
+## C++ quadrature objects.
+
+from pyre.applications.Script import Script
+
+# QuadratureApp class
+class QuadratureApp(Script):
+  """
+  Python application for generating C++ data files for testing C++
+  quadrature objects.
+  """
+  
+  # INVENTORY //////////////////////////////////////////////////////////
+
+  class Inventory(Script.Inventory):
+    """Python object for managing PyLithApp facilities and properties."""
+
+    ## @class Inventory
+    ## Python object for managing PyLithApp facilities and properties.
+    ##
+    ## \b Properties
+    ## @li None
+    ##
+    ## \b Facilities
+    ## @li \b data Data manager.
+
+    import pyre.inventory
+
+    from pylith.utils.CppData import CppData
+    data = pyre.inventory.facility("data", factory=CppData)
+    data.meta['tip'] = "Data manager."
+
+
+  # PUBLIC METHODS /////////////////////////////////////////////////////
+
+  def __init__(self, name="quadratureapp"):
+    """
+    Constructor.
+    """
+    Script.__init__(self, name)
+
+    self.numVertices = None
+    self.spaceDim = None
+    self.numCells = None
+    self.cellDim = None
+    self.numCorners = None
+    self.numQuadPts = None
+
+    self.quadPtsRef = None
+    self.quadWts = None
+    self.vertices = None
+    self.cells = None
+
+    self.basis = None
+    self.basisDeriv = None
+    self.quadPts = None
+    self.jacobian = None
+    self.jacobianDet = None
+    self.jacobianInv = None
+    return
+
+
+  def main(self):
+    """
+    Run the application.
+    """
+    self._calculate()
+    self._initData()
+    self.data.write(self.name)
+    return
+  
+
+  # PRIVATE METHODS ////////////////////////////////////////////////////
+
+  def _configure(self):
+    """
+    Set members using inventory.
+    """
+    Script._configure(self)
+    self.data = self.inventory.data
+    return
+
+
+  def _initData(self):
+    self.data.addScalar(vtype="int", name="_numVertices",
+                        value=self.numVertices,
+                        format="%d")
+    self.data.addScalar(vtype="int", name="_spaceDim", value=self.spaceDim,
+                        format="%d")
+    self.data.addScalar(vtype="int", name="_numCells", value=self.numCells,
+                        format="%d")
+    self.data.addScalar(vtype="int", name="_cellDim", value=self.cellDim,
+                        format="%d")
+    self.data.addScalar(vtype="int", name="_numCorners", value=
+                        self.numCorners,
+                        format="%d")
+    self.data.addScalar(vtype="int", name="_numQuadPts",
+                        value=self.numQuadPts,
+                        format="%d")
+    
+    self.data.addArray(vtype="double", name="_vertices", values=self.vertices,
+                       format="%16.8e", ncols=self.spaceDim)
+    self.data.addArray(vtype="int", name="_cells", values=self.cells,
+                       format="%8d", ncols=self.numVertices)
+    
+    self.data.addArray(vtype="double", name="_quadPtsRef",
+                       values=self.quadPtsRef,
+                       format="%16.8e", ncols=self.cellDim)
+    self.data.addArray(vtype="double", name="_quadWts", values=self.quadWts,
+                       format="%16.8e", ncols=self.numQuadPts)
+    
+    self.data.addArray(vtype="double", name="_basis", values=self.basis,
+                       format="%16.8e", ncols=self.cellDim)
+    self.data.addArray(vtype="double", name="_basisDeriv",
+                       values=self.basisDeriv,
+                       format="%16.8e", ncols=self.cellDim)
+    self.data.addArray(vtype="double", name="_quadPts",
+                       values=self.quadPts,
+                       format="%16.8e", ncols=self.spaceDim)
+    
+    self.data.addArray(vtype="double", name="_jacobian",
+                       values=self.jacobian,
+                       format="%16.8e", ncols=self.spaceDim)
+    self.data.addArray(vtype="double", name="_jacobianDet",
+                       values=self.jacobianDet,
+                       format="%16.8e", ncols=self.numQuadPts)
+    self.data.addArray(vtype="double", name="_jacobianInv",
+                       values=self.jacobianInv,
+                       format="%16.8e", ncols=self.cellDim)
+      
+    return
+
+  
+  def _calculate(self):
+    """
+    Calculate basis functions, derivatives, and Jacobian information
+    at quadrature points.
+    """
+    raise NotImplementedError
+
+
+# End of file 

Added: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData.cc	2006-09-22 23:47:35 UTC (rev 4597)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData.cc	2006-09-24 04:24:43 UTC (rev 4598)
@@ -0,0 +1,43 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+#include "QuadratureData.hh"
+
+// ----------------------------------------------------------------------
+// Constructor
+pylith::feassemble::QuadratureData::QuadratureData(void) :
+  numVertices(0),
+  spaceDim(0),
+  numCells(0),
+  cellDim(0),
+  numCorners(0),
+  numQuadPts(0),
+  vertices(0),
+  cells(0),
+  quadPtsRef(0),
+  quadWts(0),
+  basis(0),
+  basisDeriv(0),
+  jacobian(0),
+  jacobianDet(0),
+  jacobianInv(0),
+  quadPts(0)
+{ // constructor
+} // constructor
+
+// ----------------------------------------------------------------------
+// Destructor
+pylith::feassemble::QuadratureData::~QuadratureData(void)
+{ // destructor
+} // destructor
+
+// End of file

Added: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData.hh	2006-09-22 23:47:35 UTC (rev 4597)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData.hh	2006-09-24 04:24:43 UTC (rev 4598)
@@ -0,0 +1,59 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+#if !defined(pylith_feassemble_quadraturedata_hh)
+#define pylith_feassemble_quadraturedata_hh
+
+namespace pylith {
+  namespace feassemble {
+     class QuadratureData;
+  } // pylith
+} // feassemble
+
+class pylith::feassemble::QuadratureData
+{
+
+// PUBLIC METHODS ///////////////////////////////////////////////////////
+public :
+  
+  /// Constructor
+  QuadratureData(void);
+
+  /// Destructor
+  ~QuadratureData(void);
+
+// PUBLIC MEMBERS ///////////////////////////////////////////////////////
+public:
+
+  int numVertices; ///< Number of vertices
+  int spaceDim; ///< Number of dimensions in vertex coordinates
+  int numCells; ///< Number of cells (=1)
+  int cellDim; ///< Number of dimensions associated with cell
+  int numCorners; ///< Number of vertices in cell
+  int numQuadPts; ///< Number of quadrature points
+
+  double* vertices; ///< Pointer to coordinates of vertices
+  int* cells; ///< Pointer to indices of vertices in cells
+  double* quadPtsRef; ///< Coordinates of quad pts in ref cell
+  double* quadWts; ///< Weights of quadrature points
+  double* basis; ///< Basis fns at quadrature points
+  double* basisDeriv; ///< Derivatices of basis fns at quad pts
+  double* jacobian; ///< Jacobian at quadrature points
+  double* jacobianDet; ///< Determinant of quadrature points
+  double* jacobianInv; ///< Inverse of Jacobian at quadruature points
+  double* quadPts; ///< Coordinates of quad pts in cell
+
+};
+
+#endif // pylith_feassemble_quadraturedata_hh
+
+// End of file

Added: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1DLinear.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1DLinear.cc	2006-09-22 23:47:35 UTC (rev 4597)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1DLinear.cc	2006-09-24 04:24:43 UTC (rev 4598)
@@ -0,0 +1,97 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application quadrature1dlinear.
+
+#include "QuadratureData1DLinear.hh"
+
+const int pylith::feassemble::QuadratureData1DLinear::_numVertices = 2;
+
+const int pylith::feassemble::QuadratureData1DLinear::_spaceDim = 1;
+
+const int pylith::feassemble::QuadratureData1DLinear::_numCells = 1;
+
+const int pylith::feassemble::QuadratureData1DLinear::_cellDim = 1;
+
+const int pylith::feassemble::QuadratureData1DLinear::_numCorners = 2;
+
+const int pylith::feassemble::QuadratureData1DLinear::_numQuadPts = 1;
+
+const double pylith::feassemble::QuadratureData1DLinear::_vertices[] = {
+ -2.50000000e-01,
+  2.00000000e+00,
+};
+
+const int pylith::feassemble::QuadratureData1DLinear::_cells[] = {
+       0,       1,
+};
+
+const double pylith::feassemble::QuadratureData1DLinear::_quadPtsRef[] = {
+  0.00000000e+00,
+};
+
+const double pylith::feassemble::QuadratureData1DLinear::_quadWts[] = {
+  2.00000000e+00,
+};
+
+const double pylith::feassemble::QuadratureData1DLinear::_basis[] = {
+  5.00000000e-01,
+  5.00000000e-01,
+};
+
+const double pylith::feassemble::QuadratureData1DLinear::_basisDeriv[] = {
+ -5.00000000e-01,
+  5.00000000e-01,
+};
+
+const double pylith::feassemble::QuadratureData1DLinear::_quadPts[] = {
+  8.75000000e-01,
+};
+
+const double pylith::feassemble::QuadratureData1DLinear::_jacobian[] = {
+  1.12500000e+00,
+};
+
+const double pylith::feassemble::QuadratureData1DLinear::_jacobianDet[] = {
+  1.12500000e+00,
+};
+
+const double pylith::feassemble::QuadratureData1DLinear::_jacobianInv[] = {
+  8.88888889e-01,
+};
+
+pylith::feassemble::QuadratureData1DLinear::QuadratureData1DLinear(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::QuadratureData1DLinear::~QuadratureData1DLinear(void)
+{}
+
+
+// End of file

Added: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1DLinear.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1DLinear.hh	2006-09-22 23:47:35 UTC (rev 4597)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1DLinear.hh	2006-09-24 04:24:43 UTC (rev 4598)
@@ -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_quadraturedata1dlinear_hh)
+#define pylith_feassemble_quadraturedata1dlinear_hh
+
+#include "QuadratureData.hh"
+
+namespace pylith {
+  namespace feassemble {
+     class QuadratureData1DLinear;
+  } // pylith
+} // feassemble
+
+class pylith::feassemble::QuadratureData1DLinear : public QuadratureData
+{
+
+public: 
+
+  /// Constructor
+  QuadratureData1DLinear(void);
+
+  /// Destructor
+  ~QuadratureData1DLinear(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_quadraturedata1dlinear_hh
+
+// End of file

Added: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1DQuadratic.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1DQuadratic.cc	2006-09-22 23:47:35 UTC (rev 4597)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1DQuadratic.cc	2006-09-24 04:24:43 UTC (rev 4598)
@@ -0,0 +1,110 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application quadrature1dquadratic.
+
+#include "QuadratureData1DQuadratic.hh"
+
+const int pylith::feassemble::QuadratureData1DQuadratic::_numVertices = 3;
+
+const int pylith::feassemble::QuadratureData1DQuadratic::_spaceDim = 1;
+
+const int pylith::feassemble::QuadratureData1DQuadratic::_numCells = 1;
+
+const int pylith::feassemble::QuadratureData1DQuadratic::_cellDim = 1;
+
+const int pylith::feassemble::QuadratureData1DQuadratic::_numCorners = 3;
+
+const int pylith::feassemble::QuadratureData1DQuadratic::_numQuadPts = 2;
+
+const double pylith::feassemble::QuadratureData1DQuadratic::_vertices[] = {
+ -2.50000000e-01,
+  8.75000000e-01,
+  2.00000000e+00,
+};
+
+const int pylith::feassemble::QuadratureData1DQuadratic::_cells[] = {
+       0,       1,       2,
+};
+
+const double pylith::feassemble::QuadratureData1DQuadratic::_quadPtsRef[] = {
+ -5.77350269e-01,
+  5.77350269e-01,
+};
+
+const double pylith::feassemble::QuadratureData1DQuadratic::_quadWts[] = {
+  1.00000000e+00,  1.00000000e+00,
+};
+
+const double pylith::feassemble::QuadratureData1DQuadratic::_basis[] = {
+  4.55341801e-01,
+  6.66666667e-01,
+ -1.22008468e-01,
+ -1.22008468e-01,
+  6.66666667e-01,
+  4.55341801e-01,
+};
+
+const double pylith::feassemble::QuadratureData1DQuadratic::_basisDeriv[] = {
+ -1.07735027e+00,
+  1.15470054e+00,
+ -7.73502692e-02,
+  7.73502692e-02,
+ -1.15470054e+00,
+  1.07735027e+00,
+};
+
+const double pylith::feassemble::QuadratureData1DQuadratic::_quadPts[] = {
+  2.25480947e-01,
+  1.52451905e+00,
+};
+
+const double pylith::feassemble::QuadratureData1DQuadratic::_jacobian[] = {
+  1.12500000e+00,
+  1.12500000e+00,
+};
+
+const double pylith::feassemble::QuadratureData1DQuadratic::_jacobianDet[] = {
+  1.12500000e+00,  1.12500000e+00,
+};
+
+const double pylith::feassemble::QuadratureData1DQuadratic::_jacobianInv[] = {
+  8.88888889e-01,
+  8.88888889e-01,
+};
+
+pylith::feassemble::QuadratureData1DQuadratic::QuadratureData1DQuadratic(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::QuadratureData1DQuadratic::~QuadratureData1DQuadratic(void)
+{}
+
+
+// End of file

Added: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1DQuadratic.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1DQuadratic.hh	2006-09-22 23:47:35 UTC (rev 4597)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1DQuadratic.hh	2006-09-24 04:24:43 UTC (rev 4598)
@@ -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 quadrature1dquadratic.
+
+#if !defined(pylith_feassemble_quadraturedata1dquadratic_hh)
+#define pylith_feassemble_quadraturedata1dquadratic_hh
+
+#include "QuadratureData.hh"
+
+namespace pylith {
+  namespace feassemble {
+     class QuadratureData1DQuadratic;
+  } // pylith
+} // feassemble
+
+class pylith::feassemble::QuadratureData1DQuadratic : public QuadratureData
+{
+
+public: 
+
+  /// Constructor
+  QuadratureData1DQuadratic(void);
+
+  /// Destructor
+  ~QuadratureData1DQuadratic(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_quadraturedata1dquadratic_hh
+
+// End of file

Added: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/generate.sh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/generate.sh	2006-09-22 23:47:35 UTC (rev 4597)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/generate.sh	2006-09-24 04:24:43 UTC (rev 4598)
@@ -0,0 +1,23 @@
+#!/bin/bash
+#
+# ======================================================================
+#
+#                           Brad T. Aagaard
+#                        U.S. Geological Survey
+#
+# {LicenseText}
+#
+# ======================================================================
+#
+
+python Quadrature1DLinear.py \
+    --data.namespace=pylith,feassemble \
+    --data.object=QuadratureData1DLinear \
+    --data.parent=QuadratureData
+
+python Quadrature1DQuadratic.py \
+    --data.namespace=pylith,feassemble \
+    --data.object=QuadratureData1DQuadratic \
+    --data.parent=QuadratureData
+
+# End of file 


Property changes on: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/generate.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/header.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/header.hh	2006-09-22 23:47:35 UTC (rev 4597)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/header.hh	2006-09-24 04:24:43 UTC (rev 4598)
@@ -0,0 +1,12 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+

Deleted: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/quadrature1d.py
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/quadrature1d.py	2006-09-22 23:47:35 UTC (rev 4597)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/quadrature1d.py	2006-09-24 04:24:43 UTC (rev 4598)
@@ -1,51 +0,0 @@
-#!/usr/bin/env python
-#
-# ======================================================================
-#
-#                           Brad T. Aagaard
-#                        U.S. Geological Survey
-#
-# {LicenseText}
-#
-# ======================================================================
-#
-
-def N0(p):
-    return -0.5*p*(1-p)
-
-
-def N1(p):
-    return (1-p**2)
-
-
-def N2(p):
-    return 0.5*p*(1+p)
-
-
-def N0p(p):
-    return +0.5*p - 0.5*(1-p)
-
-
-def N1p(p):
-    return -2.0*p
-
-
-def N2p(p):
-    return 0.5*p + 0.5*(1+p)
-
-
-
-q = [-1.0/3.0**0.5, 1.0/3.0**0.5]
-#q = [-1.0, 0.0, 1.0]
-print "basis = {"
-for qp in q:
-    print "%16.8e, %16.8e, %16.8e," % (N0(qp), N1(qp), N2(qp))
-print "}"
-
-print "basisDeriv = {"
-for qp in q:
-    print "%16.8e, %16.8e, %16.8e," % (N0p(qp), N1p(qp), N2p(qp))
-print "}"
-
-
-# End of file



More information about the cig-commits mailing list