示例#1
0
def generate():

    geom = pg.Geometry()

    X0 = np.array([
        [0.0,   0.0, 0.0],
        [0.5,   0.3, 0.1],
        [-0.5,  0.3, 0.1],
        [0.5,  -0.3, 0.1]
        ])

    R = np.array([0.1, 0.2, 0.1, 0.14])

    holes = []
    for x0, r in zip(X0, R):
        vol, sl = geom.add_ball(x0, r, with_volume=False, lcar=0.2*r)
        holes.append(sl)

    # geom.add_box(
    #         -1, 1,
    #         -1, 1,
    #         -1, 1,
    #         lcar=0.2,
    #         holes=holes
    #         )

    geom.add_ball(
            [0, 0, 0], 1.0,
            lcar=0.2,
            holes=holes
            )

    return geom.get_code()
示例#2
0
def generate():
    geom = pg.Geometry()

    poly = geom.add_polygon([
        [0.0, 0.0, 0.0],
        [2.0, 0.0, 0.0],
        [3.0, 1.0, 0.0],
        [1.0, 2.0, 0.0],
        [0.0, 1.0, 0.0],
    ],
                            lcar=0.1)

    field0 = geom.add_boundary_layer(edges_list=[poly.line_loop.lines[0]],
                                     hfar=0.1,
                                     hwall_n=0.01,
                                     ratio=1.1,
                                     thickness=0.2,
                                     anisomax=100.0)

    field1 = geom.add_boundary_layer(
        nodes_list=[poly.line_loop.lines[1].points[1]],
        hfar=0.1,
        hwall_n=0.01,
        ratio=1.1,
        thickness=0.2,
        anisomax=100.0)

    geom.add_background_field([field0, field1])

    return geom, 4.0
示例#3
0
def generate():
    geom = pg.Geometry()

    lcar = 0.1
    circle = geom.add_circle([0.0, 0.0, 0.0],
                             1.0,
                             lcar,
                             num_sections=4,
                             compound=True,
                             make_surface=False)

    coords_v = numpy.array([
        [+0.2, -0.6, 0.0],
        [+0.65, +0.5, 0.0],
        [+0.25, +0.5, 0.0],
        [+0.0, -0.15, 0.0],
        [-0.25, +0.5, 0.0],
        [-0.65, +0.5, 0.0],
        [-0.2, -0.6, 0.0],
    ])
    hole = geom.add_polygon(coords_v, lcar, make_surface=False)

    geom.add_plane_surface(circle.line_loop, holes=[hole])

    return geom
示例#4
0
文件: pipes.py 项目: mjredmond/pygmsh
def generate():
    '''Pipe with double-ring enclosure, rotated in space.
    '''
    geom = pg.Geometry()

    R = pg.rotation_matrix([1, 1, 0], np.pi/6.0)
    geom.add_pipe(
            inner_radius=0.3,
            outer_radius=0.4,
            length=1.0,
            R=R,
            lcar=0.04
            )

    R = np.array([
        [0.0, 0.0, 1.0],
        [0.0, 1.0, 0.0],
        [1.0, 0.0, 0.0]
        ])
    geom.add_pipe(
            inner_radius=0.3,
            outer_radius=0.4,
            length=1.0,
            lcar=0.04,
            R=R,
            variant='circle_extrusion'
            )

    return geom, 0.5317080205627609
示例#5
0
def simple(geo, radius=1*mm, lcar=.1*mm):
    center = np.array([0.0,0.0,0.0])
    geom = pg.Geometry()
    circ = geom.add_ball(center, radius, lcar, with_volume=False, label="ball")
    print geom.get_code()
    mesh = gmsh(geom, verbose=0, name="ball", ident=0)
    geo.add(mesh)
示例#6
0
文件: cube.py 项目: hainm/pygmsh
def generate():

    geom = pg.Geometry()

    geom.add_box(0, 1, 0, 1, 0, 1, 0.05)

    return geom
