Example #1
0
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,
    )
Example #2
0
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
Example #3
0
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
Example #4
0
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))
Example #5
0
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
Example #6
0
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
Example #7
0
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
Example #8
0
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
Example #9
0
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
Example #10
0
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)
Example #11
0
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)
Example #12
0
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)
Example #13
0
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
Example #14
0
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
Example #15
0
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
Example #16
0
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
Example #17
0
    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()
Example #18
0
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
Example #19
0
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
Example #20
0
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
Example #21
0
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
Example #22
0
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)
Example #23
0
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
Example #24
0
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
Example #25
0
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
Example #26
0
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
Example #27
0
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
Example #28
0
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
Example #29
0
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
Example #30
0
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