コード例 #1
0
ファイル: test_pacman.py プロジェクト: jchkoch/dmsh
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
コード例 #2
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
コード例 #3
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
コード例 #4
0
def test_rectangle_hole2(show=False):
    geo = dmsh.Difference(
        dmsh.Rectangle(0.0, 5.0, 0.0, 5.0),
        dmsh.Polygon([[1, 1], [4, 1], [4, 4], [1, 4]]),
    )
    X, cells = dmsh.generate(geo, 1.0, show=show, tol=1.0e-3, max_steps=100)

    ref_norms = [
        1.3990406144096474e02, 2.2917592510234346e01, 5.0000000000000000e00
    ]
    assert_norm_equality(X.flatten(), ref_norms, 1.0e-2)
コード例 #5
0
def test(show=False):
    geo = dmsh.Difference(
        dmsh.Rectangle(0.0, 5.0, 0.0, 5.0),
        dmsh.Polygon([[1, 1], [4, 1], [4, 4], [1, 4]]),
    )
    X, cells = dmsh.generate(geo, 1.0, show=show, tol=1.0e-3)

    ref_norms = [
        1.4000000000000000e02, 2.3176757306973560e01, 5.0000000000000000e00
    ]
    assert_norm_equality(X.flatten(), ref_norms, 1.0e-10)
コード例 #6
0
def test_boundary_step2():
    geo = dmsh.Difference(dmsh.Circle([-0.5, 0.0], 1.0),
                          dmsh.Circle([+0.5, 0.0], 1.0))
    np.random.seed(0)
    pts = np.random.uniform(-2.0, 2.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-12)
コード例 #7
0
def test(show=False):
    geo = dmsh.Difference(
        dmsh.Rectangle(0.0, 5.0, 0.0, 5.0),
        dmsh.Polygon([[1, 1], [4, 1], [4, 4], [1, 4]]),
    )
    X, cells = dmsh.generate(geo, 1.0, show=show, tol=1.0e-3)

    assert_norm_equality(X.flatten(),
                         [1.2599887992309357e02, 2.2109217065599051e01, 5.0],
                         1.0e-12)
    return
コード例 #8
0
def test_rectangle_hole():
    r = dmsh.Rectangle(60, 330, 380, 650)
    h = dmsh.Rectangle(143, 245, 440, 543)
    geo = dmsh.Difference(r, h)

    X, cells = dmsh.generate(geo, 20, tol=1.0e-5, show=False)

    ref_norms = [
        1.2901184909133780e05, 7.6243606395500592e03, 6.5000000000000000e02
    ]
    assert_norm_equality(X.flatten(), ref_norms, 1.0e-10)
コード例 #9
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-5, max_steps=100)

    ref_norms = [
        3.0173012692535394e02, 1.3565685453257570e01, 9.9999999999884770e-01
    ]
    assert_norm_equality(X.flatten(), ref_norms, 1.0e-10)
    return X, cells
コード例 #10
0
    def mesh(self) -> MeshTri:
        geo = dmsh.Difference(
            dmsh.Rectangle(0.0, self.length, 0.0, self.height),
            dmsh.Circle(self.centre, self.radius)
        )

        points, triangles = dmsh.generate(geo, 0.025, tol=1e-9)
        m = MeshTri(points.T, triangles.T)
        m.define_boundary("inlet", lambda x: x[0] == .0)
        m.define_boundary("outlet", lambda x: x[0] == self.length)

        return m
コード例 #11
0
def test(show=False):
    r = dmsh.Rectangle(-1.0, +1.0, -1.0, +1.0)
    c = dmsh.Circle([0.0, 0.0], 0.3)
    geo = dmsh.Difference(r, c)

    X, cells = dmsh.generate(
        geo, lambda pts: numpy.abs(c.dist(pts)) / 5 + 0.05, show=show, tol=1.0e-10
    )

    ref_norms = [2.48e02, 1.200e01, 1.0]
    assert_norm_equality(X.flatten(), ref_norms, 1.0e-3)
    return X, cells
コード例 #12
0
ファイル: test_large.py プロジェクト: jchkoch/dmsh
def test_large():
    # https://github.com/nschloe/dmsh/issues/11
    r = dmsh.Rectangle(-10.0, +20.0, -10.0, +20.0)
    c = dmsh.Circle([0.0, 0.0], 3)
    geo = dmsh.Difference(r, c)

    X, cells = dmsh.generate(geo, 2.0, tol=1.0e-5, max_steps=10000)

    ref_norms = [
        4.6422985179724637e03, 2.4202897690682192e02, 2.0000000000000000e01
    ]
    assert_norm_equality(X.flatten(), ref_norms, 1.0e-4)
コード例 #13
0
def test_boundary_step():
    geo = dmsh.Difference(dmsh.Circle([-0.5, 0.0], 1.0),
                          dmsh.Circle([+0.5, 0.0], 1.0))
    pts = np.array([
        [-2.1, 0.0],
        [0.1, 0.0],
        [-1.4, 0.0],
        [-0.6, 0.0],
    ])
    pts = geo.boundary_step(pts.T).T
    ref = np.array([[-1.5, 0.0], [-0.5, 0.0], [-1.5, 0.0], [-0.5, 0.0]])
    assert np.all(np.abs(pts - ref) < 1.0e-10)
