Source code for festim.meshing.mesh_from_xdmf
import fenics as f
from festim import Mesh, festim_print
[docs]
class MeshFromXDMF(Mesh):
"""
Mesh read from XDMF files
Args:
volume_file (str): path to the volume file
boundary_file (str): path the boundary file
Attributes:
volume_file (str): name of the volume file
boundary_file (str): name of the boundary file
mesh (fenics.Mesh): the mesh
"""
def __init__(self, volume_file, boundary_file, **kwargs) -> None:
super().__init__(**kwargs)
self.volume_file = volume_file
self.boundary_file = boundary_file
self.mesh = f.Mesh()
f.XDMFFile(self.volume_file).read(self.mesh)
self.define_markers()
[docs]
def define_markers(self):
"""Reads volume and surface entities from XDMF files"""
mesh = self.mesh
# Read tags for volume elements
volume_markers = f.MeshFunction("size_t", mesh, mesh.topology().dim())
f.XDMFFile(self.volume_file).read(volume_markers)
# Read tags for surface elements
# (can also be used for applying DirichletBC)
surface_markers = f.MeshValueCollection(
"size_t", mesh, mesh.topology().dim() - 1
)
f.XDMFFile(self.boundary_file).read(surface_markers, "f")
surface_markers = f.MeshFunction("size_t", mesh, surface_markers)
festim_print(
"Succesfully load mesh with " + str(len(volume_markers)) + " cells"
)
self.volume_markers = volume_markers
self.surface_markers = surface_markers