[cig-commits] r4600 - in short/3D/PyLith/trunk: libsrc/feassemble
unittests/libtests/feassemble unittests/libtests/feassemble/data
baagaard at geodynamics.org
baagaard at geodynamics.org
Sun Sep 24 20:00:41 PDT 2006
Author: baagaard
Date: 2006-09-24 20:00:40 -0700 (Sun, 24 Sep 2006)
New Revision: 4600
Added:
short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din2D.cc
short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din2D.hh
short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din2D.icc
short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din3D.cc
short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din3D.hh
short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din3D.icc
short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2D.cc
short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2D.hh
short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2D.icc
short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature1Din2D.cc
short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature1Din2D.hh
short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature1Din3D.cc
short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature1Din3D.hh
short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature2D.cc
short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature2D.hh
short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature1Din2DLinear.py
short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature1Din2DQuadratic.py
short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature1Din3DLinear.py
short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature1Din3DQuadratic.py
short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature2DLinear.py
short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature2DQuadratic.py
short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din2DLinear.cc
short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din2DLinear.hh
short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din2DQuadratic.cc
short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din2DQuadratic.hh
short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din3DLinear.cc
short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din3DLinear.hh
short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din3DQuadratic.cc
short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din3DQuadratic.hh
short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2DLinear.cc
short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2DLinear.hh
short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2DQuadratic.cc
short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2DQuadratic.hh
Modified:
short/3D/PyLith/trunk/libsrc/feassemble/Makefile.am
short/3D/PyLith/trunk/libsrc/feassemble/Quadrature.cc
short/3D/PyLith/trunk/libsrc/feassemble/Quadrature.hh
short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1D.cc
short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1D.hh
short/3D/PyLith/trunk/unittests/libtests/feassemble/Makefile.am
short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature1DLinear.py
short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature1DQuadratic.py
short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureApp.py
short/3D/PyLith/trunk/unittests/libtests/feassemble/data/generate.sh
Log:
Added quadrature and unit tests for 1-D cells in 2D & 3-D space and 2-D cells in 2-D space.
Modified: short/3D/PyLith/trunk/libsrc/feassemble/Makefile.am
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Makefile.am 2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Makefile.am 2006-09-25 03:00:40 UTC (rev 4600)
@@ -17,13 +17,22 @@
libpylithfeassemble_la_SOURCES = \
Quadrature.cc \
- Quadrature1D.cc
+ Quadrature1D.cc \
+ Quadrature1Din2D.cc \
+ Quadrature1Din3D.cc \
+ Quadrature2D.cc
subpkginclude_HEADERS = \
Quadrature.hh \
Quadrature.icc \
Quadrature1D.hh \
- Quadrature1D.icc
+ Quadrature1D.icc \
+ Quadrature1Din2D.hh \
+ Quadrature1Din2D.icc \
+ Quadrature1Din3D.hh \
+ Quadrature1Din3D.icc \
+ Quadrature2D.hh \
+ Quadrature2D.icc
noinst_HEADERS =
Modified: short/3D/PyLith/trunk/libsrc/feassemble/Quadrature.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Quadrature.cc 2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Quadrature.cc 2006-09-25 03:00:40 UTC (rev 4600)
@@ -194,4 +194,27 @@
delete[] _quadPts; _quadPts = (size > 0) ? new double[size] : 0;
} // initialize
+// ----------------------------------------------------------------------
+// Set entries in geometry arrays to zero.
+void
+pylith::feassemble::Quadrature::_resetGeometry(void)
+{ // _resetGeometry
+ // Zero out Jacobian and its inverse
+ int size = _numQuadPts*_cellDim*_spaceDim;
+ for (int i=0; i < size; ++i)
+ _jacobian[i] = 0.0;
+ for (int i=0; i < size; ++i)
+ _jacobianInv[i] = 0.0;
+
+ // Zero out Jacobian determinant
+ size = _numQuadPts;
+ for (int i=0; i < size; ++i)
+ _jacobianDet[i] = 0.0;
+
+ // Zero out quad pts
+ size = _numQuadPts*_spaceDim;
+ for (int i=0; i < size; ++i)
+ _quadPts[i] = 0.0;
+} // _resetGeometry
+
// End of file
Modified: short/3D/PyLith/trunk/libsrc/feassemble/Quadrature.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Quadrature.hh 2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Quadrature.hh 2006-09-25 03:00:40 UTC (rev 4600)
@@ -130,6 +130,9 @@
void _computeGeometry(const ALE::Obj<ALE::Mesh::section_type>& coordinates,
const ALE::Mesh::point_type& cell) = 0;
+ /// Set entries in geometry arrays to zero.
+ void _resetGeometry(void);
+
// PRIVATE METHODS //////////////////////////////////////////////////////
private :
Modified: short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1D.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1D.cc 2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1D.cc 2006-09-25 03:00:40 UTC (rev 4600)
@@ -53,6 +53,8 @@
assert(0 != _jacobian);
assert(0 != _jacobianInv);
+ _resetGeometry();
+
// Get coordinates of cell's vertices
const ALE::Mesh::topology_type::patch_type patch = 0;
const ALE::Mesh::section_type::value_type* vertCoords =
@@ -63,15 +65,13 @@
for (int iQuadPt=0; iQuadPt < _numQuadPts; ++iQuadPt) {
// Compute coordinates of quadrature point in cell
- // x = sum[i=1,n] (Ni * xi)
- _quadPts[iQuadPt] = 0.0;
+ // x = sum[i=0,n-1] (Ni * xi)
for (int iVertex=0; iVertex < _numCorners; ++iVertex)
_quadPts[iQuadPt] +=
_basis[iQuadPt*_numCorners+iVertex]*vertCoords[iVertex];
// Compute Jacobian at quadrature point
- // J = dx/dp = sum[i=1,n] (dNi/dp * xi)
- _jacobian[iQuadPt] = 0.0;
+ // J = dx/dp = sum[i=0,n-1] (dNi/dp * xi)
for (int iVertex=0; iVertex < _numCorners; ++iVertex)
_jacobian[iQuadPt] +=
_basisDeriv[iQuadPt*_numCorners+iVertex] * vertCoords[iVertex];
Modified: short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1D.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1D.hh 2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1D.hh 2006-09-25 03:00:40 UTC (rev 4600)
@@ -65,7 +65,7 @@
// PRIVATE METHODS //////////////////////////////////////////////////////
private :
- const Quadrature& operator=(const Quadrature&); ///< Not implemented
+ const Quadrature1D& operator=(const Quadrature1D&); ///< Not implemented
}; // Quadrature1D
Added: short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din2D.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din2D.cc 2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din2D.cc 2006-09-25 03:00:40 UTC (rev 4600)
@@ -0,0 +1,115 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+// Brad T. Aagaard
+// U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+#include <portinfo>
+
+#include "Quadrature1Din2D.hh" // implementation of class methods
+
+#include <assert.h> // USES assert()
+#include <stdexcept> // USES std::runtime_error
+#include <sstream> // USES std::ostringstream
+
+// ----------------------------------------------------------------------
+// Constructor
+pylith::feassemble::Quadrature1Din2D::Quadrature1Din2D(void)
+{ // constructor
+} // constructor
+
+// ----------------------------------------------------------------------
+// Destructor
+pylith::feassemble::Quadrature1Din2D::~Quadrature1Din2D(void)
+{ // destructor
+} // destructor
+
+// ----------------------------------------------------------------------
+// Copy constructor.
+pylith::feassemble::Quadrature1Din2D::Quadrature1Din2D(const Quadrature1Din2D& q) :
+ Quadrature(q)
+{ // copy constructor
+} // copy constructor
+
+// ----------------------------------------------------------------------
+// Compute geometric quantities for a cell.
+void
+pylith::feassemble::Quadrature1Din2D::_computeGeometry(
+ const ALE::Obj<ALE::Mesh::section_type>& coordinates,
+ const ALE::Mesh::point_type& cell)
+{ // _computeGeometry
+ assert(1 == _cellDim);
+ assert(2 == _spaceDim);
+ assert(0 != _basisDeriv);
+ assert(0 != _quadPtsRef);
+ assert(0 != _quadPts);
+ assert(0 != _quadWts);
+ assert(0 != _jacobian);
+ assert(0 != _jacobianInv);
+
+ _resetGeometry();
+
+ // Get coordinates of cell's vertices
+ const ALE::Mesh::topology_type::patch_type patch = 0;
+ const ALE::Mesh::section_type::value_type* vertCoords =
+ coordinates->restrict(patch, cell);
+ //assert(1 == coordinates.GetFiberDimension(patch, *vertices->begin()));
+
+ // Loop over quadrature points
+ for (int iQuadPt=0; iQuadPt < _numQuadPts; ++iQuadPt) {
+
+ // Compute coordinates of quadrature point in cell
+ // x = sum[i=0,n-1] (Ni * xi)
+ // y = sum[i=0,n-1] (Ni * yi)
+ for (int iVertex=0, iB=iQuadPt*_numCorners;
+ iVertex < _numCorners;
+ ++iVertex) {
+ const double basis = _basis[iB+iVertex];
+ for (int iDim=0, iQ=iQuadPt*_spaceDim, iV=iVertex*_spaceDim;
+ iDim < _spaceDim;
+ ++iDim)
+ _quadPts[iQ+iDim] += basis * vertCoords[iV+iDim];
+ } // for
+
+ // Compute Jacobian at quadrature point
+ // J = [dx/dp dy/dp]
+ // dx/dp = sum[i=0,n-1] (dNi/dp * xi)
+ // dy/dp = sum[i=0,n-1] (dNi/dp * yi)
+ for (int iVertex=0, iB=iQuadPt*_numCorners;
+ iVertex < _numCorners;
+ ++iVertex) {
+ const double deriv = _basisDeriv[iB+iVertex];
+ for (int iDim=0, iJ=iQuadPt*_spaceDim, iV=iVertex*_spaceDim;
+ iDim < _spaceDim;
+ ++iDim)
+ _jacobian[iJ+iDim] += deriv * vertCoords[iV+iDim];
+ } // for
+
+ // Compute determinant of Jacobian at quadrature point
+ // |J| = sqrt(J transpose(J))
+ double det = 0.0;
+ for (int iDim=0, iJ=iQuadPt*_spaceDim; iDim < _spaceDim; ++iDim)
+ det += _jacobian[iJ+iDim]*_jacobian[iJ+iDim];
+ det = sqrt(det);
+ if (det < _jacobianTol) {
+ std::ostringstream msg;
+ msg << "Determinant of Jacobian (" << det << ") is below minimum\n"
+ << "permissible value (" << _jacobianTol << ")!\n";
+ throw std::runtime_error(msg.str());
+ } // for
+ _jacobianDet[iQuadPt] = det;
+
+ // Compute inverse of Jacobian at quadrature point
+ // Jinv = 1.0/[J]
+ for (int iDim=0, iJ=iQuadPt*_spaceDim; iDim < _spaceDim; ++iDim)
+ _jacobianInv[iJ+iDim] = 1.0/_jacobian[iJ+iDim];
+ } // for
+} // _computeGeometry
+
+// End of file
Added: short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din2D.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din2D.hh 2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din2D.hh 2006-09-25 03:00:40 UTC (rev 4600)
@@ -0,0 +1,77 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+// Brad T. Aagaard
+// U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+/**
+ * @file pylith/feassemble/Quadrature1Din2D.hh
+ *
+ * @brief Quadrature for 1-D finite-elements in 2-D space.
+ */
+
+#if !defined(pylith_feassemble_quadrature1din2d_hh)
+#define pylith_feassemble_quadrature1din2d_hh
+
+#include "Quadrature.hh"
+
+namespace pylith {
+ namespace feassemble {
+ class Quadrature1Din2D;
+ class TestQuadrature1Din2D;
+ } // feassemble
+} // pylith
+
+class pylith::feassemble::Quadrature1Din2D : public Quadrature
+{ // Quadrature1D
+ friend class TestQuadrature1Din2D; // unit testing
+
+// PUBLIC MEMBERS ///////////////////////////////////////////////////////
+public :
+
+ /// Constructor
+ Quadrature1Din2D(void);
+
+ /// Destructor
+ virtual ~Quadrature1Din2D(void);
+
+ /// Create a copy of this object.
+ virtual
+ Quadrature* clone(void) const;
+
+// PROTECTED METHODS ////////////////////////////////////////////////////
+protected :
+
+ /** Copy constructor.
+ *
+ * @param q Quadrature to copy
+ */
+ Quadrature1Din2D(const Quadrature1Din2D& q);
+
+ /** Compute geometric quantities for a cell.
+ *
+ * @param coordinates Section containing vertex coordinates
+ * @param cell Finite-element cell
+ */
+ void _computeGeometry(const ALE::Obj<ALE::Mesh::section_type>& coordinates,
+ const ALE::Mesh::point_type& cell);
+
+// PRIVATE METHODS //////////////////////////////////////////////////////
+private :
+
+ /// Not implemented
+ const Quadrature1Din2D& operator=(const Quadrature1Din2D&);
+
+}; // Quadrature1Din2D
+
+#include "Quadrature1Din2D.icc" // inline methods
+
+#endif // pylith_feassemble_quadrature1din2d_hh
+
+// End of file
Added: short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din2D.icc
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din2D.icc 2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din2D.icc 2006-09-25 03:00:40 UTC (rev 4600)
@@ -0,0 +1,26 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+// Brad T. Aagaard
+// U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+#if !defined(pylith_feassemble_quadrature1din2d_hh)
+#error "Quadrature1Din2D.icc must be included only from Quadrature1Din2D.hh"
+#else
+
+// Create a copy of this object.
+inline
+pylith::feassemble::Quadrature*
+pylith::feassemble::Quadrature1Din2D::clone(void) const {
+ return new Quadrature1Din2D(*this);
+} // clone
+
+#endif
+
+// End of file
Added: short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din3D.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din3D.cc 2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din3D.cc 2006-09-25 03:00:40 UTC (rev 4600)
@@ -0,0 +1,117 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+// Brad T. Aagaard
+// U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+#include <portinfo>
+
+#include "Quadrature1Din3D.hh" // implementation of class methods
+
+#include <assert.h> // USES assert()
+#include <stdexcept> // USES std::runtime_error
+#include <sstream> // USES std::ostringstream
+
+// ----------------------------------------------------------------------
+// Constructor
+pylith::feassemble::Quadrature1Din3D::Quadrature1Din3D(void)
+{ // constructor
+} // constructor
+
+// ----------------------------------------------------------------------
+// Destructor
+pylith::feassemble::Quadrature1Din3D::~Quadrature1Din3D(void)
+{ // destructor
+} // destructor
+
+// ----------------------------------------------------------------------
+// Copy constructor.
+pylith::feassemble::Quadrature1Din3D::Quadrature1Din3D(const Quadrature1Din3D& q) :
+ Quadrature(q)
+{ // copy constructor
+} // copy constructor
+
+// ----------------------------------------------------------------------
+// Compute geometric quantities for a cell.
+void
+pylith::feassemble::Quadrature1Din3D::_computeGeometry(
+ const ALE::Obj<ALE::Mesh::section_type>& coordinates,
+ const ALE::Mesh::point_type& cell)
+{ // _computeGeometry
+ assert(1 == _cellDim);
+ assert(3 == _spaceDim);
+ assert(0 != _basisDeriv);
+ assert(0 != _quadPtsRef);
+ assert(0 != _quadPts);
+ assert(0 != _quadWts);
+ assert(0 != _jacobian);
+ assert(0 != _jacobianInv);
+
+ _resetGeometry();
+
+ // Get coordinates of cell's vertices
+ const ALE::Mesh::topology_type::patch_type patch = 0;
+ const ALE::Mesh::section_type::value_type* vertCoords =
+ coordinates->restrict(patch, cell);
+ //assert(3 == coordinates.GetFiberDimension(patch, *vertices->begin()));
+
+ // Loop over quadrature points
+ for (int iQuadPt=0; iQuadPt < _numQuadPts; ++iQuadPt) {
+
+ // Compute coordinates of quadrature point in cell
+ // x = sum[i=0,n-1] (Ni * xi)
+ // y = sum[i=0,n-1] (Ni * yi)
+ // z = sum[i=0,n-1] (Ni * zi)
+ for (int iVertex=0, iB=iQuadPt*_numCorners;
+ iVertex < _numCorners;
+ ++iVertex) {
+ const double basis = _basis[iB+iVertex];
+ for (int iDim=0, iQ=iQuadPt*_spaceDim, iV=iVertex*_spaceDim;
+ iDim < _spaceDim;
+ ++iDim)
+ _quadPts[iQ+iDim] += basis * vertCoords[iV+iDim];
+ } // for
+
+ // Compute Jacobian at quadrature point
+ // J = [dx/dp dy/dp dz/dp]
+ // dx/dp = sum[i=0,n-1] (dNi/dp * xi)
+ // dy/dp = sum[i=0,n-1] (dNi/dp * yi)
+ // dz/dp = sum[i=0,n-1] (dNi/dp * zi)
+ for (int iVertex=0, iB=iQuadPt*_numCorners;
+ iVertex < _numCorners;
+ ++iVertex) {
+ const double deriv = _basisDeriv[iB+iVertex];
+ for (int iDim=0, iJ=iQuadPt*_spaceDim, iV=iVertex*_spaceDim;
+ iDim < _spaceDim;
+ ++iDim)
+ _jacobian[iJ+iDim] += deriv * vertCoords[iV+iDim];
+ } // for
+
+ // Compute determinant of Jacobian at quadrature point
+ // |J| = sqrt(J transpose(J))
+ double det = 0.0;
+ for (int iDim=0, iJ=iQuadPt*_spaceDim; iDim < _spaceDim; ++iDim)
+ det += _jacobian[iJ+iDim]*_jacobian[iJ+iDim];
+ det = sqrt(det);
+ if (det < _jacobianTol) {
+ std::ostringstream msg;
+ msg << "Determinant of Jacobian (" << det << ") is below minimum\n"
+ << "permissible value (" << _jacobianTol << ")!\n";
+ throw std::runtime_error(msg.str());
+ } // for
+ _jacobianDet[iQuadPt] = det;
+
+ // Compute inverse of Jacobian at quadrature point
+ // Jinv = 1.0/[J]
+ for (int iDim=0, iJ=iQuadPt*_spaceDim; iDim < _spaceDim; ++iDim)
+ _jacobianInv[iJ+iDim] = 1.0/_jacobian[iJ+iDim];
+ } // for
+} // _computeGeometry
+
+// End of file
Added: short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din3D.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din3D.hh 2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din3D.hh 2006-09-25 03:00:40 UTC (rev 4600)
@@ -0,0 +1,77 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+// Brad T. Aagaard
+// U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+/**
+ * @file pylith/feassemble/Quadrature1Din3D.hh
+ *
+ * @brief Quadrature for 1-D finite-elements in 3-D space.
+ */
+
+#if !defined(pylith_feassemble_quadrature1din3d_hh)
+#define pylith_feassemble_quadrature1din3d_hh
+
+#include "Quadrature.hh"
+
+namespace pylith {
+ namespace feassemble {
+ class Quadrature1Din3D;
+ class TestQuadrature1Din3D;
+ } // feassemble
+} // pylith
+
+class pylith::feassemble::Quadrature1Din3D : public Quadrature
+{ // Quadrature1D
+ friend class TestQuadrature1Din3D; // unit testing
+
+// PUBLIC MEMBERS ///////////////////////////////////////////////////////
+public :
+
+ /// Constructor
+ Quadrature1Din3D(void);
+
+ /// Destructor
+ virtual ~Quadrature1Din3D(void);
+
+ /// Create a copy of this object.
+ virtual
+ Quadrature* clone(void) const;
+
+// PROTECTED METHODS ////////////////////////////////////////////////////
+protected :
+
+ /** Copy constructor.
+ *
+ * @param q Quadrature to copy
+ */
+ Quadrature1Din3D(const Quadrature1Din3D& q);
+
+ /** Compute geometric quantities for a cell.
+ *
+ * @param coordinates Section containing vertex coordinates
+ * @param cell Finite-element cell
+ */
+ void _computeGeometry(const ALE::Obj<ALE::Mesh::section_type>& coordinates,
+ const ALE::Mesh::point_type& cell);
+
+// PRIVATE METHODS //////////////////////////////////////////////////////
+private :
+
+ /// Not implemented
+ const Quadrature1Din3D& operator=(const Quadrature1Din3D&);
+
+}; // Quadrature1Din3D
+
+#include "Quadrature1Din3D.icc" // inline methods
+
+#endif // pylith_feassemble_quadrature1din3d_hh
+
+// End of file
Added: short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din3D.icc
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din3D.icc 2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din3D.icc 2006-09-25 03:00:40 UTC (rev 4600)
@@ -0,0 +1,26 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+// Brad T. Aagaard
+// U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+#if !defined(pylith_feassemble_quadrature1din3d_hh)
+#error "Quadrature1Din3D.icc must be included only from Quadrature1Din3D.hh"
+#else
+
+// Create a copy of this object.
+inline
+pylith::feassemble::Quadrature*
+pylith::feassemble::Quadrature1Din3D::clone(void) const {
+ return new Quadrature1Din3D(*this);
+} // clone
+
+#endif
+
+// End of file
Added: short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2D.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2D.cc 2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2D.cc 2006-09-25 03:00:40 UTC (rev 4600)
@@ -0,0 +1,127 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+// Brad T. Aagaard
+// U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+#include <portinfo>
+
+#include "Quadrature2D.hh" // implementation of class methods
+
+#include <assert.h> // USES assert()
+#include <stdexcept> // USES std::runtime_error
+#include <sstream> // USES std::ostringstream
+
+// ----------------------------------------------------------------------
+// Constructor
+pylith::feassemble::Quadrature2D::Quadrature2D(void)
+{ // constructor
+} // constructor
+
+// ----------------------------------------------------------------------
+// Destructor
+pylith::feassemble::Quadrature2D::~Quadrature2D(void)
+{ // destructor
+} // destructor
+
+// ----------------------------------------------------------------------
+// Copy constructor.
+pylith::feassemble::Quadrature2D::Quadrature2D(const Quadrature2D& q) :
+ Quadrature(q)
+{ // copy constructor
+} // copy constructor
+
+// ----------------------------------------------------------------------
+// Compute geometric quantities for a cell.
+void
+pylith::feassemble::Quadrature2D::_computeGeometry(
+ const ALE::Obj<ALE::Mesh::section_type>& coordinates,
+ const ALE::Mesh::point_type& cell)
+{ // _computeGeometry
+ assert(2 == _cellDim);
+ assert(2 == _spaceDim);
+ assert(0 != _basisDeriv);
+ assert(0 != _quadPtsRef);
+ assert(0 != _quadPts);
+ assert(0 != _quadWts);
+ assert(0 != _jacobian);
+ assert(0 != _jacobianInv);
+
+ _resetGeometry();
+
+ // Get coordinates of cell's vertices
+ const ALE::Mesh::topology_type::patch_type patch = 0;
+ const ALE::Mesh::section_type::value_type* vertCoords =
+ coordinates->restrict(patch, cell);
+ //assert(3 == coordinates.GetFiberDimension(patch, *vertices->begin()));
+
+ // Loop over quadrature points
+ for (int iQuadPt=0; iQuadPt < _numQuadPts; ++iQuadPt) {
+
+ // Compute coordinates of quadrature point in cell
+ // x = sum[i=0,n-1] (Ni * xi)
+ // y = sum[i=0,n-1] (Ni * yi)
+ for (int iVertex=0, iB=iQuadPt*_numCorners;
+ iVertex < _numCorners;
+ ++iVertex) {
+ const double basis = _basis[iB+iVertex];
+ for (int iDim=0, iQ=iQuadPt*_spaceDim, iV=iVertex*_spaceDim;
+ iDim < _spaceDim;
+ ++iDim)
+ _quadPts[iQ+iDim] += basis * vertCoords[iV+iDim];
+ } // for
+
+ // Compute Jacobian at quadrature point
+ // J = [dx/dp dy/dp]
+ // [dx/dq dy/dq]
+ // dx/dp = sum[i=0,n-1] (dNi/dp * xi)
+ // dy/dp = sum[i=0,n-1] (dNi/dp * yi)
+ // dx/dq = sum[i=0,n-1] (dNi/dq * xi)
+ // dy/dq = sum[i=0,n-1] (dNi/dq * yi)
+ for (int iVertex=0;
+ iVertex < _numCorners;
+ ++iVertex)
+ for (int iRow=0,
+ iB=iQuadPt*_numCorners*_spaceDim+iVertex*_spaceDim;
+ iRow < _cellDim;
+ ++iRow) {
+ const double deriv = _basisDeriv[iB+iRow];
+ for (int iCol=0, iJ=iQuadPt*_cellDim*_spaceDim + iRow*_spaceDim;
+ iCol < _spaceDim; ++iCol)
+ _jacobian[iJ + iCol] += deriv * vertCoords[iVertex*_spaceDim+iCol];
+ } // for
+
+ // Compute determinant of Jacobian at quadrature point
+ // |J| = j00*j11-j01*j10
+ const int iJ = iQuadPt*_cellDim*_spaceDim;
+ const int i00 = iJ + 0*_spaceDim + 0;
+ const int i11 = iJ + 1*_spaceDim + 1;
+ const int i01 = iJ + 0*_spaceDim + 1;
+ const int i10 = iJ + 1*_spaceDim + 0;
+ const double det =
+ _jacobian[i00]*_jacobian[i11] - _jacobian[i01]*_jacobian[i10];
+ if (det < _jacobianTol) {
+ std::ostringstream msg;
+ msg << "Determinant of Jacobian (" << det << ") is below minimum\n"
+ << "permissible value (" << _jacobianTol << ")!\n";
+ throw std::runtime_error(msg.str());
+ } // for
+ _jacobianDet[iQuadPt] = det;
+
+ // Compute inverse of Jacobian at quadrature point
+ // Jinv = 1/det*[ j11 -j01]
+ // [-j10 j00]
+ _jacobianInv[i00] = _jacobian[i11] / det;
+ _jacobianInv[i01] = -_jacobian[i01] / det;
+ _jacobianInv[i10] = -_jacobian[i10] / det;
+ _jacobianInv[i11] = _jacobian[i00] / det;
+ } // for
+} // _computeGeometry
+
+// End of file
Added: short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2D.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2D.hh 2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2D.hh 2006-09-25 03:00:40 UTC (rev 4600)
@@ -0,0 +1,76 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+// Brad T. Aagaard
+// U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+/**
+ * @file pylith/feassemble/Quadrature2D.hh
+ *
+ * @brief Quadrature for 2-D finite-elements in 2-D space.
+ */
+
+#if !defined(pylith_feassemble_quadrature2d_hh)
+#define pylith_feassemble_quadrature2d_hh
+
+#include "Quadrature.hh"
+
+namespace pylith {
+ namespace feassemble {
+ class Quadrature2D;
+ class TestQuadrature2D;
+ } // feassemble
+} // pylith
+
+class pylith::feassemble::Quadrature2D : public Quadrature
+{ // Quadrature1D
+ friend class TestQuadrature2D; // unit testing
+
+// PUBLIC MEMBERS ///////////////////////////////////////////////////////
+public :
+
+ /// Constructor
+ Quadrature2D(void);
+
+ /// Destructor
+ virtual ~Quadrature2D(void);
+
+ /// Create a copy of this object.
+ virtual
+ Quadrature* clone(void) const;
+
+// PROTECTED METHODS ////////////////////////////////////////////////////
+protected :
+
+ /** Copy constructor.
+ *
+ * @param q Quadrature to copy
+ */
+ Quadrature2D(const Quadrature2D& q);
+
+ /** Compute geometric quantities for a cell.
+ *
+ * @param coordinates Section containing vertex coordinates
+ * @param cell Finite-element cell
+ */
+ void _computeGeometry(const ALE::Obj<ALE::Mesh::section_type>& coordinates,
+ const ALE::Mesh::point_type& cell);
+
+// PRIVATE METHODS //////////////////////////////////////////////////////
+private :
+
+ const Quadrature2D& operator=(const Quadrature2D&); ///< Not implemented
+
+}; // Quadrature2D
+
+#include "Quadrature2D.icc" // inline methods
+
+#endif // pylith_feassemble_quadrature2d_hh
+
+// End of file
Added: short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2D.icc
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2D.icc 2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2D.icc 2006-09-25 03:00:40 UTC (rev 4600)
@@ -0,0 +1,26 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+// Brad T. Aagaard
+// U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+#if !defined(pylith_feassemble_quadrature2d_hh)
+#error "Quadrature2D.icc must be included only from Quadrature2D.hh"
+#else
+
+// Create a copy of this object.
+inline
+pylith::feassemble::Quadrature*
+pylith::feassemble::Quadrature2D::clone(void) const {
+ return new Quadrature2D(*this);
+} // clone
+
+#endif
+
+// End of file
Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/Makefile.am
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/Makefile.am 2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/Makefile.am 2006-09-25 03:00:40 UTC (rev 4600)
@@ -20,17 +20,33 @@
testfeassemble_SOURCES = \
TestQuadrature.cc \
TestQuadrature1D.cc \
+ TestQuadrature1Din2D.cc \
+ TestQuadrature2D.cc \
test_feassemble.cc \
data/QuadratureData.cc \
data/QuadratureData1DLinear.cc \
- data/QuadratureData1DQuadratic.cc
+ data/QuadratureData1DQuadratic.cc \
+ data/QuadratureData1Din2DLinear.cc \
+ data/QuadratureData1Din2DQuadratic.cc \
+ data/QuadratureData1Din3DLinear.cc \
+ data/QuadratureData1Din3DQuadratic.cc \
+ data/QuadratureData2DLinear.cc \
+ data/QuadratureData2DQuadratic.cc
noinst_HEADERS = \
TestQuadrature.hh \
- TestQuadrature1D.hh
+ TestQuadrature1D.hh \
+ TestQuadrature1Din2D.hh \
+ TestQuadrature2D.hh \
data/QuadratureData.hh \
data/QuadratureData1DLinear.hh \
- data/QuadratureData1DQuadratic.hh
+ data/QuadratureData1DQuadratic.hh \
+ data/QuadratureData1Din2DLinear.hh \
+ data/QuadratureData1Din2DQuadratic.hh \
+ data/QuadratureData1Din3DLinear.hh \
+ data/QuadratureData1Din3DQuadratic.hh \
+ data/QuadratureData2DLinear.hh \
+ data/QuadratureData2DQuadratic.hh
testfeassemble_LDFLAGS = $(PETSC_LIB)
Added: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature1Din2D.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature1Din2D.cc 2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature1Din2D.cc 2006-09-25 03:00:40 UTC (rev 4600)
@@ -0,0 +1,55 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+// Brad T. Aagaard
+// U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "TestQuadrature1Din2D.hh" // Implementation of class methods
+
+#include "pylith/feassemble/Quadrature1Din2D.hh"
+
+#include "data/QuadratureData1Din2DLinear.hh"
+#include "data/QuadratureData1Din2DQuadratic.hh"
+
+// ----------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION( pylith::feassemble::TestQuadrature1Din2D );
+
+// ----------------------------------------------------------------------
+// Test constructor
+void
+pylith::feassemble::TestQuadrature1Din2D::testConstructor(void)
+{ // testConstructor
+ Quadrature1Din2D quadrature;
+} // testConstructor
+
+// ----------------------------------------------------------------------
+// Test computeGeometry() w/linear basis fns
+void
+pylith::feassemble::TestQuadrature1Din2D::testLinear(void)
+{ // testLinear
+ Quadrature1Din2D q;
+ QuadratureData1Din2DLinear data;
+
+ _testComputeGeometry(&q, data);
+} // testLinear
+
+// ----------------------------------------------------------------------
+// Test computeGeometry() w/quadratic basis fns
+void
+pylith::feassemble::TestQuadrature1Din2D::testQuadratic(void)
+{ // testQuadratic
+ Quadrature1Din2D q;
+ QuadratureData1Din2DQuadratic data;
+
+ _testComputeGeometry(&q, data);
+} // testQuadratic
+
+// End of file
Added: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature1Din2D.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature1Din2D.hh 2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature1Din2D.hh 2006-09-25 03:00:40 UTC (rev 4600)
@@ -0,0 +1,60 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+// Brad T. Aagaard
+// U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/**
+ * @file unittests/libtests/feassemble/TestQuadrature1Din2D.hh
+ *
+ * @brief C++ TestQuadrature1Din2D object
+ *
+ * C++ unit testing for Quadrature1Din2D.
+ */
+
+#if !defined(pylith_feassemble_testquadrature1din2d_hh)
+#define pylith_feassemble_testquadrature1din2d_hh
+
+#include "TestQuadrature.hh"
+
+/// Namespace for spatialdata package
+namespace pylith {
+ namespace feassemble {
+ class TestQuadrature1Din2D;
+ } // feassemble
+} // pylith
+
+/// C++ unit testing for Quadrature1Din2D
+class pylith::feassemble::TestQuadrature1Din2D : public TestQuadrature
+{ // class TestQuadrature1D
+
+ // CPPUNIT TEST SUITE /////////////////////////////////////////////////
+ CPPUNIT_TEST_SUITE( TestQuadrature1Din2D );
+ CPPUNIT_TEST( testConstructor );
+ CPPUNIT_TEST( testLinear );
+ CPPUNIT_TEST( testQuadratic );
+ CPPUNIT_TEST_SUITE_END();
+
+ // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+ /// Test constructor
+ void testConstructor(void);
+
+ /// Test initialize() & computeGeometry() w/linear basis fns
+ void testLinear(void);
+
+ /// Test initialize() & computeGeometry() w/quadratic basis fns
+ void testQuadratic(void);
+
+}; // class TestQuadrature
+
+#endif // pylith_feassemble_testquadrature1din2d_hh
+
+// End of file
Added: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature1Din3D.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature1Din3D.cc 2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature1Din3D.cc 2006-09-25 03:00:40 UTC (rev 4600)
@@ -0,0 +1,55 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+// Brad T. Aagaard
+// U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "TestQuadrature1Din3D.hh" // Implementation of class methods
+
+#include "pylith/feassemble/Quadrature1Din3D.hh"
+
+#include "data/QuadratureData1Din3DLinear.hh"
+#include "data/QuadratureData1Din3DQuadratic.hh"
+
+// ----------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION( pylith::feassemble::TestQuadrature1Din3D );
+
+// ----------------------------------------------------------------------
+// Test constructor
+void
+pylith::feassemble::TestQuadrature1Din3D::testConstructor(void)
+{ // testConstructor
+ Quadrature1Din3D quadrature;
+} // testConstructor
+
+// ----------------------------------------------------------------------
+// Test computeGeometry() w/linear basis fns
+void
+pylith::feassemble::TestQuadrature1Din3D::testLinear(void)
+{ // testLinear
+ Quadrature1Din3D q;
+ QuadratureData1Din3DLinear data;
+
+ _testComputeGeometry(&q, data);
+} // testLinear
+
+// ----------------------------------------------------------------------
+// Test computeGeometry() w/quadratic basis fns
+void
+pylith::feassemble::TestQuadrature1Din3D::testQuadratic(void)
+{ // testQuadratic
+ Quadrature1Din3D q;
+ QuadratureData1Din3DQuadratic data;
+
+ _testComputeGeometry(&q, data);
+} // testQuadratic
+
+// End of file
Added: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature1Din3D.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature1Din3D.hh 2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature1Din3D.hh 2006-09-25 03:00:40 UTC (rev 4600)
@@ -0,0 +1,60 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+// Brad T. Aagaard
+// U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/**
+ * @file unittests/libtests/feassemble/TestQuadrature1Din3D.hh
+ *
+ * @brief C++ TestQuadrature1Din3D object
+ *
+ * C++ unit testing for Quadrature1Din3D.
+ */
+
+#if !defined(pylith_feassemble_testquadrature1din3d_hh)
+#define pylith_feassemble_testquadrature1din3d_hh
+
+#include "TestQuadrature.hh"
+
+/// Namespace for spatialdata package
+namespace pylith {
+ namespace feassemble {
+ class TestQuadrature1Din3D;
+ } // feassemble
+} // pylith
+
+/// C++ unit testing for Quadrature1Din3D
+class pylith::feassemble::TestQuadrature1Din3D : public TestQuadrature
+{ // class TestQuadrature1D
+
+ // CPPUNIT TEST SUITE /////////////////////////////////////////////////
+ CPPUNIT_TEST_SUITE( TestQuadrature1Din3D );
+ CPPUNIT_TEST( testConstructor );
+ CPPUNIT_TEST( testLinear );
+ CPPUNIT_TEST( testQuadratic );
+ CPPUNIT_TEST_SUITE_END();
+
+ // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+ /// Test constructor
+ void testConstructor(void);
+
+ /// Test initialize() & computeGeometry() w/linear basis fns
+ void testLinear(void);
+
+ /// Test initialize() & computeGeometry() w/quadratic basis fns
+ void testQuadratic(void);
+
+}; // class TestQuadrature
+
+#endif // pylith_feassemble_testquadrature1din3d_hh
+
+// End of file
Added: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature2D.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature2D.cc 2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature2D.cc 2006-09-25 03:00:40 UTC (rev 4600)
@@ -0,0 +1,55 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+// Brad T. Aagaard
+// U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "TestQuadrature2D.hh" // Implementation of class methods
+
+#include "pylith/feassemble/Quadrature2D.hh"
+
+#include "data/QuadratureData2DLinear.hh"
+#include "data/QuadratureData2DQuadratic.hh"
+
+// ----------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION( pylith::feassemble::TestQuadrature2D );
+
+// ----------------------------------------------------------------------
+// Test constructor
+void
+pylith::feassemble::TestQuadrature2D::testConstructor(void)
+{ // testConstructor
+ Quadrature2D quadrature;
+} // testConstructor
+
+// ----------------------------------------------------------------------
+// Test computeGeometry() w/linear basis fns
+void
+pylith::feassemble::TestQuadrature2D::testLinear(void)
+{ // testLinear
+ Quadrature2D q;
+ QuadratureData2DLinear data;
+
+ _testComputeGeometry(&q, data);
+} // testLinear
+
+// ----------------------------------------------------------------------
+// Test computeGeometry() w/quadratic basis fns
+void
+pylith::feassemble::TestQuadrature2D::testQuadratic(void)
+{ // testQuadratic
+ Quadrature2D q;
+ QuadratureData2DQuadratic data;
+
+ _testComputeGeometry(&q, data);
+} // testQuadratic
+
+// End of file
Added: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature2D.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature2D.hh 2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature2D.hh 2006-09-25 03:00:40 UTC (rev 4600)
@@ -0,0 +1,60 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+// Brad T. Aagaard
+// U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/**
+ * @file unittests/libtests/feassemble/TestQuadrature2D.hh
+ *
+ * @brief C++ TestQuadrature2D object
+ *
+ * C++ unit testing for Quadrature2D.
+ */
+
+#if !defined(pylith_feassemble_testquadrature2d_hh)
+#define pylith_feassemble_testquadrature2d_hh
+
+#include "TestQuadrature.hh"
+
+/// Namespace for spatialdata package
+namespace pylith {
+ namespace feassemble {
+ class TestQuadrature2D;
+ } // feassemble
+} // pylith
+
+/// C++ unit testing for Quadrature2D
+class pylith::feassemble::TestQuadrature2D : public TestQuadrature
+{ // class TestQuadrature2D
+
+ // CPPUNIT TEST SUITE /////////////////////////////////////////////////
+ CPPUNIT_TEST_SUITE( TestQuadrature2D );
+ CPPUNIT_TEST( testConstructor );
+ CPPUNIT_TEST( testLinear );
+ CPPUNIT_TEST( testQuadratic );
+ CPPUNIT_TEST_SUITE_END();
+
+ // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+ /// Test constructor
+ void testConstructor(void);
+
+ /// Test initialize() & computeGeometry() w/linear basis fns
+ void testLinear(void);
+
+ /// Test initialize() & computeGeometry() w/quadratic basis fns
+ void testQuadratic(void);
+
+}; // class TestQuadrature
+
+#endif // pylith_feassemble_testquadrature2d_hh
+
+// End of file
Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature1DLinear.py
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature1DLinear.py 2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature1DLinear.py 2006-09-25 03:00:40 UTC (rev 4600)
@@ -24,13 +24,13 @@
return 0.5*(1.0-p)
def N0p(p):
- return -0.5 * numpy.ones(p.shape)
+ return -0.5
def N1(p):
return 0.5*(1.0+p)
def N1p(p):
- return +0.5 * numpy.ones(p.shape)
+ return +0.5
# ----------------------------------------------------------------------
@@ -65,37 +65,30 @@
# PRIVATE METHODS ////////////////////////////////////////////////////
- def _calculate(self):
+ def _calculateBasis(self):
"""
- Calculate basis functions, derivatives, and Jacobian information
- at quadrature points.
+ Calculate basis functions and their derivatives at quadrature points.
"""
- # Basis functions at quadrature points
- n0 = N0(self.quadPtsRef)
- n1 = N1(self.quadPtsRef)
- basis = numpy.array([n0, n1]).transpose()
- self.basis = basis.reshape( (self.numQuadPts, self.numVertices) )
+ self.basis = numpy.zeros( (self.numQuadPts, self.numCorners),
+ dtype=numpy.Float64)
+ self.basisDeriv = numpy.zeros( (self.numQuadPts,
+ self.numCorners, self.cellDim),
+ dtype=numpy.Float64)
- # Derivatives of basis functions at quadrature points
- n0p = N0p(self.quadPtsRef)
- n1p = N1p(self.quadPtsRef)
- deriv = numpy.array([n0p, n1p]).transpose()
- self.basisDeriv = deriv.reshape( (self.numQuadPts, self.numVertices) )
+ iQuad = 0
+ for q in self.quadPtsRef:
+ # Basis functions at quadrature points
+ basis = numpy.array([N0(q), N1(q)], dtype=numpy.Float64)
+ self.basis[iQuad,:] = basis.reshape( (self.numCorners,) )
- # Jacobian at quadrature points
- self.jacobian = numpy.dot(self.basisDeriv, self.vertices)
+ # Derivatives of basis functions at quadrature points
+ deriv = numpy.array([[N0p(q)], [N1p(q)]], dtype=numpy.Float64)
+ self.basisDeriv[iQuad,:] = deriv.reshape((self.numCorners, self.cellDim))
- # Determinant of Jacobian at quadrature points
- self.jacobianDet = self.jacobian
-
- # Inverse of Jacobian at quadrature points
- self.jacobianInv = 1.0 / self.jacobian
-
- # Quadrature points in cell
- self.quadPts = numpy.dot(self.basis, self.vertices)
+ iQuad += 1
return
-
+
# MAIN /////////////////////////////////////////////////////////////////
if __name__ == "__main__":
Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature1DQuadratic.py
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature1DQuadratic.py 2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature1DQuadratic.py 2006-09-25 03:00:40 UTC (rev 4600)
@@ -75,39 +75,31 @@
# PRIVATE METHODS ////////////////////////////////////////////////////
- def _calculate(self):
+ def _calculateBasis(self):
"""
- Calculate basis functions, derivatives, and Jacobian information
- at quadrature points.
+ Calculate basis functions and their derivatives at quadrature points.
"""
- # Basis functions at quadrature points
- n0 = N0(self.quadPtsRef)
- n1 = N1(self.quadPtsRef)
- n2 = N2(self.quadPtsRef)
- basis = numpy.array([n0, n1, n2]).transpose()
- self.basis = basis.reshape( (self.numQuadPts, self.numVertices) )
+ self.basis = numpy.zeros( (self.numQuadPts, self.numCorners),
+ dtype=numpy.Float64)
+ self.basisDeriv = numpy.zeros( (self.numQuadPts,
+ self.numCorners, self.cellDim),
+ dtype=numpy.Float64)
- # Derivatives of basis functions at quadrature points
- n0p = N0p(self.quadPtsRef)
- n1p = N1p(self.quadPtsRef)
- n2p = N2p(self.quadPtsRef)
- deriv = numpy.array([n0p, n1p, n2p]).transpose()
- self.basisDeriv = deriv.reshape( (self.numQuadPts, self.numVertices) )
+ iQuad = 0
+ for q in self.quadPtsRef:
+ # Basis functions at quadrature points
+ basis = numpy.array([N0(q), N1(q), N2(q)], dtype=numpy.Float64)
+ self.basis[iQuad] = basis.reshape( (self.numCorners,) )
- # Jacobian at quadrature points
- self.jacobian = numpy.dot(self.basisDeriv, self.vertices)
+ # Derivatives of basis functions at quadrature points
+ deriv = numpy.array([[N0p(q)], [N1p(q)], [N2p(q)]],
+ dtype=numpy.Float64)
+ self.basisDeriv[iQuad] = deriv.reshape((self.numCorners, self.cellDim))
- # Determinant of Jacobian at quadrature points
- self.jacobianDet = self.jacobian
-
- # Inverse of Jacobian at quadrature points
- self.jacobianInv = 1.0 / self.jacobian
-
- # Quadrature points in cell
- self.quadPts = numpy.dot(self.basis, self.vertices)
+ iQuad += 1
return
-
+
# MAIN /////////////////////////////////////////////////////////////////
if __name__ == "__main__":
Added: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature1Din2DLinear.py
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature1Din2DLinear.py 2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature1Din2DLinear.py 2006-09-25 03:00:40 UTC (rev 4600)
@@ -0,0 +1,59 @@
+#!/usr/bin/env python
+#
+# ----------------------------------------------------------------------
+#
+# Brad T. Aagaard
+# U.S. Geological Survey
+#
+# <LicenseText>
+#
+# ----------------------------------------------------------------------
+#
+
+## @file unittests/libtests/feassemble/data/Quadrature1Din2DLinear.py
+
+## @brief Python application for generating C++ data files for testing
+## C++ Quadrature1Din2D object w/linear basis functions.
+
+from Quadrature1DLinear import *
+
+import numpy
+
+# ----------------------------------------------------------------------
+
+# Quadrature1Din2DLinear class
+class Quadrature1Din2DLinear(Quadrature1DLinear):
+ """
+ Python application for generating C++ data files for testing C++
+ Quadrature1Din2D object w/linear basis functions.
+ """
+
+ # PUBLIC METHODS /////////////////////////////////////////////////////
+
+ def __init__(self, name="quadrature1din2dlinear"):
+ """
+ Constructor.
+ """
+ Quadrature1DLinear.__init__(self, name)
+
+ self.numVertices = 2
+ self.spaceDim = 2
+ self.numCells = 1
+ self.cellDim = 1
+ self.numCorners = 2
+ self.numQuadPts = 1
+
+ self.vertices = numpy.array( [[-0.2, -0.5], [0.7, 0.3]],
+ dtype=numpy.Float64)
+ self.cells = numpy.array( [[0, 1]], dtype=numpy.Int32)
+ return
+
+
+# MAIN /////////////////////////////////////////////////////////////////
+if __name__ == "__main__":
+
+ app = Quadrature1Din2DLinear()
+ app.run()
+
+
+# End of file
Added: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature1Din2DQuadratic.py
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature1Din2DQuadratic.py 2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature1Din2DQuadratic.py 2006-09-25 03:00:40 UTC (rev 4600)
@@ -0,0 +1,60 @@
+#!/usr/bin/env python
+#
+# ----------------------------------------------------------------------
+#
+# Brad T. Aagaard
+# U.S. Geological Survey
+#
+# <LicenseText>
+#
+# ----------------------------------------------------------------------
+#
+
+## @file unittests/libtests/feassemble/data/Quadrature1Din2DQuadratic.py
+
+## @brief Python application for generating C++ data files for testing
+## C++ Quadrature1Din2D object w/quadratic basis functions.
+
+from Quadrature1DQuadratic import *
+
+import numpy
+
+# ----------------------------------------------------------------------
+
+# Quadrature1Din2DQuadratic class
+class Quadrature1Din2DQuadratic(Quadrature1DQuadratic):
+ """
+ Python application for generating C++ data files for testing C++
+ Quadrature1Din2D object w/quadratic basis functions.
+ """
+
+ # PUBLIC METHODS /////////////////////////////////////////////////////
+
+ def __init__(self, name="quadrature1din2dquadratic"):
+ """
+ Constructor.
+ """
+ Quadrature1DQuadratic.__init__(self, name)
+
+ self.numVertices = 3
+ self.spaceDim = 2
+ self.numCells = 1
+ self.cellDim = 1
+ self.numCorners = 3
+ self.numQuadPts = 2
+
+ self.vertices = numpy.array( [[-0.2, -0.5], [0.3, -0.2], [0.7, 0.3]],
+ dtype=numpy.Float64)
+ self.cells = numpy.array( [[0, 1, 2]], dtype=numpy.Int32)
+
+ return
+
+
+# MAIN /////////////////////////////////////////////////////////////////
+if __name__ == "__main__":
+
+ app = Quadrature1Din2DQuadratic()
+ app.run()
+
+
+# End of file
Added: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature1Din3DLinear.py
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature1Din3DLinear.py 2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature1Din3DLinear.py 2006-09-25 03:00:40 UTC (rev 4600)
@@ -0,0 +1,60 @@
+#!/usr/bin/env python
+#
+# ----------------------------------------------------------------------
+#
+# Brad T. Aagaard
+# U.S. Geological Survey
+#
+# <LicenseText>
+#
+# ----------------------------------------------------------------------
+#
+
+## @file unittests/libtests/feassemble/data/Quadrature1Din3DLinear.py
+
+## @brief Python application for generating C++ data files for testing
+## C++ Quadrature1Din3D object w/linear basis functions.
+
+from Quadrature1DLinear import *
+
+import numpy
+
+# ----------------------------------------------------------------------
+
+# Quadrature1Din3DLinear class
+class Quadrature1Din3DLinear(Quadrature1DLinear):
+ """
+ Python application for generating C++ data files for testing C++
+ Quadrature1Din3D object w/linear basis functions.
+ """
+
+ # PUBLIC METHODS /////////////////////////////////////////////////////
+
+ def __init__(self, name="quadrature1din3dlinear"):
+ """
+ Constructor.
+ """
+ Quadrature1DLinear.__init__(self, name)
+
+ self.numVertices = 2
+ self.spaceDim = 3
+ self.numCells = 1
+ self.cellDim = 1
+ self.numCorners = 2
+ self.numQuadPts = 1
+
+ self.vertices = numpy.array( [[1.0, -1.5, -2.0],
+ [-0.5, 2.0, 3.0]],
+ dtype=numpy.Float64)
+ self.cells = numpy.array( [[0, 1]], dtype=numpy.Int32)
+ return
+
+
+# MAIN /////////////////////////////////////////////////////////////////
+if __name__ == "__main__":
+
+ app = Quadrature1Din3DLinear()
+ app.run()
+
+
+# End of file
Added: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature1Din3DQuadratic.py
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature1Din3DQuadratic.py 2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature1Din3DQuadratic.py 2006-09-25 03:00:40 UTC (rev 4600)
@@ -0,0 +1,62 @@
+#!/usr/bin/env python
+#
+# ----------------------------------------------------------------------
+#
+# Brad T. Aagaard
+# U.S. Geological Survey
+#
+# <LicenseText>
+#
+# ----------------------------------------------------------------------
+#
+
+## @file unittests/libtests/feassemble/data/Quadrature1Din3DQuadratic.py
+
+## @brief Python application for generating C++ data files for testing
+## C++ Quadrature1Din3D object w/quadratic basis functions.
+
+from Quadrature1DQuadratic import *
+
+import numpy
+
+# ----------------------------------------------------------------------
+
+# Quadrature1Din3DQuadratic class
+class Quadrature1Din3DQuadratic(Quadrature1DQuadratic):
+ """
+ Python application for generating C++ data files for testing C++
+ Quadrature1Din3D object w/quadratic basis functions.
+ """
+
+ # PUBLIC METHODS /////////////////////////////////////////////////////
+
+ def __init__(self, name="quadrature1din3dquadratic"):
+ """
+ Constructor.
+ """
+ Quadrature1DQuadratic.__init__(self, name)
+
+ self.numVertices = 3
+ self.spaceDim = 3
+ self.numCells = 1
+ self.cellDim = 1
+ self.numCorners = 3
+ self.numQuadPts = 2
+
+ self.vertices = numpy.array( [[1.0, -1.5, -2.0],
+ [0.3, 0.3, 0.8],
+ [-0.5, 2.0, 3.0]],
+ dtype=numpy.Float64)
+ self.cells = numpy.array( [[0, 1, 2]], dtype=numpy.Int32)
+
+ return
+
+
+# MAIN /////////////////////////////////////////////////////////////////
+if __name__ == "__main__":
+
+ app = Quadrature1Din3DQuadratic()
+ app.run()
+
+
+# End of file
Added: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature2DLinear.py
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature2DLinear.py 2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature2DLinear.py 2006-09-25 03:00:40 UTC (rev 4600)
@@ -0,0 +1,119 @@
+#!/usr/bin/env python
+#
+# ----------------------------------------------------------------------
+#
+# Brad T. Aagaard
+# U.S. Geological Survey
+#
+# <LicenseText>
+#
+# ----------------------------------------------------------------------
+#
+
+## @file unittests/libtests/feassemble/data/Quadrature2DLinear.py
+
+## @brief Python application for generating C++ data files for testing
+## C++ Quadrature2D object w/linear basis functions.
+
+from QuadratureApp import QuadratureApp
+
+import numpy
+
+# ----------------------------------------------------------------------
+def N0(p):
+ return 1.0-p[0]-p[1]
+
+def N0p(p):
+ return -1.0
+
+def N0q(p):
+ return -1.0
+
+def N1(p):
+ return p[0]
+
+def N1p(p):
+ return 1.0
+
+def N1q(p):
+ return 0.0
+
+def N2(p):
+ return p[1]
+
+def N2p(p):
+ return 0.0
+
+def N2q(p):
+ return 1.0
+
+# ----------------------------------------------------------------------
+
+# Quadrature2DLinear class
+class Quadrature2DLinear(QuadratureApp):
+ """
+ Python application for generating C++ data files for testing C++
+ Quadrature2D object w/linear basis functions.
+ """
+
+ # PUBLIC METHODS /////////////////////////////////////////////////////
+
+ def __init__(self, name="quadrature1dlinear"):
+ """
+ Constructor.
+ """
+ QuadratureApp.__init__(self, name)
+
+ self.numVertices = 3
+ self.spaceDim = 2
+ self.numCells = 1
+ self.cellDim = 2
+ self.numCorners = 3
+ self.numQuadPts = 1
+
+ self.quadPtsRef = numpy.array( [[1.0/3.0, 1.0/3.0]], dtype=numpy.Float64)
+ self.quadWts = numpy.array([0.5], dtype=numpy.Float64)
+ self.vertices = numpy.array( [[0.2, -0.4],
+ [0.3, 0.5],
+ [-1.0, -0.2]], dtype=numpy.Float64)
+ self.cells = numpy.array( [[0, 1, 2]], dtype=numpy.Int32)
+ return
+
+
+ # PRIVATE METHODS ////////////////////////////////////////////////////
+
+ def _calculateBasis(self):
+ """
+ Calculate basis functions and their derivatives at quadrature points.
+ """
+
+ self.basis = numpy.zeros( (self.numQuadPts, self.numCorners),
+ dtype=numpy.Float64)
+ self.basisDeriv = numpy.zeros( (self.numQuadPts,
+ self.numCorners, self.cellDim),
+ dtype=numpy.Float64)
+
+ iQuad = 0
+ for q in self.quadPtsRef:
+ # Basis functions at quadrature points
+ basis = numpy.array([N0(q), N1(q), N2(q)], dtype=numpy.Float64)
+ self.basis[iQuad] = basis.reshape( (self.numCorners,) )
+
+ # Derivatives of basis functions at quadrature points
+ deriv = numpy.array([[N0p(q), N0q(q)],
+ [N1p(q), N1q(q)],
+ [N2p(q), N2q(q)]], dtype=numpy.Float64)
+ self.basisDeriv[iQuad] = deriv.reshape((self.numCorners, self.cellDim))
+
+ iQuad += 1
+ return
+
+
+# MAIN /////////////////////////////////////////////////////////////////
+if __name__ == "__main__":
+
+ app = Quadrature2DLinear()
+ app.run()
+
+
+# End of file
Added: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature2DQuadratic.py
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature2DQuadratic.py 2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature2DQuadratic.py 2006-09-25 03:00:40 UTC (rev 4600)
@@ -0,0 +1,160 @@
+#!/usr/bin/env python
+#
+# ----------------------------------------------------------------------
+#
+# Brad T. Aagaard
+# U.S. Geological Survey
+#
+# <LicenseText>
+#
+# ----------------------------------------------------------------------
+#
+
+## @file unittests/libtests/feassemble/data/Quadrature2DQuadratic.py
+
+## @brief Python application for generating C++ data files for testing
+## C++ Quadrature2D object w/quadratic basis functions.
+
+from QuadratureApp import QuadratureApp
+
+import numpy
+
+# ----------------------------------------------------------------------
+def N0(p):
+ return (1.0-p[0]-p[1])*(1-2.0*p[0]-2.0*p[1])
+
+def N0p(p):
+ return 4.0*p[0]+4.0*p[1]-3.0
+
+def N0q(p):
+ return 4.0*p[0]+4.0*p[1]-3.0
+
+def N1(p):
+ return p[0]*(2.0*p[0]-1.0)
+
+def N1p(p):
+ return 4.0*p[0]-1.0
+
+def N1q(p):
+ return 0.0
+
+def N2(p):
+ return p[1]*(2.0*p[1]-1.0)
+
+def N2p(p):
+ return 0.0
+
+def N2q(p):
+ return 4.0*p[1]-1.0
+
+def N3(p):
+ return 4.0*p[0]*(1.0-p[0]-p[1])
+
+def N3p(p):
+ return -8.0*p[0]-4.0*p[1]+4.0
+
+def N3q(p):
+ return -4.0*p[0]
+
+def N4(p):
+ return 4.0*p[0]*p[1]
+
+def N4p(p):
+ return 4.0*p[1]
+
+def N4q(p):
+ return 4.0*p[0]
+
+def N5(p):
+ return 4.0*p[1]*(1.0-p[0]-p[1])
+
+def N5p(p):
+ return -4.0*p[1]
+
+def N5q(p):
+ return -8.0*p[1]-4.0*p[0]+4.0
+
+# ----------------------------------------------------------------------
+
+# Quadrature2DQuadratic class
+class Quadrature2DQuadratic(QuadratureApp):
+ """
+ Python application for generating C++ data files for testing C++
+ Quadrature2D object w/quadratic basis functions.
+ """
+
+ # PUBLIC METHODS /////////////////////////////////////////////////////
+
+ def __init__(self, name="quadrature2dquadratic"):
+ """
+ Constructor.
+ """
+ QuadratureApp.__init__(self, name)
+
+ self.numVertices = 6
+ self.spaceDim = 2
+ self.numCells = 1
+ self.cellDim = 2
+ self.numCorners = 6
+ self.numQuadPts = 3
+
+ self.quadPtsRef = numpy.array( [[2.0/3.0, 1.0/6.0],
+ [1.0/6.0, 2.0/3.0],
+ [1.0/6.0, 1.0/6.0]],
+ dtype=numpy.Float64)
+ self.quadWts = numpy.array([1.0/6.0, 1.0/6.0, 1.0/6.0],
+ dtype=numpy.Float64)
+ self.vertices = numpy.array( [[-1.0, -1.0],
+ [+1.0, +0.2],
+ [-1.5, +0.5],
+ [+0.0, -0.6],
+ [+0.25, +0.35],
+ [-1.25, -0.25]],
+ dtype=numpy.Float64)
+ self.cells = numpy.array( [[0, 1, 2, 3, 4, 5]], dtype=numpy.Int32)
+
+ return
+
+
+ # PRIVATE METHODS ////////////////////////////////////////////////////
+
+ def _calculateBasis(self):
+ """
+ Calculate basis functions and their derivatives at quadrature points.
+ """
+
+ self.basis = numpy.zeros( (self.numQuadPts, self.numCorners),
+ dtype=numpy.Float64)
+ self.basisDeriv = numpy.zeros( (self.numQuadPts,
+ self.numCorners, self.cellDim),
+ dtype=numpy.Float64)
+
+ iQuad = 0
+ for q in self.quadPtsRef:
+ # Basis functions at quadrature points
+ basis = numpy.array([N0(q), N1(q), N2(q), N3(q), N4(q), N5(q)],
+ dtype=numpy.Float64)
+ self.basis[iQuad] = basis.reshape( (self.numCorners,) )
+
+ # Derivatives of basis functions at quadrature points
+ deriv = numpy.array([[N0p(q), N0q(q)],
+ [N1p(q), N1q(q)],
+ [N2p(q), N2q(q)],
+ [N3p(q), N3q(q)],
+ [N4p(q), N4q(q)],
+ [N5p(q), N5q(q)]],
+ dtype=numpy.Float64)
+ self.basisDeriv[iQuad] = deriv.reshape((self.numCorners, self.cellDim))
+
+ iQuad += 1
+ return
+
+
+# MAIN /////////////////////////////////////////////////////////////////
+if __name__ == "__main__":
+
+ app = Quadrature2DQuadratic()
+ app.run()
+
+
+# End of file
Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureApp.py
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureApp.py 2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureApp.py 2006-09-25 03:00:40 UTC (rev 4600)
@@ -17,6 +17,8 @@
from pyre.applications.Script import Script
+import numpy
+
# QuadratureApp class
class QuadratureApp(Script):
"""
@@ -78,7 +80,8 @@
"""
Run the application.
"""
- self._calculate()
+ self._calculateBasis()
+ self._calculateJacobian()
self._initData()
self.data.write(self.name)
return
@@ -95,6 +98,47 @@
return
+ def _calculateJacobian(self):
+ """
+ Calculate jacobian, its determinant, and its inverse at quadrature
+ pts plus coordinates of quadrature points in the cell.
+ """
+ self.jacobian = numpy.zeros( (self.numQuadPts,
+ self.cellDim, self.spaceDim),
+ dtype=numpy.Float64)
+ self.jacobianInv = numpy.zeros( (self.numQuadPts,
+ self.spaceDim, self.cellDim),
+ dtype=numpy.Float64)
+ self.jacobianDet = numpy.zeros( (self.numQuadPts,),
+ dtype=numpy.Float64)
+
+ iQuad = 0
+ for q in self.quadPtsRef:
+ # Jacobian at quadrature points
+ deriv = self.basisDeriv[iQuad]
+ jacobian = numpy.dot(deriv.transpose(), self.vertices)
+ self.jacobian[iQuad] = jacobian
+
+ # Determinant of Jacobian and Jacobian inverse at quadrature points
+ if self.spaceDim == self.cellDim:
+ self.jacobianDet[iQuad] = numpy.linalg.det(jacobian)
+ self.jacobianInv[iQuad] = numpy.linalg.inv(jacobian)
+ else:
+ det = numpy.linalg.det(numpy.dot(jacobian, jacobian.transpose()))**0.5
+ self.jacobianDet[iQuad] = det
+
+ if 1 == self.cellDim:
+ self.jacobianInv[iQuad] = 1.0 / jacobian
+ elif 2 == self.cellDim:
+ error
+
+ iQuad += 1
+
+ # Quadrature points in cell
+ self.quadPts = numpy.dot(self.basis, self.vertices)
+ return
+
+
def _initData(self):
self.data.addScalar(vtype="int", name="_numVertices",
value=self.numVertices,
Added: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din2DLinear.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din2DLinear.cc 2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din2DLinear.cc 2006-09-25 03:00:40 UTC (rev 4600)
@@ -0,0 +1,98 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+// Brad T. Aagaard
+// U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application quadrature1din2dlinear.
+
+#include "QuadratureData1Din2DLinear.hh"
+
+const int pylith::feassemble::QuadratureData1Din2DLinear::_numVertices = 2;
+
+const int pylith::feassemble::QuadratureData1Din2DLinear::_spaceDim = 2;
+
+const int pylith::feassemble::QuadratureData1Din2DLinear::_numCells = 1;
+
+const int pylith::feassemble::QuadratureData1Din2DLinear::_cellDim = 1;
+
+const int pylith::feassemble::QuadratureData1Din2DLinear::_numCorners = 2;
+
+const int pylith::feassemble::QuadratureData1Din2DLinear::_numQuadPts = 1;
+
+const double pylith::feassemble::QuadratureData1Din2DLinear::_vertices[] = {
+ -2.00000000e-01, -5.00000000e-01,
+ 7.00000000e-01, 3.00000000e-01,
+};
+
+const int pylith::feassemble::QuadratureData1Din2DLinear::_cells[] = {
+ 0, 1,
+};
+
+const double pylith::feassemble::QuadratureData1Din2DLinear::_quadPtsRef[] = {
+ 0.00000000e+00,
+};
+
+const double pylith::feassemble::QuadratureData1Din2DLinear::_quadWts[] = {
+ 2.00000000e+00,
+};
+
+const double pylith::feassemble::QuadratureData1Din2DLinear::_basis[] = {
+ 5.00000000e-01,
+ 5.00000000e-01,
+};
+
+const double pylith::feassemble::QuadratureData1Din2DLinear::_basisDeriv[] = {
+ -5.00000000e-01,
+ 5.00000000e-01,
+};
+
+const double pylith::feassemble::QuadratureData1Din2DLinear::_quadPts[] = {
+ 2.50000000e-01, -1.00000000e-01,
+};
+
+const double pylith::feassemble::QuadratureData1Din2DLinear::_jacobian[] = {
+ 4.50000000e-01, 4.00000000e-01,
+};
+
+const double pylith::feassemble::QuadratureData1Din2DLinear::_jacobianDet[] = {
+ 6.02079729e-01,
+};
+
+const double pylith::feassemble::QuadratureData1Din2DLinear::_jacobianInv[] = {
+ 2.22222222e+00,
+ 2.50000000e+00,
+};
+
+pylith::feassemble::QuadratureData1Din2DLinear::QuadratureData1Din2DLinear(void)
+{ // constructor
+ numVertices = _numVertices;
+ spaceDim = _spaceDim;
+ numCells = _numCells;
+ cellDim = _cellDim;
+ numCorners = _numCorners;
+ numQuadPts = _numQuadPts;
+ vertices = const_cast<double*>(_vertices);
+ cells = const_cast<int*>(_cells);
+ quadPtsRef = const_cast<double*>(_quadPtsRef);
+ quadWts = const_cast<double*>(_quadWts);
+ basis = const_cast<double*>(_basis);
+ basisDeriv = const_cast<double*>(_basisDeriv);
+ quadPts = const_cast<double*>(_quadPts);
+ jacobian = const_cast<double*>(_jacobian);
+ jacobianDet = const_cast<double*>(_jacobianDet);
+ jacobianInv = const_cast<double*>(_jacobianInv);
+} // constructor
+
+pylith::feassemble::QuadratureData1Din2DLinear::~QuadratureData1Din2DLinear(void)
+{}
+
+
+// End of file
Added: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din2DLinear.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din2DLinear.hh 2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din2DLinear.hh 2006-09-25 03:00:40 UTC (rev 4600)
@@ -0,0 +1,76 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+// Brad T. Aagaard
+// U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application quadrature1din2dlinear.
+
+#if !defined(pylith_feassemble_quadraturedata1din2dlinear_hh)
+#define pylith_feassemble_quadraturedata1din2dlinear_hh
+
+#include "QuadratureData.hh"
+
+namespace pylith {
+ namespace feassemble {
+ class QuadratureData1Din2DLinear;
+ } // pylith
+} // feassemble
+
+class pylith::feassemble::QuadratureData1Din2DLinear : public QuadratureData
+{
+
+public:
+
+ /// Constructor
+ QuadratureData1Din2DLinear(void);
+
+ /// Destructor
+ ~QuadratureData1Din2DLinear(void);
+
+private:
+
+ static const int _numVertices;
+
+ static const int _spaceDim;
+
+ static const int _numCells;
+
+ static const int _cellDim;
+
+ static const int _numCorners;
+
+ static const int _numQuadPts;
+
+ static const double _vertices[];
+
+ static const int _cells[];
+
+ static const double _quadPtsRef[];
+
+ static const double _quadWts[];
+
+ static const double _basis[];
+
+ static const double _basisDeriv[];
+
+ static const double _quadPts[];
+
+ static const double _jacobian[];
+
+ static const double _jacobianDet[];
+
+ static const double _jacobianInv[];
+
+};
+
+#endif // pylith_feassemble_quadraturedata1din2dlinear_hh
+
+// End of file
Added: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din2DQuadratic.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din2DQuadratic.cc 2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din2DQuadratic.cc 2006-09-25 03:00:40 UTC (rev 4600)
@@ -0,0 +1,112 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+// Brad T. Aagaard
+// U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application quadrature1din2dquadratic.
+
+#include "QuadratureData1Din2DQuadratic.hh"
+
+const int pylith::feassemble::QuadratureData1Din2DQuadratic::_numVertices = 3;
+
+const int pylith::feassemble::QuadratureData1Din2DQuadratic::_spaceDim = 2;
+
+const int pylith::feassemble::QuadratureData1Din2DQuadratic::_numCells = 1;
+
+const int pylith::feassemble::QuadratureData1Din2DQuadratic::_cellDim = 1;
+
+const int pylith::feassemble::QuadratureData1Din2DQuadratic::_numCorners = 3;
+
+const int pylith::feassemble::QuadratureData1Din2DQuadratic::_numQuadPts = 2;
+
+const double pylith::feassemble::QuadratureData1Din2DQuadratic::_vertices[] = {
+ -2.00000000e-01, -5.00000000e-01,
+ 3.00000000e-01, -2.00000000e-01,
+ 7.00000000e-01, 3.00000000e-01,
+};
+
+const int pylith::feassemble::QuadratureData1Din2DQuadratic::_cells[] = {
+ 0, 1, 2,
+};
+
+const double pylith::feassemble::QuadratureData1Din2DQuadratic::_quadPtsRef[] = {
+ -5.77350269e-01,
+ 5.77350269e-01,
+};
+
+const double pylith::feassemble::QuadratureData1Din2DQuadratic::_quadWts[] = {
+ 1.00000000e+00, 1.00000000e+00,
+};
+
+const double pylith::feassemble::QuadratureData1Din2DQuadratic::_basis[] = {
+ 4.55341801e-01,
+ 6.66666667e-01,
+ -1.22008468e-01,
+ -1.22008468e-01,
+ 6.66666667e-01,
+ 4.55341801e-01,
+};
+
+const double pylith::feassemble::QuadratureData1Din2DQuadratic::_basisDeriv[] = {
+ -1.07735027e+00,
+ 1.15470054e+00,
+ -7.73502692e-02,
+ 7.73502692e-02,
+ -1.15470054e+00,
+ 1.07735027e+00,
+};
+
+const double pylith::feassemble::QuadratureData1Din2DQuadratic::_quadPts[] = {
+ 2.35257122e-02, -3.97606774e-01,
+ 5.43140954e-01, 6.42734410e-02,
+};
+
+const double pylith::feassemble::QuadratureData1Din2DQuadratic::_jacobian[] = {
+ 5.07735027e-01, 2.84529946e-01,
+ 3.92264973e-01, 5.15470054e-01,
+};
+
+const double pylith::feassemble::QuadratureData1Din2DQuadratic::_jacobianDet[] = {
+ 5.82024181e-01, 6.47750867e-01,
+};
+
+const double pylith::feassemble::QuadratureData1Din2DQuadratic::_jacobianInv[] = {
+ 1.96953125e+00,
+ 3.51456855e+00,
+ 2.54929721e+00,
+ 1.93997691e+00,
+};
+
+pylith::feassemble::QuadratureData1Din2DQuadratic::QuadratureData1Din2DQuadratic(void)
+{ // constructor
+ numVertices = _numVertices;
+ spaceDim = _spaceDim;
+ numCells = _numCells;
+ cellDim = _cellDim;
+ numCorners = _numCorners;
+ numQuadPts = _numQuadPts;
+ vertices = const_cast<double*>(_vertices);
+ cells = const_cast<int*>(_cells);
+ quadPtsRef = const_cast<double*>(_quadPtsRef);
+ quadWts = const_cast<double*>(_quadWts);
+ basis = const_cast<double*>(_basis);
+ basisDeriv = const_cast<double*>(_basisDeriv);
+ quadPts = const_cast<double*>(_quadPts);
+ jacobian = const_cast<double*>(_jacobian);
+ jacobianDet = const_cast<double*>(_jacobianDet);
+ jacobianInv = const_cast<double*>(_jacobianInv);
+} // constructor
+
+pylith::feassemble::QuadratureData1Din2DQuadratic::~QuadratureData1Din2DQuadratic(void)
+{}
+
+
+// End of file
Added: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din2DQuadratic.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din2DQuadratic.hh 2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din2DQuadratic.hh 2006-09-25 03:00:40 UTC (rev 4600)
@@ -0,0 +1,76 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+// Brad T. Aagaard
+// U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application quadrature1din2dquadratic.
+
+#if !defined(pylith_feassemble_quadraturedata1din2dquadratic_hh)
+#define pylith_feassemble_quadraturedata1din2dquadratic_hh
+
+#include "QuadratureData.hh"
+
+namespace pylith {
+ namespace feassemble {
+ class QuadratureData1Din2DQuadratic;
+ } // pylith
+} // feassemble
+
+class pylith::feassemble::QuadratureData1Din2DQuadratic : public QuadratureData
+{
+
+public:
+
+ /// Constructor
+ QuadratureData1Din2DQuadratic(void);
+
+ /// Destructor
+ ~QuadratureData1Din2DQuadratic(void);
+
+private:
+
+ static const int _numVertices;
+
+ static const int _spaceDim;
+
+ static const int _numCells;
+
+ static const int _cellDim;
+
+ static const int _numCorners;
+
+ static const int _numQuadPts;
+
+ static const double _vertices[];
+
+ static const int _cells[];
+
+ static const double _quadPtsRef[];
+
+ static const double _quadWts[];
+
+ static const double _basis[];
+
+ static const double _basisDeriv[];
+
+ static const double _quadPts[];
+
+ static const double _jacobian[];
+
+ static const double _jacobianDet[];
+
+ static const double _jacobianInv[];
+
+};
+
+#endif // pylith_feassemble_quadraturedata1din2dquadratic_hh
+
+// End of file
Added: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din3DLinear.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din3DLinear.cc 2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din3DLinear.cc 2006-09-25 03:00:40 UTC (rev 4600)
@@ -0,0 +1,99 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+// Brad T. Aagaard
+// U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application quadrature1din3dlinear.
+
+#include "QuadratureData1Din3DLinear.hh"
+
+const int pylith::feassemble::QuadratureData1Din3DLinear::_numVertices = 2;
+
+const int pylith::feassemble::QuadratureData1Din3DLinear::_spaceDim = 3;
+
+const int pylith::feassemble::QuadratureData1Din3DLinear::_numCells = 1;
+
+const int pylith::feassemble::QuadratureData1Din3DLinear::_cellDim = 1;
+
+const int pylith::feassemble::QuadratureData1Din3DLinear::_numCorners = 2;
+
+const int pylith::feassemble::QuadratureData1Din3DLinear::_numQuadPts = 1;
+
+const double pylith::feassemble::QuadratureData1Din3DLinear::_vertices[] = {
+ 1.00000000e+00, -1.50000000e+00, -2.00000000e+00,
+ -5.00000000e-01, 2.00000000e+00, 3.00000000e+00,
+};
+
+const int pylith::feassemble::QuadratureData1Din3DLinear::_cells[] = {
+ 0, 1,
+};
+
+const double pylith::feassemble::QuadratureData1Din3DLinear::_quadPtsRef[] = {
+ 0.00000000e+00,
+};
+
+const double pylith::feassemble::QuadratureData1Din3DLinear::_quadWts[] = {
+ 2.00000000e+00,
+};
+
+const double pylith::feassemble::QuadratureData1Din3DLinear::_basis[] = {
+ 5.00000000e-01,
+ 5.00000000e-01,
+};
+
+const double pylith::feassemble::QuadratureData1Din3DLinear::_basisDeriv[] = {
+ -5.00000000e-01,
+ 5.00000000e-01,
+};
+
+const double pylith::feassemble::QuadratureData1Din3DLinear::_quadPts[] = {
+ 2.50000000e-01, 2.50000000e-01, 5.00000000e-01,
+};
+
+const double pylith::feassemble::QuadratureData1Din3DLinear::_jacobian[] = {
+ -7.50000000e-01, 1.75000000e+00, 2.50000000e+00,
+};
+
+const double pylith::feassemble::QuadratureData1Din3DLinear::_jacobianDet[] = {
+ 3.14245127e+00,
+};
+
+const double pylith::feassemble::QuadratureData1Din3DLinear::_jacobianInv[] = {
+ -1.33333333e+00,
+ 5.71428571e-01,
+ 4.00000000e-01,
+};
+
+pylith::feassemble::QuadratureData1Din3DLinear::QuadratureData1Din3DLinear(void)
+{ // constructor
+ numVertices = _numVertices;
+ spaceDim = _spaceDim;
+ numCells = _numCells;
+ cellDim = _cellDim;
+ numCorners = _numCorners;
+ numQuadPts = _numQuadPts;
+ vertices = const_cast<double*>(_vertices);
+ cells = const_cast<int*>(_cells);
+ quadPtsRef = const_cast<double*>(_quadPtsRef);
+ quadWts = const_cast<double*>(_quadWts);
+ basis = const_cast<double*>(_basis);
+ basisDeriv = const_cast<double*>(_basisDeriv);
+ quadPts = const_cast<double*>(_quadPts);
+ jacobian = const_cast<double*>(_jacobian);
+ jacobianDet = const_cast<double*>(_jacobianDet);
+ jacobianInv = const_cast<double*>(_jacobianInv);
+} // constructor
+
+pylith::feassemble::QuadratureData1Din3DLinear::~QuadratureData1Din3DLinear(void)
+{}
+
+
+// End of file
Added: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din3DLinear.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din3DLinear.hh 2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din3DLinear.hh 2006-09-25 03:00:40 UTC (rev 4600)
@@ -0,0 +1,76 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+// Brad T. Aagaard
+// U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application quadrature1din3dlinear.
+
+#if !defined(pylith_feassemble_quadraturedata1din3dlinear_hh)
+#define pylith_feassemble_quadraturedata1din3dlinear_hh
+
+#include "QuadratureData.hh"
+
+namespace pylith {
+ namespace feassemble {
+ class QuadratureData1Din3DLinear;
+ } // pylith
+} // feassemble
+
+class pylith::feassemble::QuadratureData1Din3DLinear : public QuadratureData
+{
+
+public:
+
+ /// Constructor
+ QuadratureData1Din3DLinear(void);
+
+ /// Destructor
+ ~QuadratureData1Din3DLinear(void);
+
+private:
+
+ static const int _numVertices;
+
+ static const int _spaceDim;
+
+ static const int _numCells;
+
+ static const int _cellDim;
+
+ static const int _numCorners;
+
+ static const int _numQuadPts;
+
+ static const double _vertices[];
+
+ static const int _cells[];
+
+ static const double _quadPtsRef[];
+
+ static const double _quadWts[];
+
+ static const double _basis[];
+
+ static const double _basisDeriv[];
+
+ static const double _quadPts[];
+
+ static const double _jacobian[];
+
+ static const double _jacobianDet[];
+
+ static const double _jacobianInv[];
+
+};
+
+#endif // pylith_feassemble_quadraturedata1din3dlinear_hh
+
+// End of file
Added: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din3DQuadratic.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din3DQuadratic.cc 2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din3DQuadratic.cc 2006-09-25 03:00:40 UTC (rev 4600)
@@ -0,0 +1,114 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+// Brad T. Aagaard
+// U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application quadrature1din3dquadratic.
+
+#include "QuadratureData1Din3DQuadratic.hh"
+
+const int pylith::feassemble::QuadratureData1Din3DQuadratic::_numVertices = 3;
+
+const int pylith::feassemble::QuadratureData1Din3DQuadratic::_spaceDim = 3;
+
+const int pylith::feassemble::QuadratureData1Din3DQuadratic::_numCells = 1;
+
+const int pylith::feassemble::QuadratureData1Din3DQuadratic::_cellDim = 1;
+
+const int pylith::feassemble::QuadratureData1Din3DQuadratic::_numCorners = 3;
+
+const int pylith::feassemble::QuadratureData1Din3DQuadratic::_numQuadPts = 2;
+
+const double pylith::feassemble::QuadratureData1Din3DQuadratic::_vertices[] = {
+ 1.00000000e+00, -1.50000000e+00, -2.00000000e+00,
+ 3.00000000e-01, 3.00000000e-01, 8.00000000e-01,
+ -5.00000000e-01, 2.00000000e+00, 3.00000000e+00,
+};
+
+const int pylith::feassemble::QuadratureData1Din3DQuadratic::_cells[] = {
+ 0, 1, 2,
+};
+
+const double pylith::feassemble::QuadratureData1Din3DQuadratic::_quadPtsRef[] = {
+ -5.77350269e-01,
+ 5.77350269e-01,
+};
+
+const double pylith::feassemble::QuadratureData1Din3DQuadratic::_quadWts[] = {
+ 1.00000000e+00, 1.00000000e+00,
+};
+
+const double pylith::feassemble::QuadratureData1Din3DQuadratic::_basis[] = {
+ 4.55341801e-01,
+ 6.66666667e-01,
+ -1.22008468e-01,
+ -1.22008468e-01,
+ 6.66666667e-01,
+ 4.55341801e-01,
+};
+
+const double pylith::feassemble::QuadratureData1Din3DQuadratic::_basisDeriv[] = {
+ -1.07735027e+00,
+ 1.15470054e+00,
+ -7.73502692e-02,
+ 7.73502692e-02,
+ -1.15470054e+00,
+ 1.07735027e+00,
+};
+
+const double pylith::feassemble::QuadratureData1Din3DQuadratic::_quadPts[] = {
+ 7.16346035e-01, -7.27029638e-01, -7.43375673e-01,
+ -1.49679369e-01, 1.29369630e+00, 2.14337567e+00,
+};
+
+const double pylith::feassemble::QuadratureData1Din3DQuadratic::_jacobian[] = {
+ -6.92264973e-01, 1.80773503e+00, 2.84641016e+00,
+ -8.07735027e-01, 1.69226497e+00, 2.15358984e+00,
+};
+
+const double pylith::feassemble::QuadratureData1Din3DQuadratic::_jacobianDet[] = {
+ 3.44226488e+00, 2.85554650e+00,
+};
+
+const double pylith::feassemble::QuadratureData1Din3DQuadratic::_jacobianInv[] = {
+ -1.44453358e+00,
+ 5.53178417e-01,
+ 3.51319713e-01,
+ -1.23802976e+00,
+ 5.90924008e-01,
+ 4.64340973e-01,
+};
+
+pylith::feassemble::QuadratureData1Din3DQuadratic::QuadratureData1Din3DQuadratic(void)
+{ // constructor
+ numVertices = _numVertices;
+ spaceDim = _spaceDim;
+ numCells = _numCells;
+ cellDim = _cellDim;
+ numCorners = _numCorners;
+ numQuadPts = _numQuadPts;
+ vertices = const_cast<double*>(_vertices);
+ cells = const_cast<int*>(_cells);
+ quadPtsRef = const_cast<double*>(_quadPtsRef);
+ quadWts = const_cast<double*>(_quadWts);
+ basis = const_cast<double*>(_basis);
+ basisDeriv = const_cast<double*>(_basisDeriv);
+ quadPts = const_cast<double*>(_quadPts);
+ jacobian = const_cast<double*>(_jacobian);
+ jacobianDet = const_cast<double*>(_jacobianDet);
+ jacobianInv = const_cast<double*>(_jacobianInv);
+} // constructor
+
+pylith::feassemble::QuadratureData1Din3DQuadratic::~QuadratureData1Din3DQuadratic(void)
+{}
+
+
+// End of file
Added: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din3DQuadratic.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din3DQuadratic.hh 2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData1Din3DQuadratic.hh 2006-09-25 03:00:40 UTC (rev 4600)
@@ -0,0 +1,76 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+// Brad T. Aagaard
+// U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application quadrature1din3dquadratic.
+
+#if !defined(pylith_feassemble_quadraturedata1din3dquadratic_hh)
+#define pylith_feassemble_quadraturedata1din3dquadratic_hh
+
+#include "QuadratureData.hh"
+
+namespace pylith {
+ namespace feassemble {
+ class QuadratureData1Din3DQuadratic;
+ } // pylith
+} // feassemble
+
+class pylith::feassemble::QuadratureData1Din3DQuadratic : public QuadratureData
+{
+
+public:
+
+ /// Constructor
+ QuadratureData1Din3DQuadratic(void);
+
+ /// Destructor
+ ~QuadratureData1Din3DQuadratic(void);
+
+private:
+
+ static const int _numVertices;
+
+ static const int _spaceDim;
+
+ static const int _numCells;
+
+ static const int _cellDim;
+
+ static const int _numCorners;
+
+ static const int _numQuadPts;
+
+ static const double _vertices[];
+
+ static const int _cells[];
+
+ static const double _quadPtsRef[];
+
+ static const double _quadWts[];
+
+ static const double _basis[];
+
+ static const double _basisDeriv[];
+
+ static const double _quadPts[];
+
+ static const double _jacobian[];
+
+ static const double _jacobianDet[];
+
+ static const double _jacobianInv[];
+
+};
+
+#endif // pylith_feassemble_quadraturedata1din3dquadratic_hh
+
+// End of file
Added: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2DLinear.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2DLinear.cc 2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2DLinear.cc 2006-09-25 03:00:40 UTC (rev 4600)
@@ -0,0 +1,100 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+// Brad T. Aagaard
+// U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application quadrature1dlinear.
+
+#include "QuadratureData2DLinear.hh"
+
+const int pylith::feassemble::QuadratureData2DLinear::_numVertices = 3;
+
+const int pylith::feassemble::QuadratureData2DLinear::_spaceDim = 2;
+
+const int pylith::feassemble::QuadratureData2DLinear::_numCells = 1;
+
+const int pylith::feassemble::QuadratureData2DLinear::_cellDim = 2;
+
+const int pylith::feassemble::QuadratureData2DLinear::_numCorners = 3;
+
+const int pylith::feassemble::QuadratureData2DLinear::_numQuadPts = 1;
+
+const double pylith::feassemble::QuadratureData2DLinear::_vertices[] = {
+ 2.00000000e-01, -4.00000000e-01,
+ 3.00000000e-01, 5.00000000e-01,
+ -1.00000000e+00, -2.00000000e-01,
+};
+
+const int pylith::feassemble::QuadratureData2DLinear::_cells[] = {
+ 0, 1, 2,
+};
+
+const double pylith::feassemble::QuadratureData2DLinear::_quadPtsRef[] = {
+ 3.33333333e-01, 3.33333333e-01,
+};
+
+const double pylith::feassemble::QuadratureData2DLinear::_quadWts[] = {
+ 5.00000000e-01,
+};
+
+const double pylith::feassemble::QuadratureData2DLinear::_basis[] = {
+ 3.33333333e-01, 3.33333333e-01,
+ 3.33333333e-01,};
+
+const double pylith::feassemble::QuadratureData2DLinear::_basisDeriv[] = {
+ -1.00000000e+00, -1.00000000e+00,
+ 1.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 1.00000000e+00,
+};
+
+const double pylith::feassemble::QuadratureData2DLinear::_quadPts[] = {
+ -1.66666667e-01, -3.33333333e-02,
+};
+
+const double pylith::feassemble::QuadratureData2DLinear::_jacobian[] = {
+ 1.00000000e-01, 9.00000000e-01,
+ -1.20000000e+00, 2.00000000e-01,
+};
+
+const double pylith::feassemble::QuadratureData2DLinear::_jacobianDet[] = {
+ 1.10000000e+00,
+};
+
+const double pylith::feassemble::QuadratureData2DLinear::_jacobianInv[] = {
+ 1.81818182e-01, -8.18181818e-01,
+ 1.09090909e+00, 9.09090909e-02,
+};
+
+pylith::feassemble::QuadratureData2DLinear::QuadratureData2DLinear(void)
+{ // constructor
+ numVertices = _numVertices;
+ spaceDim = _spaceDim;
+ numCells = _numCells;
+ cellDim = _cellDim;
+ numCorners = _numCorners;
+ numQuadPts = _numQuadPts;
+ vertices = const_cast<double*>(_vertices);
+ cells = const_cast<int*>(_cells);
+ quadPtsRef = const_cast<double*>(_quadPtsRef);
+ quadWts = const_cast<double*>(_quadWts);
+ basis = const_cast<double*>(_basis);
+ basisDeriv = const_cast<double*>(_basisDeriv);
+ quadPts = const_cast<double*>(_quadPts);
+ jacobian = const_cast<double*>(_jacobian);
+ jacobianDet = const_cast<double*>(_jacobianDet);
+ jacobianInv = const_cast<double*>(_jacobianInv);
+} // constructor
+
+pylith::feassemble::QuadratureData2DLinear::~QuadratureData2DLinear(void)
+{}
+
+
+// End of file
Added: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2DLinear.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2DLinear.hh 2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2DLinear.hh 2006-09-25 03:00:40 UTC (rev 4600)
@@ -0,0 +1,76 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+// Brad T. Aagaard
+// U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application quadrature1dlinear.
+
+#if !defined(pylith_feassemble_quadraturedata2dlinear_hh)
+#define pylith_feassemble_quadraturedata2dlinear_hh
+
+#include "QuadratureData.hh"
+
+namespace pylith {
+ namespace feassemble {
+ class QuadratureData2DLinear;
+ } // pylith
+} // feassemble
+
+class pylith::feassemble::QuadratureData2DLinear : public QuadratureData
+{
+
+public:
+
+ /// Constructor
+ QuadratureData2DLinear(void);
+
+ /// Destructor
+ ~QuadratureData2DLinear(void);
+
+private:
+
+ static const int _numVertices;
+
+ static const int _spaceDim;
+
+ static const int _numCells;
+
+ static const int _cellDim;
+
+ static const int _numCorners;
+
+ static const int _numQuadPts;
+
+ static const double _vertices[];
+
+ static const int _cells[];
+
+ static const double _quadPtsRef[];
+
+ static const double _quadWts[];
+
+ static const double _basis[];
+
+ static const double _basisDeriv[];
+
+ static const double _quadPts[];
+
+ static const double _jacobian[];
+
+ static const double _jacobianDet[];
+
+ static const double _jacobianInv[];
+
+};
+
+#endif // pylith_feassemble_quadraturedata2dlinear_hh
+
+// End of file
Added: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2DQuadratic.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2DQuadratic.cc 2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2DQuadratic.cc 2006-09-25 03:00:40 UTC (rev 4600)
@@ -0,0 +1,138 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+// Brad T. Aagaard
+// U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application quadrature2dquadratic.
+
+#include "QuadratureData2DQuadratic.hh"
+
+const int pylith::feassemble::QuadratureData2DQuadratic::_numVertices = 6;
+
+const int pylith::feassemble::QuadratureData2DQuadratic::_spaceDim = 2;
+
+const int pylith::feassemble::QuadratureData2DQuadratic::_numCells = 1;
+
+const int pylith::feassemble::QuadratureData2DQuadratic::_cellDim = 2;
+
+const int pylith::feassemble::QuadratureData2DQuadratic::_numCorners = 6;
+
+const int pylith::feassemble::QuadratureData2DQuadratic::_numQuadPts = 3;
+
+const double pylith::feassemble::QuadratureData2DQuadratic::_vertices[] = {
+ -1.00000000e+00, -1.00000000e+00,
+ 1.00000000e+00, 2.00000000e-01,
+ -1.50000000e+00, 5.00000000e-01,
+ 0.00000000e+00, -6.00000000e-01,
+ 2.50000000e-01, 3.50000000e-01,
+ -1.25000000e+00, -2.50000000e-01,
+};
+
+const int pylith::feassemble::QuadratureData2DQuadratic::_cells[] = {
+ 0, 1, 2, 3, 4, 5,
+};
+
+const double pylith::feassemble::QuadratureData2DQuadratic::_quadPtsRef[] = {
+ 6.66666667e-01, 1.66666667e-01,
+ 1.66666667e-01, 6.66666667e-01,
+ 1.66666667e-01, 1.66666667e-01,
+};
+
+const double pylith::feassemble::QuadratureData2DQuadratic::_quadWts[] = {
+ 1.66666667e-01, 1.66666667e-01, 1.66666667e-01,
+};
+
+const double pylith::feassemble::QuadratureData2DQuadratic::_basis[] = {
+ -1.11111111e-01, 2.22222222e-01,
+ -1.11111111e-01, 4.44444444e-01,
+ 4.44444444e-01, 1.11111111e-01,
+ -1.11111111e-01, -1.11111111e-01,
+ 2.22222222e-01, 1.11111111e-01,
+ 4.44444444e-01, 4.44444444e-01,
+ 2.22222222e-01, -1.11111111e-01,
+ -1.11111111e-01, 4.44444444e-01,
+ 1.11111111e-01, 4.44444444e-01,
+};
+
+const double pylith::feassemble::QuadratureData2DQuadratic::_basisDeriv[] = {
+ 3.33333333e-01, 3.33333333e-01,
+ 1.66666667e+00, 0.00000000e+00,
+ 0.00000000e+00, -3.33333333e-01,
+ -2.00000000e+00, -2.66666667e+00,
+ 6.66666667e-01, 2.66666667e+00,
+ -6.66666667e-01, 0.00000000e+00,
+ 3.33333333e-01, 3.33333333e-01,
+ -3.33333333e-01, 0.00000000e+00,
+ 0.00000000e+00, 1.66666667e+00,
+ 0.00000000e+00, -6.66666667e-01,
+ 2.66666667e+00, 6.66666667e-01,
+ -2.66666667e+00, -2.00000000e+00,
+ -1.66666667e+00, -1.66666667e+00,
+ -3.33333333e-01, 0.00000000e+00,
+ 0.00000000e+00, -3.33333333e-01,
+ 2.00000000e+00, -6.66666667e-01,
+ 6.66666667e-01, 6.66666667e-01,
+ -6.66666667e-01, 2.00000000e+00,
+};
+
+const double pylith::feassemble::QuadratureData2DQuadratic::_quadPts[] = {
+ 4.72222222e-01, -3.88888889e-02,
+ -7.77777778e-01, 1.77777778e-01,
+ -6.94444444e-01, -6.38888889e-01,
+};
+
+const double pylith::feassemble::QuadratureData2DQuadratic::_jacobian[] = {
+ 2.33333333e+00, 1.60000000e+00,
+ 8.33333333e-01, 2.03333333e+00,
+ 3.33333333e+00, 1.20000000e+00,
+ -1.66666667e-01, 1.63333333e+00,
+ 2.33333333e+00, 8.00000000e-01,
+ -1.66666667e-01, 1.63333333e+00,
+};
+
+const double pylith::feassemble::QuadratureData2DQuadratic::_jacobianDet[] = {
+ 3.41111111e+00, 5.64444444e+00, 3.94444444e+00,
+};
+
+const double pylith::feassemble::QuadratureData2DQuadratic::_jacobianInv[] = {
+ 5.96091205e-01, -4.69055375e-01,
+ -2.44299674e-01, 6.84039088e-01,
+ 2.89370079e-01, -2.12598425e-01,
+ 2.95275591e-02, 5.90551181e-01,
+ 4.14084507e-01, -2.02816901e-01,
+ 4.22535211e-02, 5.91549296e-01,
+};
+
+pylith::feassemble::QuadratureData2DQuadratic::QuadratureData2DQuadratic(void)
+{ // constructor
+ numVertices = _numVertices;
+ spaceDim = _spaceDim;
+ numCells = _numCells;
+ cellDim = _cellDim;
+ numCorners = _numCorners;
+ numQuadPts = _numQuadPts;
+ vertices = const_cast<double*>(_vertices);
+ cells = const_cast<int*>(_cells);
+ quadPtsRef = const_cast<double*>(_quadPtsRef);
+ quadWts = const_cast<double*>(_quadWts);
+ basis = const_cast<double*>(_basis);
+ basisDeriv = const_cast<double*>(_basisDeriv);
+ quadPts = const_cast<double*>(_quadPts);
+ jacobian = const_cast<double*>(_jacobian);
+ jacobianDet = const_cast<double*>(_jacobianDet);
+ jacobianInv = const_cast<double*>(_jacobianInv);
+} // constructor
+
+pylith::feassemble::QuadratureData2DQuadratic::~QuadratureData2DQuadratic(void)
+{}
+
+
+// End of file
Added: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2DQuadratic.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2DQuadratic.hh 2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/QuadratureData2DQuadratic.hh 2006-09-25 03:00:40 UTC (rev 4600)
@@ -0,0 +1,76 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+// Brad T. Aagaard
+// U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application quadrature2dquadratic.
+
+#if !defined(pylith_feassemble_quadraturedata2dquadratic_hh)
+#define pylith_feassemble_quadraturedata2dquadratic_hh
+
+#include "QuadratureData.hh"
+
+namespace pylith {
+ namespace feassemble {
+ class QuadratureData2DQuadratic;
+ } // pylith
+} // feassemble
+
+class pylith::feassemble::QuadratureData2DQuadratic : public QuadratureData
+{
+
+public:
+
+ /// Constructor
+ QuadratureData2DQuadratic(void);
+
+ /// Destructor
+ ~QuadratureData2DQuadratic(void);
+
+private:
+
+ static const int _numVertices;
+
+ static const int _spaceDim;
+
+ static const int _numCells;
+
+ static const int _cellDim;
+
+ static const int _numCorners;
+
+ static const int _numQuadPts;
+
+ static const double _vertices[];
+
+ static const int _cells[];
+
+ static const double _quadPtsRef[];
+
+ static const double _quadWts[];
+
+ static const double _basis[];
+
+ static const double _basisDeriv[];
+
+ static const double _quadPts[];
+
+ static const double _jacobian[];
+
+ static const double _jacobianDet[];
+
+ static const double _jacobianInv[];
+
+};
+
+#endif // pylith_feassemble_quadraturedata2dquadratic_hh
+
+// End of file
Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/generate.sh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/generate.sh 2006-09-24 07:28:19 UTC (rev 4599)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/generate.sh 2006-09-25 03:00:40 UTC (rev 4600)
@@ -10,6 +10,8 @@
# ======================================================================
#
+# 1-D ------------------------------------------------------------------
+
python Quadrature1DLinear.py \
--data.namespace=pylith,feassemble \
--data.object=QuadratureData1DLinear \
@@ -20,4 +22,36 @@
--data.object=QuadratureData1DQuadratic \
--data.parent=QuadratureData
+python Quadrature1Din2DLinear.py \
+ --data.namespace=pylith,feassemble \
+ --data.object=QuadratureData1Din2DLinear \
+ --data.parent=QuadratureData
+
+python Quadrature1Din2DQuadratic.py \
+ --data.namespace=pylith,feassemble \
+ --data.object=QuadratureData1Din2DQuadratic \
+ --data.parent=QuadratureData
+
+python Quadrature1Din3DLinear.py \
+ --data.namespace=pylith,feassemble \
+ --data.object=QuadratureData1Din3DLinear \
+ --data.parent=QuadratureData
+
+python Quadrature1Din3DQuadratic.py \
+ --data.namespace=pylith,feassemble \
+ --data.object=QuadratureData1Din3DQuadratic \
+ --data.parent=QuadratureData
+
+# 2-D ------------------------------------------------------------------
+
+python Quadrature2DLinear.py \
+ --data.namespace=pylith,feassemble \
+ --data.object=QuadratureData2DLinear \
+ --data.parent=QuadratureData
+
+python Quadrature2DQuadratic.py \
+ --data.namespace=pylith,feassemble \
+ --data.object=QuadratureData2DQuadratic \
+ --data.parent=QuadratureData
+
# End of file
More information about the cig-commits
mailing list