Mesh Reader

MFEM/MGIS uses the classic sequential reading of meshes generated via gmsh by specifying the MFEM input format with the -format msh22 option.

Note

For more information: https://mfem.org/mesh-formats/

Keywords

Key

Description

MeshFileName

Define the mesh file name.

MeshReadMode

Read Splitted Mesh, FromScratch = sequential, Restart = parallel

mfem_mgis::Parameters{{"MeshFileName", "mesh-explorer.mesh."},
                      {"MeshReadMode", "Restart"}, ... }

Split Mesh

If your mesh is too large (memory limit), you can also use MFEM’s option of splitting the mesh into smaller meshes and reading them in parallel.

To split the mesh, we use the mesh-explorer tool (https://mfem.org/meshing-miniapps/#mesh-explorer) and you can specify the parallel reader using the keyword: MeshReadMode.

Install Mesh-explorer

Here are two ways to install mesh-explorer. We recommend installing via spack, but we will also add the installation procedure with cmake.

Spack version:

spack install mfem+miniapps

The binary file is then located at:

`spack location -i mfem`/share/mfem/miniapps/meshing/mesh-explorer

Note

If you installed mfem-mgis using the spack installation procedure, the installation has already been performed with the miniapps.

CMake version:

git clone https://github.com/mfem/mfem.git
mkdir build && cd build
spack load hypre
cmake ../mfem/ -DMFEM_USE_MPI=ON -DMFEM_ENABLE_MINIAPPS=ON
make -j 8

The binary file is then located at:

build/miniapps/meshing/mesh-explorer

Mesh generation

The mesh explorer works interactively. Here is a series of options for splitting a gmsh mesh into 128 meshes named output-mesh.XXXXXX

Run:

mesh-explorer --mesh mesh.msh

Create partitioning:

press p > to generate a partitioning
press 1 > choose the partitioning method
press 128 > choose the number of MPI processes

Save mesh in parallel format:

press T > choose to save in parallel format
press output-mesh. > prefix name for output files
press 6 > number of digits

Load your mesh with MFEM-MGIS

Note

Please, verify that the split mesh chosen is split into 128 files if you want to run it on 128 mpi processes.

Example:

  • One example is available here: tests/ParallelReadMode.cxx

auto fed = std::make_shared<mfem_mgis::FiniteElementDiscretization>(
  mfem_mgis::Parameters{{"MeshFileName", "output-mesh."},
                        {"MeshReadMode", "Restart"},
                        {"FiniteElementFamily", "H1"},
                        {"FiniteElementOrder", p.order},
                        {"UnknownsSize", dim},
                        {"NumberOfUniformRefinements", p.parallel ? 2 : 0},
                        {"Parallel", p.parallel}});