[Dune] How to store entities?

Martin Nolte nolte at mathematik.uni-freiburg.de
Tue Dec 9 15:31:48 CET 2014


Hi Carsten, hi Bernd,

there might be a notable difference between entities (or entity pointers) and 
entity seeds. Like Robert, I would usually recommend entity seeds to "store 
entities", but this might not be the best choice for all grids implementations 
and all purposes.

In AlbertaGrid, for example, only stores the macro elements in memory. Each DUNE 
element holds a stack of all fathers up to the macro level, which might be a 
waste of memory if you store them. The entity seed, on the other hand, is just 
two integers, the index of the macro element and some bits encoding the path 
downward. Decoding the entity seed, however, requires walking down to the 
element again and is, therefore, of complexity log( n ).

I hope this example sheds some light on the difference. For many grid 
implementations, however, entity pointers and entity seeds differ only in an 
additional pointer to the grid.

Best,

Martin

On 12/09/2014 03:07 PM, Carsten Gräser wrote:
> Since I already typed my (slightly longer) answer:
>
> Am 09.12.2014 um 14:59 schrieb Robert Kloefkorn:
>> Hello Bernd,
>>
>>> for some of our models, we store for each vertex all elements that
>>> share this vertex. We currently use a
>>> std::vector<EntityPointer> for this. I have a couple of questions
>>> concerning this:
>>
>>> 1. Is this currently a good choice or are there better choices?
>> No (never has been) and Yes.
>>
>>> 2. When would it be safe to store (smart) pointers to
>>> Entities/EntityPointers/EntitySeeds?
>> Just don't.
> With the new copyable entities the answer for all
> three is, that they are valid as long as the grid is
> not modified. Before, the Entity was only valid, as
> long as the EnitityPointer/Iterator containing it
> was not changed.
>
>>> 3. What should I use in the future when EntityPointer is gone?
>> EntitySeed.
> Storing EntitySeed will always be the better choice, because
> this is the reason why it exists. If, for a certain grid
> manager, the EntityPointer would be the most efficient choice,
> then it would implement the EntitySeed using the EntityPointer.
>
> The main point is that EntitySeed is exactly defined to be memory
> efficient and will often be just a pointer or index internally,
> where as EntityPointer may store a pointer to the grid, some
> cached data (geometry), ... in order to provide efficient access
> to Entity informaton.
>
> Best,
> Carsten
>
>
> _______________________________________________
> Dune mailing list
> Dune at dune-project.org
> http://lists.dune-project.org/mailman/listinfo/dune
>

-- 
Dr. Martin Nolte <nolte at mathematik.uni-freiburg.de>

Universität Freiburg                                   phone: +49-761-203-5630
Abteilung für angewandte Mathematik                    fax:   +49-761-203-5632
Hermann-Herder-Straße 10
79104 Freiburg, Germany




More information about the Dune mailing list