Exemplo n.º 1
0
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))
Exemplo n.º 2
0
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))
Exemplo n.º 3
0
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))
Exemplo n.º 4
0
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))
Exemplo n.º 5
0
"""
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)
Exemplo n.º 6
0
 def make_mesh(geom: Geometry) -> MeshTri:
     return from_meshio(generate_mesh(geom, dim=2))
Exemplo n.º 7
0
def make_mesh(*args, **kwargs) -> MeshTri:
    return from_meshio(generate_mesh(make_geom(*args, **kwargs), dim=2))