示例#7
0
def generate():

    geom = pg.Geometry()

    X0 = np.array([[0.0, 0.0, 0.0], [0.5, 0.3, 0.1], [-0.5, 0.3, 0.1],
                   [0.5, -0.3, 0.1]])

    R = np.array([0.1, 0.2, 0.1, 0.14])

    holes = []
    for x0, r in zip(X0, R):
        vol, sl = geom.add_ball(x0, r, with_volume=False, lcar=0.2 * r)
        holes.append(sl)

    # geom.add_box(
    #         -1, 1,
    #         -1, 1,
    #         -1, 1,
    #         lcar=0.2,
    #         holes=holes
    #         )

    ball, _ = geom.add_ball([0, 0, 0], 1.0, lcar=0.2, holes=holes)

    # Fails on travis for some reason. TODO fix
    # geom.add_physical_volume(ball, label='cheese')

    return geom
示例#8
0
def generate():
    geom = pg.Geometry()

    lcar = 0.1

    circle = geom.add_circle([0.5, 0.5, 0.0], 1.0, lcar)

    triangle = geom.add_polygon([
        [2.0, -0.5, 0.0],
        [4.0, -0.5, 0.0],
        [4.0, 1.5, 0.0],
    ], lcar)
    rectangle = geom.add_rectangle(4.75, 6.25, -0.24, 1.25, 0.0, lcar)

    # hold all domain
    geom.add_polygon(
        [
            [-1.0, -1.0, 0.0],
            [+7.0, -1.0, 0.0],
            [+7.0, +2.0, 0.0],
            [-1.0, +2.0, 0.0],
        ],
        lcar,
        holes=[circle.line_loop, triangle.line_loop, rectangle.line_loop])

    return geom, 24.0
示例#9
0
def generate():
    # Characteristic length
    lcar = 1e-1

    # Coordinates of lower-left and upper-right vertices of a square domain
    xmin = 0.0
    xmax = 5.0
    ymin = 0.0
    ymax = 5.0

    # Vertices of a square hole
    squareHoleCoordinates = np.array([[1, 1, 0], [4, 1, 0], [4, 4, 0],
                                      [1, 4, 0]])

    # Create geometric object
    geom = pg.Geometry()

    # Create square hole
    squareHole = geom.add_polygon(squareHoleCoordinates,
                                  lcar,
                                  make_surface=False)

    # Create square domain with square hole
    geom.add_rectangle(xmin,
                       xmax,
                       ymin,
                       ymax,
                       0.0,
                       lcar,
                       holes=[squareHole.line_loop])

    return geom, 1.0
示例#10
0
def generate():
    '''Pipe with double-ring enclosure, rotated in space.
    '''
    geom = pg.Geometry()

    R = pg.rotation_matrix([1, 0, 0], np.pi/6.0)

    geom.add_pipe(
            inner_radius=0.3,
            outer_radius=0.4,
            length=1.0,
            R=R,
            lcar=0.04
            )

    # x0 = np.array([0, 0, 0.3])
    # geom.add_torus(
    #         irad=0.05, orad=0.6, lcar=0.1,
    #         R=R,
    #         x0=np.dot(R, x0)
    #         )

    # x0 = np.array([0, 0, -0.3])
    # geom.add_torus(
    #         irad=0.05, orad=0.6, lcar=0.1,
    #         R=R,
    #         x0=np.dot(R, x0)
    #         )

    return geom
示例#11
0
def create_screw_mesh():

    geom = pg.Geometry()

    # Draw a cross.
    poly = geom.add_polygon([
        [0.0,   0.5, 0.0],
        [-0.1,  0.1, 0.0],
        [-0.5,  0.0, 0.0],
        [-0.1, -0.1, 0.0],
        [0.0,  -0.5, 0.0],
        [0.1,  -0.1, 0.0],
        [0.5,   0.0, 0.0],
        [0.1,   0.1, 0.0]
        ],
        lcar=0.05
        )

    axis = [0, 0, 1]

    geom.extrude(
        'Surface{%s}' % poly,
        translation_axis=axis,
        rotation_axis=axis,
        point_on_axis=[0, 0, 0],
        angle=2.0 / 6.0 * np.pi
        )

    points, cells = pg.generate_mesh(geom)
    return points, cells['tetra']
