← Back to team overview

ffc team mailing list archive

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

 

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
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
>
>
> --
> lp:ffc
> https://code.launchpad.net/~ffc-core/ffc/main
>
> 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.
>     # -------------------------------------------------------------------------
>
>
>



Follow ups