def main(): import numpy from math import pi, cos, sin from meshpy.tet import MeshInfo, build from meshpy.geometry import GeometryBuilder, Marker, \ generate_extrusion, make_box from meshpy.naca import generate_naca geob = GeometryBuilder() box_marker = Marker.FIRST_USER_MARKER wing_length = 2 wing_subdiv = 5 rz_points = [ (0, -wing_length * 1.05), (0.7, -wing_length * 1.05), ] + [(r, x) for x, r in zip( numpy.linspace(-wing_length, 0, wing_subdiv, endpoint=False), numpy.linspace(0.8, 1, wing_subdiv, endpoint=False))] + [(1, 0)] + [ (r, x) for x, r in zip( numpy.linspace(wing_length, 0, wing_subdiv, endpoint=False), numpy.linspace(0.8, 1, wing_subdiv, endpoint=False)) ][::-1] + [(0.7, wing_length * 1.05), (0, wing_length * 1.05)] geob.add_geometry(*generate_extrusion( rz_points=rz_points, base_shape=generate_naca("0012", verbose=False, number_of_points=20), ring_markers=(wing_subdiv * 2 + 4) * [box_marker])) from meshpy.tools import make_swizzle_matrix swizzle_matrix = make_swizzle_matrix("z:x,y:y,x:z") geob.apply_transform(lambda p: numpy.dot(swizzle_matrix, p)) def deform_wing(p): x, y, z = p return numpy.array([ x, y + 0.1 * abs(x / wing_length)**2, z + 0.8 * abs(x / wing_length)**1.2 ]) geob.apply_transform(deform_wing) points, facets, _, facet_markers = make_box( numpy.array([-wing_length - 1, -1, -1.5]), numpy.array([wing_length + 1, 1, 3])) geob.add_geometry(points, facets, facet_markers=facet_markers) mesh_info = MeshInfo() geob.set(mesh_info) mesh_info.set_holes([(0, 0, 0.5)]) mesh = build(mesh_info) print "%d elements" % len(mesh.elements) mesh.write_vtk("airfoil3d.vtk")
def main(): from ply import parse_ply import sys data = parse_ply(sys.argv[1]) from meshpy.geometry import GeometryBuilder builder = GeometryBuilder() builder.add_geometry(points=[pt[:3] for pt in data["vertex"].data], facets=[fd[0] for fd in data["face"].data]) builder.wrap_in_box(1) from meshpy.tet import MeshInfo, build mi = MeshInfo() builder.set(mi) mi.set_holes([builder.center()]) mesh = build(mi) print("%d elements" % len(mesh.elements)) mesh.write_vtk("out.vtk")
def main(): from ply import parse_ply import sys data = parse_ply(sys.argv[1]) from meshpy.geometry import GeometryBuilder builder = GeometryBuilder() builder.add_geometry( points=[pt[:3] for pt in data["vertex"].data], facets=[fd[0] for fd in data["face"].data]) builder.wrap_in_box(1) from meshpy.tet import MeshInfo, build mi = MeshInfo() builder.set(mi) mi.set_holes([builder.center()]) mesh = build(mi) print("%d elements" % len(mesh.elements)) mesh.write_vtk("out.vtk")
def main(): import numpy from math import pi, cos, sin from meshpy.tet import MeshInfo, build from meshpy.geometry import GeometryBuilder, Marker, make_box geob = GeometryBuilder() box_marker = Marker.FIRST_USER_MARKER extent_small = 0.1*numpy.ones(3, dtype=numpy.float64) points, facets, _, _ = \ make_box(-extent_small, extent_small) geob.add_geometry(points, facets, facet_markers=box_marker) # make small "separator box" for region attribute geob.wrap_in_box(0.3) points, facets, _, facet_markers = \ make_box(numpy.array([-1,-1,-1]), numpy.array([1,1,5])) geob.add_geometry(points, facets, facet_markers=facet_markers) mesh_info = MeshInfo() geob.set(mesh_info) mesh_info.set_holes([(0,0,0)]) # region attributes mesh_info.regions.resize(1) mesh_info.regions[0] = ( # point in region list(extent_small*2) + [ # region number 1, # max volume in region 0.0001]) mesh = build(mesh_info, max_volume=0.02, volume_constraints=True, attributes=True) print ("%d elements" % len(mesh.elements)) mesh.write_vtk("box-in-box.vtk")
def make_boxmesh(): from meshpy.tet import MeshInfo, build from meshpy.geometry import GeometryBuilder, Marker, make_box geob = GeometryBuilder() box_marker = Marker.FIRST_USER_MARKER extent_small = 0.1 * numpy.ones(3, dtype=numpy.float64) geob.add_geometry(*make_box(-extent_small, extent_small)) # make small "separator box" for region attribute geob.add_geometry( *make_box(-extent_small * 4, numpy.array([4, 0.4, 0.4], dtype=numpy.float64))) geob.add_geometry(*make_box(numpy.array([-1, -1, -1], dtype=numpy.float64), numpy.array([5, 1, 1], dtype=numpy.float64))) mesh_info = MeshInfo() geob.set(mesh_info) mesh_info.set_holes([(0, 0, 0)]) # region attributes mesh_info.regions.resize(1) mesh_info.regions[0] = ( # point in region list(extent_small * 2) + [ # region number 1, # max volume in region #0.0001 0.005 ]) mesh = build(mesh_info, max_volume=0.02, volume_constraints=True, attributes=True) print("%d elements" % len(mesh.elements)) #mesh.write_vtk("box-in-box.vtk") #print "done writing" fvi2fm = mesh.face_vertex_indices_to_face_marker face_marker_to_tag = { box_marker: "noslip", Marker.MINUS_X: "inflow", Marker.PLUS_X: "outflow", Marker.MINUS_Y: "inflow", Marker.PLUS_Y: "inflow", Marker.PLUS_Z: "inflow", Marker.MINUS_Z: "inflow" } def bdry_tagger(fvi, el, fn, all_v): face_marker = fvi2fm[fvi] return [face_marker_to_tag[face_marker]] from grudge.mesh import make_conformal_mesh return make_conformal_mesh(mesh.points, mesh.elements, bdry_tagger)
def make_wingmesh(): import numpy from math import pi, cos, sin from meshpy.tet import MeshInfo, build from meshpy.geometry import GeometryBuilder, Marker, \ generate_extrusion, make_box geob = GeometryBuilder() profile_marker = Marker.FIRST_USER_MARKER wing_length = 2 wing_subdiv = 5 rz_points = [ (0, -wing_length * 1.05), (0.7, -wing_length * 1.05), ] + [(r, x) for x, r in zip( numpy.linspace(-wing_length, 0, wing_subdiv, endpoint=False), numpy.linspace(0.8, 1, wing_subdiv, endpoint=False))] + [(1, 0)] + [ (r, x) for x, r in zip( numpy.linspace(wing_length, 0, wing_subdiv, endpoint=False), numpy.linspace(0.8, 1, wing_subdiv, endpoint=False)) ][::-1] + [(0.7, wing_length * 1.05), (0, wing_length * 1.05)] from meshpy.naca import get_naca_points geob.add_geometry(*generate_extrusion( rz_points=rz_points, base_shape=get_naca_points("0012", number_of_points=20), ring_markers=(wing_subdiv * 2 + 4) * [profile_marker])) def deform_wing(p): x, y, z = p return numpy.array([ x + 0.8 * abs(z / wing_length)**1.2, y + 0.1 * abs(z / wing_length)**2, z ]) geob.apply_transform(deform_wing) points, facets, facet_markers = make_box( numpy.array([-1.5, -1, -wing_length - 1], dtype=numpy.float64), numpy.array([3, 1, wing_length + 1], dtype=numpy.float64)) geob.add_geometry(points, facets, facet_markers=facet_markers) mesh_info = MeshInfo() geob.set(mesh_info) mesh_info.set_holes([(0.5, 0, 0)]) mesh = build(mesh_info) print("%d elements" % len(mesh.elements)) fvi2fm = mesh.face_vertex_indices_to_face_marker face_marker_to_tag = { profile_marker: "noslip", Marker.MINUS_X: "inflow", Marker.PLUS_X: "outflow", Marker.MINUS_Y: "inflow", Marker.PLUS_Y: "inflow", Marker.PLUS_Z: "inflow", Marker.MINUS_Z: "inflow" } def bdry_tagger(fvi, el, fn, all_v): face_marker = fvi2fm[fvi] return [face_marker_to_tag[face_marker]] from grudge.mesh import make_conformal_mesh return make_conformal_mesh(mesh.points, mesh.elements, bdry_tagger)
def make_boxmesh(): from meshpy.tet import MeshInfo, build from meshpy.geometry import GeometryBuilder, Marker, make_box geob = GeometryBuilder() box_marker = Marker.FIRST_USER_MARKER extent_small = 0.1*numpy.ones(3, dtype=numpy.float64) geob.add_geometry(*make_box(-extent_small, extent_small)) # make small "separator box" for region attribute geob.add_geometry( *make_box( -extent_small*4, numpy.array([4, 0.4, 0.4], dtype=numpy.float64))) geob.add_geometry( *make_box( numpy.array([-1, -1, -1], dtype=numpy.float64), numpy.array([5, 1, 1], dtype=numpy.float64))) mesh_info = MeshInfo() geob.set(mesh_info) mesh_info.set_holes([(0, 0, 0)]) # region attributes mesh_info.regions.resize(1) mesh_info.regions[0] = ( # point in region list(extent_small*2) + [ # region number 1, # max volume in region #0.0001 0.005 ]) mesh = build(mesh_info, max_volume=0.02, volume_constraints=True, attributes=True) print "%d elements" % len(mesh.elements) #mesh.write_vtk("box-in-box.vtk") #print "done writing" fvi2fm = mesh.face_vertex_indices_to_face_marker face_marker_to_tag = { box_marker: "noslip", Marker.MINUS_X: "inflow", Marker.PLUS_X: "outflow", Marker.MINUS_Y: "inflow", Marker.PLUS_Y: "inflow", Marker.PLUS_Z: "inflow", Marker.MINUS_Z: "inflow" } def bdry_tagger(fvi, el, fn, all_v): face_marker = fvi2fm[fvi] return [face_marker_to_tag[face_marker]] from hedge.mesh import make_conformal_mesh return make_conformal_mesh( mesh.points, mesh.elements, bdry_tagger)
def make_wingmesh(): import numpy from math import pi, cos, sin from meshpy.tet import MeshInfo, build from meshpy.geometry import GeometryBuilder, Marker, \ generate_extrusion, make_box geob = GeometryBuilder() profile_marker = Marker.FIRST_USER_MARKER wing_length = 2 wing_subdiv = 5 rz_points = [ (0, -wing_length*1.05), (0.7, -wing_length*1.05), ] + [ (r, x) for x, r in zip( numpy.linspace(-wing_length, 0, wing_subdiv, endpoint=False), numpy.linspace(0.8, 1, wing_subdiv, endpoint=False)) ] + [(1,0)] + [ (r, x) for x, r in zip( numpy.linspace(wing_length, 0, wing_subdiv, endpoint=False), numpy.linspace(0.8, 1, wing_subdiv, endpoint=False)) ][::-1] + [ (0.7, wing_length*1.05), (0, wing_length*1.05) ] from meshpy.naca import get_naca_points geob.add_geometry(*generate_extrusion( rz_points=rz_points, base_shape=get_naca_points("0012", number_of_points=20), ring_markers=(wing_subdiv*2+4)*[profile_marker])) def deform_wing(p): x, y, z = p return numpy.array([ x + 0.8*abs(z/wing_length)** 1.2, y + 0.1*abs(z/wing_length)**2, z]) geob.apply_transform(deform_wing) points, facets, facet_markers = make_box( numpy.array([-1.5,-1,-wing_length-1], dtype=numpy.float64), numpy.array([3,1,wing_length+1], dtype=numpy.float64)) geob.add_geometry(points, facets, facet_markers=facet_markers) mesh_info = MeshInfo() geob.set(mesh_info) mesh_info.set_holes([(0.5,0,0)]) mesh = build(mesh_info) print "%d elements" % len(mesh.elements) fvi2fm = mesh.face_vertex_indices_to_face_marker face_marker_to_tag = { profile_marker: "noslip", Marker.MINUS_X: "inflow", Marker.PLUS_X: "outflow", Marker.MINUS_Y: "inflow", Marker.PLUS_Y: "inflow", Marker.PLUS_Z: "inflow", Marker.MINUS_Z: "inflow" } def bdry_tagger(fvi, el, fn, all_v): face_marker = fvi2fm[fvi] return [face_marker_to_tag[face_marker]] from hedge.mesh import make_conformal_mesh return make_conformal_mesh(mesh.points, mesh.elements, bdry_tagger)
def main(): import numpy #from math import pi, cos, sin from meshpy.tet import MeshInfo, build from meshpy.geometry import GeometryBuilder, Marker, \ generate_extrusion, make_box from meshpy.naca import get_naca_points geob = GeometryBuilder() box_marker = Marker.FIRST_USER_MARKER wing_length = 2 wing_subdiv = 5 rz_points = [ (0, -wing_length*1.05), (0.7, -wing_length*1.05), ] + [ (r, x) for x, r in zip( numpy.linspace(-wing_length, 0, wing_subdiv, endpoint=False), numpy.linspace(0.8, 1, wing_subdiv, endpoint=False)) ] + [(1, 0)] + [ (r, x) for x, r in zip( numpy.linspace(wing_length, 0, wing_subdiv, endpoint=False), numpy.linspace(0.8, 1, wing_subdiv, endpoint=False)) ][::-1] + [ (0.7, wing_length*1.05), (0, wing_length*1.05) ] geob.add_geometry(*generate_extrusion( rz_points=rz_points, base_shape=get_naca_points("0012", verbose=False, number_of_points=20), ring_markers=(wing_subdiv*2+4)*[box_marker])) from meshpy.tools import make_swizzle_matrix swizzle_matrix = make_swizzle_matrix("z:x,y:y,x:z") geob.apply_transform(lambda p: numpy.dot(swizzle_matrix, p)) def deform_wing(p): x, y, z = p return numpy.array([ x, y + 0.1*abs(x/wing_length)**2, z + 0.8*abs(x/wing_length) ** 1.2]) geob.apply_transform(deform_wing) points, facets, _, facet_markers = make_box( numpy.array([-wing_length-1, -1, -1.5]), numpy.array([wing_length+1, 1, 3])) geob.add_geometry(points, facets, facet_markers=facet_markers) mesh_info = MeshInfo() geob.set(mesh_info) mesh_info.set_holes([(0, 0, 0.5)]) mesh = build(mesh_info) print("%d elements" % len(mesh.elements)) mesh.write_vtk("airfoil3d.vtk")