示例#12
0
def generate(lcar=0.3):
    geom = pg.Geometry()

    r = 1.25 * 3.4
    p1 = geom.add_point([0.0, 0.0, 0.0], lcar)
    # p2 = geom.add_point([+r, 0.0, 0.0], lcar)
    p3 = geom.add_point([-r, 0.0, 0.0], lcar)
    p4 = geom.add_point([0.0, +r, 0.0], lcar)
    p5 = geom.add_point([0.0, -r, 0.0], lcar)
    p6 = geom.add_point([r * cos(+pi / 12.0), r * sin(+pi / 12.0), 0.0], lcar)
    p7 = geom.add_point([r * cos(-pi / 12.0), r * sin(-pi / 12.0), 0.0], lcar)
    p8 = geom.add_point([0.5 * r, 0.0, 0.0], lcar)

    c0 = geom.add_circle_arc(p6, p1, p4)
    c1 = geom.add_circle_arc(p4, p1, p3)
    c2 = geom.add_circle_arc(p3, p1, p5)
    c3 = geom.add_circle_arc(p5, p1, p7)
    l1 = geom.add_line(p7, p8)
    l2 = geom.add_line(p8, p6)
    ll = geom.add_line_loop([c0, c1, c2, c3, l1, l2])

    # test adding raw code
    geom.add_raw_code('// dummy')
    geom.add_raw_code(['// dummy'])

    pacman = geom.add_plane_surface(ll)

    # Fails on travis for some reason, probably because of an old gmsh version.
    # test setting physical groups
    # geom.add_physical_point(p1, label='c')
    # geom.add_physical_line(c0, label='arc')
    geom.add_physical_surface(pacman)
    # geom.add_physical_surface(pacman, label=77)

    return geom, 54.312974717523744
示例#13
0
def generate():

    geom = pg.Geometry()

    X0 = np.array([[+0.0, +0.0, 0.0], [+0.5, +0.3, 0.1], [-0.5, +0.3, 0.1],
                   [+0.5, -0.3, 0.1]])

    R = np.array([0.1, 0.2, 0.1, 0.14])

    holes = [
        geom.add_ball(x0, r, with_volume=False, lcar=0.2 * r).surface_loop
        for x0, r in zip(X0, R)
    ]

    # geom.add_box(
    #         -1, 1,
    #         -1, 1,
    #         -1, 1,
    #         lcar=0.2,
    #         holes=holes
    #         )

    geom.add_ball([0, 0, 0], 1.0, lcar=0.2, holes=holes)

    # Fails on travis for some reason. TODO fix
    # geom.add_physical_volume(ball, label='cheese')

    return geom, 4.07064892966291
示例#14
0
文件: screw.py 项目: hainm/pygmsh
def generate(lcar=0.05):

    geom = pg.Geometry()

    # Draw a cross.
    poly = geom.add_polygon([
        [0.0,   0.5, 0.0],
        [-0.1,  0.1, 0.0],
        [-0.5,  0.0, 0.0],
        [-0.1, -0.1, 0.0],
        [0.0,  -0.5, 0.0],
        [0.1,  -0.1, 0.0],
        [0.5,   0.0, 0.0],
        [0.1,   0.1, 0.0]
        ],
        lcar=lcar
        )

    axis = [0, 0, 1]

    geom.extrude(
        'Surface{%s}' % poly,
        translation_axis=axis,
        rotation_axis=axis,
        point_on_axis=[0, 0, 0],
        angle=2.0 / 6.0 * np.pi
        )

    return geom
