Thread Previous • Date Previous • Date Next • Thread Next |
Johan Hake wrote:
On Wednesday 19 August 2009 15:48:43 Garth N. Wells wrote:Johan Hake wrote:On Wednesday 19 August 2009 15:12:21 Garth N. Wells wrote:Johan Hake wrote:On Wednesday 19 August 2009 14:57:20 Garth N. Wells wrote:Johan Hake wrote:On Wednesday 19 August 2009 14:21:12 Garth N. Wells wrote:Garth N. Wells wrote:Kent Andre wrote:Not sure what we have to do actually. I suppose I want get any clue from the demo/function/restriction demo? I see that Kent has modified the dolfin.FunctionSpace to reflect the present (broken) implementation of restriction, anything in that line? Should such an implementation has been done in FunctionSpaceBase instead of FunctionSpace? Kent? JohanThis restriction is different in the sense that the restriction is made by the standard element on a sub mesh. The restriction in focus now is on the complete mesh but for only a part of the element. Combined, these two features will be very powerful. I guess the sub-mesh restriction stuff is broken due to the parallel mesh.I've attached an example solver. To make it work for P^k with k > 2 we need to restrict some functions to cell facets. Using FFC, we do scalar = FiniteElement("Lagrange", "triangle", 3) dscalar = FiniteElement("Discontinuous Lagrange", "triangle", 3) # This syntax restricts the space 'scalar' to cell facets. mixed = scalar["facet"] + dscalar In PyDOLFIN we could do V_dg = FunctionSpace(mesh, "DG", 3) V_cg = FunctionSpace(mesh, "CG", 3, "facet") mixed = V_cg + V_dgI see now that we need to have the above option since the everything (e.g. the dof map) is created and compiled inside functionspace.py.We could implement it in FunctionSpaceBase, as an operator, returning a new FunctionSpaceBase, with the restricted element as arguemnt. However my concerns go to a sub space of a restricted mixed space (if such exists) see the other email. If we go for 1, (as you have already done ;) ), we cannot create a restricted mixed space using the addition syntax. mixed = V1 + V2Do you mean to then restrict mixed? I'm already doingPrecisely. After a second thought I think that doing it in the constructor is more clean. Makes life simpler. Is this also possible i UFL, I mean: e = FiniteElement("CG",cell,0,"facet") Should it?Is that a PyDOLFIN finite element? If it is, then yes, that's how it should work.I meant UFL.FiniteElement.OK. I don't know if that is the syntax. Kristian will know.Somewhat related, it's a bit annoying in PyDOLFIN that the code is recompiled when the mesh is changed. Can we avoid this? Should one then create a finite element and a dof map with which to initialise the Pythin FunctionSpace?Do you mean when one has refined a mesh?Yes, or just changed from one simulation to the next.Are you sure we get a recompilation, or is the module just loaded from cache?
It's recompiling. It seems to create code for each mesh I use. If I go back to a previously used mesh, it's super fast.
Garth
As far as I understand it is thereason for this that we need to recompute the dofmap.In C++ we create a dolfin::FunctionSpace from a dolfin::FiniteElement, a dolfin::DofMap and a dolfin::Mesh. The FiniteElement and DofMap are created with a ufc::finite_element and a ufc::dof_map, respectively. In the Python interface, in addition to what we have now, we would need FiniteElement and DofMap objects, with which we could create a FunctionSpace (together with a Mesh). Then, hopefully we could avoid recompilation when just the mesh is changed.If a mesh is refined it is the same mesh, and then it would be cool to just reinitialize the FunctionSpace, or the DofMap. Wouldn't this also be a feature in C++?FunctionSpace::reinitialize() FunctionSpace::reinitialize(shared_ptr<Mesh> Mesh)or something like that. The first one when the same mesh is being used, for example after a refinement, and the second one when another mesh is being used. Then we do not have to create a new FunctionSpace.JohanGarthHow is this done in the C++ interface. JohanGarthJohanV0 = FunctionSpace(mesh, "CG", 3, "facet") V1 = FunctionSpace(mesh, "DG", 3) mixed = V0 + V1 and it works. This type of restriction (we'll need to sort out our terminology) impacts the dofmap, which I why I think it needs to be involved in the creation of the function space. GarthIf we want a restricted mixed space we need to use the constructor. mixed = MixedFunctionSpace((V1,V2),restriction="facet") JohanGarthor V_dg = FunctionSpace(mesh, "DG", 3) V_cg = FunctionSpace(mesh, "CG", 3) mixed = V_cg["scalar"] + V_dg GarthKent _______________________________________________ DOLFIN-dev mailing list DOLFIN-dev@xxxxxxxxxx http://www.fenics.org/mailman/listinfo/dolfin-dev------------------------------------------------------------------- -- -- - _______________________________________________ DOLFIN-dev mailing list DOLFIN-dev@xxxxxxxxxx http://www.fenics.org/mailman/listinfo/dolfin-dev_______________________________________________ DOLFIN-dev mailing list DOLFIN-dev@xxxxxxxxxx http://www.fenics.org/mailman/listinfo/dolfin-dev
Thread Previous • Date Previous • Date Next • Thread Next |