← Back to team overview

ffc team mailing list archive

Re: [Branch ~ffc-core/ffc/main] Rev 1498: Added support for CellVolume from UFL.

 



On 07/07/10 20:14, Anders Logg wrote:
On Wed, Jul 07, 2010 at 06:26:20PM +0100, Kristian Oelgaard wrote:
Supporting CellVolume makes it possible to do:

CG = FiniteElement("Lagrange", triangle, 2)
DG = FiniteElement("DG", triangle, 0)
v = TestFunction(DG)
f = Coefficient(CG)
vol = triangle.v

Would it be better to call it vol or volume instead of v? Or does it
have to be a one-letter word?


. . . or call it 'volume'.

Garth

--
Anders


L = 1.0/vol*v*f*dx

instead of using a Coefficient for 'vol' and then defining an
Expression in DOLFIN.

Currently, it will use the absolute value of the determinant of the
Jacobian in tabulate_tensor ( std::abs(detJ) ).

Kristian

On 7 July 2010 18:19,<noreply@xxxxxxxxxxxxx>  wrote:
------------------------------------------------------------
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.
     # -------------------------------------------------------------------------




_______________________________________________
Mailing list: https://launchpad.net/~ffc
Post to     : ffc@xxxxxxxxxxxxxxxxxxx
Unsubscribe : https://launchpad.net/~ffc
More help   : https://help.launchpad.net/ListHelp


_______________________________________________
Mailing list: https://launchpad.net/~ffc
Post to     : ffc@xxxxxxxxxxxxxxxxxxx
Unsubscribe : https://launchpad.net/~ffc
More help   : https://help.launchpad.net/ListHelp



Follow ups

References