コード例 #14
0
def test_large(show=False):
    # https://github.com/nschloe/dmsh/issues/11
    r = dmsh.Rectangle(-10.0, +20.0, -10.0, +20.0)
    c = dmsh.Circle([0.0, 0.0], 3)
    geo = dmsh.Difference(r, c)

    X, cells = dmsh.generate(geo, 2.0, tol=1.0e-5, max_steps=100, show=show)

    ref_norms = [
        4.6292581642363657e03, 2.4187329297982635e02, 2.0000000000000000e01
    ]
    assert_norm_equality(X.flatten(), ref_norms, 1.0e-4)
コード例 #15
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, max_steps=100)

    geo.plot()

    ref_norms = [
        2.9409044729708609e02, 1.5855488859739937e01, 1.5000000000000000e00
    ]
    assert_norm_equality(X.flatten(), ref_norms, 1.0e-6)
    return X, cells
コード例 #16
0
def test(show=False):
    r = dmsh.Rectangle(-1.0, +1.0, -1.0, +1.0)
    c = dmsh.Circle([0.0, 0.0], 0.3)
    geo = dmsh.Difference(r, c)

    numpy.random.seed(0)
    X, cells = dmsh.generate(geo,
                             lambda pts: numpy.abs(c.dist(pts)) / 5 + 0.05,
                             show=show,
                             tol=1.0e-10)

    ref_norms = [2.4810107884562055e02, 1.2004528988116096e01, 1.0]
    assert_norm_equality(X.flatten(), ref_norms, 1.0e-12)
    return X, cells
コード例 #17
0
def polygon2geo(polygon):
    # exterior boundary (dmsh does not include the last point twice to close the polygon such as shapely)
    e = list(polygon.exterior.coords.xy)
    boundary_e = [[e[0][i], e[1][i]] for i in range(len(e[0]) - 1)]
    outer = dmsh.Polygon(boundary_e)
    print(boundary_e)
    # interior boundary
    inner = []
    for int in polygon.interiors:
        h = list(int.coords.xy)
        boundary_h = [[h[0][i], h[1][i]] for i in range(len(h[0]) - 1)]
        hole = dmsh.Polygon(boundary_h)
        inner.append(hole)

    if len(inner) > 1:
        inner = dmsh.Union(inner)
        geo = dmsh.Difference(outer, inner)
    elif len(inner) == 1:
        inner = inner[0]
        geo = dmsh.Difference(outer, inner)
    else:
        geo = outer
    return geo
コード例 #18
0
def test_rectangle_hole(show=False):
    geo = dmsh.Difference(dmsh.Rectangle(60, 330, 380, 650),
                          dmsh.Rectangle(143, 245, 440, 543))

    X, cells = dmsh.generate(geo,
                             20,
                             tol=1.0e-5,
                             show=show,
                             flip_tol=1.0e-10,
                             max_steps=100)

    ref_norms = [
        1.2931633675576400e05, 7.6377328985582844e03, 6.5000000000000000e02
    ]
    assert_norm_equality(X.flatten(), ref_norms, 1.0e-10)
コード例 #19
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
コード例 #20
0
def test(show=False):
    r = dmsh.Rectangle(-1.0, +1.0, -1.0, +1.0)
    c = dmsh.Circle([0.0, 0.0], 0.3)
    geo = dmsh.Difference(r, c)

    X, cells = dmsh.generate(
        geo,
        lambda pts: np.abs(c.dist(pts)) / 5 + 0.05,
        show=show,
        tol=1.0e-10,
        max_steps=100,
    )

    ref_norms = [
        2.3686099753024831e02, 1.1750558136202198e01, 1.0000000000000000e00
    ]
    assert_norm_equality(X.flatten(), ref_norms, 1.0e-2)
    return X, cells
コード例 #21
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
コード例 #22
0
	def coreMesh(self,eleSize):
		"""
		核心混凝土的划分
		输入:
			eleSize:核心区纤维单元大小
		返回:
			coreFiberInfo:核心混凝土纤维单元列表[(xc1,yc1,area1),(xc2,yc2,area2)]
		"""
		outDNew=self.outD-self.d0*2.0
		if self.inD!=None:
			inDNew=self.inD+self.d0*2.0
			geo = dmsh.Difference(dmsh.Circle([0, 0], outDNew/2.0), dmsh.Circle([0, 0.0],inDNew/2.0))
			points, elements= dmsh.generate(geo, eleSize)
			coreFiberInfo=self._triEleInfo(points,elements)
			self.ax.triplot(points[:, 0], points[:, 1], elements)
		else:
			geo = dmsh.Circle([0.0, 0.0],outDNew/2.0)
			points, elements = dmsh.generate(geo,eleSize)
			coreFiberInfo = self._triEleInfo(points, elements)
			self.ax.triplot(points[:, 0], points[:, 1], elements)
		return coreFiberInfo
