import firedrake
import viskex
import common_01_firedrake 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 = firedrake.UnitSquareMesh(
6, 6, quadrilateral=False, diagonal="right",
distribution_parameters={"partitioner_type": "simple"})
square_quad = firedrake.UnitSquareMesh(
6, 6, quadrilateral=True, diagonal="right",
distribution_parameters={"partitioner_type": "simple"})
Interpolate the vector field $(x^3 + y^2, x^5 + y^4)$, and store it either in a dolfinx function or a UFL expression.
square_tria_vector_field, square_tria_vector_field_ufl = common.prepare_vector_field_cases(
square_tria, lambda x: (x[0]**3 + x[1]**2, x[0]**5 + x[1]**4))
square_quad_vector_field, square_quad_vector_field_ufl = common.prepare_vector_field_cases(
square_quad, lambda x: (x[0]**3 + x[1]**2, x[0]**5 + x[1]**4))
Plot the vector field with a contour plot.
viskex.firedrake.plot_vector_field(square_tria_vector_field, "vector")
viskex.firedrake.plot_vector_field(square_tria_vector_field_ufl, "vector")
viskex.firedrake.plot_vector_field(square_quad_vector_field, "vector")
viskex.firedrake.plot_vector_field(square_quad_vector_field_ufl, "vector")
Plot the vector field with a quiver plot.
viskex.firedrake.plot_vector_field(square_tria_vector_field, "vector", glyph_factor=0.1)
viskex.firedrake.plot_vector_field(square_quad_vector_field, "vector", glyph_factor=0.1)
Apply the vector field as a deformation to the mesh.
viskex.firedrake.plot_vector_field(square_tria_vector_field, "vector", warp_factor=0.1)
viskex.firedrake.plot_vector_field(square_quad_vector_field, "vector", warp_factor=0.1)