Repository files navigation

io4dolfinx - A framework for reading and writing data to various mesh formats

io4dolfinx is an extension for DOLFINx that provides advanced input/output capabilities. It focuses on N-to-M checkpointing (writing data on N processors, reading on M processors) and supports reading/writing various mesh formats using interchangeable backends.

Installation

The library is compatible with the DOLFINx nightly release, v0.10.0, and v0.9.0.

python3 -m pip install io4dolfinx

For specific backend requirements (like ADIOS2 or H5PY), see the Installation Guide.

Quick Start

Here is a minimal example of saving and loading a simulation state (Checkpointing).

frompathlibimportPathfrommpi4pyimportMPIimportdolfinximportio4dolfinx# 1. Create a mesh and functioncomm=MPI.COMM_WORLDmesh=dolfinx.mesh.create_unit_square(comm, 10, 10)
V=dolfinx.fem.functionspace(mesh, ("Lagrange", 1))
u=dolfinx.fem.Function(V)
u.interpolate(lambdax: x[0] +x[1])
u.name="my_function"# 2. Write checkpoint# The mesh must be written before the functionfilename=Path("checkpoint.bp")
io4dolfinx.write_mesh(filename, mesh)
io4dolfinx.write_function(filename, u, time=0.0)
# 3. Read checkpoint# This works even if the number of MPI processes changes (N-to-M)mesh_new=io4dolfinx.read_mesh(filename, comm)
V_new=dolfinx.fem.functionspace(mesh_new, ("Lagrange", 1))
u_new=dolfinx.fem.Function(V_new)
io4dolfinx.read_function(filename, u_new, time=0.0, name="my_function")

Features and Backends

io4dolfinx supports custom user backends. You can switch backends by passing backend="name" to IO functions.

Checkpointing (N-to-M)

Many finite element applications requires storage of functions that cannot be associated with the nodes or cells of the mesh. Therefore, we have implemented our own, native checkpointing format that supports N-to-M checkpointing (write data on N processors, read in on M) through the following backends:

  • h5py: Requires HDF5 with MPI support to work, but can store, meshes, partitioning info, meshtags, function data and more.
  • adios2: Requires ADIOS 2 compiled with MPI support and Python bindings. Supports the same set of operations as the h5py backend.

The code uses the ADIOS2/Python-wrappers and h5py module to write DOLFINx objects to file, supporting N-to-M (recoverable) and N-to-N (snapshot) checkpointing. See: Checkpointing in DOLFINx - FEniCS 23 or the examples in the Documentation for more information.

For scalability, the code uses MPI Neighbourhood collectives for communication across processes.

Mesh IO (Import/Export)

Most meshing formats supports associating data with the nodes of the mesh (the mesh can be higher order) and the cells of the mesh. The node data can be read in as P-th order Lagrange functions (where P is the order of the grid), while the cell data can be read in as piecewise constant (DG-0) functions.

  • VTKHDF: The new scalable format from VTK, called VTKHDF is supported by the vtkhdf backend.
  • XDMF (eXtensible Model Data Format): .xdmf. The xdmf backend supports the HDF5 encoding, to ensure performance in parallel.
  • PyVista (IO backend is meshio): The pyvista backend uses {py:func}pyvista.read to read in meshes, point data and cell data. pyvista relies on meshio for most reading operations (including the XDMF ascii format).

Advanced Usage

The repository contains detailed documented examples in the docs folder:

For a full API reference and backend details, see the Documentation.

Legacy DOLFIN Support

io4dolfinx can read checkpoints created by the legacy version of DOLFIN (Lagrange or DG functions).

  • Reading meshes from DOLFIN HDF5File-format.
  • Reading checkpoints from DOLFIN HDF5File and XDMFFile.

Project Background

Relation to adios4dolfinx

This library is an evolution of adios4dolfinx. It includes all functionality of the original library but has been refactored to support multiple IO backends (not just ADIOS2), making it easier to interface with different meshing formats while keeping the library structure sane.

Statement of Need

As large-scale, long-running simulations on HPC clusters become more common, the need to store intermediate solutions is crucial. If a system crashes or a computational budget is exceeded, checkpoints allow the simulation to resume without restarting from scratch. io4dolfinx extends DOLFINx with this essential functionality.

Contributing

Please read CONTRIBUTING.md for details on our code of conduct, and the process for submitting pull requests to us.

Testing

io4dolfinx includes a comprehensive test suite that ensures functionality across different backends and compatibility with legacy data formats, see the Testing Guide for details.

LICENSE

This project is licensed under the MIT License - see the LICENSE file for details.

About

Input/Output for dolfinx

Resources

Code of conduct

Contributing

