def make_mesh( halfheight: float, # mm length: float, thickness: float) -> MeshTri: with geometrycontext as g: if version.parse(pygmsh.__version__) < version.parse('7.0.0'): geom = pygmsh.built_in.Geometry() geom.add_curve_loop = geom.add_line_loop else: geom = g points = [] lines = [] lcar = halfheight / 2**2 for xy in [(0., halfheight), (0., -halfheight), (length, -halfheight), (length, halfheight), (0., -halfheight - thickness), (length, -halfheight - thickness)]: points.append(geom.add_point([*xy, 0.], lcar)) lines.append(geom.add_line(*points[:2])) geom.add_physical(lines[-1], 'fluid-inlet') lines.append(geom.add_line(*points[1:3])) lines.append(geom.add_line(*points[2:4])) geom.add_physical(lines[-1], 'fluid-outlet') lines.append(geom.add_line(points[3], points[0])) geom.add_physical(geom.add_plane_surface(geom.add_curve_loop(lines)), 'fluid') lines.append(geom.add_line(points[1], points[4])) geom.add_physical(lines[-1], 'solid-inlet') lines.append(geom.add_line(*points[4:6])) geom.add_physical(lines[-1], 'heated') lines.append(geom.add_line(points[5], points[2])) geom.add_physical(lines[-1], 'solid-outlet') geom.add_physical( geom.add_plane_surface( geom.add_curve_loop([*lines[-3:], -lines[1]])), 'solid') if version.parse(pygmsh.__version__) < version.parse('7.0.0'): return from_meshio(pygmsh.generate_mesh(geom, dim=2)) else: return from_meshio(geom.generate_mesh(dim=2))
def make_mesh(a: float, # radius of wire b: float, # radius of insulation dx: Optional[float] = None) -> MeshTri: dx = a / 2 ** 3 if dx is None else dx origin = np.zeros(3) geom = Geometry() wire = geom.add_circle(origin, a, dx, make_surface=True) geom.add_physical(wire.plane_surface, 'wire') insulation = geom.add_circle(origin, b, dx, holes=[wire.line_loop]) geom.add_physical(insulation.plane_surface, 'insulation') geom.add_physical(insulation.line_loop.lines, 'convection') geom.add_raw_code('Mesh.RecombineAll=1;') geom.add_raw_code('Mesh.RecombinationAlgorithm=2;\n') return from_meshio(generate_mesh(geom, dim=2))
def make_mesh() -> MeshTri: # dimensions for RG316 coaxial cable inner_conductor_diameter = 0.50e-3 inner_insulator_diameter = 1.52e-3 outer_conductor_diameter = 1.98e-3 outer_insulator_diameter = 2.48e-3 # characteristic length for mesh generation lcar = 0.1e-3 geom = Geometry() inner_conductor = geom.add_circle( (0, 0, 0), inner_conductor_diameter/2, lcar=lcar) geom.add_physical( inner_conductor.plane_surface, label='inner_conductor') geom.add_physical( inner_conductor.line_loop.lines, label='inner_conductor_outer_surface') inner_insulator = geom.add_circle( (0, 0, 0), inner_insulator_diameter/2, lcar=lcar, holes=[inner_conductor.line_loop]) geom.add_physical( inner_insulator.plane_surface, label='inner_insulator') geom.add_physical( inner_insulator.line_loop.lines, label='outer_conductor_inner_surface') outer_conductor = geom.add_circle( (0, 0, 0), outer_conductor_diameter/2, lcar=lcar, holes=[inner_insulator.line_loop]) geom.add_physical( outer_conductor.plane_surface, label='outer_conductor') geom.add_physical( outer_conductor.line_loop.lines, label='outer_conductor_outer_surface') outer_insulator = geom.add_circle( (0, 0, 0), outer_insulator_diameter/2, lcar=lcar, holes=[outer_conductor.line_loop]) geom.add_physical( outer_insulator.plane_surface, label='outer_insulator') geom.add_physical( outer_insulator.line_loop.lines, label='boundary') return from_meshio(generate_mesh(geom, dim=2))
def make_mesh(halfheight: float, # mm length: float, thickness: float) -> MeshTri: geom = Geometry() points = [] lines = [] lcar = halfheight / 2**2 for xy in [(0., halfheight), (0., -halfheight), (length, -halfheight), (length, halfheight), (0., -halfheight - thickness), (length, -halfheight - thickness)]: points.append(geom.add_point([*xy, 0.], lcar)) lines.append(geom.add_line(*points[:2])) geom.add_physical(lines[-1], 'fluid-inlet') lines.append(geom.add_line(*points[1:3])) lines.append(geom.add_line(*points[2:4])) geom.add_physical(lines[-1], 'fluid-outlet') lines.append(geom.add_line(points[3], points[0])) geom.add_physical(geom.add_plane_surface(geom.add_line_loop(lines)), 'fluid') lines.append(geom.add_line(points[1], points[4])) geom.add_physical(lines[-1], 'solid-inlet') lines.append(geom.add_line(*points[4:6])) geom.add_physical(lines[-1], 'heated') lines.append(geom.add_line(points[5], points[2])) geom.add_physical(lines[-1], 'solid-outlet') geom.add_physical(geom.add_plane_surface(geom.add_line_loop( [*lines[-3:], -lines[1]])), 'solid') return from_meshio(generate_mesh(geom, dim=2))
""" from skfem import * from skfem.io import from_meshio from skfem.models.poisson import unit_load import numpy as np from pygmsh import generate_mesh from pygmsh.built_in import Geometry geom = Geometry() circle = geom.add_circle([0.] * 3, 1., .5**3) geom.add_physical(circle.line_loop.lines, 'perimeter') geom.add_physical(circle.plane_surface, 'disk') mesh = from_meshio(generate_mesh(geom, dim=2)) element = ElementTriMorley() mapping = MappingAffine(mesh) ib = InteriorBasis(mesh, element, mapping, 2) @BilinearForm def biharmonic(u, v, w): from skfem.helpers import ddot, dd return ddot(dd(u), dd(v)) stokes = asm(biharmonic, ib) rotf = asm(unit_load, ib)
def make_mesh(geom: Geometry) -> MeshTri: return from_meshio(generate_mesh(geom, dim=2))
def make_mesh(*args, **kwargs) -> MeshTri: return from_meshio(generate_mesh(make_geom(*args, **kwargs), dim=2))