← Back to team overview

dolfin team mailing list archive

Re: Accessing Function data after mesh refinement

 


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?
> 
> --
> Anders





Follow ups

References