ffc team mailing list archive
-
ffc team
-
Mailing list archive
-
Message #03938
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