Overhaul MeshGraph to support HDF5 geometry input/output
This MR significantly adjusts
MeshGraph to use a factory pattern, which allows for different file format I/O of meshes (and in particular, will enable HDF5 I/O for geometry). Three classes for XML, compressed XML and HDF5 (experimental) are now supported.
The main highlights:
MeshGraphnow handles partitioning of meshes, which allows different file formats to adopt different strategies for partitioning.
SessionReaderno longer reads the session file when it is constructed, to allow for shared-filesystem partitioning (where only the root process reads the session file to save memory) to be performed by the MeshGraph.
- All XML I/O is now done in a single place inside MeshGraph: previously, we had various I/O routines inside MeshPartition, MeshGraph and NekMesh.
- Geometry classes have been reworked to reduce memory footprint -- by default they do not construct any coefficients or Xmap object -- since these are now used in the partitioning process. Some of the internal ordering of what constitutes forward/backwards edges has been altered, which has allowed the removal of some 2D-specific functions (GetCartesianEorient)
- Significant code tidying and removal of the MeshGraph1/2/3D classes, which had quite a lot of duplicate code.