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)
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容