Stars

8 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

io4dolfinx - A framework for reading and writing data to various mesh formats

io4dolfinx is an extension for DOLFINx that provides advanced input/output capabilities. It focuses on N-to-M checkpointing (writing data on N processors, reading on M processors) and supports reading/writing various mesh formats using interchangeable backends.

Installation

The library is compatible with the DOLFINx nightly release, v0.10.0, and v0.9.0.

python3 -m pip install io4dolfinx

For specific backend requirements (like ADIOS2 or H5PY), see the Installation Guide.

Quick Start

Here is a minimal example of saving and loading a simulation state (Checkpointing).

frompathlibimportPathfrommpi4pyimportMPIimportdolfinximportio4dolfinx# 1. Create a mesh and functioncomm=MPI.COMM_WORLDmesh=dolfinx.mesh.create_unit_square(comm, 10, 10)
V=dolfinx.fem.functionspace(mesh, ("Lagrange", 1))
u=dolfinx.fem.Function(V)
u.interpolate(lambdax: x[0] +x[1])
u.name="my_function"# 2. Write checkpoint# The mesh must be written before the functionfilename=Path("checkpoint.bp")
io4dolfinx.write_mesh(filename, mesh)
io4dolfinx.write_function(filename, u, time=0.0)
# 3. Read checkpoint# This works even if the number of MPI processes changes (N-to-M)mesh_new=io4dolfinx.read_mesh(filename, comm)
V_new=dolfinx.fem.functionspace(mesh_new, ("Lagrange", 1))
u_new=dolfinx.fem.Function(V_new)
io4dolfinx.read_function(filename, u_new, time=0.0, name="my_function")

Features and Backends

io4dolfinx supports custom user backends. You can switch backends by passing backend="name" to IO functions.

Checkpointing (N-to-M)

Many finite element applications requires storage of functions that cannot be associated with the nodes or cells of the mesh. Therefore, we have implemented our own, native checkpointing format that supports N-to-M checkpointing (write data on N processors, read in on M) through the following backends:

  • h5py: Requires HDF5 with MPI support to work, but can store, meshes, partitioning info, meshtags, function data and more.
  • adios2: Requires ADIOS 2 compiled with MPI support and Python bindings. Supports the same set of operations as the h5py backend.

The code uses the ADIOS2/Python-wrappers and h5py module to write DOLFINx objects to file, supporting N-to-M (recoverable) and N-to-N (snapshot) checkpointing. See: Checkpointing in DOLFINx - FEniCS 23 or the examples in the Documentation for more information.

For scalability, the code uses MPI Neighbourhood collectives for communication across processes.

Mesh IO (Import/Export)

Most meshing formats supports associating data with the nodes of the mesh (the mesh can be higher order) and the cells of the mesh. The node data can be read in as P-th order Lagrange functions (where P is the order of the grid), while the cell data can be read in as piecewise constant (DG-0) functions.

  • VTKHDF: The new scalable format from VTK, called VTKHDF is supported by the vtkhdf backend.
  • XDMF (eXtensible Model Data Format): .xdmf. The xdmf backend supports the HDF5 encoding, to ensure performance in parallel.
  • PyVista (IO backend is meshio): The pyvista backend uses {py:func}pyvista.read to read in meshes, point data and cell data. pyvista relies on meshio for most reading operations (including the XDMF ascii format).

Advanced Usage

The repository contains detailed documented examples in the docs folder:

For a full API reference and backend details, see the Documentation.

Legacy DOLFIN Support

io4dolfinx can read checkpoints created by the legacy version of DOLFIN (Lagrange or DG functions).

  • Reading meshes from DOLFIN HDF5File-format.
  • Reading checkpoints from DOLFIN HDF5File and XDMFFile.

Project Background

Relation to adios4dolfinx

This library is an evolution of adios4dolfinx. It includes all functionality of the original library but has been refactored to support multiple IO backends (not just ADIOS2), making it easier to interface with different meshing formats while keeping the library structure sane.

Statement of Need

As large-scale, long-running simulations on HPC clusters become more common, the need to store intermediate solutions is crucial. If a system crashes or a computational budget is exceeded, checkpoints allow the simulation to resume without restarting from scratch. io4dolfinx extends DOLFINx with this essential functionality.

Contributing

Please read CONTRIBUTING.md for details on our code of conduct, and the process for submitting pull requests to us.

Testing

io4dolfinx includes a comprehensive test suite that ensures functionality across different backends and compatibility with legacy data formats, see the Testing Guide for details.

LICENSE

This project is licensed under the MIT License - see the LICENSE file for details.

About

Input/Output for dolfinx

Resources

Code of conduct

Contributing

Stars

