[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