def run_SeismicMesh(ef, HMIN=75.0): cube = Cube(bbox) t1 = time.time() points, cells = generate_mesh( domain=cube, edge_length=ef, max_iter=25, ) points, cells = sliver_removal( points=points, domain=cube, edge_length=ef, ) elapsed = time.time() - t1 # meshio.write_points_cells( # "sm_EAGE.vtk", # points, # [("tetra", cells)], # file_format="vtk", # ) plex = meshplex.MeshTetra(points, cells) angles = plex.q_min_sin_dihedral_angles quality = plex.q_radius_ratio num_cells = len(cells) num_vertices = len(points) return angles, quality, elapsed, num_vertices, num_cells
def test_3dmesher_par_adapt(): fname = os.path.join(os.path.dirname(__file__), "test3D.bin") nz, nx, ny = 20, 10, 10 bbox = (-2000.0, 0.0, 0.0, 1000.0, 0.0, 1000.0) cube = Cube(bbox) hmin = 50 wl = 10 freq = 4 grade = 0.15 ef = get_sizing_function_from_segy( fname, bbox, hmin=hmin, wl=wl, freq=freq, grade=grade, nx=nx, ny=ny, nz=nz, byte_order="little", ) points, cells = generate_mesh( cube, ef, max_iter=10, ) points = comm.bcast(points, 0) points, cells = generate_mesh( points=points, domain=cube, edge_length=ef, axis=1, max_iter=10, ) points = comm.bcast(points, 0) points, cells = generate_mesh( points=points, edge_length=ef, domain=cube, axis=2, max_iter=10, ) if comm.rank == 0: import meshio meshio.write_points_cells( "foo3D_V3.vtk", points, [("tetra", cells)], ) vol = geometry.simp_vol(points / 1000, cells) assert np.abs(2 - np.sum(vol)) < 0.10 # km2
def test_3dmesher_par(): fname = os.path.join(os.path.dirname(__file__), "test3D.bin") nz, nx, ny = 20, 10, 10 bbox = (-2e3, 0.0, 0.0, 1e3, 0.0, 1e3) hmin = 50 wl = 10 freq = 4 grade = 0.15 grad = 50.0 cube = Cube(bbox) ef = get_sizing_function_from_segy( fname, bbox, hmin=hmin, grade=grade, grad=grad, wl=wl, freq=freq, nz=nz, nx=nx, ny=ny, byte_order="little", axes_order=(2, 0, 1), # order for EAGE (x, y, z) to default order (z,x,y) ) points, cells = generate_mesh( h0=hmin, edge_length=ef, domain=cube, perform_checks=False, ) points, cells = sliver_removal( points=points, domain=cube, edge_length=ef, h0=hmin, perform_checks=False, ) if comm.rank == 0: import meshio meshio.write_points_cells( "foo3D_V3.vtk", points, [("tetra", cells)], ) vol = geometry.simp_vol(points / 1000, cells) assert np.abs(2 - np.sum(vol)) < 0.10 # km2 print(len(points), len(cells)) assert np.abs(9220 - len(points)) < 5000 assert np.abs(49156 - len(cells)) < 5000
def test_rotations3d(): bbox = (0.0, 1.0, 0.0, 1.0, 0.0, 1.0) geo = [] geo.append(Ball((0.5, 0.5, 0.5), 0.1, rotate=0.0 * 3.14)) geo.append(Cube(bbox, rotate=0.4 * 3.14)) geo.append(Torus(1.0, 0.5, rotate=0.4 * 3.14)) geo.append(Prism(0.5, 0.5, rotate=0.5 * 3.14)) geo.append(Cylinder(1.0, 0.5, rotate=0.6 * 3.14)) for domain in geo: p, c = generate_mesh(domain=domain, edge_length=0.1)
def test_3dmesher_domain_extension(style_answer): style, answer = style_answer fname = os.path.join(os.path.dirname(__file__), "test3D.bin") wl = 5 freq = 2 hmin = 150 grade = 0.005 bbox = (-2e3, 0.0, 0.0, 1e3, 0.0, 1e3) cube = Cube(bbox) ef = get_sizing_function_from_segy( fname, bbox, grade=grade, grad=hmin, freq=freq, wl=wl, hmin=hmin, nz=20, nx=10, ny=10, byte_order="little", domain_pad=200, pad_style=style, axes_order=(2, 0, 1), ) write_velocity_model(fname, nz=20, nx=10, ny=10, byte_order="little", ofname="testing", bbox=bbox) points, cells = generate_mesh( domain=cube, edge_length=ef, h0=hmin, perform_checks=False, ) points, cells = sliver_removal(points=points, domain=cube, edge_length=ef, h0=hmin) print(len(points), len(cells)) allclose([len(points), len(cells)], answer, atol=100) import meshio meshio.write_points_cells("foo3D" + style + ".vtk", points, [("tetra", cells)])
def test_3dmesher(): fname = os.path.join(os.path.dirname(__file__), "test3D.bin") wl = 10 freq = 2 hmin = 50 grade = 0.005 bbox = (-2e3, 0.0, 0.0, 1e3, 0.0, 1e3) cube = Cube(bbox) ef = get_sizing_function_from_segy( fname, bbox, grade=grade, grad=hmin, freq=freq, wl=wl, hmin=hmin, nz=20, nx=10, ny=10, byte_order="little", domain_pad=0.0, axes_order=(2, 0, 1), ) write_velocity_model(fname, nz=20, nx=10, ny=10, byte_order="little", ofname="testing") points, cells = generate_mesh( domain=cube, edge_length=ef, h0=hmin, max_iter=25, perform_checks=False, ) points, cells = sliver_removal(points=points, edge_length=ef, domain=cube, h0=hmin) print(len(points), len(cells)) allclose([len(points), len(cells)], [16459, 89240], atol=100)