8 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

io4dolfinx - A framework for reading and writing data to various mesh formats

io4dolfinx is an extension for DOLFINx that provides advanced input/output capabilities. It focuses on N-to-M checkpointing (writing data on N processors, reading on M processors) and supports reading/writing various mesh formats using interchangeable backends.

Installation

The library is compatible with the DOLFINx nightly release, v0.10.0, and v0.9.0.

python3 -m pip install io4dolfinx

For specific backend requirements (like ADIOS2 or H5PY), see the Installation Guide.

Quick Start

Here is a minimal example of saving and loading a simulation state (Checkpointing).

frompathlibimportPathfrommpi4pyimportMPIimportdolfinximportio4dolfinx# 1. Create a mesh and functioncomm=MPI.COMM_WORLDmesh=dolfinx.mesh.create_unit_square(comm, 10, 10)
V=dolfinx.fem.functionspace(mesh, ("Lagrange", 1))
u=dolfinx.fem.Function(V)
u.interpolate(lambdax: x[0] +x[1])
u.name="my_function"# 2. Write checkpoint# The mesh must be written before the functionfilename=Path("checkpoint.bp")
io4dolfinx.write_mesh(filename, mesh)
io4dolfinx.write_function(filename, u, time=0.0)
# 3. Read checkpoint# This works even if the number of MPI processes changes (N-to-M)mesh_new=io4dolfinx.read_mesh(filename, comm)
V_new=dolfinx.fem.functionspace(mesh_new, ("Lagrange", 1))
u_new=dolfinx.fem.Function(V_new)
io4dolfinx.read_function(filename, u_new, time=0.0, name="my_function")

Features and Backends

io4dolfinx supports custom user backends. You can switch backends by passing backend="name" to IO functions.

Checkpointing (N-to-M)

Many finite element applications requires storage of functions that cannot be associated with the nodes or cells of the mesh. Therefore, we have implemented our own, native checkpointing format that supports N-to-M checkpointing (write data on N processors, read in on M) through the following backends:

  • h5py: Requires HDF5 with MPI support to work, but can store, meshes, partitioning info, meshtags, function data and more.
  • adios2: Requires ADIOS 2 compiled with MPI support and Python bindings. Supports the same set of operations as the h5py backend.

The code uses the ADIOS2/Python-wrappers and h5py module to write DOLFINx objects to file, supporting N-to-M (recoverable) and N-to-N (snapshot) checkpointing. See: Checkpointing in DOLFINx - FEniCS 23 or the examples in the Documentation for more information.

For scalability, the code uses MPI Neighbourhood collectives for communication across processes.

Mesh IO (Import/Export)

Most meshing formats supports associating data with the nodes of the mesh (the mesh can be higher order) and the cells of the mesh. The node data can be read in as P-th order Lagrange functions (where P is the order of the grid), while the cell data can be read in as piecewise constant (DG-0) functions.

  • VTKHDF: The new scalable format from VTK, called VTKHDF is supported by the vtkhdf backend.
  • XDMF (eXtensible Model Data Format): .xdmf. The xdmf backend supports the HDF5 encoding, to ensure performance in parallel.
  • PyVista (IO backend is meshio): The pyvista backend uses {py:func}pyvista.read to read in meshes, point data and cell data. pyvista relies on meshio for most reading operations (including the XDMF ascii format).

Advanced Usage

The repository contains detailed documented examples in the docs folder:

For a full API reference and backend details, see the Documentation.

Legacy DOLFIN Support

io4dolfinx can read checkpoints created by the legacy version of DOLFIN (Lagrange or DG functions).

  • Reading meshes from DOLFIN HDF5File-format.
  • Reading checkpoints from DOLFIN HDF5File and XDMFFile.

Project Background

Relation to adios4dolfinx

This library is an evolution of adios4dolfinx. It includes all functionality of the original library but has been refactored to support multiple IO backends (not just ADIOS2), making it easier to interface with different meshing formats while keeping the library structure sane.

Statement of Need

As large-scale, long-running simulations on HPC clusters become more common, the need to store intermediate solutions is crucial. If a system crashes or a computational budget is exceeded, checkpoints allow the simulation to resume without restarting from scratch. io4dolfinx extends DOLFINx with this essential functionality.

Contributing

Please read CONTRIBUTING.md for details on our code of conduct, and the process for submitting pull requests to us.

Testing

io4dolfinx includes a comprehensive test suite that ensures functionality across different backends and compatibility with legacy data formats, see the Testing Guide for details.

LICENSE

This project is licensed under the MIT License - see the LICENSE file for details.

About

Input/Output for dolfinx

Resources

Code of conduct

Contributing

Stars

