Exemplo n.º 1
0
def test_intersection(show=False):
    geo = dmsh.Intersection(
        [dmsh.Circle([0.0, -0.5], 1.0),
         dmsh.Circle([0.0, +0.5], 1.0)])
    X, cells = dmsh.generate(geo, 0.1, show=show, tol=1.0e-10)

    ref_norms = [
        8.6619344595913475e+01, 6.1599895121114274e+00, 8.6602540378466342e-01
    ]
    assert_norm_equality(X.flatten(), ref_norms, 1.0e-12)
    return X, cells
Exemplo n.º 2
0
def test_halfspace(show=False):
    geo = dmsh.Intersection([
        dmsh.HalfSpace(np.sqrt(0.5) * np.array([1.0, 1.0])),
        dmsh.Circle([0.0, 0.0], 1.0),
    ])
    X, cells = dmsh.generate(geo, 0.1, show=show, max_steps=100)

    ref_norms = [
        1.6399670188761661e02, 1.0011048291798387e01, 9.9959986881486440e-01
    ]
    assert_norm_equality(X.flatten(), ref_norms, 1.0e-6)
    return X, cells
Exemplo n.º 3
0
def test_boundary_step2():
    geo = dmsh.Intersection(
        [dmsh.Circle([0.0, -0.5], 1.0),
         dmsh.Circle([0.0, +0.5], 1.0)])
    np.random.seed(0)
    pts = np.random.uniform(-1.0, 1.0, (2, 100))
    pts = geo.boundary_step(pts)
    # geo.plot()
    # import matplotlib.pyplot as plt
    # plt.plot(pts[0], pts[1], "xk")
    # plt.show()
    assert np.all(np.abs(geo.dist(pts)) < 1.0e-7)
Exemplo n.º 4
0
def test_halfspace(show=False):
    geo = dmsh.Intersection([
        dmsh.HalfSpace(numpy.sqrt(0.5) * numpy.array([1.0, 1.0]), 0.0),
        dmsh.Circle([0.0, 0.0], 1.0),
    ])
    X, cells = dmsh.generate(geo, 0.1, show=show)

    ref_norms = [
        1.6445971629723411e02, 1.0032823867864321e01, 9.9962000746451751e-01
    ]
    assert_norm_equality(X.flatten(), ref_norms, 1.0e-12)
    return X, cells
Exemplo n.º 5
0
def test_intersection(show=False):
    geo = dmsh.Intersection(
        [dmsh.Circle([0.0, -0.5], 1.0),
         dmsh.Circle([0.0, +0.5], 1.0)])
    X, cells = dmsh.generate(geo, 0.1, show=show, tol=1.0e-10, max_steps=100)

    geo.plot()

    ref_norms = [
        8.6491736892894920e01, 6.1568624411912278e00, 8.6602540378466342e-01
    ]
    assert_norm_equality(X.flatten(), ref_norms, 1.0e-10)
    return X, cells
Exemplo n.º 6
0
def test_boundary_step():
    geo = dmsh.Intersection(
        [dmsh.Circle([0.0, -0.5], 1.0),
         dmsh.Circle([0.0, +0.5], 1.0)])
    pts = np.array([[0.0, -5.0], [0.0, 4.1]])
    pts = geo.boundary_step(pts.T).T
    ref = np.array([[0.0, -0.5], [0.0, 0.5]])
    assert np.all(np.abs(pts - ref) < 1.0e-10)

    pts = np.array([[0.0, -0.1], [0.0, 0.1]])
    pts = geo.boundary_step(pts.T).T
    ref = np.array([[0.0, -0.5], [0.0, 0.5]])
    assert np.all(np.abs(pts - ref) < 1.0e-10)
Exemplo n.º 7
0
def test_intersection_circles(show=False):
    angles = np.pi * np.array([3.0 / 6.0, 7.0 / 6.0, 11.0 / 6.0])
    geo = dmsh.Intersection([
        dmsh.Circle([np.cos(angles[0]), np.sin(angles[0])], 1.5),
        dmsh.Circle([np.cos(angles[1]), np.sin(angles[1])], 1.5),
        dmsh.Circle([np.cos(angles[2]), np.sin(angles[2])], 1.5),
    ])
    X, cells = dmsh.generate(geo, 0.1, show=show, tol=1.0e-10, max_steps=100)

    ref_norms = [
        6.7661318585210836e01, 5.0568863746561723e00, 7.2474487138537913e-01
    ]
    assert_norm_equality(X.flatten(), ref_norms, 1.0e-10)
    return X, cells