示例#15
0
def generate(lcar=0.3):
    geom = pg.Geometry()

    r = 1.25 * 3.4
    p1 = geom.add_point([0.0, 0.0, 0.0], lcar)
    # p2 = geom.add_point([+r, 0.0, 0.0], lcar)
    p3 = geom.add_point([-r, 0.0, 0.0], lcar)
    p4 = geom.add_point([0.0, +r, 0.0], lcar)
    p5 = geom.add_point([0.0, -r, 0.0], lcar)
    p6 = geom.add_point(
        [r * np.cos(+np.pi / 12.0), r * np.sin(+np.pi / 12.0), 0.0], lcar)
    p7 = geom.add_point(
        [r * np.cos(-np.pi / 12.0), r * np.sin(-np.pi / 12.0), 0.0], lcar)
    p8 = geom.add_point([0.5 * r, 0.0, 0.0], lcar)

    c0 = geom.add_circle_sector([p6, p1, p4])
    c1 = geom.add_circle_sector([p4, p1, p3])
    c2 = geom.add_circle_sector([p3, p1, p5])
    c3 = geom.add_circle_sector([p5, p1, p7])
    l1 = geom.add_line(p7, p8)
    l2 = geom.add_line(p8, p6)
    ll = geom.add_line_loop([c0, c1, c2, c3, l1, l2])

    pacman = geom.add_plane_surface(ll)

    # Fails on travis for some reason. TODO fix
    # test setting physical groups
    # geom.add_physical_point(p1, label='cut')
    # geom.add_physical_line(c0, label='arc')
    # geom.add_physical_surface(pacman, label='pacman')
    # test adding raw code
    # geom.add_raw_code('// test comment')
    # geom.add_raw_code(['// test comment'])

    return geom
示例#16
0
def generate():

    geom = pg.Geometry()

    # internal radius of torus
    irad = 0.15
    # external radius of torus
    orad = 0.27

    #
    Z_pos = (irad+orad) * np.r_[
            np.ones(8),
            -np.ones(8),
            np.ones(8),
            -np.ones(8)
            ]

    Alpha = np.r_[
            np.arange(8) * np.pi/4.0,
            np.arange(8) * np.pi/4.0 + np.pi/16.0,
            np.arange(8) * np.pi/4.0,
            np.arange(8) * np.pi/4.0 + np.pi/16.0
            ]

    A1 = (irad+orad) / np.tan(np.pi/8.0) * \
        np.r_[
            1.6*np.ones(8),
            1.6*np.ones(8),
            1.9*np.ones(8),
            1.9*np.ones(8)
            ]

    for alpha, a1, z in zip(Alpha, A1, Z_pos):
        # Rotate torus to the y-z-plane.
        R1 = pg.rotation_matrix([0.0, 1.0, 0.0], 0.5*np.pi)
        R2 = pg.rotation_matrix([0.0, 0.0, 1.0], alpha)
        x0 = np.array([a1, 0.0, 0.0])
        x1 = np.array([0.0, 0.0, z])
        # First rotate to y-z-plane, then move out to a1, rotate by angle
        # alpha, move up by z.
        #
        #    xnew = R2*(R1*x+x0) + x1
        #
        geom.add_torus(
                irad=irad,
                orad=orad,
                lcar=0.1,
                R=np.dot(R2, R1),
                x0=np.dot(R2, x0) + x1
                )

    geom.add_box(
            -1.0, 1.0,
            -1.0, 1.0,
            -1.0, 1.0,
            lcar=0.3
            )

    return geom.get_code()
示例#17
0
def generate():
    geom = pg.Geometry()

    geom.add_rectangle(
            0.0, 1.0,
            0.0, 1.0,
            0.0,
            0.1
            )

    return geom
示例#18
0
def generate():
    geom = pg.Geometry()

    circle = geom.add_circle(x0=[0.5, 0.5, 0.0],
                             radius=0.25,
                             lcar=0.1,
                             num_sections=4)
    circle_ll = geom.add_line_loop(circle)

    geom.add_rectangle(0.0, 1.0, 0.0, 1.0, 0.0, lcar=0.1, holes=[circle_ll])

    return geom
示例#19
0
def generate():
    geom = pg.Geometry()

    if geom.get_gmsh_major() == 3:
        # factories are supported only in gmsh 3
        geom.set_factory("OpenCASCADE")
        geom.add_box(0, 1, 0, 1, 0, 1, 1.0)
        geom.set_factory("Built-in")
        geom.set_factory("OpenCASCADE")
    else:
        geom.add_box(0, 1, 0, 1, 0, 1, 1.0)
    return geom, 1.0
