Source code for fe_utils.scripts.plot_mesh

#! /usr/bin/env python
from matplotlib import pyplot as plt
from fe_utils import ReferenceTriangle, UnitSquareMesh, \
    ReferenceInterval, UnitIntervalMesh
from argparse import ArgumentParser
import numpy as np


[docs]def plot_mesh(): parser = ArgumentParser( description="""Plot the topological entities in a regular mesh.""" ) parser.add_argument("dimension", type=int, nargs=1, choices=(1, 2), help="Dimension of the domain.") parser.add_argument( "resolution", type=int, nargs=1, help="The number of cells in each direction of the mesh." ) args = parser.parse_args() resolution = args.resolution[0] cell = (None, ReferenceInterval, ReferenceTriangle)[args.dimension[0]] if cell is ReferenceTriangle: mesh = UnitSquareMesh(resolution, resolution) else: mesh = UnitIntervalMesh(resolution) fig = plt.figure() ax = fig.add_subplot(111) if cell is ReferenceTriangle: for e in mesh.edge_vertices: plt.plot(mesh.vertex_coords[e, 0], mesh.vertex_coords[e, 1], 'k') else: for e in mesh.adjacency(1, 0): plt.plot( mesh.vertex_coords[e, 0], 0. * mesh.vertex_coords[e, 0], 'k' ) colours = ["black", "red", "blue"] for i, x in enumerate(mesh.vertex_coords): x_ = x if cell.dim == 2 else (x[0], 0.) ax.annotate('(%s, %s)' % (0, i), xy=x_, xytext=(10, 1), textcoords='offset points', color=colours[0]) for d in range(1, mesh.dim + 1): adj = mesh.adjacency(d, 0) for i, e in enumerate(adj): x = np.mean(mesh.vertex_coords[e, :], axis=0) x_ = x if cell.dim == 2 else (x[0], 0.) ax.annotate('(%s, %s)' % (d, i), xy=x_, xytext=(10, 1), textcoords='offset points', color=colours[d]) if cell is ReferenceTriangle: ax.axis(np.add(ax.axis(), [-.1, .1, -.1, .1])) else: plt.plot(mesh.vertex_coords[:, 0], 0 * mesh.vertex_coords[:, 0], 'ko') ax.axis([-.1, 1.1, -.1, .1]) plt.show()