def test_union(show=False):
    angles = numpy.pi * numpy.array([3.0 / 6.0, 7.0 / 6.0, 11.0 / 6.0])
    geo = dmsh.Intersection(
        [
            dmsh.Circle([numpy.cos(angles[0]), numpy.sin(angles[0])], 1.5),
            dmsh.Circle([numpy.cos(angles[1]), numpy.sin(angles[1])], 1.5),
            dmsh.Circle([numpy.cos(angles[2]), numpy.sin(angles[2])], 1.5),
        ]
    )
    X, cells = dmsh.generate(geo, 0.1, show=show, tol=1.0e-10)

    ref_norms = [6.8247386668599034e01, 5.1256971008793917e00, 7.2474487138537913e-01]
    assert_norm_equality(X.flatten(), ref_norms, 1.0e-12)
    return X, cells
Exemplo n.º 9
0
def quarter_annulus(h):
    disk0 = dmsh.Circle([0.0, 0.0], 0.25)
    disk1 = dmsh.Circle([0.0, 0.0], 1.0)
    diff0 = dmsh.Difference(disk1, disk0)

    rect = dmsh.Rectangle(0.0, 1.0, 0.0, 1.0)
    quarter = dmsh.Intersection([diff0, rect])

    points, cells = dmsh.generate(
        quarter,
        edge_size=lambda x: h + 0.1 * numpy.abs(disk0.dist(x)),
        tol=1.0e-10,
        max_steps=max_steps,
    )
    return points, cells
Exemplo n.º 10
0
def test_quarter_annulus():
    h = 0.05
    disk0 = dmsh.Circle([0.0, 0.0], 0.25)
    disk1 = dmsh.Circle([0.0, 0.0], 1.0)
    diff0 = dmsh.Difference(disk1, disk0)

    rect = dmsh.Rectangle(0.0, 1.0, 0.0, 1.0)
    quarter = dmsh.Intersection([diff0, rect])

    points, cells = dmsh.generate(
        quarter,
        edge_size=lambda x: h + 0.1 * np.abs(disk0.dist(x)),
        tol=1.0e-10,
        max_steps=100,
    )

    ref_norms = [
        8.0232179592990462e01, 6.6832464479565372e00, 1.0000000000000000e00
    ]
    assert_norm_equality(points.flatten(), ref_norms, 1.0e-10)
    return points, cells
Exemplo n.º 11
0
def test_quarter_annulus():
    h = 0.05
    disk0 = dmsh.Circle([0.0, 0.0], 0.25)
    disk1 = dmsh.Circle([0.0, 0.0], 1.0)
    diff0 = dmsh.Difference(disk1, disk0)

    rect = dmsh.Rectangle(0.0, 1.0, 0.0, 1.0)
    quarter = dmsh.Intersection([diff0, rect])

    points, cells = dmsh.generate(
        quarter,
        lambda x: h + 0.1 * np.abs(disk0.dist(x)),
        tol=1.0e-10,
        max_steps=100,
    )

    ref_norms = [
        7.7455372708027483e01, 6.5770003813066431e00, 1.0000000000000000e00
    ]
    assert_norm_equality(points.flatten(), ref_norms, 1.0e-2)
    return points, cells
Exemplo n.º 12
0
save(X, cells, "union-rectangles.svg")


angles = np.pi * np.array([3.0 / 6.0, 7.0 / 6.0, 11.0 / 6.0])
geo = dmsh.Union(
    [
        dmsh.Circle([np.cos(angles[0]), np.sin(angles[0])], 1.0),
        dmsh.Circle([np.cos(angles[1]), np.sin(angles[1])], 1.0),
        dmsh.Circle([np.cos(angles[2]), np.sin(angles[2])], 1.0),
    ]
)
X, cells = dmsh.generate(geo, 0.15)
save(X, cells, "union-three-circles.svg")


geo = dmsh.Intersection([dmsh.Circle([0.0, -0.5], 1.0), dmsh.Circle([0.0, +0.5], 1.0)])
X, cells = dmsh.generate(geo, 0.1, tol=1.0e-10)
save(X, cells, "intersection-circles.svg")


angles = np.pi * np.array([3.0 / 6.0, 7.0 / 6.0, 11.0 / 6.0])
geo = dmsh.Intersection(
    [
        dmsh.Circle([np.cos(angles[0]), np.sin(angles[0])], 1.5),
        dmsh.Circle([np.cos(angles[1]), np.sin(angles[1])], 1.5),
        dmsh.Circle([np.cos(angles[2]), np.sin(angles[2])], 1.5),
    ]
)
X, cells = dmsh.generate(geo, 0.1, tol=1.0e-10)
save(X, cells, "intersection-three-circles.svg")