示例#20
0
def generate():
    geom = pg.Geometry()
    geom.add_circle(
        [0.0, 0.0],
        1.0,
        0.1,
        num_sections=4,
        # If compound==False, the section borders have to be points of the
        # discretization. If using a compound circle, they don't; gmsh can
        # choose by itself where to point the circle points.
        compound=True)
    return geom, 3.1026628683057793
示例#21
0
    def gen_mesh(self, filename, n):
        import pygmsh as pg

        geom = pg.Geometry()

        loops = []
        for be in self.blade_elements:
            car = 0.5 / 1000
            line_l, line_u = be.get_foil_points(n,
                                                self.get_scimitar_offset(be.r))
            loop_points = np.concatenate((line_l, line_u[::-1]), axis=0)
            g_pts = []
            for p in loop_points[0:-2]:
                g_pts.append(geom.add_point(p, car))

            l_foil = geom.add_bspline(g_pts)

            loops.append(l_foil)

        # print geom.get_code()
        geom.add_ruled_surface([loops[0], loops[1]])

        # l in range(len(loops) - 1):
        # geom.add_surface(loops[l], loops[l+1])
        # poly = geom.add_polygon([
        # [0.0,   0.5, 0.0],
        # [-0.1,  0.1, 0.0],
        # [-0.5,  0.0, 0.0],
        # [-0.1, -0.1, 0.0],
        # [0.0,  -0.5, 0.0],
        # [0.1,  -0.1, 0.0],
        # [0.5,   0.0, 0.0],
        # [0.1,   0.1, 0.0]
        # ],
        # lcar=0.05
        # )
        # axis = [0, 0, 1]

        # geom.extrude(
        #'Surface{%s}' % poly,
        # translation_axis=axis,
        # rotation_axis=axis,
        # point_on_axis=[0, 0, 0],
        # angle=2.0 / 6.0 * np.pi
        # )

        points, cells = pg.generate_mesh(geom)

        import meshio

        meshio.write(filename, points, cells)
示例#22
0
文件: tori.py 项目: mjredmond/pygmsh
def generate():
    '''Torus, rotated in space.
    '''
    geom = pg.Geometry()

    R = np.array([[1.0, 0.0, 0.0], [0.0, 0.0, 1.0], [0.0, 1.0, 0.0]])
    geom.add_torus(irad=0.05, orad=0.6, lcar=0.03, x0=[0.0, 0.0, -1.0], R=R)

    R = np.array([[0.0, 0.0, 1.0], [0.0, 1.0, 0.0], [1.0, 0.0, 0.0]])
    geom.add_torus(irad=0.05,
                   orad=0.6,
                   lcar=0.03,
                   x0=[0.0, 0.0, 1.0],
                   variant='extrude_circle')

    return geom, 0.06604540601899624
示例#23
0
def generate():
    geom = pg.Geometry()

    circle = geom.add_circle(
        [0.0, 0.0, 0.0],
        1.0,
        0.3,
        num_sections=4,
        # If compound==False, the section borders have to be points of the
        # discretization. If using a compound circle, they don't; gmsh can
        # choose by itself where to point the circle points.
        compound=True)

    ll = geom.add_line_loop(circle)
    geom.add_plane_surface(ll)

    return geom
