基于distmesh的高质量二维网格生成器

dmsh的Python项目详细描述


dmsh

最差的网格生成器。

CircleCIcodecovCode style: blackPyPi VersionGitHub starsPyPi downloads

灵感来自distmesh,dmsh

  • 很慢,
  • 需要大量内存,并且
  • 也不是很强壮。

在优点方面,

  • 它有一个可用的界面,
  • 是纯python(因此很容易在任何系统上安装),并且
  • 如果它工作,它会产生相当高质量的网格。

optimesh结合,dmsh生成 西方最高质量的二维网格。

示例

原语

circlerectanglepolygon
importdmshgeo=dmsh.Circle([0.0,0.0],1.0)X,cells=dmsh.generate(geo,0.1)# optionally optimize the meshimportoptimeshX,cells=optimesh.cvt.quasi_newton_uniform_full(X,cells,1.0e-10,100)# and write it to a fileimportmeshiomeshio.write_points_cells("circle.vtk",X,{"triangle":cells})
geo=dmsh.Rectangle(-1.0,+2.0,-1.0,+1.0)X,cells=dmsh.generate(geo,0.1)
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)

组合

差异
differencepacmansquare_hole_refined
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)
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)

下面的示例使用非恒定边长度;它取决于到 圆c

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,lambdapts:numpy.abs(c.dist(pts))/5+0.05,tol=1.0e-10)
活接头
unionunion-rectunion-three-circles
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)
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)
angles=numpy.pi*numpy.array([3.0/6.0,7.0/6.0,11.0/6.0])geo=dmsh.Union([dmsh.Circle([numpy.cos(angles[0]),numpy.sin(angles[0])],1.0),dmsh.Circle([numpy.cos(angles[1]),numpy.sin(angles[1])],1.0),dmsh.Circle([numpy.cos(angles[2]),numpy.sin(angles[2])],1.0),])X,cells=dmsh.generate(geo,0.15)

交叉口

intersectionintersection-three-circleshalfspace
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)
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,tol=1.0e-10)

下面使用HalfSpace原语来切割圆。

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)

旋转、平移、缩放

rotationscaling
geo=dmsh.Rotation(dmsh.Rectangle(-1.0,+2.0,-1.0,+1.0),0.1*numpy.pi)X,cells=dmsh.generate(geo,0.1,tol=1.0e-10)
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)
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)

局部细化

refinement-line

所有对象都可以根据到对象的距离来细化网格; 例如aPath

geo=dmsh.Rectangle(0.0,1.0,0.0,1.0)p1=dmsh.Path([[0.4,0.6],[0.6,0.4]])defedge_size(x):return0.03+0.1*p1.dist(x)X,cells=dmsh.generate(geo,edge_size,show=show,tol=1.0e-10)

安装

dmsh是available from the Python Package Index,所以只需键入

pip3 install dmsh --user

安装。

测试

要运行dmsh单元测试,请签出此存储库并键入

pytest

许可证

dmsh发布在MIT license下。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java在未知属性上的PUT和POST失败会引发不同的行为   java无法使GWTRPC正常工作   java如何在安卓中更改一个特定视图的主题?   机器学习为什么改变了java中等式的两面?   java继承和重定向标准输出   java为什么Clojure中嵌套循环/重复速度慢?   使用JavaParser解析Java代码并查找父节点的语句类型   java读取类的方法并在arraylist中存储Web服务的路径名   java模板聚合匹配和投影一个没有id的字段   java为什么给定数组不返回false   java如何链接JLabel和JSpinner以调整大小   在java中,当过滤器只返回一个对象时,如何使用流和过滤器将值填充到对象中   java为什么使用getInstance   如何得到我的。运行java命令的bat文件