managed to install
but once i try to run this
import fenics as fe
from dolfin import *
import matplotlib.pyplot as plt
from ffc.fiatinterface import create_quadrature as cquad
import numpy as np
import mshr
from dolfinx.io import XDMFFile, gmshio
from mpi4py import MPI
try:
import gmsh # type: ignore
except ImportError:
print("This demo requires gmsh to be installed")
exit(0)
def gmsh_sphere_minus_box(model: gmsh.model, name: str) -> gmsh.model:
"""Create a Gmsh model of a sphere with a box from the sphere removed.
Args:
model: Gmsh model to add the mesh to.
name: Name (identifier) of the mesh to add.
Returns:
Gmsh model with a sphere mesh added.
"""
model.add(name)
model.setCurrent(name)
sphere_dim_tags = model.occ.addSphere(0, 0, 0, 1)
box_dim_tags = model.occ.addBox(0, 0, 0, 1, 1, 1)
model_dim_tags = model.occ.cut([(3, sphere_dim_tags)], [(3, box_dim_tags)])
model.occ.synchronize()
# Add physical tag 1 for exterior surfaces
boundary = model.getBoundary(model_dim_tags[0], oriented=False)
boundary_ids = [b[1] for b in boundary]
model.addPhysicalGroup(2, boundary_ids, tag=1)
model.setPhysicalName(2, 1, "Sphere surface")
# Add physical tag 2 for the volume
volume_entities = [model[1] for model in model.getEntities(3)]
model.addPhysicalGroup(3, volume_entities, tag=2)
model.setPhysicalName(3, 2, "Sphere volume")
model.mesh.generate(dim=3)
return model
def create_mesh(comm: MPI.Comm, model: gmsh.model, name: str, filename: str, mode: str):
"""Create a DOLFINx from a Gmsh model and output to file.
Args:
comm: MPI communicator top create the mesh on.
model: Gmsh model.
name: Name (identifier) of the mesh to add.
filename: XDMF filename.
mode: XDMF file mode. "w" (write) or "a" (append).
"""
msh, ct, ft = gmshio.model_to_mesh(model, comm, rank=0)
msh.name = name
ct.name = f"{msh.name}_cells"
ft.name = f"{msh.name}_facets"
with XDMFFile(msh.comm, filename, mode) as file:
msh.topology.create_connectivity(2, 3)
file.write_mesh(msh)
file.write_meshtags(ct, msh.geometry, geometry_xpath=f"/Xdmf/Domain/Grid[@Name='{msh.name}']/Geometry"
)
file.write_meshtags(ft, msh.geometry, geometry_xpath=f"/Xdmf/Domain/Grid[@Name='{msh.name}']/Geometry"
)
# -
# ## Generate meshes
# Create a Gmsh model and set the verbosity level.
# +
gmsh.initialize()
gmsh.option.setNumber("General.Terminal", 0)
# Create model
model = gmsh.model()
# -
# First, we create a Gmsh model of a sphere using tetrahedral cells
# (linear geometry), then create independent meshes on each MPI rank and
# write each mesh to an XDMF file. The MPI rank is appended to the
# filename since the meshes are not distributed.
# Create model
model = gmsh_sphere_minus_box(model, "Sphere minus box")
model.setCurrent("Sphere minus box")
create_mesh(MPI.COMM_WORLD, model, "ball_d1", "out_gmsh/mesh.xdmf", "w")
# -
# For the mesh of the sphere with a box remove, we can increase the
# degree of the geometry representation to 2 (quadratic geometry
# representation). The higher-order distributed mesh is appended to the
# XDMF file.
# +
model.mesh.generate(3)
gmsh.option.setNumber("General.Terminal", 1)
model.mesh.setOrder(2)
gmsh.option.setNumber("General.Terminal", 0)
create_mesh(MPI.COMM_WORLD, model, "ball_d2", "out_gmsh/mesh.xdmf", "a")
# -
# Finally, we create a distributed mesh using hexahedral cells of
# geometric degree 2, and append the mesh to the XDMF file.
from the doc i posted before, this is what i got
“Traceback (most recent call last):
File “/home/mirialex/PycharmProjects/fibers/19-05-24.py”, line 98, in
create_mesh(MPI.COMM_WORLD, model, “ball_d1”, “out_gmsh/mesh.xdmf”, “w”)
File “/home/mirialex/PycharmProjects/fibers/19-05-24.py”, line 66, in create_mesh
file.write_meshtags(ct, msh.geometry, geometry_xpath=f”/Xdmf/Domain/Grid[@Name=‘{msh.name}’]/Geometry"
TypeError: write_meshtags(): incompatible function arguments. The following argument types are supported:
1. (self: dolfinx.cpp.io.XDMFFile, meshtags: dolfinx.cpp.mesh.MeshTags_int32, geometry_xpath: str = ‘/Xdmf/Domain/Grid/Geometry’, xpath: str = ‘/Xdmf/Domain’) → None
Invoked with: <dolfinx.io.utils.XDMFFile object at 0x7fb9856ea890>, <dolfinx.cpp.mesh.MeshTags_int32 object at 0x7fb984e188b0>, <dolfinx.cpp.mesh.Geometry object at 0x7fb975f326b0>; kwargs: geometry_xpath=“/Xdmf/Domain/Grid[@Name=‘ball_d1’]/Geometry”
any idea why?