Hi everyone,
I am trying to load this mesh file (.msh) into DOLFIN-x which is generated by GMSH:
but I have a problem how to write it in xdmf?
Hi everyone,
I am trying to load this mesh file (.msh) into DOLFIN-x which is generated by GMSH:
Either save it as XDMF as described here: Transitioning from mesh.xml to mesh.xdmf, from dolfin-convert to meshio
or load it directly using meshio.read and:
https://github.com/FEniCS/dolfinx/blob/master/python/demo/gmsh/demo_gmsh.py
Thanks for reply dokken,
Now I am trying to follow this tutorial as you mentioned:
and it is working for triangle cell type properly.
test.msh file:
is converted to test.xdmf file:
Is this method expandable on quadrilateral elements?
Yes, just change the celltype to “quad”.
Thank you again dokken. It works very well for quad cell type too. But I have a problem in loading it to dolfin-x. this is my code:
import meshio
msh = meshio.read("test.msh")
for cell in msh.cells:
quad_cells = cell.data
for key in msh.cell_data_dict["gmsh:physical"].keys():
if key == "quad":
quad_data = msh.cell_data_dict["gmsh:physical"][key]
mesh =meshio.Mesh(points=msh.points,
cells=[("quad", quad_cells)],
cell_data={"name_to_read":[quad_data]})
meshio.write("test.xdmf",mesh)
import dolfinx
from dolfinx.io import XDMFFile
with XDMFFile(MPI.COMM_WORLD, "test.xdmf", "w") as file:
file.read_mesh(mesh)
but it leads to an error:
RuntimeError Traceback (most recent call last)
<ipython-input-24-951cea9a4399> in <module>
15
16 with XDMFFile(MPI.COMM_WORLD, "test.xdmf", "w") as file:
---> 17 file.read_mesh(mesh)
/usr/local/dolfinx-real/lib/python3.8/dist-packages/dolfinx/io.py in read_mesh(self, ghost_mode, name, xpath)
45 def read_mesh(self, ghost_mode=cpp.mesh.GhostMode.shared_facet, name="mesh", xpath="/Xdmf/Domain"):
46 # Read mesh data from file
---> 47 cell_type = super().read_cell_type(name, xpath)
48 cells = super().read_topology_data(name, xpath)
49 x = super().read_geometry_data(name, xpath)
RuntimeError: <Grid> with name 'mesh' not found.
Use the following as meshio creates meshes with name “Grid”, while dolfinx expect the mesh by default to be named “mesh”
with dolfinx.io.XDMFFile(MPI.COMM_WORLD, filename, "r") as xdmf:
mesh = xdmf.read_mesh(name="Grid")
Thanks for your time dear dokken,
your kind guidance helped to solve the problem.