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
signature.asc
Description: Digital signature
_______________________________________________ Mailing list: https://launchpad.net/~dolfin Post to : [email protected] Unsubscribe : https://launchpad.net/~dolfin More help : https://help.launchpad.net/ListHelp

