[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