[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