Source code for festim.meshing.mesh_1d

import fenics as f
from festim import Mesh


[docs] class Mesh1D(Mesh): """ 1D Mesh Attributes: size (float): the size of the 1D mesh start (float): the starting point of the 1D mesh """ def __init__(self, **kwargs) -> None: super().__init__(**kwargs) self.size = None self.start = 0
[docs] def define_markers(self, materials): """Iterates through the mesh and mark them based on their position in the domain Arguments: materials {festim.Materials} -- contains the materials """ self.volume_markers = self.define_volume_markers(materials) self.surface_markers = self.define_surface_markers()
[docs] def define_surface_markers(self): """Creates the surface markers Returns: fenics.MeshFunction: the meshfunction containing the surface markers """ surface_markers = f.MeshFunction( "size_t", self.mesh, self.mesh.topology().dim() - 1, 0 ) surface_markers.set_all(0) i = 0 for facet in f.facets(self.mesh): i += 1 x0 = facet.midpoint() surface_markers[facet] = 0 if f.near(x0.x(), self.start): surface_markers[facet] = 1 if f.near(x0.x(), self.size): surface_markers[facet] = 2 return surface_markers
[docs] def define_volume_markers(self, materials): """Creates the volume markers Args: materials (festim.Materials): the materials Returns: fenics.MeshFunction: the meshfunction containing the volume markers """ volume_markers = f.MeshFunction( "size_t", self.mesh, self.mesh.topology().dim(), 0 ) # iterate through the cells of the mesh and mark them for cell in f.cells(self.mesh): x = cell.midpoint().x() subdomain_id = materials.find_subdomain_from_x_coordinate(x) volume_markers[cell] = subdomain_id return volume_markers
[docs] def define_measures(self, materials): """Creates the fenics.Measure objects for self.dx and self.ds""" if len(materials) > 1 and any(m.borders is None for m in materials): raise ValueError( "borders attributes need to be set for multiple 1D domains" ) if materials[0].borders is not None: materials.check_borders(self.size) self.define_markers(materials) super().define_measures()