import dolfinx.mesh
import mpi4py.MPI
import viskex
import viskex.utils
import common_dolfinx as common # isort: skip
Generate meshes of the unit square by dividing each edge of the square in 6 segments, using either a triangular or quadrangular mesh.
square_tria = dolfinx.mesh.create_unit_square(mpi4py.MPI.COMM_WORLD, 6, 6, dolfinx.mesh.CellType.triangle)
square_quad = dolfinx.mesh.create_unit_square(mpi4py.MPI.COMM_WORLD, 6, 6, dolfinx.mesh.CellType.quadrilateral)
Mark subdomains according to the $(x, y)$ position of the vertices of the mesh:
square_tria_subdomains = common.mark_subdomains(square_tria)
square_quad_subdomains = common.mark_subdomains(square_quad)
We plot the resulting subdomains.
viskex.dolfinx.plot_mesh_tags(square_tria, square_tria_subdomains, "subdomains")
error: XDG_RUNTIME_DIR is invalid or not set in the environment. MESA: error: ZINK: failed to choose pdev glx: failed to create drisw screen
viskex.dolfinx.plot_mesh_tags(square_quad, square_quad_subdomains, "subdomains")
error: XDG_RUNTIME_DIR is invalid or not set in the environment. MESA: error: ZINK: failed to choose pdev glx: failed to create drisw screen
We can also plot all subdomains with tag equal to $2$, which will be displayed with colors. The rest of the mesh cells are still included in the plot, but are colored in gray.
viskex.dolfinx.plot_mesh_tags(
square_tria, square_tria_subdomains, "subdomains_2", viskex.utils.values_in([2]))
error: XDG_RUNTIME_DIR is invalid or not set in the environment. MESA: error: ZINK: failed to choose pdev glx: failed to create drisw screen
viskex.dolfinx.plot_mesh_tags(
square_quad, square_quad_subdomains, "subdomains_2", viskex.utils.values_in([2]))
error: XDG_RUNTIME_DIR is invalid or not set in the environment. MESA: error: ZINK: failed to choose pdev glx: failed to create drisw screen
Alternatively, we can clip the plot so that it only shows the subset of the mesh with subdomain tag equal to $2$.
viskex.dolfinx.plot_mesh_tags(
square_tria, square_tria_subdomains, "subdomains_2",
lambda grid: grid.threshold(2)) # type: ignore[no-untyped-call]
error: XDG_RUNTIME_DIR is invalid or not set in the environment.
MESA: error: ZINK: failed to choose pdev glx: failed to create drisw screen
viskex.dolfinx.plot_mesh_tags(
square_quad, square_quad_subdomains, "subdomains_2",
lambda grid: grid.threshold(2)) # type: ignore[no-untyped-call]
error: XDG_RUNTIME_DIR is invalid or not set in the environment.
MESA: error: ZINK: failed to choose pdev glx: failed to create drisw screen