The numerical method that I'm implementing stores various fields in various elements of an unstructured triangular mesh. Data may be stored in cells, nodes and even edges of the mesh. For a parallel implementation I need to distribute all the mesh elements among processors.
There are well known approaches to the problem of distribution cells or nodes, but I failed to find how to distribute all the elements at once.
Of course one can distribute all mesh elements independently by partitioning the corresponding adjacency graphs. But this approach gives no guarantee that the cells of i-th processor and the nodes of the same processor are close (that is cells of i-th processor are mostly composed of the nodes from the same processor).
So I came up with an approach to partition only mesh nodes and then try to partition edges and cells optimally, i.e. minimize cross-processor edges and cells while maintaining a fair distribution. Anyway, a proper implementation is quite tough and has some corner cases.
Do you know any existing solutions to the problem above?