Source code for beat.geometry

from typing import NamedTuple
import numpy as np
import dolfin


[docs] class Geometry(NamedTuple): mesh: dolfin.Mesh ffun: dolfin.MeshFunction | None = None markers: dict[str, tuple[int, int]] | None = None f0: dolfin.Constant | dolfin.Function | None = None s0: dolfin.Constant | dolfin.Function | None = None n0: dolfin.Constant | dolfin.Function | None = None
def get_2D_slab_microstructure( transverse: bool = False, ) -> tuple[dolfin.Constant, dolfin.Constant]: if transverse: f0 = dolfin.Constant((0.0, 1.0)) s0 = dolfin.Constant((1.0, 0.0)) else: f0 = dolfin.Constant((1.0, 0.0)) s0 = dolfin.Constant((0.0, 1.0)) return f0, s0 def get_3D_slab_microstructure( transverse: bool = False, ) -> tuple[dolfin.Constant, dolfin.Constant, dolfin.Constant]: if transverse: f0 = dolfin.Constant((0.0, 0.0, 1.0)) s0 = dolfin.Constant((1.0, 0.0, 0.0)) n0 = dolfin.Constant((0.0, 1.0, 0.0)) else: f0 = dolfin.Constant((1.0, 0.0, 0.0)) s0 = dolfin.Constant((0.0, 1.0, 0.0)) n0 = dolfin.Constant((0.0, 0.0, 1.0)) return f0, s0, n0 def get_2D_slab_mesh(dx, Lx, Ly): return dolfin.RectangleMesh( dolfin.MPI.comm_world, dolfin.Point(0.0, 0.0), dolfin.Point(Lx, Ly), int(np.rint((Lx / dx))), int(np.rint((Ly / dx))), ) def get_3D_slab_mesh(dx, Lx, Ly, Lz=0.0, dim=2): return dolfin.BoxMesh( dolfin.MPI.comm_world, dolfin.Point(0.0, 0.0, 0.0), dolfin.Point(Lx, Ly, Lz), int(np.rint((Lx / dx))), int(np.rint((Ly / dx))), int(np.rint((Lz / dx))), ) def get_3D_slab_geometry(Lx, Ly, Lz, dx, transverse=False) -> Geometry: mesh = get_3D_slab_mesh(dx, Lx, Ly, Lz) f0, s0, n0 = get_3D_slab_microstructure(transverse) return Geometry(mesh=mesh, f0=f0, s0=s0, n0=n0) def get_2D_slab_geometry(Lx, Ly, dx, transverse=False) -> Geometry: mesh = get_2D_slab_mesh(dx, Lx, Ly) f0, s0 = get_2D_slab_microstructure(transverse) return Geometry(mesh=mesh, f0=f0, s0=s0)