8 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

io4dolfinx - A framework for reading and writing data to various mesh formats

io4dolfinx is an extension for DOLFINx that provides advanced input/output capabilities. It focuses on N-to-M checkpointing (writing data on N processors, reading on M processors) and supports reading/writing various mesh formats using interchangeable backends.

Installation

The library is compatible with the DOLFINx nightly release, v0.10.0, and v0.9.0.

python3 -m pip install io4dolfinx

For specific backend requirements (like ADIOS2 or H5PY), see the Installation Guide.

Quick Start

Here is a minimal example of saving and loading a simulation state (Checkpointing).

frompathlibimportPathfrommpi4pyimportMPIimportdolfinximportio4dolfinx# 1. Create a mesh and functioncomm=MPI.COMM_WORLDmesh=dolfinx.mesh.create_unit_square(comm, 10, 10)
V=dolfinx.fem.functionspace(mesh, ("Lagrange", 1))
u=dolfinx.fem.Function(V)
u.interpolate(lambdax: x[0] +x[1])
u.name="my_function"# 2. Write checkpoint# The mesh must be written before the functionfilename=Path("checkpoint.bp")
io4dolfinx.write_mesh(filename, mesh)
io4dolfinx.write_function(filename, u, time=0.0)
# 3. Read checkpoint# This works even if the number of MPI processes changes (N-to-M)mesh_new=io4dolfinx.read_mesh(filename, comm)
V_new=dolfinx.fem.functionspace(mesh_new, ("Lagrange", 1))
u_new=dolfinx.fem.Function(V_new)
io4dolfinx.read_function(filename, u_new, time=0.0, name="my_function")

Features and Backends

io4dolfinx supports custom user backends. You can switch backends by passing backend="name" to IO functions.

Checkpointing (N-to-M)

Many finite element applications requires storage of functions that cannot be associated with the nodes or cells of the mesh. Therefore, we have implemented our own, native checkpointing format that supports N-to-M checkpointing (write data on N processors, read in on M) through the following backends:

  • h5py: Requires HDF5 with MPI support to work, but can store, meshes, partitioning info, meshtags, function data and more.
  • adios2: Requires ADIOS 2 compiled with MPI support and Python bindings. Supports the same set of operations as the h5py backend.

The code uses the ADIOS2/Python-wrappers and h5py module to write DOLFINx objects to file, supporting N-to-M (recoverable) and N-to-N (snapshot) checkpointing. See: Checkpointing in DOLFINx - FEniCS 23 or the examples in the Documentation for more information.

For scalability, the code uses MPI Neighbourhood collectives for communication across processes.

Mesh IO (Import/Export)

Most meshing formats supports associating data with the nodes of the mesh (the mesh can be higher order) and the cells of the mesh. The node data can be read in as P-th order Lagrange functions (where P is the order of the grid), while the cell data can be read in as piecewise constant (DG-0) functions.

  • VTKHDF: The new scalable format from VTK, called VTKHDF is supported by the vtkhdf backend.
  • XDMF (eXtensible Model Data Format): .xdmf. The xdmf backend supports the HDF5 encoding, to ensure performance in parallel.
  • PyVista (IO backend is meshio): The pyvista backend uses {py:func}pyvista.read to read in meshes, point data and cell data. pyvista relies on meshio for most reading operations (including the XDMF ascii format).

Advanced Usage

The repository contains detailed documented examples in the docs folder:

For a full API reference and backend details, see the Documentation.

Legacy DOLFIN Support

io4dolfinx can read checkpoints created by the legacy version of DOLFIN (Lagrange or DG functions).

  • Reading meshes from DOLFIN HDF5File-format.
  • Reading checkpoints from DOLFIN HDF5File and XDMFFile.

Project Background

Relation to adios4dolfinx

This library is an evolution of adios4dolfinx. It includes all functionality of the original library but has been refactored to support multiple IO backends (not just ADIOS2), making it easier to interface with different meshing formats while keeping the library structure sane.

Statement of Need

As large-scale, long-running simulations on HPC clusters become more common, the need to store intermediate solutions is crucial. If a system crashes or a computational budget is exceeded, checkpoints allow the simulation to resume without restarting from scratch. io4dolfinx extends DOLFINx with this essential functionality.

Contributing

Please read CONTRIBUTING.md for details on our code of conduct, and the process for submitting pull requests to us.

Testing

io4dolfinx includes a comprehensive test suite that ensures functionality across different backends and compatibility with legacy data formats, see the Testing Guide for details.

LICENSE

This project is licensed under the MIT License - see the LICENSE file for details.

About

Input/Output for dolfinx

Resources

Code of conduct

Contributing

Stars

