[cig-commits] r6808 - in short/3D/PyLith/trunk: modulesrc/solver
pylith/feassemble
knepley at geodynamics.org
knepley at geodynamics.org
Wed May 9 12:05:32 PDT 2007
Author: knepley
Date: 2007-05-09 12:05:31 -0700 (Wed, 09 May 2007)
New Revision: 6808
Modified:
short/3D/PyLith/trunk/modulesrc/solver/solver.pyxe.src
short/3D/PyLith/trunk/pylith/feassemble/FIATLagrange.py
Log:
Fixed VecScatter calls, Add FIATLagrange stuff (need tests)
Modified: short/3D/PyLith/trunk/modulesrc/solver/solver.pyxe.src
===================================================================
--- short/3D/PyLith/trunk/modulesrc/solver/solver.pyxe.src 2007-05-09 18:26:50 UTC (rev 6807)
+++ short/3D/PyLith/trunk/modulesrc/solver/solver.pyxe.src 2007-05-09 19:05:31 UTC (rev 6808)
@@ -209,10 +209,10 @@
err = VecCreateSeqWithArray(PETSC_COMM_SELF, (*fieldIn)->size(),
(*fieldIn)->restrict(), &localVec);CHKERRQ(err);
err = VecDuplicate(localVec, &vecIn); CHKERRQ(err);
- err = VecScatterBegin(localVec, vecIn, INSERT_VALUES, SCATTER_FORWARD,
- scatter);CHKERRQ(err);
- err = VecScatterEnd(localVec, vecIn, INSERT_VALUES, SCATTER_FORWARD,
- scatter); CHKERRQ(err);
+ err = VecScatterBegin(scatter, localVec, vecIn, INSERT_VALUES, SCATTER_FORWARD
+ );CHKERRQ(err);
+ err = VecScatterEnd(scatter, localVec, vecIn, INSERT_VALUES, SCATTER_FORWARD
+ ); CHKERRQ(err);
err = VecDestroy(localVec); CHKERRQ(err);
err = KSPSetOperators(*ksp, *jacobian, *jacobian,
DIFFERENT_NONZERO_PATTERN); CHKERRQ(err);
@@ -220,10 +220,10 @@
err = KSPSolve(*ksp, vecIn, vecOut); CHKERRQ(err);
err = VecCreateSeqWithArray(PETSC_COMM_SELF, (*fieldOut)->size(),
(*fieldOut)->restrict(), &localVec);CHKERRQ(err);
- err = VecScatterBegin(vecOut, localVec, INSERT_VALUES, SCATTER_REVERSE,
- scatter); CHKERRQ(err);
- err = VecScatterEnd(vecOut, localVec, INSERT_VALUES, SCATTER_REVERSE,
- scatter); CHKERRQ(err);
+ err = VecScatterBegin(scatter, vecOut, localVec, INSERT_VALUES, SCATTER_REVERSE
+ ); CHKERRQ(err);
+ err = VecScatterEnd(scatter, vecOut, localVec, INSERT_VALUES, SCATTER_REVERSE
+ ); CHKERRQ(err);
err = VecDestroy(localVec); CHKERRQ(err);
} catch (const std::exception& err) {
PyErr_SetString(PyExc_RuntimeError,
Modified: short/3D/PyLith/trunk/pylith/feassemble/FIATLagrange.py
===================================================================
--- short/3D/PyLith/trunk/pylith/feassemble/FIATLagrange.py 2007-05-09 18:26:50 UTC (rev 6807)
+++ short/3D/PyLith/trunk/pylith/feassemble/FIATLagrange.py 2007-05-09 19:05:31 UTC (rev 6808)
@@ -60,7 +60,7 @@
degree = pyre.inventory.int("degree", default=1)
degree.meta['tip'] = "Degree of finite-element cell."
- quadOrder = pyre.inventory.int("quad_order", default=1)
+ quadOrder = pyre.inventory.int("quad_order", default=-1)
quadOrder.meta['tip'] = "Order of quadrature rule."
@@ -80,10 +80,21 @@
"""
Set members based using inventory.
"""
+ import FIAT.shapes
+
FIATCell._configure(self)
- self.dimension = self.inventory.dimension
+ self.cellDim = self.inventory.dimension
self.degree = self.inventory.degree
- self.order = self.inventory.order
+ self.quadOrder = self.inventory.quadOrder
+ if self.cellDim == 1:
+ self.shape = FIAT.shapes.LINE
+ elif self.cellDim == 2:
+ self.shape = FIAT.shapes.TRIANGLE
+ elif self.cellDim == 3:
+ self.shape = FIAT.shapes.TETRAHEDRON
+ if self.quadOrder == -1:
+ self.quadOrder = 2*self.degree+1
+ self.numCorners = self.cellDim+1
return
@@ -91,10 +102,11 @@
"""
Setup quadrature rule for reference cell.
"""
-
- # ADD STUFF HERE
- raise NotImplementedError()
-
+ import FIAT.quadrature
+ self.quadrature = FIAT.quadrature.make_quadrature_by_degree(shape, self.quadOrder)
+ self.numQuadPts = len(quadrature.get_points())
+ self.quadPts = quadrature.get_points()
+ self.quadWts = quadrature.get_weights()
return
@@ -104,9 +116,12 @@
"""
from FIAT.Lagrange import Lagrange
- # ADD STUFF HERE
- raise NotImplementedError()
-
+ self.element = Lagrange(self.shape, self.degree)
+ points = self.quadrature.get_points()
+ basis = self.element.function_space()
+ self.numBasisFuncs = len(basis)
+ self.basis = numpy.transpose(basis.tabulate(points))
+ self.basisDeriv = numpy.transpose([basis.deriv_all(d).tabulate(points) for d in range(self.cellDim)])
return
# FACTORIES ////////////////////////////////////////////////////////////
More information about the cig-commits
mailing list