跳转到主要内容

Python中的简单网格生成器

项目描述

PyDistMesh 是一个简单的Python代码,用于使用 符号距离函数 生成无结构的三角形和四面体网格。它旨在具有与基于MATLAB的 DistMesh 相同的功能和类似界面。像DistMesh一样,它基于DistMesh,并按照 GNU GPL 进行分发。

2-D 示例

  • 单位圆上的均匀网格

    >>> import distmesh as dm
    >>> import numpy as np
    >>> fd = lambda p: np.sqrt((p**2).sum(1))-1.0
    >>> p, t = dm.distmesh2d(fd, dm.huniform, 0.2, (-1,-1,1,1))
  • 带有圆形孔的矩形,在圆形边界上细化

    >>> import distmesh as dm
    >>> fd = lambda p: dm.ddiff(dm.drectangle(p,-1,1,-1,1),
    ...                         dm.dcircle(p,0,0,0.5))
    >>> fh = lambda p: 0.05+0.3*dm.dcircle(p,0,0,0.5)
    >>> p, t = dm.distmesh2d(fd, fh, 0.05, (-1,-1,1,1),
    ...                      [(-1,-1),(-1,1),(1,-1),(1,1)])

3-D 示例

  • 3-D 单位球

    >>> import distmesh as dm
    >>> import numpy as np
    >>> fd = lambda p: np.sqrt((p**2).sum(1))-1.0
    >>> p, t = dm.distmeshnd(fd, dm.huniform, 0.2, (-1,-1,-1, 1,1,1))
  • 带孔的圆柱体

    >>> import distmesh as dm
    >>> import numpy as np
    >>> def fd10(p):
    ...     r, z = np.sqrt(p[:,0]**2 + p[:,1]**2), p[:,2]
    ...     d1, d2, d3 = r-1.0, z-1.0, -z-1.0
    ...     d4, d5 = np.sqrt(d1**2+d2**2), np.sqrt(d1**2+d3**2)
    ...     d = dm.dintersect(dm.dintersect(d1, d2), d3)
    ...     ix = (d1>0)*(d2>0); d[ix] = d4[ix]
    ...     ix = (d1>0)*(d3>0); d[ix] = d5[ix]
    ...     return dm.ddiff(d, dm.dsphere(p, 0,0,0, 0.5))
    >>> def fh10(p):
    ...     h1 = 4*np.sqrt((p**2).sum(1))-1.0
    ...     return np.minimum(h1, 2.0)
    >>> p, t = dm.distmeshnd(fd10, fh10, 0.1, (-1,-1,-1, 1,1,1))

演示

要快速演示,请运行

$ python -m distmesh.demo2d

$ python -m distmesh.demond

依赖项

PyDistMesh与Python 2和Python 3兼容。(作者仅在Python 2.7和Python 3.2上进行了测试)。它需要几个常见的Python包

构建此包需要C编译器和 LAPACK。如果可用,可以使用 Cython 重新构建扩展模块绑定。

参考文献

以下两个参考文献中描述了 DistMesh 算法。如果您在程序或出版物中使用该算法,请通过添加以下第一篇论文的引用来承认其作者。

  • 佩尔-奥·佩尔松,G. 斯特兰格,MATLAB中简单网格生成器。《SIAM评论》,第46卷(2),第329-345页,2004年6月(《PDF》)

  • 佩尔-奥·佩尔松,隐式几何体的网格生成。博士学位论文,《麻省理工学院数学系》,2004年12月(《PDF》)

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分发

PyDistMesh-1.2.tar.gz (53.9 kB 《查看哈希》)

上传时间

支持者