8 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

io4dolfinx - A framework for reading and writing data to various mesh formats

io4dolfinx is an extension for DOLFINx that provides advanced input/output capabilities. It focuses on N-to-M checkpointing (writing data on N processors, reading on M processors) and supports reading/writing various mesh formats using interchangeable backends.

Installation

The library is compatible with the DOLFINx nightly release, v0.10.0, and v0.9.0.

python3 -m pip install io4dolfinx

For specific backend requirements (like ADIOS2 or H5PY), see the Installation Guide.

Quick Start

Here is a minimal example of saving and loading a simulation state (Checkpointing).

frompathlibimportPathfrommpi4pyimportMPIimportdolfinximportio4dolfinx# 1. Create a mesh and functioncomm=MPI.COMM_WORLDmesh=dolfinx.mesh.create_unit_square(comm, 10, 10)
V=dolfinx.fem.functionspace(mesh, ("Lagrange", 1))
u=dolfinx.fem.Function(V)
u.interpolate(lambdax: x[0] +x[1])
u.name="my_function"# 2. Write checkpoint# The mesh must be written before the functionfilename=Path("checkpoint.bp")
io4dolfinx.write_mesh(filename, mesh)
io4dolfinx.write_function(filename, u, time=0.0)
# 3. Read checkpoint# This works even if the number of MPI processes changes (N-to-M)mesh_new=io4dolfinx.read_mesh(filename, comm)
V_new=dolfinx.fem.functionspace(mesh_new, ("Lagrange", 1))
u_new=dolfinx.fem.Function(V_new)
io4dolfinx.read_function(filename, u_new, time=0.0, name="my_function")

Features and Backends

io4dolfinx supports custom user backends. You can switch backends by passing backend="name" to IO functions.

Checkpointing (N-to-M)

Many finite element applications requires storage of functions that cannot be associated with the nodes or cells of the mesh. Therefore, we have implemented our own, native checkpointing format that supports N-to-M checkpointing (write data on N processors, read in on M) through the following backends:

  • h5py: Requires HDF5 with MPI support to work, but can store, meshes, partitioning info, meshtags, function data and more.
  • adios2: Requires ADIOS 2 compiled with MPI support and Python bindings. Supports the same set of operations as the h5py backend.

The code uses the ADIOS2/Python-wrappers and h5py module to write DOLFINx objects to file, supporting N-to-M (recoverable) and N-to-N (snapshot) checkpointing. See: Checkpointing in DOLFINx - FEniCS 23 or the examples in the Documentation for more information.

For scalability, the code uses MPI Neighbourhood collectives for communication across processes.

Mesh IO (Import/Export)

Most meshing formats supports associating data with the nodes of the mesh (the mesh can be higher order) and the cells of the mesh. The node data can be read in as P-th order Lagrange functions (where P is the order of the grid), while the cell data can be read in as piecewise constant (DG-0) functions.

  • VTKHDF: The new scalable format from VTK, called VTKHDF is supported by the vtkhdf backend.
  • XDMF (eXtensible Model Data Format): .xdmf. The xdmf backend supports the HDF5 encoding, to ensure performance in parallel.
  • PyVista (IO backend is meshio): The pyvista backend uses {py:func}pyvista.read to read in meshes, point data and cell data. pyvista relies on meshio for most reading operations (including the XDMF ascii format).

Advanced Usage

The repository contains detailed documented examples in the docs folder:

For a full API reference and backend details, see the Documentation.

Legacy DOLFIN Support

io4dolfinx can read checkpoints created by the legacy version of DOLFIN (Lagrange or DG functions).

  • Reading meshes from DOLFIN HDF5File-format.
  • Reading checkpoints from DOLFIN HDF5File and XDMFFile.

Project Background

Relation to adios4dolfinx

This library is an evolution of adios4dolfinx. It includes all functionality of the original library but has been refactored to support multiple IO backends (not just ADIOS2), making it easier to interface with different meshing formats while keeping the library structure sane.

Statement of Need

As large-scale, long-running simulations on HPC clusters become more common, the need to store intermediate solutions is crucial. If a system crashes or a computational budget is exceeded, checkpoints allow the simulation to resume without restarting from scratch. io4dolfinx extends DOLFINx with this essential functionality.

Contributing

Please read CONTRIBUTING.md for details on our code of conduct, and the process for submitting pull requests to us.

Testing

io4dolfinx includes a comprehensive test suite that ensures functionality across different backends and compatibility with legacy data formats, see the Testing Guide for details.

LICENSE

This project is licensed under the MIT License - see the LICENSE file for details.

About

Input/Output for dolfinx

Resources

Code of conduct

Contributing

Stars