示例#24
0
def create_mesh(lcar):

    x0 = 0.0
    x1 = 0.1
    y0 = 0.0
    y1 = 0.2

    mesh_eps = 1.0e-12

    # pylint: disable=no-self-use
    class HotBoundary(SubDomain):
        def inside(self, x, on_boundary):
            return (on_boundary and x0 + mesh_eps < x[0] < x1 - mesh_eps
                    and y0 + mesh_eps < x[1] < y1 - mesh_eps)

    hot_boundary = HotBoundary()

    class CoolBoundary(SubDomain):
        def inside(self, x, on_boundary):
            return (on_boundary
                    and (x[0] < x0 + mesh_eps or x[0] > x1 - mesh_eps
                         or x[1] < y0 + mesh_eps or x[1] > y1 - mesh_eps))

    cool_boundary = CoolBoundary()

    cache_file = 'boussinesq-{}.msh'.format(lcar)
    if os.path.isfile(cache_file):
        print('Using mesh from cache \'{}\'.'.format(cache_file))
        points, cells, _, _, _ = meshio.read(cache_file)
    else:
        geom = pygmsh.Geometry()

        circle = geom.add_circle([0.05, 0.05, 0.0],
                                 0.02,
                                 lcar,
                                 make_surface=False)

        geom.add_rectangle(x0, x1, y0, y1, 0.0, lcar, holes=[circle])

        points, cells, _, _, _ = pygmsh.generate_mesh(geom)

        meshio.write(cache_file, points, cells)

    # https://fenicsproject.org/qa/12891/initialize-mesh-from-vertices-connectivities-at-once
    meshio.write('test.xml', points, cells)
    return Mesh('test.xml'), hot_boundary, cool_boundary
示例#25
0
def generate():
    geom = pg.Geometry()

    circle = geom.add_circle(x0=[0.5, 0.5, 0.0],
                             radius=0.25,
                             lcar=0.1,
                             num_sections=4,
                             make_surface=False)

    geom.add_rectangle(0.0,
                       1.0,
                       0.0,
                       1.0,
                       0.0,
                       lcar=0.1,
                       holes=[circle.line_loop])

    return geom, 0.8086582838174551
示例#26
0
def generate():
    geom = pg.Geometry()

    lcar = 0.1
    p1 = geom.add_point([0.0, 0.0, 0.0], lcar)
    p2 = geom.add_point([1.0, 0.0, 0.0], lcar)
    p3 = geom.add_point([1.0, 0.5, 0.0], lcar)
    p4 = geom.add_point([1.0, 1.0, 0.0], lcar)
    s1 = geom.add_bspline([p1, p2, p3, p4])

    p2 = geom.add_point([0.0, 1.0, 0.0], lcar)
    p3 = geom.add_point([0.5, 1.0, 0.0], lcar)
    s2 = geom.add_bspline([p4, p3, p2, p1])

    ll = geom.add_line_loop([s1, s2])
    geom.add_plane_surface(ll)

    return geom, 0.9156598733673261
示例#27
0
def generate(lcar=0.05):
    geom = pg.Geometry()

    # Draw a cross with a circular hole
    circ = geom.add_circle([0.0, 0.0, 0.0], 0.1, lcar=lcar)
    poly = geom.add_polygon(
        [[0.0, 0.5, 0.0], [-0.1, 0.1, 0.0], [-0.5, 0.0, 0.0
                                             ], [-0.1, -0.1, 0.0],
         [0.0, -0.5, 0.0], [0.1, -0.1, 0.0], [0.5, 0.0, 0.0], [0.1, 0.1, 0.0]],
        lcar=lcar,
        holes=[circ])

    axis = [0, 0, 1]

    geom.extrude(poly,
                 translation_axis=axis,
                 rotation_axis=axis,
                 point_on_axis=[0, 0, 0],
                 angle=2.0 / 6.0 * np.pi)

    return geom, 0.16951514066385628
示例#28
0
文件: FEM.py 项目: SiLab-Bonn/Scarce
def mesh_planar_sensor(x, thickness, resolution=1.):
    geom = pg.Geometry()
    resolution_x = x / resolution
