Draft: Ownership of entities using forward communication
Summary
Determine a unique processor rank for each entity in a gridView. The default implementation communicates a rank over the InterfaceBorder_All interface and determines the owner by either the entity partition type (e.g. interior entities are always owned by the process where it is interior) or some minimum-rank rule. Each grid could specialize this class if a unique ownership can be specified easier, e.g., without communication.
Note: this utility is extracted from the class GlobalIndexSet
Discussion
Two implementations are provided. The first one stores for each (requested) entity the owner rank. The second own only stores whether this entity is owned by the current process or not. The communication costs are similar, but the storage is different. In the first case you can extract a bit more information. The question is whether this information is needed anywhere.
The GlobalIndexSet
is modified to use one of the new implementations. It requires only a rank assignment for entities of a specific codimension. This feature is also included in the EntityOwner*
implementation and could be extended towards accepting a MCMGLayout
instead, since this is used internally. The problem is, that th layout interface is not compatible with the CommDataHandleIF::contains
method.