8 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

io4dolfinx - A framework for reading and writing data to various mesh formats

io4dolfinx is an extension for DOLFINx that provides advanced input/output capabilities. It focuses on N-to-M checkpointing (writing data on N processors, reading on M processors) and supports reading/writing various mesh formats using interchangeable backends.

Installation

The library is compatible with the DOLFINx nightly release, v0.10.0, and v0.9.0.

python3 -m pip install io4dolfinx

For specific backend requirements (like ADIOS2 or H5PY), see the Installation Guide.

Quick Start

Here is a minimal example of saving and loading a simulation state (Checkpointing).

frompathlibimportPathfrommpi4pyimportMPIimportdolfinximportio4dolfinx# 1. Create a mesh and functioncomm=MPI.COMM_WORLDmesh=dolfinx.mesh.create_unit_square(comm, 10, 10)
V=dolfinx.fem.functionspace(mesh, ("Lagrange", 1))
u=dolfinx.fem.Function(V)
u.interpolate(lambdax: x[0] +x[1])
u.name="my_function"# 2. Write checkpoint# The mesh must be written before the functionfilename=Path("checkpoint.bp")
io4dolfinx.write_mesh(filename, mesh)
io4dolfinx.write_function(filename, u, time=0.0)
# 3. Read checkpoint# This works even if the number of MPI processes changes (N-to-M)mesh_new=io4dolfinx.read_mesh(filename, comm)
V_new=dolfinx.fem.functionspace(mesh_new, ("Lagrange", 1))
u_new=dolfinx.fem.Function(V_new)
io4dolfinx.read_function(filename, u_new, time=0.0, name="my_function")

Features and Backends

io4dolfinx supports custom user backends. You can switch backends by passing backend="name" to IO functions.

Checkpointing (N-to-M)

Many finite element applications requires storage of functions that cannot be associated with the nodes or cells of the mesh. Therefore, we have implemented our own, native checkpointing format that supports N-to-M checkpointing (write data on N processors, read in on M) through the following backends:

  • h5py: Requires HDF5 with MPI support to work, but can store, meshes, partitioning info, meshtags, function data and more.
  • adios2: Requires ADIOS 2 compiled with MPI support and Python bindings. Supports the same set of operations as the h5py backend.

The code uses the ADIOS2/Python-wrappers and h5py module to write DOLFINx objects to file, supporting N-to-M (recoverable) and N-to-N (snapshot) checkpointing. See: Checkpointing in DOLFINx - FEniCS 23 or the examples in the Documentation for more information.

For scalability, the code uses MPI Neighbourhood collectives for communication across processes.

Mesh IO (Import/Export)

Most meshing formats supports associating data with the nodes of the mesh (the mesh can be higher order) and the cells of the mesh. The node data can be read in as P-th order Lagrange functions (where P is the order of the grid), while the cell data can be read in as piecewise constant (DG-0) functions.

  • VTKHDF: The new scalable format from VTK, called VTKHDF is supported by the vtkhdf backend.
  • XDMF (eXtensible Model Data Format): .xdmf. The xdmf backend supports the HDF5 encoding, to ensure performance in parallel.
  • PyVista (IO backend is meshio): The pyvista backend uses {py:func}pyvista.read to read in meshes, point data and cell data. pyvista relies on meshio for most reading operations (including the XDMF ascii format).

Advanced Usage

The repository contains detailed documented examples in the docs folder:

For a full API reference and backend details, see the Documentation.

Legacy DOLFIN Support

io4dolfinx can read checkpoints created by the legacy version of DOLFIN (Lagrange or DG functions).

  • Reading meshes from DOLFIN HDF5File-format.
  • Reading checkpoints from DOLFIN HDF5File and XDMFFile.

Project Background

Relation to adios4dolfinx

This library is an evolution of adios4dolfinx. It includes all functionality of the original library but has been refactored to support multiple IO backends (not just ADIOS2), making it easier to interface with different meshing formats while keeping the library structure sane.

Statement of Need

As large-scale, long-running simulations on HPC clusters become more common, the need to store intermediate solutions is crucial. If a system crashes or a computational budget is exceeded, checkpoints allow the simulation to resume without restarting from scratch. io4dolfinx extends DOLFINx with this essential functionality.

Contributing

Please read CONTRIBUTING.md for details on our code of conduct, and the process for submitting pull requests to us.

Testing

io4dolfinx includes a comprehensive test suite that ensures functionality across different backends and compatibility with legacy data formats, see the Testing Guide for details.

LICENSE

This project is licensed under the MIT License - see the LICENSE file for details.

About

Input/Output for dolfinx

Resources

Code of conduct

Contributing

Stars

8 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

