Meshes todo list
- [x] write tests for `Mesh` traverser
- [x] rewrite `Traverser` using `ParallelFor`
- [x] writer for the XML-based VTK format: see #6
- [x] big mesh refactoring
- mesh pointer added to `MeshEntity`, all topology accessors redirected through it to the mesh
- storage of points and subentity orientations moved from `MeshEntity` to `Mesh`
- removed `MeshEntityIndex` - `MeshEntity` always stores its index as the `GlobalIndexType`
- removed entity storage from Mesh - mesh entities can be generated on the fly
- some minor related simplifications, mainly in the mesh initializer
- remove `entityStorage` from the mesh configuration
- [x] `TypeResolver`: `resolveMeshType`, `loadMesh`, `decomposeMesh`:
- [x] better detection of the format (currently based on the file name suffix) (solved by the manual override option)
- [x] file detection is done twice: once for `resolveMeshType`, then again for `loadMesh`
- [x] refactor `MeshFunction` - implement `MeshFunctionView`
- [x] implement `tnl-decompose-mesh` (wrapper tool using Metis)
- [x] output `.pvtu` file
- [x] generate overlaps (ghost cells) for use in `DistributedMesh`
- [x] mesh entity tags
- we need to store at least boundary and ghost entity tags - use bitfield array similar to VTK
- if possible, implement a general interface for user tags (could be stored in the same array, but users would have to respect the boundary and ghost bits)
- [x] implement `PVTUReader`
- [x] implement `DistributedMesh`
- wrapper around `Mesh` - includes local and ghost entities, which are differentiated by a tag
- mapping from local to global indices is easy - separate index arrays (or just for ghost entities, if they are ordered after the local entities - then rank offsets is sufficient for local entities)
- the local mesh should be worked with using local indices (`getEntity`, `getSubentityIndex`, `getSuperentityIndex` etc.), because mapping from global indices to local indices is not easy (ghost entities may be discontinuous, mapping by rank offsets is impossible)
- local index mappings (index arrays for efficient iteration):
- `ghosts`
- `local`
- `ghostNeighbours` (entities which are ghosts on other ranks - for synchronization)
- `localInternal` (not ghosts on any ranks)
- `boundary` (boundary of the local mesh (including overlaps))
- `interior` (interior of the local mesh (including overlaps))
- local mesh decompositions: `all = local + ghosts`, `local = ghostNeighbours + localInternal`, `all = boundary + interior`
- [x] write tests
- [x] implement `DistributedMeshSynchronizer`
- [x] write tests
- [x] implement `forAll`, `forBoundary`, `forInterior` methods like in `NDArray`; also `forLocal`, `forGhost` (lambda function takes just the index, mesh access has to be handled manually)
issue