Mesh Input/Output
Saving and loading meshes.
Rodin supports reading and writing meshes in various file formats through the IO module.
Introduction
Mesh I/O operations allow you to:
- Load meshes from external mesh generators
- Save computed meshes for later use
- Exchange meshes with other software
- Archive simulation data
Supported Formats
The file format is specified explicitly via the IO::
| Format | Extension | Description |
|---|---|---|
| MFEM | .mesh | MFEM native format |
| MEDIT | .mesh | MEDIT format from INRIA (used by MMG) |
| HDF5 | .h5 | High-performance binary format |
Loading Meshes
Basic Loading
Use Mesh::load() with an explicit IO::
#include <Rodin/Geometry.h> using namespace Rodin; using namespace Rodin::Geometry; int main() { Mesh mesh; // Load MFEM format mesh.load("domain.mesh", IO::FileFormat::MFEM); // Load MEDIT format mesh.load("domain.mesh", IO::FileFormat::MEDIT); return 0; }
Saving Meshes
Basic Saving
Use Mesh::save() with an explicit format:
Mesh mesh; mesh = mesh.UniformGrid(Polytope::Type::Triangle, {16, 16}); // Save in MFEM format mesh.save("output.mesh", IO::FileFormat::MFEM); // Save in MEDIT format mesh.save("output.mesh", IO::FileFormat::MEDIT);
MEDIT Format
The MEDIT format is commonly used with the MMG mesh adaptation tools:
mesh.save("domain.mesh", IO::FileFormat::MEDIT);
Complete Example
#include <Rodin/Geometry.h> using namespace Rodin; using namespace Rodin::Geometry; int main() { // Generate a mesh Mesh mesh; mesh = mesh.UniformGrid(Polytope::Type::Triangle, {32, 32}); std::cout << "Generated mesh with:" << std::endl; std::cout << " Vertices: " << mesh.getVertexCount() << std::endl; std::cout << " Cells: " << mesh.getCellCount() << std::endl; // Save in different formats mesh.save("output_mfem.mesh", IO::FileFormat::MFEM); mesh.save("output_medit.mesh", IO::FileFormat::MEDIT); std::cout << "Saved mesh in MFEM and MEDIT formats" << std::endl; // Load the mesh back Mesh loadedMesh; loadedMesh.load("output_mfem.mesh", IO::FileFormat::MFEM); std::cout << "Loaded mesh with:" << std::endl; std::cout << " Vertices: " << loadedMesh.getVertexCount() << std::endl; std::cout << " Cells: " << loadedMesh.getCellCount() << std::endl; return 0; }
External Mesh Generators
MMG
MMG is used for mesh adaptation and optimization. Rodin integrates directly with MMG through the MMG module. See the MMG examples for details.
File Paths
Absolute Paths
mesh.load("/home/user/meshes/domain.mesh", IO::FileFormat::MFEM);
Relative Paths
mesh.load("../data/domain.mesh", IO::FileFormat::MFEM); mesh.save("./output/result.mesh", IO::FileFormat::MFEM);
Format Considerations
Compatibility
- MFEM: Best for MFEM-based workflows
- MEDIT: Required for MMG tools
Attributes
All formats preserve:
- Vertex coordinates
- Element connectivity
- Element attributes (region markers)
- Boundary attributes
See Also
- I/O in Rodin — Comprehensive I/O guide including XDMF
- Mesh creation
- Meshes overview
- I/O namespace