dolfin team mailing list archive
-
dolfin team
-
Mailing list archive
-
Message #17598
Re: Accessing Function data after mesh refinement
On Mon, Feb 15, 2010 at 11:39:26AM +0100, Marie Rognes wrote:
> Garth N. Wells wrote:
> >Anders Logg wrote:
> >>On Fri, Feb 12, 2010 at 05:42:26PM +0000, Garth N. Wells wrote:
> >>>Anders Logg wrote:
> >>>>On Fri, Feb 12, 2010 at 04:57:05PM +0100, Anders Logg wrote:
> >>>>>On Fri, Feb 12, 2010 at 04:23:51PM +0100, Marie Rognes wrote:
> >>>>>>I'm interesting in accessing the vector of a Function after mesh-refinement.
> >>>>>>At the moment, I'm getting:
> >>>>>>
> >>>>>> RuntimeError: *** Error: You are attempting to access a non-const
> >>>>>> vector from a sub-Function.
> >>>>>>
> >>>>>>Is this inevitable, a bug or a trigger-happy error message?
> >>>>>>
> >>>>>> from dolfin import *
> >>>>>> mesh = UnitSquare(2,2)
> >>>>>> V = FunctionSpace(mesh, "CG", 1)
> >>>>>> u = Function(V)
> >>>>>> mesh.refine()
> >>>>>> u.vector()
> >>>>>Looks like a bug. The function is not being refined but the mesh, the
> >>>>>dofmap and the functionspace is refined. Might be related to the
> >>>>>recent work on refinement.
> >>>>It should be fixed now. Someone had commented out register_object in
> >>>>the Function constructor.
> >>>I'm not too keen on all this magic. Harish I and have an adaptive solver
> >>> in which the function spaces are declared inside a loop and it's slowly
> >>>leaking memory, but I can't figure out why. 'Magic' makes it really hard
> >>>to figure out what's going on.
> >>That's unfortunate. But the magic is necessary if we should allow
> >>meshes to be refined. The other option would be to remove
> >>mesh.refine() and always rely on
> >>
> >> new_mesh = refine(mesh)
> >>
> >>And then explicitly create the new function spaces and project the
> >>functions.
> >>
> >
> >This is what we're doing.
> >
> >Garth
> >
> >
> >>I'm not sure which implications that would have fore Marie's code.
> >>Marie?
> >>
>
> I'm pretty keen on the magic, but can survive without it.
I also like the magic, but AdaptiveObjects.cpp is complex and fragile
so it would be good to remove it.
> If the automagic updating of function spaces etc is removed.
> then mesh.refine() should definitely be disabled.
Yes, definitely.
But let's keep AdaptiveObjects until we have ported our code to
new_mesh = refine(mesh)
--
Anders
Attachment:
signature.asc
Description: Digital signature
Follow ups
References