[cig-commits] r14299 - in short/3D/PyLith/branches/pylith-swig: libsrc/feassemble modulesrc/feassemble pylith/feassemble unittests/libtests/feassemble unittests/pytests/feassemble
brad at geodynamics.org
brad at geodynamics.org
Wed Mar 11 21:32:09 PDT 2009
Author: brad
Date: 2009-03-11 21:32:08 -0700 (Wed, 11 Mar 2009)
New Revision: 14299
Modified:
short/3D/PyLith/branches/pylith-swig/libsrc/feassemble/QuadratureRefCell.cc
short/3D/PyLith/branches/pylith-swig/libsrc/feassemble/QuadratureRefCell.hh
short/3D/PyLith/branches/pylith-swig/modulesrc/feassemble/QuadratureRefCell.i
short/3D/PyLith/branches/pylith-swig/pylith/feassemble/FIATLagrange.py
short/3D/PyLith/branches/pylith-swig/pylith/feassemble/Quadrature.py
short/3D/PyLith/branches/pylith-swig/unittests/libtests/feassemble/TestQuadrature.cc
short/3D/PyLith/branches/pylith-swig/unittests/libtests/feassemble/TestQuadrature0D.cc
short/3D/PyLith/branches/pylith-swig/unittests/libtests/feassemble/TestQuadratureEngine.cc
short/3D/PyLith/branches/pylith-swig/unittests/libtests/feassemble/TestQuadratureRefCell.cc
short/3D/PyLith/branches/pylith-swig/unittests/pytests/feassemble/TestMeshQuadrature.py
Log:
Adjuted QuadratureRefCell interface for better SWIG/numpy compatibility. More work on tests.
Modified: short/3D/PyLith/branches/pylith-swig/libsrc/feassemble/QuadratureRefCell.cc
===================================================================
--- short/3D/PyLith/branches/pylith-swig/libsrc/feassemble/QuadratureRefCell.cc 2009-03-12 00:10:35 UTC (rev 14298)
+++ short/3D/PyLith/branches/pylith-swig/libsrc/feassemble/QuadratureRefCell.cc 2009-03-12 04:32:08 UTC (rev 14299)
@@ -63,14 +63,29 @@
// weights of the quadrature points.
void
pylith::feassemble::QuadratureRefCell::initialize(const double* basis,
- const double* basisDerivRef,
- const double* quadPtsRef,
- const double* quadWts,
- const int cellDim,
- const int numBasis,
- const int numQuadPts,
- const int spaceDim)
+ const int numQuadPts1,
+ const int numBasis1,
+ const double* basisDerivRef,
+ const int numQuadPts2,
+ const int numBasis2,
+ const int cellDim2,
+ const double* quadPtsRef,
+ const int numQuadPts3,
+ const int cellDim3,
+ const double* quadWts,
+ const int numQuadPts4,
+ const int spaceDim)
{ // initialize
+ const int numQuadPts = numQuadPts1;
+ const int numBasis = numBasis1;
+ const int cellDim = cellDim2;
+
+ assert(numQuadPts == numQuadPts2);
+ assert(numQuadPts == numQuadPts3);
+ assert(numQuadPts == numQuadPts4);
+ assert(numBasis == numBasis2);
+ assert(cellDim == cellDim3);
+
if (0 == basis ||
0 == basisDerivRef ||
0 == quadPtsRef ||
Modified: short/3D/PyLith/branches/pylith-swig/libsrc/feassemble/QuadratureRefCell.hh
===================================================================
--- short/3D/PyLith/branches/pylith-swig/libsrc/feassemble/QuadratureRefCell.hh 2009-03-12 00:10:35 UTC (rev 14298)
+++ short/3D/PyLith/branches/pylith-swig/libsrc/feassemble/QuadratureRefCell.hh 2009-03-12 04:32:08 UTC (rev 14299)
@@ -54,6 +54,8 @@
* ...
* size = numQuadPts * numBasis
* index = iQuadPt*numBasis + iBasis
+ * @param numQuadPts1 Dimension of basis.
+ * @param numBasis1 Dimension of basis.
*
* @param basisDerivRef Array of basis function derivaties evaluated at
* quadrature pts, where derivatives are with respect to cell's
@@ -63,30 +65,38 @@
* ...
* size = numQuadPts * numBasis * cellDim
* index = iQuadPt*numBasis*cellDim + iBasis*cellDim + iDim
+ * @param numQuadPts2 Dimension of basisDerivRef.
+ * @param numBasis2 Dimension of basisDerivRef.
+ * @param cellDim2 Dimension of basisDerivRef.
*
- * @param quadPts Array of coordinates of quadrature points in
+ * @param quadPtsRef Array of coordinates of quadrature points in
* reference cell
* Qp0p, Qp0q, Qp0r
* Qp1p, Qp1q, Qp1r
- * size = numQuadPts * numDims
+ * size = numQuadPts * cellDim
* index = iQuadPt*numDims + iDim
+ * @param numQuadPts3 Dimension of quadPtsRef.
+ * @param cellDim3 Dimension of quadPtsRef.
*
* @param quadWts Array of weights of quadrature points
* WtQp0, WtQp1, ...
* index = iQuadPt
+ * @param numQuadPts4 Dimension of quadWts.
*
- * @param cellDim Number of dimensions in reference cell
- * @param numBasis Number of basis functions for a cell
- * @param numQuadPts Number of quadrature points
* @param spaceDim Number of dimensions in coordinates of cell vertices
*/
void initialize(const double* basis,
+ const int numQuadPts1,
+ const int numBasis1,
const double* basisDerivRef,
+ const int numQuadPts2,
+ const int numBasis2,
+ const int cellDim2,
const double* quadPtsRef,
+ const int numQuadPts3,
+ const int cellDim3,
const double* quadWts,
- const int cellDim,
- const int numBasis,
- const int numQuadPts,
+ const int numQuadPts4,
const int spaceDim);
/** Set geometry associated with reference cell.
Modified: short/3D/PyLith/branches/pylith-swig/modulesrc/feassemble/QuadratureRefCell.i
===================================================================
--- short/3D/PyLith/branches/pylith-swig/modulesrc/feassemble/QuadratureRefCell.i 2009-03-12 00:10:35 UTC (rev 14298)
+++ short/3D/PyLith/branches/pylith-swig/modulesrc/feassemble/QuadratureRefCell.i 2009-03-12 04:32:08 UTC (rev 14299)
@@ -67,23 +67,23 @@
*/
%apply(double* IN_ARRAY2, int DIM1, int DIM2) {
(const double* basis,
- const int numQuadPts,
- const int numBasis)
+ const int numQuadPts1,
+ const int numBasis1)
};
%apply(double* IN_ARRAY3, int DIM1, int DIM2, int DIM3) {
(const double* basisDerivRef,
- const int numQuadPts,
- const int numBasis,
- const int spaceDim)
+ const int numQuadPts2,
+ const int numBasis2,
+ const int cellDim2)
};
%apply(double* IN_ARRAY2, int DIM1, int DIM2) {
(const double* quadPtsRef,
- const int numQuadPts,
- const int cellDim)
+ const int numQuadPts3,
+ const int cellDim3)
};
%apply(double* IN_ARRAY1, int DIM1) {
(const double* quadWts,
- const int numQuadPts)
+ const int numQuadPts4)
};
void initialize(const double* basis,
const int numQuadPts1,
@@ -96,7 +96,7 @@
const int numQuadPts3,
const int cellDim3,
const double* quadWts,
- const int numQuadPts,
+ const int numQuadPts4,
const int spaceDim);
%clear(const double* basis, const int numQuadPts, const int numBasis);
%clear(const double* basisDerivRef, const int numQuadPts, const int numBasis, const int spaceDim);
Modified: short/3D/PyLith/branches/pylith-swig/pylith/feassemble/FIATLagrange.py
===================================================================
--- short/3D/PyLith/branches/pylith-swig/pylith/feassemble/FIATLagrange.py 2009-03-12 00:10:35 UTC (rev 14298)
+++ short/3D/PyLith/branches/pylith-swig/pylith/feassemble/FIATLagrange.py 2009-03-12 04:32:08 UTC (rev 14299)
@@ -56,6 +56,10 @@
import pyre.inventory
+ dimension = pyre.inventory.int("dimension", default=3,
+ validator=validateDimension)
+ dimension.meta['tip'] = "Dimension of finite-element cell."
+
degree = pyre.inventory.int("degree", default=1)
degree.meta['tip'] = "Degree of finite-element cell."
@@ -664,6 +668,7 @@
import FIAT.shapes
ReferenceCell._configure(self)
+ self.cellDim = self.inventory.dimension
self.degree = self.inventory.degree
self.order = self.inventory.order
Modified: short/3D/PyLith/branches/pylith-swig/pylith/feassemble/Quadrature.py
===================================================================
--- short/3D/PyLith/branches/pylith-swig/pylith/feassemble/Quadrature.py 2009-03-12 00:10:35 UTC (rev 14298)
+++ short/3D/PyLith/branches/pylith-swig/pylith/feassemble/Quadrature.py 2009-03-12 04:32:08 UTC (rev 14299)
@@ -131,15 +131,42 @@
"""
Initialize C++ quadrature object.
"""
- print "cell.basis shape: ", cell.basis.shape
- print "cell.basisDeriv shape: ", cell.basisDeriv.shape
- print "cell.quadPts shape: ", cell.quadPts.shape
- print "cell.quadWts shape: ", cell.quadWts.shape
- print "cell.geometry.spaceDim: ", cell.geometry.spaceDim()
ModuleMeshQuadrature.initialize(self, cell.basis, cell.basisDeriv,
cell.quadPts, cell.quadWts,
cell.geometry.spaceDim())
return
+# ----------------------------------------------------------------------
+from feassemble import SubMeshQuadrature as ModuleSubMeshQuadrature
+
+# SubMeshQuadrature class
+class SubMeshQuadrature(QuadratureBase, ModuleSubMeshQuadrature):
+ """
+ Python object for integrating over finite-elements using quadrature.
+ """
+
+ # PUBLIC METHODS /////////////////////////////////////////////////////
+
+ def __init__(self, name="submeshquadrature"):
+ """
+ Constructor.
+ """
+ QuadratureBase.__init__(self, name)
+ ModuleSubMeshQuadrature.__init__(self)
+ return
+
+
+ # PRIVATE METHODS ////////////////////////////////////////////////////
+
+ def _initialize(self, cell):
+ """
+ Initialize C++ quadrature object.
+ """
+ ModuleSubMeshQuadrature.initialize(self, cell.basis, cell.basisDeriv,
+ cell.quadPts, cell.quadWts,
+ cell.geometry.spaceDim())
+ return
+
+
# End of file
Modified: short/3D/PyLith/branches/pylith-swig/unittests/libtests/feassemble/TestQuadrature.cc
===================================================================
--- short/3D/PyLith/branches/pylith-swig/unittests/libtests/feassemble/TestQuadrature.cc 2009-03-12 00:10:35 UTC (rev 14298)
+++ short/3D/PyLith/branches/pylith-swig/unittests/libtests/feassemble/TestQuadrature.cc 2009-03-12 04:32:08 UTC (rev 14299)
@@ -54,8 +54,11 @@
qOrig.refGeometry(&geometry);
qOrig.minJacobian(minJacobianE);
qOrig.checkConditioning(checkConditioning);
- qOrig.initialize(basisE, basisDerivE, quadPtsRefE, quadWtsE,
- cellDimE, numBasisE, numQuadPtsE, spaceDimE);
+ qOrig.initialize(basisE, numQuadPtsE, numBasisE,
+ basisDerivE, numQuadPtsE, numBasisE, cellDimE,
+ quadPtsRefE, numQuadPtsE, cellDimE,
+ quadWtsE, numQuadPtsE,
+ spaceDimE);
// Copy
Quadrature<topology::Mesh> qCopy(qOrig);
@@ -135,8 +138,11 @@
const double quadWts[] = { 4.0 };
QuadratureRefCell refCell;
- refCell.initialize(basis, basisDerivRef, quadPtsRef, quadWts,
- cellDim, numBasis, numQuadPts, spaceDim);
+ refCell.initialize(basis, numQuadPts, numBasis,
+ basisDerivRef, numQuadPts, numBasis, cellDim,
+ quadPtsRef, numQuadPts, cellDim,
+ quadWts, numQuadPts,
+ spaceDim);
Quadrature1D engine(refCell);
engine.initialize();
@@ -210,9 +216,11 @@
Quadrature<topology::Mesh> quadrature;
quadrature.refGeometry(&geometry);
quadrature.minJacobian(minJacobian);
- quadrature.initialize(data.basis, data.basisDerivRef,
- data.quadPtsRef, data.quadWts,
- cellDim, numBasis, numQuadPts, spaceDim);
+ quadrature.initialize(data.basis, numQuadPts, numBasis,
+ data.basisDerivRef, numQuadPts, numBasis, cellDim,
+ data.quadPtsRef, numQuadPts, cellDim,
+ data.quadWts, numQuadPts,
+ spaceDim);
const ALE::Obj<SieveMesh::label_sequence>& cells = sieveMesh->heightStratum(0);
CPPUNIT_ASSERT(!cells.isNull());
Modified: short/3D/PyLith/branches/pylith-swig/unittests/libtests/feassemble/TestQuadrature0D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-swig/unittests/libtests/feassemble/TestQuadrature0D.cc 2009-03-12 00:10:35 UTC (rev 14298)
+++ short/3D/PyLith/branches/pylith-swig/unittests/libtests/feassemble/TestQuadrature0D.cc 2009-03-12 04:32:08 UTC (rev 14299)
@@ -39,7 +39,7 @@
const int numQuadPts = 1;
const int spaceDim = 1;
const double basis[] = { 1.0 };
- const double basisDeriv[] = { 1.0 };
+ const double basisDerivRef[] = { 1.0 };
const double quadPtsRef[] = { 0.0 };
const double quadWts[] = { 1.0 };
@@ -56,8 +56,11 @@
QuadratureRefCell refCell;
refCell.minJacobian(minJacobian);
- refCell.initialize(basis, basisDeriv, quadPtsRef, quadWts,
- cellDim, numBasis, numQuadPts, spaceDim);
+ refCell.initialize(basis, numQuadPts, numBasis,
+ basisDerivRef, numQuadPts, numBasis, cellDim,
+ quadPtsRef, numQuadPts, cellDim,
+ quadWts, numQuadPts,
+ spaceDim);
Quadrature0D engine(refCell);
Modified: short/3D/PyLith/branches/pylith-swig/unittests/libtests/feassemble/TestQuadratureEngine.cc
===================================================================
--- short/3D/PyLith/branches/pylith-swig/unittests/libtests/feassemble/TestQuadratureEngine.cc 2009-03-12 00:10:35 UTC (rev 14298)
+++ short/3D/PyLith/branches/pylith-swig/unittests/libtests/feassemble/TestQuadratureEngine.cc 2009-03-12 04:32:08 UTC (rev 14299)
@@ -110,8 +110,11 @@
const double quadWts[] = { 4.0 };
QuadratureRefCell refCell;
- refCell.initialize(basis, basisDerivRef, quadPtsRef, quadWts,
- cellDim, numBasis, numQuadPts, spaceDim);
+ refCell.initialize(basis, numQuadPts, numBasis,
+ basisDerivRef, numQuadPts, numBasis, cellDim,
+ quadPtsRef, numQuadPts, cellDim,
+ quadWts, numQuadPts,
+ spaceDim);
Quadrature1D engine(refCell);
engine.initialize();
@@ -167,8 +170,11 @@
const double minJacobian = 1.0e-06;
refCell->minJacobian(minJacobian);
- refCell->initialize(basis, basisDerivRef, quadPtsRef, quadWts,
- cellDim, numBasis, numQuadPts, spaceDim);
+ refCell->initialize(basis, numQuadPts, numBasis,
+ basisDerivRef, numQuadPts, numBasis, cellDim,
+ quadPtsRef, numQuadPts, cellDim,
+ quadWts, numQuadPts,
+ spaceDim);
// Check values from computeGeometry()
engine->initialize();
Modified: short/3D/PyLith/branches/pylith-swig/unittests/libtests/feassemble/TestQuadratureRefCell.cc
===================================================================
--- short/3D/PyLith/branches/pylith-swig/unittests/libtests/feassemble/TestQuadratureRefCell.cc 2009-03-12 00:10:35 UTC (rev 14298)
+++ short/3D/PyLith/branches/pylith-swig/unittests/libtests/feassemble/TestQuadratureRefCell.cc 2009-03-12 04:32:08 UTC (rev 14299)
@@ -77,8 +77,11 @@
const double minJacobian = 1.0;
QuadratureRefCell q;
- q.initialize(basis, basisDerivRef, quadPtsRef, quadWts,
- cellDim, numBasis, numQuadPts, spaceDim);
+ q.initialize(basis, numQuadPts, numBasis,
+ basisDerivRef, numQuadPts, numBasis, cellDim,
+ quadPtsRef, numQuadPts, cellDim,
+ quadWts, numQuadPts,
+ spaceDim);
CPPUNIT_ASSERT_EQUAL(cellDim, q._cellDim);
CPPUNIT_ASSERT_EQUAL(numBasis, q._numBasis);
Modified: short/3D/PyLith/branches/pylith-swig/unittests/pytests/feassemble/TestMeshQuadrature.py
===================================================================
--- short/3D/PyLith/branches/pylith-swig/unittests/pytests/feassemble/TestMeshQuadrature.py 2009-03-12 00:10:35 UTC (rev 14298)
+++ short/3D/PyLith/branches/pylith-swig/unittests/pytests/feassemble/TestMeshQuadrature.py 2009-03-12 04:32:08 UTC (rev 14299)
@@ -118,6 +118,7 @@
self.assertEqual(2, quadrature.numQuadPts())
from pylith.utils.testarray import test_double
+ self.failIf(True)
#import pylith.feassemble.testfeassemble as testmodule
#vertices = testmodule.vertices(quadrature.cppHandle)
@@ -135,9 +136,6 @@
#quadPts = testmodule.quadPtsRef(quadrature.cppHandle)
#test_double(self, quadPtsE, numpy.array(quadPts))
- from pylith.feassemble.CellGeometry import GeometryLine1D
- self.failUnless(isinstance(quadrature.refGeometry(), GeometryLine1D))
-
return
@@ -149,7 +147,6 @@
cell = FIATSimplex()
cell.inventory.shape = "line"
- cell.inventory.degree = 1
cell._configure()
quadrature = MeshQuadrature()
@@ -160,8 +157,112 @@
self.assertEqual(1, quadrature.cellDim())
self.assertEqual(spaceDim, quadrature.spaceDim())
self.assertEqual(2, quadrature.numBasis())
+ return
+
+
+ def test_simplex2D(self):
+ """
+ Test setup of quadrature for simplex cells for a 2-D problem.
+ """
+ spaceDim = 2
+
+ cell = FIATSimplex()
+ cell.inventory.shape = "triangle"
+ cell._configure()
+ quadrature = MeshQuadrature()
+ quadrature.inventory.cell = cell
+ quadrature._configure()
+
+ quadrature.preinitialize(spaceDim)
+ self.assertEqual(2, quadrature.cellDim())
+ self.assertEqual(spaceDim, quadrature.spaceDim())
+ self.assertEqual(3, quadrature.numBasis())
return
+ def test_simplex3D(self):
+ """
+ Test setup of quadrature for simplex cells for a 3-D problem.
+ """
+ spaceDim = 3
+
+ cell = FIATSimplex()
+ cell.inventory.shape = "tetrahedron"
+ cell._configure()
+
+ quadrature = MeshQuadrature()
+ quadrature.inventory.cell = cell
+ quadrature._configure()
+
+ quadrature.preinitialize(spaceDim)
+ self.assertEqual(3, quadrature.cellDim())
+ self.assertEqual(spaceDim, quadrature.spaceDim())
+ self.assertEqual(4, quadrature.numBasis())
+ return
+
+
+ def test_lagrange1D(self):
+ """
+ Test setup of quadrature for Lagrange cells for a 1-D problem.
+ """
+ spaceDim = 1
+
+ cell = FIATLagrange()
+ cell.inventory.dimension = 1
+ cell._configure()
+
+ quadrature = MeshQuadrature()
+ quadrature.inventory.cell = cell
+ quadrature._configure()
+
+ quadrature.preinitialize(spaceDim)
+ self.assertEqual(1, quadrature.cellDim())
+ self.assertEqual(spaceDim, quadrature.spaceDim())
+ self.assertEqual(2, quadrature.numBasis())
+ return
+
+
+ def test_lagrange2D(self):
+ """
+ Test setup of quadrature for Lagrange cells for a 2-D problem.
+ """
+ spaceDim = 2
+
+ cell = FIATLagrange()
+ cell.inventory.dimension = 2
+ cell._configure()
+
+ quadrature = MeshQuadrature()
+ quadrature.inventory.cell = cell
+ quadrature._configure()
+
+ quadrature.preinitialize(spaceDim)
+ self.assertEqual(2, quadrature.cellDim())
+ self.assertEqual(spaceDim, quadrature.spaceDim())
+ self.assertEqual(4, quadrature.numBasis())
+ return
+
+
+ def test_lagrange3D(self):
+ """
+ Test setup of quadrature for Lagrange cells for a 3-D problem.
+ """
+ spaceDim = 3
+
+ cell = FIATLagrange()
+ cell.inventory.dimension = 3
+ cell._configure()
+
+ quadrature = MeshQuadrature()
+ quadrature.inventory.cell = cell
+ quadrature._configure()
+
+ quadrature.preinitialize(spaceDim)
+ self.assertEqual(3, quadrature.cellDim())
+ self.assertEqual(spaceDim, quadrature.spaceDim())
+ self.assertEqual(8, quadrature.numBasis())
+ return
+
+
# End of file
More information about the CIG-COMMITS
mailing list