io4dolfinx - A framework for reading and writing data to various mesh formats

io4dolfinx is an extension for DOLFINx that provides advanced input/output capabilities. It focuses on N-to-M checkpointing (writing data on N processors, reading on M processors) and supports reading/writing various mesh formats using interchangeable backends.

Installation

The library is compatible with the DOLFINx nightly release, v0.10.0, and v0.9.0.

python3 -m pip install io4dolfinx

For specific backend requirements (like ADIOS2 or H5PY), see the Installation Guide.

Quick Start

Here is a minimal example of saving and loading a simulation state (Checkpointing).

frompathlibimportPathfrommpi4pyimportMPIimportdolfinximportio4dolfinx# 1. Create a mesh and functioncomm=MPI.COMM_WORLDmesh=dolfinx.mesh.create_unit_square(comm, 10, 10)
V=dolfinx.fem.functionspace(mesh, ("Lagrange", 1))
u=dolfinx.fem.Function(V)
u.interpolate(lambdax: x[0] +x[1])
u.name="my_function"# 2. Write checkpoint# The mesh must be written before the functionfilename=Path("checkpoint.bp")
io4dolfinx.write_mesh(filename, mesh)
io4dolfinx.write_function(filename, u, time=0.0)
# 3. Read checkpoint# This works even if the number of MPI processes changes (N-to-M)mesh_new=io4dolfinx.read_mesh(filename, comm)
V_new=dolfinx.fem.functionspace(mesh_new, ("Lagrange", 1))
u_new=dolfinx.fem.Function(V_new)
io4dolfinx.read_function(filename, u_new, time=0.0, name="my_function")

Features and Backends

io4dolfinx supports custom user backends. You can switch backends by passing backend="name" to IO functions.

Checkpointing (N-to-M)

Many finite element applications requires storage of functions that cannot be associated with the nodes or cells of the mesh. Therefore, we have implemented our own, native checkpointing format that supports N-to-M checkpointing (write data on N processors, read in on M) through the following backends:

  • h5py: Requires HDF5 with MPI support to work, but can store, meshes, partitioning info, meshtags, function data and more.
  • adios2: Requires ADIOS 2 compiled with MPI support and Python bindings. Supports the same set of operations as the h5py backend.

The code uses the ADIOS2/Python-wrappers and h5py module to write DOLFINx objects to file, supporting N-to-M (recoverable) and N-to-N (snapshot) checkpointing. See: Checkpointing in DOLFINx - FEniCS 23 or the examples in the Documentation for more information.

For scalability, the code uses MPI Neighbourhood collectives for communication across processes.

Mesh IO (Import/Export)

Most meshing formats supports associating data with the nodes of the mesh (the mesh can be higher order) and the cells of the mesh. The node data can be read in as P-th order Lagrange functions (where P is the order of the grid), while the cell data can be read in as piecewise constant (DG-0) functions.

  • VTKHDF: The new scalable format from VTK, called VTKHDF is supported by the vtkhdf backend.
  • XDMF (eXtensible Model Data Format): .xdmf. The xdmf backend supports the HDF5 encoding, to ensure performance in parallel.
  • PyVista (IO backend is meshio): The pyvista backend uses {py:func}pyvista.read to read in meshes, point data and cell data. pyvista relies on meshio for most reading operations (including the XDMF ascii format).

Advanced Usage

The repository contains detailed documented examples in the docs folder:

For a full API reference and backend details, see the Documentation.

Legacy DOLFIN Support

io4dolfinx can read checkpoints created by the legacy version of DOLFIN (Lagrange or DG functions).

  • Reading meshes from DOLFIN HDF5File-format.
  • Reading checkpoints from DOLFIN HDF5File and XDMFFile.

Project Background

Relation to adios4dolfinx

This library is an evolution of adios4dolfinx. It includes all functionality of the original library but has been refactored to support multiple IO backends (not just ADIOS2), making it easier to interface with different meshing formats while keeping the library structure sane.

Statement of Need

As large-scale, long-running simulations on HPC clusters become more common, the need to store intermediate solutions is crucial. If a system crashes or a computational budget is exceeded, checkpoints allow the simulation to resume without restarting from scratch. io4dolfinx extends DOLFINx with this essential functionality.

Contributing

Please read CONTRIBUTING.md for details on our code of conduct, and the process for submitting pull requests to us.

Testing

io4dolfinx includes a comprehensive test suite that ensures functionality across different backends and compatibility with legacy data formats, see the Testing Guide for details.

LICENSE

This project is licensed under the MIT License - see the LICENSE file for details.

About

Input/Output for dolfinx

Resources

Code of conduct

Contributing

Stars

8 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

