Source code for festim.meshing.mesh_from_vertices

import fenics as f
import numpy as np
from festim import Mesh1D


[docs] class MeshFromVertices(Mesh1D): """ Description of MeshFromVertices Args: vertices (list): the mesh vertices Attributes: vertices (list): the mesh vertices size (type): the size of the 1D mesh """ def __init__(self, vertices, **kwargs) -> None: super().__init__(**kwargs) self.vertices = vertices self.size = max(vertices) self.start = min(vertices) self.generate_mesh_from_vertices()
[docs] def generate_mesh_from_vertices(self): """Generates a 1D mesh""" mesh = f.Mesh() # the following is needed to avoid breaking in parrallel # see issue 497 if f.MPI.comm_world.rank == 0: vertices = sorted(np.unique(self.vertices)) nb_points = len(vertices) nb_cells = nb_points - 1 editor = f.MeshEditor() editor.open(mesh, "interval", 1, 1) # top. and geom. dimension are both 1 editor.init_vertices(nb_points) # number of vertices editor.init_cells(nb_cells) # number of cells for i in range(0, nb_points): editor.add_vertex(i, np.array([vertices[i]])) for j in range(0, nb_cells): editor.add_cell(j, np.array([j, j + 1])) editor.close() f.MeshPartitioning.build_distributed_mesh(mesh) self.mesh = mesh