#     resolution_x = (np.sqrt(thickness) * np.sqrt(x)) / (resolution * 100.)
#     resolution_x = 1. / np.sqrt(x) / np.sqrt(thickness) * 10000.
#     print 'resolution_x', resolution_x
#     raise

    points_xyz = [
        [x / 2, thickness, 0],
        [x / 2, 0, 0],
        [-x / 2, 0, 0],
        [-x / 2, thickness, 0],
    ]

    points = []
    points.append(geom.add_point(points_xyz[0], lcar=resolution_x))
    points.append(geom.add_point(points_xyz[1], lcar=resolution_x))
    points.append(geom.add_point(points_xyz[2], lcar=resolution_x))
    points.append(geom.add_point(points_xyz[3], lcar=resolution_x))

    # Create lines
    lines = [geom.add_line(points[i], points[i + 1])
             for i in range(len(points) - 1)]
    lines.append(geom.add_line(points[-1], points[0]))

    line_loop = geom.add_line_loop(lines)
    geom.add_plane_surface([line_loop])

    # Add 1/x1.5 law for the mesh size
    raw_codes = ['lc = %f;' % (resolution_x / 4.),
                 'Field[1] = Attractor;',
                 'Field[1].EdgesList = {l2};'
                 'Field[1].NNodesByEdge = %d;' % resolution,
                 'Field[2] = MathEval;',
                 'Field[2].F = Sprintf(\"F1^3 + %g\", lc);',
                 'Background Field = 2;\n']
 
    geom.add_raw_code(raw_codes)
    return geom
示例#29
0
def generate():
    geom = pg.Geometry()

    lcar = 0.1
    p0 = geom.add_point([0.0, 0.0, 0.0], lcar)
    p1 = geom.add_point([2.0, 0.0, 0.0], lcar)
    p2 = geom.add_point([3.0, 1.0, 0.0], lcar)
    p3 = geom.add_point([1.0, 2.0, 0.0], lcar)
    p4 = geom.add_point([0.0, 1.0, 0.0], lcar)

    l0 = geom.add_line(p0, p1)
    l1 = geom.add_line(p1, p2)
    l2 = geom.add_line(p2, p3)
    l3 = geom.add_line(p3, p4)
    l4 = geom.add_line(p4, p0)

    ll = geom.add_line_loop([l0, l1, l2, l3, l4])

    surf = geom.add_plane_surface(ll)

    field0 = geom.add_boundary_layer(edges_list=[l0],
                                     hfar=0.1,
                                     hwall_n=0.01,
                                     hwall_t=0.01,
                                     ratio=1.1,
                                     thickness=0.2,
                                     anisomax=100.0)

    field1 = geom.add_boundary_layer(nodes_list=[p2],
                                     hfar=0.1,
                                     hwall_n=0.01,
                                     hwall_t=0.01,
                                     ratio=1.1,
                                     thickness=0.2,
                                     anisomax=100.0)

    geom.add_background_field([field0, field1])

    return geom
示例#30
0
def generate():
    geom = pg.Geometry()
    lcar = 0.1

    rectangle = geom.add_rectangle(-1.0, 1.0, -1.0, 1.0, 0.0, lcar)

    if geom.get_gmsh_major() == 2:
        # boolean operations are not supported in gmsh 2
        return geom, 4.0

    circle_w = geom.add_circle([-1.0, 0.0, 0.0], 0.5, lcar, num_sections=4)

    circle_e = geom.add_circle([1.0, 0.0, 0.0], 0.5, lcar, num_sections=4)

    geom.set_factory('OpenCASCADE')
    _ = geom.boolean_union([rectangle.surface],
                           [circle_w.plane_surface, circle_e.plane_surface])

    rectangle2 = geom.add_rectangle(2.0, 4.0, -1.0, 1.0, 0.0, lcar)
    circle2_w = geom.add_circle([2.0, 0.0, 0.0], 0.5, lcar, num_sections=4)

    circle2_e = geom.add_circle([4.0, 0.0, 0.0], 0.5, lcar, num_sections=4)

    geom.set_factory('OpenCASCADE')
    _ = geom.boolean_intersection(
        [rectangle2.surface],
        [circle2_w.plane_surface, circle2_e.plane_surface])

    rectangle3 = geom.add_rectangle(5.0, 7.0, -1.0, 1.0, 0.0, lcar)
    circle3_w = geom.add_circle([5.0, 0.0, 0.0], 0.5, lcar, num_sections=4)

    circle3_e = geom.add_circle([7.0, 0.0, 0.0], 0.5, lcar, num_sections=4)

    geom.set_factory('OpenCASCADE')
    _ = geom.boolean_difference(
        [rectangle3.surface],
        [circle3_w.plane_surface, circle3_e.plane_surface])

    return geom, 4.780361 + 0.7803612 + 3.2196387