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(). Garth > Johan > >> Garth >> >>>>> Isn't it possible to use what repr(ufl_element) returns to define the >>>>> signature of an element or isn't the ufl_element available in >>>>> ffc.FiniteElement? >>>> Yes. I committed this change to FFC a short while ago. >>> Ok! >>> >>> Johan >>> >>>> Garth >>>> >>>>> Johan >>>>> >>>>>>> If I look at the generated code in Poisson.h (the DOLFIN demo), the >>>>>>> signature is >>>>>>> >>>>>>> "FiniteElement('Lagrange', 'triangle', 1)" >>>>>>> >>>>>>> so the restricted one looks consistent to me. How does PyDOFLIN use >>>>>>> the signature? >>>>>>> >>>>>>> Garth >>>>>>> >>>>>>>> Johan >>>>>>>> >>>>>>>>> Garth >>>>>>>>> >>>>>>>>>> Garth >>>>>>>>>> >>>>>>>>>> File "solver.py", line 96, in solve >>>>>>>>>> (uhat, uu) = Uh.split() >>>>>>>>>> File >>>>>>>>>> "/home/garth/code/fenics/dolfin/dolfin-all/local/lib/python2.6/si >>>>>>>>>> te- pa cka >>>>>>>>>> >>>>>>>>>> ges/dolfin/function.py", line 150, in split >>>>>>>>>> return tuple(self._sub(i,deepcopy) for i in >>>>>>>>>> xrange(self._V.num_sub_spaces())) >>>>>>>>>> File >>>>>>>>>> "/home/garth/code/fenics/dolfin/dolfin-all/local/lib/python2.6/si >>>>>>>>>> te- pa cka >>>>>>>>>> >>>>>>>>>> ges/dolfin/function.py", line 150, in <genexpr> >>>>>>>>>> return tuple(self._sub(i,deepcopy) for i in >>>>>>>>>> xrange(self._V.num_sub_spaces())) >>>>>>>>>> File >>>>>>>>>> "/home/garth/code/fenics/dolfin/dolfin-all/local/lib/python2.6/si >>>>>>>>>> te- pa cka >>>>>>>>>> >>>>>>>>>> ges/dolfin/function.py", line 135, in _sub >>>>>>>>>> return Function(self, i) >>>>>>>>>> File >>>>>>>>>> "/home/garth/code/fenics/dolfin/dolfin-all/local/lib/python2.6/si >>>>>>>>>> te- pa cka >>>>>>>>>> >>>>>>>>>> ges/dolfin/function.py", line 80, in __init__ >>>>>>>>>> self._V = V.sub(i) >>>>>>>>>> File >>>>>>>>>> "/home/garth/code/fenics/dolfin/dolfin-all/local/lib/python2.6/si >>>>>>>>>> te- pa cka >>>>>>>>>> >>>>>>>>>> ges/dolfin/functionspace.py", line 88, in sub >>>>>>>>>> return FunctionSpaceFromCpp(cpp.SubSpace(self,i)) >>>>>>>>>> File >>>>>>>>>> "/home/garth/code/fenics/dolfin/dolfin-all/local/lib/python2.6/si >>>>>>>>>> te- pa cka >>>>>>>>>> >>>>>>>>>> ges/dolfin/functionspace.py", line 101, in __init__ >>>>>>>>>> self._ufl_element = eval(cppV.element().signature(), >>>>>>>>>> ufl.__dict__) File "<string>", line 1 >>>>>>>>>> FiniteElement('Lagrange', 'triangle', 1)|_{<interval of >>>>>>>>>> degree 1>} >>>>>>>>>> >>>>>>>>>>> changeset: 7377:40cca61143c6 >>>>>>>>>>> user: "Garth N. Wells <gn...@cam.ac.uk>" >>>>>>>>>>> date: Sat Oct 17 13:24:47 2009 +0100 >>>>>>>>>>> files: dolfin/mesh/SubDomain.h >>>>>>>>>>> description: >>>>>>>>>>> Small formatting fix. >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> changeset: 7376:8ee974ed5f7e >>>>>>>>>>> user: Anders Logg <l...@simula.no> >>>>>>>>>>> date: Sat Oct 17 00:05:34 2009 +0200 >>>>>>>>>>> files: dolfin/function/Function.cpp >>>>>>>>>>> description: >>>>>>>>>>> Remove unnecessary lines in Function::eval noted by Marc S. >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> ---------------------------------------------------------------- >>>>>>>>>>> --- -- - For more details, visit http://www.fenics.org/hg/dolfin >>>>>>>>>>> _______________________________________________ DOLFIN-dev >>>>>>>>>>> mailing list DOLFIN-dev@fenics.org >>>>>>>>>>> http://www.fenics.org/mailman/listinfo/dolfin-dev >>>>>>>>>> _______________________________________________ >>>>>>>>>> DOLFIN-dev mailing list >>>>>>>>>> DOLFIN-dev@fenics.org >>>>>>>>>> http://www.fenics.org/mailman/listinfo/dolfin-dev >>>>>>>>> _______________________________________________ >>>>>>>>> DOLFIN-dev mailing list >>>>>>>>> DOLFIN-dev@fenics.org >>>>>>>>> http://www.fenics.org/mailman/listinfo/dolfin-dev _______________________________________________ DOLFIN-dev mailing list DOLFIN-dev@fenics.org http://www.fenics.org/mailman/listinfo/dolfin-dev