[cig-commits] r4630 - in short/3D/PyLith/trunk: modulesrc/feassemble pylith/feassemble

baagaard at geodynamics.org baagaard at geodynamics.org
Tue Sep 26 17:23:43 PDT 2006


Author: baagaard
Date: 2006-09-26 17:23:43 -0700 (Tue, 26 Sep 2006)
New Revision: 4630

Modified:
   short/3D/PyLith/trunk/modulesrc/feassemble/feassemble.pyxe
   short/3D/PyLith/trunk/pylith/feassemble/FIATCell.py
   short/3D/PyLith/trunk/pylith/feassemble/Quadrature.py
   short/3D/PyLith/trunk/pylith/feassemble/ReferenceCell.py
Log:
Fixed shape of basis and basisDeriv. Switched to arrays for quad pts and wts (more general). Improved error checking in feassemble module.

Modified: short/3D/PyLith/trunk/modulesrc/feassemble/feassemble.pyxe
===================================================================
--- short/3D/PyLith/trunk/modulesrc/feassemble/feassemble.pyxe	2006-09-26 23:24:51 UTC (rev 4629)
+++ short/3D/PyLith/trunk/modulesrc/feassemble/feassemble.pyxe	2006-09-27 00:23:43 UTC (rev 4630)
@@ -73,30 +73,53 @@
     #}embed
 
     import spatialdata.utils.simplearray
+
+    # basis
     basis = spatialdata.utils.simplearray.objAsSimpleArray(basis)
     if not basis.isCompatible(nd=2, simpletype="double",
                               contiguous=True, notswapped=True):
       raise TypeError, \
             "Argument 'basis' must be a contiguous, 2-D array " \
             "of type double."
-    basis = spatialdata.utils.simplearray.objAsSimpleArray(basisDeriv)
+    if numQuadPts != basis.shape[0] or numCorners != basis.shape[1]:
+      raise TypeError, \
+            "Shape of argument 'basis' must be (numQuadPts, numCorners)."
+
+    # basisDeriv
+    basisDeriv = spatialdata.utils.simplearray.objAsSimpleArray(basisDeriv)
     if not basisDeriv.isCompatible(nd=3, simpletype="double",
                                    contiguous=True, notswapped=True):
       raise TypeError, \
             "Argument 'basisDeriv' must be a contiguous, 3-D array " \
             "of type double."
+    if numQuadPts != basisDeriv.shape[0] or \
+           numCorners != basisDeriv.shape[1] or \
+           cellDim != basisDeriv[2]:
+      raise TypeError, \
+            "Shape of argument 'basisDeriv' must be (numQuadPts, " \
+            "numCorners, cellDim)."
+
+    # quadPts
     quadPts = spatialdata.utils.simplearray.objAsSimpleArray(quadPts)
     if not quadPts.isCompatible(nd=2, simpletype="double",
                                 contiguous=True, notswapped=True):
       raise TypeError, \
             "Argument 'quadPts' must be a contiguous, 2-D array " \
             "of type double."
+    if numQuadPts != quadPts.shape[0] or cellDim != quadPts.shape[1]:
+      raise TypeError, \
+            "Shape of argument 'quadPts' must be (numQuadPts, cellDim)."
+
+    # quadWts
     quadWts = spatialdata.utils.simplearray.objAsSimpleArray(quadWts)
     if not quadWts.isCompatible(nd=1, simpletype="double",
                                 contiguous=True, notswapped=True):
       raise TypeError, \
-            "Argument 'quadWts' must be a contiguous, 2-D array " \
+            "Argument 'quadWts' must be a contiguous, 1-D array " \
             "of type double."
+    if numQuadPts != quadWts.shape[0]:
+      raise TypeError, \
+            "Shape of argument 'quadWts' must be (numQuadPts)."
 
     cdef double* basisCpp
     cdef double* basisDerivCpp

Modified: short/3D/PyLith/trunk/pylith/feassemble/FIATCell.py
===================================================================
--- short/3D/PyLith/trunk/pylith/feassemble/FIATCell.py	2006-09-26 23:24:51 UTC (rev 4629)
+++ short/3D/PyLith/trunk/pylith/feassemble/FIATCell.py	2006-09-27 00:23:43 UTC (rev 4630)
@@ -52,8 +52,11 @@
     self.basisDeriv = numpy.array([basisFns.deriv_all(d).tabulate(quadpts) \
                                    for d in range(dim)]).squeeze().transpose()
 
+    self.quadPts = numpy.array(quadrature.get_points())
+    self.quadWts = numpy.array(quadrature.get_weights())
+
     self.cellDim = dim
-    self.numCorners
+    self.numCorners = self.basis.shape[1]
     self.numQuadPts = len(quadrature.get_weights())
 
     self._info.line("Basis:")

Modified: short/3D/PyLith/trunk/pylith/feassemble/Quadrature.py
===================================================================
--- short/3D/PyLith/trunk/pylith/feassemble/Quadrature.py	2006-09-26 23:24:51 UTC (rev 4629)
+++ short/3D/PyLith/trunk/pylith/feassemble/Quadrature.py	2006-09-27 00:23:43 UTC (rev 4630)
@@ -68,9 +68,7 @@
 
     c = self.cell
     c.initialize()
-    self.cppHandle.initialize(c.basis, c.basisDeriv,
-                              c.quadrature.get_points(),
-                              c.quadrature.get_weights(),
+    self.cppHandle.initialize(c.basis, c.basisDeriv, c.quadPts, c.quadWts,
                               c.cellDim, c.numCorners, c.numQuadPts,
                               self.spaceDim)
     return

Modified: short/3D/PyLith/trunk/pylith/feassemble/ReferenceCell.py
===================================================================
--- short/3D/PyLith/trunk/pylith/feassemble/ReferenceCell.py	2006-09-26 23:24:51 UTC (rev 4629)
+++ short/3D/PyLith/trunk/pylith/feassemble/ReferenceCell.py	2006-09-27 00:23:43 UTC (rev 4630)
@@ -31,14 +31,18 @@
     Constructor.
     """
     Component.__init__(self, name, facility="referencecell")
-    self.basis = None
-    self.basisDeriv = None
-    self.quadrature = None
-    self.cellDim = None
-    self.numCorners = None
-    self.numQuadPts = None
+
+    self.basis = None # numpy array w/basis fns at quad pts
+    self.basisDeriv = None # numpy array w/basis fn derivs at quad pts
+    self.quadPts = None # numpy array w/coordinates of quad pts
+    self.quadWts = None # numpy array w/wts of quad pts
+
+    self.cellDim = None # dimension of reference cell
+    self.numCorners = None # number of vertices in reference cell
+    self.numQuadPts = None # number of quadrature points
     return
 
+
   def initialize(self):
     """
     Initialize reference finite-element cell.



More information about the cig-commits mailing list