Anders Logg wrote: > On Sun, Oct 18, 2009 at 11:43:03PM +0200, Johan Hake wrote: >> On Sunday 18 October 2009 21:10:08 Anders Logg wrote: >>> On Sun, Oct 18, 2009 at 08:37:21PM +0200, Johan Hake wrote: >>>> On Sunday 18 October 2009 20:31:41 Garth N. Wells wrote: >>>>> Johan Hake wrote: >>>>>> On Sunday 18 October 2009 20:07:41 Garth N. Wells wrote: >>>>>>> On Oct 18 2009, Johan Hake wrote: >>>>>>>> On Sunday 18 October 2009 18:21:23 Garth N. Wells wrote: >>>>>>>>> Johan Hake wrote: >>>>>>>>>> On Sunday 18 October 2009 16:43:28 Garth N. Wells wrote: >>>>>>>>>>> Garth N. Wells wrote: >>>>>>>>>>>> Johan Hake wrote: >>>>>>>>>>>>> On Saturday 17 October 2009 21:08:14 Garth N. Wells wrote: >>>>>>>>>>>>>> Garth N. Wells wrote: >>>>>>>>>>>>>>> DOLFIN wrote: >>>>>>>>>>>>>>>> One or more new changesets pushed to the primary dolfin >>>>>>>>>>>>>>>> repository. A short summary of the last three changesets is >>>>>>>>>>>>>>>> included below. >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> changeset: 7378:e5c921e0293a >>>>>>>>>>>>>>>> tag: tip >>>>>>>>>>>>>>>> user: "Johan Hake <h...@simula.no>" >>>>>>>>>>>>>>>> date: Sat Oct 17 15:45:36 2009 +0200 >>>>>>>>>>>>>>>> files: site-packages/dolfin/function.py >>>>>>>>>>>>>>>> site-packages/dolfin/functionspace.py description: >>>>>>>>>>>>>>>> Make Mixed FunctionSpace access more consistant. >>>>>>>>>>>>>>>> - All methods are now defined in FunctionSpaceBase. >>>>>>>>>>>>>>>> - We now do not save any spaces in MixedFunctionSpace >>>>>>>>>>>>>>> This change broke my code. See below. >>>>>>>>>>>>>> Seems that the problem arises with spaces which are >>>>>>>>>>>>>> restricted, >>>>>>>>>>>>>> >>>>>>>>>>>>>> V = FunctionSpace(mesh, "CG", 1, "facet") >>>>>>>>>>>>> This is an error in the generated FFC code. >>>>>>>>>>>>> ufc::finite_element::signature() >>>>>>>>>>>>> should return a string that can be executed in a ufl namespace >>>>>>>>>>>>> and then generate the corresponding ufl.FiniteElement. >>>>>>>>>>>>> >>>>>>>>>>>>> For a restricted element the signature returns: >>>>>>>>>>>>> >>>>>>>>>>>>> "FiniteElement('Lagrange', 'triangle', 1)|_{<interval of >>>>>>>>>>>>> degree 1>}" >>>>>>>>>>>>> >>>>>>>>>>>>> where it should return: >>>>>>>>>>>>> >>>>>>>>>>>>> "ElementRestriction(FiniteElement('Lagrange', >>>>>>>>>>>>> Cell('triangle', 1, Space(2)), 1), Cell('interval', 1, >>>>>>>>>>>>> Space(1)))" >>>>>>>>>>> I've had a look, and while I don't yet follow where UFL defines >>>>>>>>>>> its signatures, >>>>>>>>>> repr(ulf_object) >>>>>>>>>> >>>>>>>>>> returns the uniqe signature of an ufl_object. >>>>>>>>>> >>>>>>>>>>> things are dangerous because FFC formats its own signature >>>>>>>>>>> strings, see line 227 of >>>>>>>>>>> >>>>>>>>>>> ffc/ffc/fem/finiteelement.py >>>>>>>>>> Yes, this is dangerous, at least if we want to use them as we do >>>>>>>>>> in PyDOLFIN. However taking repr of the corresponding ufl object >>>>>>>>>> is a well defined method that ufl use internally, when for >>>>>>>>>> example creating a unique string representation of a form. >>>>>>>>>> >>>>>>>>>>> We stopped using signature strings in DOLFIN because it gave us >>>>>>>>>>> all sorts of problems. Is it desirable to have PyDOLFIN depend >>>>>>>>>>> on the generated strings? Can it be avoided? >>>>>>>>>> It is a very nice way of constructing an ufl object when we have >>>>>>>>>> the compiled version. As the convention of repr(object) is that: >>>>>>>>>> >>>>>>>>>> new_object = eval(repr(object)) >>>>>>>>>> >>>>>>>>>> should return a new object of the same kind. >>>>>>>>>> >>>>>>>>>> So when we have a SubSpace with its compiled FiniteElement, it is >>>>>>>>>> easy to just call its signature method of its element to generate >>>>>>>>>> the corresponding ufl element, which is used to construct a full >>>>>>>>>> fledged dolfin.FunctionSpace. >>>>>>>>>> >>>>>>>>>> Not sure how this could be done another way. >>>>>>>>> Can't we get the sub-element from the original UFL function? >>>>>>>> Not when we return a SubSpace which is a compiled C++ structure. To >>>>>>>> be able to construct the ufl.FiniteElement (done in the class >>>>>>>> FunctionSpaceFromCpp in functionspace.py) we use the signature of >>>>>>>> the cpp.FiniteElement. >>>>>>>> >>>>>>>>> If I do >>>>>>>>> >>>>>>>>> (u0, u1) = pde.solve().split() >>>>>>>>> >>>>>>>>> are u0 and u1 UFL Functions, or just cpp Functions? >>>>>>>> They should be both. Their FunctionSpaces (self._V) are constructed >>>>>>>> using the the FunctionSpace.sub(i) (operator[]) method, which >>>>>>>> returns the compiled SubSpace I am talking about above. >>>>>>> OK, but if we have >>>>>>> >>>>>>> U = pde.solve() >>>>>>> >>>>>>> and U is a UFL Function, can't the UFL finiteelement for U be >>>>>>> accessed, and then the UFL sub-element(s) accessed and then >>>>>>> compiled? >>>>>> Yes, this should be possible! (Did not think of getting the sub >>>>>> element from a mixed ufl.element :P) >>>>>> >>>>>> However we do not have to compile them, as we needed to go the other >>>>>> way, from compiled to UFL. >>>>> OK. Now the situation is clear to me. >>>>> >>>>>> I still think the signature() -> UFL object is a neat feature! >>>>> The problem is that there is nothing that says that a form compiler >>>>> that uses UFL and produces UFC-compliant code must return the UFL >>>>> signature (repr) in ufc::finite_element::signature(). >>>> True. However that is something we discussed a year ago when we >>>> implemented the transition to FunctionSpace in PyDOLFIN. I thought this >>>> went into the ufc documentation, but I now see that this is not the case. >>>> For now... >>>> >>>> Lets get a blueprint at ufc and here what folks says. >>>> >>>> Johan >>> How about adding an optional function to the UFC interface for >>> returning the UFL string: >>> >>> virtual std::string ufl_repr() const { return ""; } >> Look like this is already described as a Blueprint, which comes from an old >> point in the TODO file. >> >> <https://blueprints.launchpad.net/ufc/+spec/string-description> >> >> I think Martin added it when we discussed this a while back. > > ok. I've added some comments to that blueprint now. >
For the time being FFC is using the UFL repr(element) string in ufc::finite_element::signature. Garth > -- > Anders > > > ------------------------------------------------------------------------ > > _______________________________________________ > FFC-dev mailing list > ffc-...@fenics.org > http://www.fenics.org/mailman/listinfo/ffc-dev _______________________________________________ DOLFIN-dev mailing list DOLFIN-dev@fenics.org http://www.fenics.org/mailman/listinfo/dolfin-dev