本文介绍前处理器开发的相关内容,主要还是围绕如何开发高质量的商业CAE软件。
1.首先介绍一下Cubit
Cubit是由Sandia国家实验室开发的一款前后处理软件。早期Cubit是免费 使用的,推荐用作OpenFOAM求解器的前处理,现在已经改名,成为商业版本。官网是
https://cubit.sandia.gov/
主要是从技术角度对软件进行解析。
以下是Cubit的一些功能介绍:
1. I/O 支持以下格式:
ACIS sat, sab: 几何模型输入/输出
Pro/E: 几何模型输入/输出
中间格式:STEP,IGES
曲面格式:STL,AVS面
Exodus II : 本地网格格式
Abaqus, Patran : 网格及边界条件输出.
NATRANA边界条件,IGES通用格式,DYNA3D格式,流体:只有网格格式输出.
支持Patran,Abaqus,Pro/E,IDEAS,Matlab,ANSYS等工程软件
2. CAD/FEM
几何模型树工具包含实体模型中所有的层次结构。它包括组件、边界条件、组和几何实体。在树中选择一个实体,将在图形窗口中选择相同的实体。
诊断几何模型及非特征化几何模型。
诊断及非特征化几何工具,包含诊断工具及分析和修复工具。
诊断网格化及检查网格质量
诊断网格质量工具可以用来确保模型的可被划分网格,在网格生成后,可以执行单元质量检查,如果当前网格的质量太差,提供网格改进方案。
3. 网格功能:
三角形表面网格(波前算法)
三角形表面网格(Delaunay 算法)
四边形面网格
四边形面网格(映射算法)
四边形面网格(子映射算法)
四面体网格
六面体网格(扫描)
六面体网格(映射)
还有其他一些CAD建模,优化,参数化建模,接口等功能,基本上覆盖了CAE前处理器所有设计模块。
看一下Cubit的一些技术实现:
1. TetMesh-GHS3D
该组件是由Distene开发的商业网格生成器,提供了丰富的接口,可快速生成高质量的Tri/Quad/Tet/Hex 等网格。是为数不多的能自动生产Hex网格的引擎。试用过该工具,参数简单,生成速度非常快,而且网格质量也很好。
2. ACIS
使用最广泛的商业3D内核引擎之一,可以用于实体建模和编辑。
3. VTK
著名的开源图形显示包,用于很多商业/开源图形显示程序。
4. ExodusII
用来处理有限元数据的一个模块,可以用来做前后处理。
5. MESQUITE
改进网格质量工具。
6.QT
使用最广泛的GUI开发工具,提供有免费和商业两个版本,免费版本对于通常开发已足够。
可以看出Cubit中使用了众多的第三方工具,其主要亮点是向导式交互 几何修复,参数化建模,网格快速生成,网格质量诊断,较全的外部接口等。相比于ANSA,Hypermesh,SimLab等算是一个轻量级的前处理器。从技术角度看,开发这样一个前处理器不存在任何瓶颈。
2.几何修复
我们很少会在仿真软件里建立几何模型,大部分情况下是在专业CAD软件中建立几何模型,然后导入到仿真软件中。这种几何和仿真的分离是目前仿真软件中第一道瓶颈,也催生了仿真前处理中的一个专项:几何修复。在设计和加工阶段,很多细节是需要注意的,比如倒角,圆角以及一些细小的特征,但是在仿真中并不需要,而且这些特征会导致网格划分失败。再比如设计中两个相连的线由于没有使用捕捉并不完全重合,导致自由边的存在,此外几何设计最后导出文件,会丢失某些参数信息,从而导致修复困难等等。
几何修复涵盖内容比较广泛,目前市面上有比较专业的几何修复工具。针对特定行业,特定领域以及特定特征的几何修复是前处理器开发的重点。
3. 边界荷载
前处理器重要的功能是建立离散模型,离散模型中最关键的信息就是边界条件和荷载,直接决定了模型的特性和仿真结果。这里介绍如下信息:
1. 稳态边界/荷载与几何的关系
2. 稳态边界荷载与网格的关系
3. 边界/荷载生成自动化
4. 边界/荷载数据结构定义
边界荷载介绍
求解定解的PDE(偏微分方程)需要知道边界条件,对应于CAE软件中就是边界条件和荷载条件,简称边界荷载
1. 稳态边界/荷载与几何的关系
稳态通常是指PDE中不存在与时间有关的项。
一个好的前处理器能 让用户方便的将边界荷载加载到任意的几何上(用户能激活不同的选择模式,比如Edge Level激活,用户的选择操作只能选中边,然后将边界荷载与选中的几何关联起来)。一个定义良好的几何通常包含几何信息与拓扑信息,几何信息用来构建几何,拓扑信息用来构建几何信息之间的关系,参见(图1)。一般化,几何信息包含 点,线,面,体,加载到这些几何上的边界荷载最终会以属性形式加载到网格单元的 顶点(Vertex)和面片(triangle/quadrangle)上。
以ACIS为例,介绍边界荷载如何加载到几何上,其它几何内核与之类似。
ACIS有一套严格的自顶向下的几何/拓扑层次结构。给定一个对象(Entity),可以容易获得与其相连接的对象,不管是向上还是向下。所以加载到几何上的边界荷载也可以很容易得到相连接几何上的边界荷载信息。
以下是一段将荷载加载到ACIS面上的代码:
void Attach_Geo_Loads()
{
//给定实体
BODY* ReulstBody;
//存储所有的面
ENTITY_LIST AllFaces;
//得到所有的面
api_get_faces(ReulstBody; , AllFaces);
FACE* curFace = (FACE*)AllFaces[0];
//选中第一个面,该操作可以通过GUI生成,在知道几何准确信息的情况下,可以代码直接生成(自动化)
api_get_entity_id((ENTITY*)curFace, tagID);//得到面唯一的ID
map_Geo2Loads[tagID] = loadIns;//将面的ID和荷载关联起来
}
其他边界荷载,加载到体,边,点上 的操作类似。
在几何上加边界荷载的实质就是:将边界荷载信息和指定的几何进行关联,建立映射关系。
建立模型时候,经常会碰到多种材料,接触,装配的情况,称为NonManifold(非流)几何。Parasolid/ACIS/OCC 都提供了处理NonManifold几何的功能,Parasolid/ACIS还提供了对NonManifold几何三角化网格的功能。
2. 稳态边界荷载与网格的关系
边界荷载加载到几何上后,进行剖分网格。加载在几何上的 边界荷载信息会附属到对应的网格单元上。例如对上例中的实体进行六面体网格划分,其中第一个面上的边界荷载信息会随之附属到该面上的四边形,即每个四边形都有该荷载的信息。根据不同的计算方法,边界荷载信息即可以放到每个四边形上,也可以放到四边形的点上,还可以放到四边形的中点上。
一个好的前处理器能支持对 网格上的边界荷载信息的编辑。例如用户想改变某些网格上的荷载,要支持对网格单元的选择,赋值,删除等操作。
3. 边界/荷载生成自动化
边界荷载生成自动化的意义在于 对大模型可以快速建立有限元模型。试想一个大模型,验算之后发现几何或者网格不合格,修改模型和网格过程中,边界荷载信息丢失,不得不对边界荷载信息也进行修改,大部分工作是重复性的手工劳动。参考上述代码不难发现,荷载是与几何的ID建立了映射关系,并不是与几何实体。当几何实体发生改变时,仍然可以用该几何的ID来标示。也就是说Tag与几何始终保持着关联关系。也就达到了一次建立多个有限元模型的目的。前提是几何只能调整参数,而不能改变拓扑结构。
4. 边界/荷载数据结构定义
边界荷载种类繁多,在软件实现中,如何正确的定义与组织数据结构很关键。这里的边界荷载仍然是一个广义的概念,不仅仅是力学中的边界荷载。
图2。
图2展现了荷载边界与几何建立映射 的 类图。因为篇幅原因只画出了部分边界载荷类型。
其中EDA主要针对电磁计算。边界荷载通常包括 ABC(Absorb boundary condition)PEC(Perfect electric conductor),Port(激励)等
Thermal 包括 temperature, convection,flux,heat transfer 等
structure包括 force,pressure等。
图2的定义满足了绝大部分荷载数据,以及对几何模型的映射,也能满足对有限元模型的映射。
图3
图3列出了边界荷载数据结构在模型数据结构中的位置。
其中 FEM_Model_DataCenter 和 Model_DataCenter 是 将几何数据和有限元模型数据通过Facade模式用warpper进行包装,供外部客户端调用数据,例如图形调用数据用来显示,求解器可以获取有限元模型数据生成特定格式的求解器输入文件等。
4. 网格划分
由于网格划分在前处理中的核心地位,专门一篇文章介绍介绍网格开发。
参见
5. 性能问题
性能是所有工业软件绕不开的一个话题,前处理器也会有性能方面的问题,后面会专门一篇文章介绍性能相关内容。