← Back to team overview

ffc team mailing list archive

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

 

On 8 July 2010 08:22, Garth N. Wells <gnw20@xxxxxxxxx> 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.

I changed 'v' to 'volume' and fixed a few bugs along the way.

On a related note, should we implement CellDiagonal too?
We use cell.diagonal() for MeshSize in SpecialFunctions.h of DOLFIN
and since we often use MeshSize for the 'h' coefficient in DG forms
e.g., PoissonDG we could remove the need for this function evaluation.
The code to compute the CellDiagonal could just be copied from
IntervalCell, TriangleCell and TetrahedronCell of DOLFIN and dumped in
codesnippets.py.

Kristian

> Garth
>
>> --
>> 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
>>> >
>>
>



Follow ups

References