Meshes todo list

  • write tests for Mesh traverser
  • rewrite Traverser using ParallelFor
  • writer for the XML-based VTK format: see #6 (closed)
  • 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
  • TypeResolver: resolveMeshType, loadMesh, decomposeMesh:
    • better detection of the format (currently based on the file name suffix) (solved by the manual override option)
    • file detection is done twice: once for resolveMeshType, then again for loadMesh
  • refactor MeshFunction - implement MeshFunctionView
  • implement tnl-decompose-mesh (wrapper tool using Metis)
    • output .pvtu file
    • generate overlaps (ghost cells) for use in DistributedMesh
  • 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)
  • implement PVTUReader
  • 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
    • write tests
  • implement DistributedMeshSynchronizer
    • write tests
  • implement forAll, forBoundary, forInterior methods like in NDArray; also forLocal, forGhost (lambda function takes just the index, mesh access has to be handled manually)
Edited by Jakub Klinkovský