Netgen二/三维四面体网格生成器

联合创作 · 2023-09-26 07:13

Netgen 是一个的二/三维四面体网格生成器,接受基于构造实体几何法 (CSG) 或边界表示法 (BRep) 的 STL 文件格式的实体模型输入,它与几何内核连接,能够处理 IGES 和 STEP 文件。

Netgen 一般搭配 NGSolve 库组合使用(相关教程一般会写成 NETGEN/NGSolve),NGSolve 是一个有限元库,包含所有标准元素几何图形的任意阶有限元,可以链接到 Netgen 使用。

NETGEN/NGSolve 包含用于网格优化和分层网格细化的模块,可完成有限元模拟的完整工作流程,包括从几何建模、网格生成、数值模拟到可视化的无缝集成,两者皆基于 LGPL 分发

Netgen 6.x 支持通过 Python 接口编写脚本,适用于 Unix、Linux、Windows 和 macOS。

特性

  • 一体化:NETGEN/NGSolve 可完成有限元模拟的完整工作流程,从几何建模、网格生成、数值模拟到可视化的无缝集成
  • 灵活:Python 前端 NGS-Py 提供了一种灵活的方式来设置和组合各种物理模型。
  • 准确:NETGEN/NGSolve 为常见的物理场提供准确的有限元空间。除了通常的标量函数空间,NGSolve 还包含用于电磁场的 Nedelec 类型的矢量有限元,以及用于通量的 Raviart-Thomas 或 Brezzi-Douglas-Marini 元素。
  • 高效:有限元模拟中最耗时的部分是方程求解器,大规模问题需要具有快速预处理器的迭代求解器。NGSolve 提供了几个有效的预处理器,例如多重网格或域分解方法。
  • 高性能:NGSolve 使用不同级别的并行计算:所有计算密集型函数都是任务并行的。工作功能被组织为计算内核,由任务管理器分配给可用线程。
  • 开放:Netgen/NGSolve 基于 LGPL 开源许可证免费分发,可以在学术和商业环境中使用它。

Netgen 示例:3D 圆环

为了获得一个圆环,我们在该点 (0,R) 周围定义一个圆:通过定义一组用于定义样条的控制点来完成。

然后使用函数 AddPoint 和 AddSegment 将这些点和样条线添加到 SplineCurve2d 。

spline = SplineCurve2d() # create a 2d spline
R = 1                    # define the major radius
r = 0.2                  # define the minor radius
eps = r*1e-2

# define the control points
pnts = [ (0,R-r), (-r+eps,R-r+eps), (-r,R),
         (-r+eps,R+r-eps), (0,R+r), (r-eps,R+r-eps), (r,R), (r-eps,R-r+eps) ]
# define the splines using the control points
segs = [ (0,1,2), (2,3,4), (4,5,6), (6,7,0) ]

# add the points and segments to the spline
for pnt in pnts:
    spline.AddPoint (*pnt)

for seg in segs:
    spline.AddSegment (*seg)

然后通过围绕由点(-1,0,0)和(1,0,0) 定义的轴旋转二维样条来生成圆环:

rev = Revolution ( Pnt(-1,0,0), Pnt(1,0,0), spline)

最后生成一个 CSG 对象,并添加刚刚定义的环面。

geo = CSGeometry()
geo.Add (rev.col([1,0,0]))
geo.Draw()

现在为圆环生成一个网格:

mesh = geo.GenerateMesh(maxh=0.5, optsteps2d=3)

最后,将其转换为 NGSolve 网格,以便让网格弯曲:

mesh = Mesh(mesh)
mesh.Curve(3)	

浏览 8
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报