------------------------------------------------------------
revno: 1498
committer: Kristian B. Ølgaard<k.b.oelgaard@xxxxxxxxx>
branch nick: ffc
timestamp: Wed 2010-07-07 18:17:07 +0100
message:
Added support for CellVolume from UFL.
modified:
ChangeLog
ffc/quadrature/optimisedquadraturetransformer.py
ffc/quadrature/quadraturetransformer.py
ffc/quadrature/quadraturetransformerbase.py
Your team FFC Core Team is subscribed to branch lp:ffc.
To unsubscribe from this branch go to https://code.launchpad.net/~ffc-core/ffc/main/+edit-subscription
=== modified file 'ChangeLog'
--- ChangeLog 2010-07-01 17:43:36 +0000
+++ ChangeLog 2010-07-07 17:17:07 +0000
@@ -1,3 +1,4 @@
+ - Added support for new geometric quantity CellVolume in UFL.
0.9.3 [2010-07-01]
- Make global_dimension for Real return an int instead of double, bug # 592088
- Add support for facet normal in 1D.
=== modified file 'ffc/quadrature/optimisedquadraturetransformer.py'
--- ffc/quadrature/optimisedquadraturetransformer.py 2010-07-01 17:41:40 +0000
+++ ffc/quadrature/optimisedquadraturetransformer.py 2010-07-07 17:17:07 +0000
@@ -187,7 +187,7 @@
return {():new_val}
# -------------------------------------------------------------------------
- # FacetNormal (geometry.py).
+ # FacetNormal, CellVolume (geometry.py).
# -------------------------------------------------------------------------
def facet_normal(self, o, *operands):
#print("Visiting FacetNormal:")
@@ -216,6 +216,17 @@
return {(): create_symbol(normal_component, GEO)}
+ def cell_volume(self, o, *operands):
+ # Safety check.
+ ffc_assert(not operands, "Didn't expect any operands for FacetNormal: " + repr(operands))
+
+ # FIXME: KBO: This has to change for higher order elements
+ detJ = format["det(J)"](self.restriction)
+ volume = format["absolute value"](detJ)
+ self.trans_set.add(detJ)
+
+ return {():create_symbol(volume, GEO)}
+
def create_argument(self, ufl_argument, derivatives, component, local_comp,
local_offset, ffc_element, transformation, multiindices):
"Create code for basis functions, and update relevant tables of used basis."
=== modified file 'ffc/quadrature/quadraturetransformer.py'
--- ffc/quadrature/quadraturetransformer.py 2010-06-30 09:59:49 +0000
+++ ffc/quadrature/quadraturetransformer.py 2010-07-07 17:17:07 +0000
@@ -262,7 +262,7 @@
return {():f_abs(operands[0][()])}
# -------------------------------------------------------------------------
- # FacetNormal (geometry.py).
+ # FacetNormal, CellVolume (geometry.py).
# -------------------------------------------------------------------------
def facet_normal(self, o, *operands):
#print("Visiting FacetNormal:")
@@ -291,6 +291,18 @@
return {():normal_component}
+ def cell_volume(self, o, *operands):
+ # Safety check.
+ ffc_assert(not operands, "Didn't expect any operands for CellVolume: " + repr(operands))
+
+ # FIXME: KBO: This has to change for higher order elements
+ detJ = format["det(J)"](self.restriction)
+ volume = format["absolute value"](detJ)
+ self.trans_set.add(detJ)
+
+ return {():volume}
+
+
def create_argument(self, ufl_argument, derivatives, component, local_comp,
local_offset, ffc_element, transformation, multiindices):
"Create code for basis functions, and update relevant tables of used basis."
=== modified file 'ffc/quadrature/quadraturetransformerbase.py'
--- ffc/quadrature/quadraturetransformerbase.py 2010-07-01 17:41:40 +0000
+++ ffc/quadrature/quadraturetransformerbase.py 2010-07-07 17:17:07 +0000
@@ -250,12 +250,16 @@
error("This object should be implemented by the child class.")
# -------------------------------------------------------------------------
- # FacetNormal (geometry.py).
+ # FacetNormal, CellVolume (geometry.py).
# -------------------------------------------------------------------------
def facet_normal(self, o, *operands):
print "\n\nVisiting FacetNormal: ", repr(o)
error("This object should be implemented by the child class.")
+ def cell_volume(self, o, *operands):
+ print "\n\nVisiting CellVolume: ", repr(o)
+ error("This object should be implemented by the child class.")
+
# -------------------------------------------------------------------------
# Things that can be handled by the base class.
# -------------------------------------------------------------------------