def rect_with_refinement(h): return dmsh.generate( dmsh.Rectangle(-1.0, 1.0, -1.0, 1.0), edge_size=lambda x: h + 0.1 * numpy.sqrt(x[0]**2 + x[1]**2), tol=1.0e-10, max_steps=max_steps, )
def test(show=False): geo = dmsh.Translation(dmsh.Rectangle(-1.0, +2.0, -1.0, +1.0), [1.0, 1.0]) X, cells = dmsh.generate(geo, 0.1, show=show) ref_norms = [1.7525e+03, 5.5677441324948013e+01, 3.0] assert_norm_equality(X.flatten(), ref_norms, 1.0e-12) return
def test(show=False): geo = dmsh.Rotation(dmsh.Rectangle(-1.0, +2.0, -1.0, +1.0), 0.1 * numpy.pi) X, cells = dmsh.generate(geo, 0.1, show=show, tol=1.0e-10) ref_norms = [9.5457720168192884e+02, 3.1356929329612782e+01, 2.2111300269652543e+00] assert_norm_equality(X.flatten(), ref_norms, 1.0e-12) return X, cells
def drawPlot(it, ax, geo): edge_size = 0.25 X, cells = dmsh.generate(geo, edge_size, show=False, max_steps=it, verbose=False) eps = 1.0e-10 is_inside = geo.dist(X.T) < eps x, y, z = geo._get_xyz() ax.contour(x, y, z, levels=[0.0], colors="k") ax.plot(X[is_inside, 0], X[is_inside, 1], ".") ax.triplot(X[:, 0], X[:, 1], cells) pts = [] for x, y in zip(X[:, 0], X[:, 1]): pts.append((float("{:.5f}".format(x)), float("{:.5f}".format(y)))) triangles = [] for cell in cells: tria = [pts[cell[0]], pts[cell[1]], pts[cell[2]]] triangles.append(tria) res = 0 for tria in triangles: erg = F3.main(tria[0][0], tria[0][1], tria[1][0], tria[1][1], tria[2][0], tria[2][1]) res += erg print("\n\n\nIteration #" + str(it) + ": " + '{:.4f}'.format(res)) print("Number of triangles: " + str(len(triangles))) # Format ax.axis("square") ax.title.set_text("Steps: " + str(it) + " | " + str(len(triangles)) + " triangles | " + " size: " + '{:.2f}'.format(res))
def test_rectangle(show=False): geo = dmsh.Rectangle(-1.0, +2.0, -1.0, +1.0) X, cells = dmsh.generate(geo, 0.1, show=show) ref_norms = [9.7542898028694776e02, 3.1710503119308623e01, 2.0] assert_norm_equality(X.flatten(), ref_norms, 1.0e-12) return X, cells
def get_mesh(area, contour): """ get the points resulting from meshing Parameters: ---------- area: int, area of small zones contour:list of tuples containing contour points coordinates Return: ------ points: numpy.array, coordinates of the points forming the vertices of the mesh """ contour = np.array(contour) / 100 esize = area geo = dmsh.Polygon(contour) vertices, cells = dmsh.generate(geo, esize) vertices = (vertices * 100).astype(int) points = [] for cell in cells: i, j, k = cell[0], cell[1], cell[2] point = (vertices[i] + vertices[j] + vertices[k]) / 3 points.append(point.astype(int)) points = np.vstack((points)) return points, vertices, cells
def test(show=False): geo = dmsh.Scaling(dmsh.Rectangle(-1.0, +2.0, -1.0, +1.0), 2.0) X, cells = dmsh.generate(geo, 0.1, show=show, tol=1.0e-5) ref_norms = [7.7120645429243405e03, 1.2509238632152577e02, 4.0] assert_norm_equality(X.flatten(), ref_norms, 1.0e-12) return X, cells
def test(show=True): geo = dmsh.Stretch(dmsh.Rectangle(-1.0, +2.0, -1.0, +1.0), [1.0, 1.0]) X, cells = dmsh.generate(geo, 0.2, show=show, tol=1.0e-3) ref_norms = [4.3338293115124242e02, 2.3621770543834902e01, 2.6213203435596428e00] assert_norm_equality(X.flatten(), ref_norms, 1.0e-12) return X, cells
def test(show=False): geo = dmsh.Scaling(dmsh.Rectangle(-1.0, +2.0, -1.0, +1.0), 2.0) X, cells = dmsh.generate(geo, 0.1, show=show, tol=1.0e-5, max_steps=100) ref_norms = [7.6829959173892494e03, 1.2466061090733828e02, 4.0000000000000000e00] assert_norm_equality(X.flatten(), ref_norms, 1.0e-7) return X, cells
def polygonTriangulation(borderPoints, edge_size): """ De una lista de puntos de borde crea una triangulacion de tamaño edge_size del poligono determinado por esos puntos """ points, cells = dmsh.generate(dmsh.Polygon(borderPoints), edge_size) return Triangulation(points, cells)
def test(show=False): geo = dmsh.Translation(dmsh.Rectangle(-1.0, +2.0, -1.0, +1.0), [1.0, 1.0]) X, cells = dmsh.generate(geo, 0.1, show=show, max_steps=100) ref_norms = [ 1.7524999999999998e03, 5.5612899955332637e01, 3.0000000000000000e00 ] assert_norm_equality(X.flatten(), ref_norms, 1.0e-7)
def test(show=False): # should both work geo = [1.0, 1.0] + dmsh.Rectangle(-1.0, +2.0, -1.0, +1.0) geo = dmsh.Rectangle(-1.0, +2.0, -1.0, +1.0) + [1.0, 1.0] X, _ = dmsh.generate(geo, 0.1, show=show, max_steps=100) ref_norms = [1.7524999999999998e03, 5.5612899955332637e01, 3.0000000000000000e00] assert_norm_equality(X.flatten(), ref_norms, 1.0e-7)
def test_union(show=False): geo = dmsh.Union( [dmsh.Circle([-0.5, 0.0], 1.0), dmsh.Circle([+0.5, 0.0], 1.0)]) X, cells = dmsh.generate(geo, 0.15, show=show, tol=1.0e-10) ref_norms = [3.0088043884612756e+02, 1.5785099320497183e+01, 1.5] assert_norm_equality(X.flatten(), ref_norms, 1.0e-12) return X, cells
def test(show=True): geo = dmsh.Stretch(dmsh.Rectangle(-1.0, +2.0, -1.0, +1.0), [1.0, 1.0]) X, cells = dmsh.generate(geo, 0.3, show=show, tol=1.0e-3) ref_norms = [ 1.9391178579025609e02, 1.5890693098212086e01, 2.6213203435596428e00 ] assert_norm_equality(X.flatten(), ref_norms, 1.0e-2) return X, cells
def test(show=False): geo = dmsh.Rotation(dmsh.Rectangle(-1.0, +2.0, -1.0, +1.0), 0.1 * np.pi) X, cells = dmsh.generate(geo, 0.1, show=show, tol=1.0e-10, max_steps=100) ref_norms = [ 9.4730152857365385e02, 3.1160562530932285e01, 2.2111300269652543e00 ] assert_norm_equality(X.flatten(), ref_norms, 1.0e-10) return X, cells
def test_circle(show=True): geo = dmsh.Circle([0.0, 0.0], 1.0) X, cells = dmsh.generate(geo, 0.1, show=show) ref_norms = [ 3.2795193920779542e02, 1.4263721858241993e01, 1.0000000000000000e00 ] assert_norm_equality(X.flatten(), ref_norms, 1.0e-12) return X, cells
def _set_TUB(self, mesh_size): geo = dmsh.Polygon([[1 / 3, 1 / 3], [1, 0], [0.5, 0.5]]) points, triangles = dmsh.generate(geo, mesh_size) self._centroids = np.empty((len(triangles), 2)) for i, triangle in enumerate(triangles): self._centroids[i] = np.mean(points[triangle], axis=0) tri = Triangulation(points[:, 0], points[:, 1], triangles) self._trifinder = tri.get_trifinder()
def test_rectangle(show=False): geo = dmsh.Rectangle(-1.0, +2.0, -1.0, +1.0) X, cells = dmsh.generate(geo, 0.1, show=show, max_steps=100) ref_norms = [ 9.7172325705673779e02, 3.1615286239175994e01, 2.0000000000000000e00 ] assert_norm_equality(X.flatten(), ref_norms, 1.0e-10) return X, cells
def test(show=False): geo = dmsh.Rotation(dmsh.Rectangle(-1.0, +2.0, -1.0, +1.0), 0.1 * numpy.pi) X, cells = dmsh.generate(geo, 0.1, show=show, tol=1.0e-10) ref_norms = [ 9.5352192763033452e02, 3.1344318120314945e01, 2.2111300269652543e00 ] assert_norm_equality(X.flatten(), ref_norms, 1.0e-10) return X, cells
def test(show=False): geo = dmsh.Stretch(dmsh.Rectangle(-1.0, +2.0, -1.0, +1.0), [1.0, 1.0]) X, cells = dmsh.generate(geo, 0.3, show=show, tol=1.0e-3, max_steps=100) ref_norms = [ 1.9006907971528796e02, 1.5666202908904914e01, 2.6213203435596428e00 ] assert_norm_equality(X.flatten(), ref_norms, 1.0e-2) return X, cells
def test_circle(radius, ref_norms, show=False): geo = dmsh.Circle([0.0, 0.0], 1.0) X, cells = dmsh.generate(geo, radius, show=show) # make sure the origin is part of the mesh assert numpy.sum(numpy.einsum("ij,ij->i", X, X) < 1.0e-10) == 1 assert_norm_equality(X.flatten(), ref_norms, 1.0e-5) return X, cells
def sartenTriangulation(size, edge_size): """ Triangulación de silueta de una sartén de cocina """ c = dmsh.Circle([0, 0], size) r = dmsh.Rectangle(-2.5*size, -size*0.9, -size/8, size/8) geo = dmsh.Union([c, r]) points, cells = dmsh.generate(geo, edge_size) return Triangulation(points, cells)
def test_union(show=False): geo = dmsh.Union([ dmsh.Rectangle(-1.0, +0.5, -1.0, +0.5), dmsh.Rectangle(-0.5, +1.0, -0.5, +1.0) ]) X, cells = dmsh.generate(geo, 0.15, show=show, tol=1.0e-10) ref_norms = [1.7868961429998612e+02, 1.1117047580567053e+01, 1.0] assert_norm_equality(X.flatten(), ref_norms, 1.0e-12) return X, cells
def test_pacman(show=False): geo = dmsh.Difference( dmsh.Circle([0.0, 0.0], 1.0), dmsh.Polygon([[0.0, 0.0], [1.5, 0.4], [1.5, -0.4]]), ) X, cells = dmsh.generate(geo, 0.1, show=show, tol=1.0e-10) ref_norms = [3.0385105041432689e02, 1.3644964912810719e01, 1.0] assert_norm_equality(X.flatten(), ref_norms, 1.0e-10) return X, cells
def test_difference(show=False): geo = dmsh.Difference(dmsh.Circle([-0.5, 0.0], 1.0), dmsh.Circle([+0.5, 0.0], 1.0)) X, cells = dmsh.generate(geo, 0.1, show=show) geo.plot() ref_norms = [2.9445555e02, 1.58563569e01, 1.499999914e00] assert_norm_equality(X.flatten(), ref_norms, 1.0e-7) return X, cells
def test_difference(show=False): geo = dmsh.Difference(dmsh.Circle([-0.5, 0.0], 1.0), dmsh.Circle([+0.5, 0.0], 1.0)) X, cells = dmsh.generate(geo, 0.1, show=show) ref_norms = [ 2.9445552442961758e+02, 1.5856356670813716e+01, 1.4999999157880513e+00 ] assert_norm_equality(X.flatten(), ref_norms, 1.0e-9) return X, cells
def test_circle(radius, ref_norms, show=False): geo = dmsh.Circle([0.0, 0.0], 1.0) X, cells = dmsh.generate(geo, radius, show=show, max_steps=100) meshplex.MeshTri(X, cells).show() # make sure the origin is part of the mesh assert np.sum(np.einsum("ij,ij->i", X, X) < 1.0e-6) == 1 assert_norm_equality(X.flatten(), ref_norms, 1.0e-5) return X, cells
def test_union_rectangles(show=False): geo = dmsh.Rectangle(-1.0, +0.5, -1.0, +0.5) | dmsh.Rectangle( -0.5, +1.0, -0.5, +1.0) X, cells = dmsh.generate(geo, 0.15, show=show, tol=1.0e-5, max_steps=100) ref_norms = [ 1.8417796811774514e02, 1.1277323166424049e01, 1.0000000000000000e00 ] assert_norm_equality(X.flatten(), ref_norms, 1.0e-10) return X, cells
def test_ellipse(show=False): geo = dmsh.Ellipse([0.0, 0.0], 2.0, 1.0) X, cells = dmsh.generate(geo, 0.2, show=show) geo.plot() ref_norms = [ 2.5108886251367960e02, 1.5652935519539316e01, 1.9890059982474428e00 ] assert_norm_equality(X.flatten(), ref_norms, 1.0e-12) return X, cells
def test_ellipse(show=False): geo = dmsh.Ellipse([0.0, 0.0], 2.0, 1.0) X, cells = dmsh.generate(geo, 0.2, show=show) geo.plot() ref_norms = [ 2.5108941453435716e02, 1.5652963447587933e01, 1.9890264390440919e00 ] assert_norm_equality(X.flatten(), ref_norms, 2.0e-2) return X, cells