Anders Logg wrote:
> On Fri, Oct 30, 2009 at 12:14:53PM +0100, Anders Logg wrote:
>> On Fri, Oct 30, 2009 at 10:20:31AM +0000, Garth N. Wells wrote:
>>>
>>> Marie Rognes 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:   7408:f32a6ec49c47
>>>>> tag:         tip
>>>>> user:        Anders Logg <l...@simula.no>
>>>>> date:        Thu Oct 29 23:28:47 2009 +0100
>>>>> files:       dolfin/fem/DofMap.cpp dolfin/fem/DofMap.h
>>>>> dolfin/function/FunctionSpace.cpp dolfin/function/FunctionSpace.h
>>>>> dolfin/mesh/Mesh.h
>>>>> description:
>>>>> First iteration of refinement of function spaces. Refinement of a
>>>>> function
>>>>> space should take care of refining the mesh, rebuilding the dofmap and
>>>>> interpolating all its member functions to the new function space.
>>>>>
>>>>> All essential bits should be in place but needs some debugging to
>>>>> find memory errors/leaks.
>>>>>
>>>>>
>>>> This seems to be not working quite optimally yet.
>>>>
>>>> 1) The attached script fails with the error:
>>>>
>>>>
>>>>    python: dolfin/function/Function.cpp:392: virtual void
>>>>    dolfin::Function::compute_vertex_values(double*, const
>>>>    dolfin::Mesh&) const: Assertion `&mesh == &_function_space->mesh()'
>>>>    failed.
>>>>    Aborted
>>>>
>>>>
>>>> 2) The original mesh does not seem to be refined. Shouldn't it be?
>>>>
>>>> 3) Not much seems to happen if f is an Expression (since not much seems
>>>> to happen with the mesh)
>>>>
>>>> 4) What happens when there are multiple function spaces associated with
>>>> one mesh?
>>>>
>>> I haven't looked at the code yet, but my first reaction to the commit
>>> log is related to the above two points. I wonder if it's wise to make a
>>> FunctionSpace aware of the Functions that depend on it. It makes
>>> FunctionSpace more complicated and things could get very tricky in
>>> parallel. Also, there is some freedom in how a Function is moved from
>>> one mesh to another.
>>>
>>> Would could define a new class, something like FunctionCollection (I
>>> haven't given any thought to an appropriate name) which could collect
>>> FunctionSpaces and GenericFunctions together for modification. It could
>>> provide a default method for transferring a Function from one mesh to
>>> another (say, interpolation), and a virtual interface for the user to
>>> provide the transfer.
>> That seems like a complication. It would introduce a new abstraction
>> for what is essentially a function space.
>>

I prefer two simple abstractions to one complicated one ;).

>> Perhaps the simplest and clearest option is the following:
>>
>> # Refine function space (W is a new space, not sharing any data)
>> W = V.refine()
>>
>> # Transfer function from V to W
>> w = project(v, W) # or
>> w = interpolate(v, W)
>>
>> This should avoid any confusion and the transfer of functions from one
>> space to the other is explicit. It's also possiblet to keep the old
>> functions lying around if that's needed.
>>
>> If it's not needed, then one can do
>>
>> V = V.refine()
>> v = project(v, V)
> 
> After thinking some more on this, this seems to be the right way to do
> it. Less magic, just as easy to use and more flexible.
> 

Agree.

Garth

> I'll be offline until tomorrow, but if someone wants to have a go
> (including removal of the register stuff) just go ahead.
> 
> --
> Anders
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> 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

Reply via email to