← Back to team overview

ffc team mailing list archive

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

 



On 08/07/10 08:33, Mehdi Nikbakht wrote:
On Thu, 2010-07-08 at 08:22 +0100, Garth N. Wells wrote:
On Jul 8 2010, Anders Logg wrote:

On Wed, Jul 07, 2010 at 10:34:39PM +0100, Kristian Oelgaard wrote:
On 7 July 2010 20:22, Garth N. Wells<gnw20@xxxxxxxxx>  wrote:


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'.

It can be whatever we want, I just followed what was already there.
Should we then rename 'd', 'n' and 'x' to 'geometric_dimension',
'facet_normal', and 'spatial_coordinate' while we're at it?

I think d, n, x are fine, but v does not necessarily look like a
volume to me (it looks like a test function).


I agree - d, n and x are all commonly used, but v for volume isn't.

Garth

I have another request related to geometric computation inside UFL. Is
it possible to add a class called SurfaceNormal to geometry.py?


I don't see how this is possible - it can't be computed from the cell geometry. Shouldn't it be a Constant/Coefficient computed by the user?

Garth

Mehdi


--
Anders


Kristian

Garth



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



_______________________________________________
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