コード例 #23
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
コード例 #24
0
	def coreMesh(self,eleSize,outLineList,inLineList=None):
		"""
		核心混凝土的划分
		输入:
			eleSize:纤维单元的边长
			outLineList:外分界线节点列表[(x1,y1),(x2,y2),...,(xn,yn)]
			inLineList:内分界线节点列表[[(x1,y1),(x2,y2),...,(xn,yn)],[(x1,y1),(x2,y2),...,(xn,yn)]]
		返回:
			triEleInfoList:纤维单元信息列表[(xc1,yc1,area1),(xc2,yc2,area2)]
		"""
		triEleInfoList=None
		if inLineList==None:
			geo=dmsh.Polygon(outLineList)
			points, elements = dmsh.generate(geo, eleSize)
			triEleInfoList = self._triEleInfo(points, elements)
			self.ax.triplot(points[:, 0], points[:, 1], elements, c=self.coreColor, linewidth=self.lineWid, zorder=0)
		elif len(inLineList)==1:
			geo = dmsh.Difference(
				dmsh.Polygon(outLineList),
				dmsh.Polygon(inLineList[0]),
			)
			points, elements = dmsh.generate(geo, eleSize)
			triEleInfoList = self._triEleInfo(points, elements)
			self.ax.triplot(points[:,0],points[:,1],elements,c=self.coreColor,linewidth=self.lineWid, zorder=0)

		elif len(inLineList)==2:
			zhole,yhole=self._twoHoleDirect(self.inNode)
			list1,list2=self._twoHolePolygonDivide(outLineList, inLineList,zhole,yhole)
			geo1= dmsh.Polygon(list1)
			geo2 = dmsh.Polygon(list2)
			points1, elements1 = dmsh.generate(geo1, eleSize)
			points2, elements2 = dmsh.generate(geo2, eleSize)
			triEleInfoList1=self._triEleInfo(points1,elements1)
			triEleInfoList2 = self._triEleInfo(points2, elements2)
			triEleInfoList=triEleInfoList1+triEleInfoList2
			self.ax.triplot(points1[:, 0], points1[:, 1], elements1,c=self.coreColor,linewidth=self.lineWid,zorder = 0)
			self.ax.triplot(points2[:, 0], points2[:, 1], elements2, c=self.coreColor,linewidth=self.lineWid,zorder=0)
		return triEleInfoList
コード例 #25
0
def test_boundary_step_pacman():
    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]]),
    )
    # np.random.seed(0)
    # pts = np.random.uniform(-2.0, 2.0, (2, 100))
    # pts = np.array([[-2.0, 0.0]])
    # pts = np.array([[-0.1, 0.0]])
    # pts = np.array([[0.0, 2.0]])
    # pts = np.array([[0.0, 0.9]])
    # pts = np.array([[2.0, 0.1]])
    # pts = np.array([[0.1, 0.1]])
    # pts = np.array([[0.7, 0.1]])
    pts = np.array([[0.5, 0.1]])
    pts = pts.T
    print(pts.T.shape)
    pts = geo.boundary_step(pts)
    geo.plot()
    import matplotlib.pyplot as plt

    plt.plot(pts[0], pts[1], "xk")
    plt.show()
コード例 #26
0
#-*-coding: UTF-8-*-
import subprocess
import dmsh
import optimesh
import meshio
import matplotlib.pyplot as pt
import numpy as np

# p = subprocess.Popen("OpenSees.exe", stdin=subprocess.PIPE,
#                      stdout=subprocess.PIPE,
#                      stderr=subprocess.PIPE)
# p.stdin.write("source AnJiuCableStayedBridge.tcl\n".encode())
######################################################################################
geo = dmsh.Difference(
    dmsh.Polygon([[10, 10], [10, -10], [-10, -10], [-10, 10]]),
    dmsh.Polygon([[4, 4], [4, -4], [-4, -4], [-4, 4]]),
)
points, elements = dmsh.generate(geo, 0.4)
pt.triplot(points[:, 0], points[:, 1], elements)
pt.show()

################################################################
コード例 #27
0
ファイル: generate-readme-plots.py プロジェクト: nschloe/dmsh
geo = dmsh.Polygon(
    [
        [0.0, 0.0],
        [1.1, 0.0],
        [1.2, 0.5],
        [0.7, 0.6],
        [2.0, 1.0],
        [1.0, 2.0],
        [0.5, 1.5],
    ]
)
X, cells = dmsh.generate(geo, 0.1)
save(X, cells, "polygon.svg")

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)
save(X, cells, "moon.svg")


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, tol=1.0e-10)
save(X, cells, "pacman.svg")


r = dmsh.Rectangle(-1.0, +1.0, -1.0, +1.0)
c = dmsh.Circle([0.0, 0.0], 0.3)
geo = dmsh.Difference(r, c)