io4dolfinx - A framework for reading and writing data to various mesh formats

io4dolfinx is an extension for DOLFINx that provides advanced input/output capabilities. It focuses on N-to-M checkpointing (writing data on N processors, reading on M processors) and supports reading/writing various mesh formats using interchangeable backends.

Installation

The library is compatible with the DOLFINx nightly release, v0.10.0, and v0.9.0.

python3 -m pip install io4dolfinx

For specific backend requirements (like ADIOS2 or H5PY), see the Installation Guide.

Quick Start

Here is a minimal example of saving and loading a simulation state (Checkpointing).

frompathlibimportPathfrommpi4pyimportMPIimportdolfinximportio4dolfinx# 1. Create a mesh and functioncomm=MPI.COMM_WORLDmesh=dolfinx.mesh.create_unit_square(comm, 10, 10)
V=dolfinx.fem.functionspace(mesh, ("Lagrange", 1))
u=dolfinx.fem.Function(V)
u.interpolate(lambdax: x[0] +x[1])
u.name="my_function"# 2. Write checkpoint# The mesh must be written before the functionfilename=Path("checkpoint.bp")
io4dolfinx.write_mesh(filename, mesh)
io4dolfinx.write_function(filename, u, time=0.0)
# 3. Read checkpoint# This works even if the number of MPI processes changes (N-to-M)mesh_new=io4dolfinx.read_mesh(filename, comm)
V_new=dolfinx.fem.functionspace(mesh_new, ("Lagrange", 1))
u_new=dolfinx.fem.Function(V_new)
io4dolfinx.read_function(filename, u_new, time=0.0, name="my_function")

Features and Backends

io4dolfinx supports custom user backends. You can switch backends by passing backend="name" to IO functions.

Checkpointing (N-to-M)

Many finite element applications requires storage of functions that cannot be associated with the nodes or cells of the mesh. Therefore, we have implemented our own, native checkpointing format that supports N-to-M checkpointing (write data on N processors, read in on M) through the following backends:

  • h5py: Requires HDF5 with MPI support to work, but can store, meshes, partitioning info, meshtags, function data and more.
  • adios2: Requires ADIOS 2 compiled with MPI support and Python bindings. Supports the same set of operations as the h5py backend.

The code uses the ADIOS2/Python-wrappers and h5py module to write DOLFINx objects to file, supporting N-to-M (recoverable) and N-to-N (snapshot) checkpointing. See: Checkpointing in DOLFINx - FEniCS 23 or the examples in the Documentation for more information.

For scalability, the code uses MPI Neighbourhood collectives for communication across processes.

Mesh IO (Import/Export)

Most meshing formats supports associating data with the nodes of the mesh (the mesh can be higher order) and the cells of the mesh. The node data can be read in as P-th order Lagrange functions (where P is the order of the grid), while the cell data can be read in as piecewise constant (DG-0) functions.

  • VTKHDF: The new scalable format from VTK, called VTKHDF is supported by the vtkhdf backend.
  • XDMF (eXtensible Model Data Format): .xdmf. The xdmf backend supports the HDF5 encoding, to ensure performance in parallel.
  • PyVista (IO backend is meshio): The pyvista backend uses {py:func}pyvista.read to read in meshes, point data and cell data. pyvista relies on meshio for most reading operations (including the XDMF ascii format).

Advanced Usage

The repository contains detailed documented examples in the docs folder:

For a full API reference and backend details, see the Documentation.

Legacy DOLFIN Support

io4dolfinx can read checkpoints created by the legacy version of DOLFIN (Lagrange or DG functions).

  • Reading meshes from DOLFIN HDF5File-format.
  • Reading checkpoints from DOLFIN HDF5File and XDMFFile.

Project Background

Relation to adios4dolfinx

This library is an evolution of adios4dolfinx. It includes all functionality of the original library but has been refactored to support multiple IO backends (not just ADIOS2), making it easier to interface with different meshing formats while keeping the library structure sane.

Statement of Need

As large-scale, long-running simulations on HPC clusters become more common, the need to store intermediate solutions is crucial. If a system crashes or a computational budget is exceeded, checkpoints allow the simulation to resume without restarting from scratch. io4dolfinx extends DOLFINx with this essential functionality.

Contributing

Please read CONTRIBUTING.md for details on our code of conduct, and the process for submitting pull requests to us.

Testing

io4dolfinx includes a comprehensive test suite that ensures functionality across different backends and compatibility with legacy data formats, see the Testing Guide for details.

LICENSE

This project is licensed under the MIT License - see the LICENSE file for details.

About

Input/Output for dolfinx

Resources

Code of conduct

Contributing

Stars

8 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages