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()
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
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
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
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)
def generate(): geom = pg.Geometry() geom.add_box(0, 1, 0, 1, 0, 1, 0.05) return geom
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
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
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
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
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']
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
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
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
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
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()
def generate(): geom = pg.Geometry() geom.add_rectangle( 0.0, 1.0, 0.0, 1.0, 0.0, 0.1 ) return geom
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
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
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
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)
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
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
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
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
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
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
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
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
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