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, <nore...@launchpad.net> wrote: > ------------------------------------------------------------ > revno: 1498 > committer: Kristian B. Ølgaard <k.b.oelga...@gmail.com> > 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. > # > ------------------------------------------------------------------------- > > > _______________________________________________ Mailing list: https://launchpad.net/~ffc Post to : ffc@lists.launchpad.net Unsubscribe : https://launchpad.net/~ffc More help : https://help.launchpad.net/ListHelp