基于FreeCAD的CAE数值仿真平台开发概述
济南友泉软件有限公司
FreeCAD是一套基于OCC、OIV、Qt的开源CAX软件开发框架,采用了文档-视图架构,同时提供了基于Workbench的插件式开发模式,可以非常方便地用于订制CAE软件。
FreeCAD主界面-FEM模块- FreeCAD代码架构
FreeCAD核心采用C++编写,使用OpenCASCADE生成几何造型,利用Open Inventor进行图形图像渲染,此外,FreeCAD提供了PyCXX扩展的Python接口。
FreeCAD模块架构
2. FreeCAD主要使用功能模块
- Base模块
实现类型系统、对象持久化、日志输出、PyCXX扩展Python模块等功能
- App模块
实现基于文档对象的数据模型、属性系统、事务操作、文档操作(新建、打开、保存、关闭、增加对象、查找对象、删除对象)等功能。
- Gui模块
实现主窗口定义、基于Workbench的开发模式、数据渲染显示等功能。
- Part模块
IGES、STEP等主流几何文件导入;基本实体创建;倒角、布尔等操作。
- Mesh、MeshPart模块
使用Salome SMESH、NetGen等进行网格划分。
- FEM模块
设置初边值条件、求解器配置等用于CalculiX 求解,同时提供了简单的结果后处理功能等。
3. FreeCAD的优缺点分析
优势:
- 完全参数化建模
- 基于Workbench的开发模式,开发效率高,扩展性好
- 丰富的几何文件接口
- 集成式的几何约束求解器
不足:
- 代码量较大,涉及的开发技术较多,文档资料比较少,开发门槛高
- 渲染路径较长,数据存储冗余大
- 大规模场景效率比较低
4.CAE仿真平台开发思路
以FEM/CFD模块作为基础,借助于Part、Mesh模块现有的功能,完成程序核心功能的实现;在FemGui、PartGui、MeshGui基础之上,设计统一的Workbench以实现(实体、网格、结果)渲染与界面交互功能。
针对具体的应用需求(主要是几何造型生成),需要在OCC基础之上开发满足需求的功能,并将其嵌入到FreeCAD框架中。
开发思路
- 几何生成
以Part::Feature及其子类为基础,开发满足需求的核心几何功能(几何造型与约束),同时提供PyCXX编写的Python扩展。依托ViewProviderPart、ViewProviderMesh、ViewProviderPostObject等代码实现对象显示与交互功能。基于FreeCAD的GUI Workbench, 定制软件界面。
几何显示
- 网格划分
MeshPart模块支持Salome SMESH、NetGen等网格生成工具。Mesh模块提供了网格存储的数据结构以及相关操作,MeshGui模块的Workbench中定义了网格划分的界面,其内部则是通过调用MeshPart模块的Python接口来生成网格。
MeshFreeCAD Mesh模块并没有限制网格生成工具的使用,为了完成软件的集成(实际上主要是为了使用FreeCAD较大的几何建模功能),借助于Mesh/MeshGui的数据存储与显示,需要在新的Workbench中嵌入较为成熟的网格生成工具(Gmsh、cfMesh)等。在MeshPart中,修改Mesher::createMesh()函数,通过引入其他网格划分代码来增加新的网格划分功能。
Mesh::MeshObject* Mesher::createMesh() const;
开发要点:FreeCAD网格划分功能较弱,需要利用第三方的网格划分工具生成Mesh模块的数据结构,然后进行网格显示。
- 求解器
在Fem模块中,提供了SolverObject对象,用于生成不同求解器的配置。指定工作目录之后,会根据支持的求解器的将配置文件写入到工作目录,然后便可以求解计算。
Solver- 后处理
目前在FreeCAD中(截止到0.19-pre版本),没有一个单独的一个模块用于后处理数据显示。不过,在Fem模块中实现部分后处理的功能,主要包括云图显示、切割、数据拾取等功能,功能相对比较简单。
笔者在Fem的基础之上,已经开发完成了CFD模块功能,主要用于完成CFD后处理功能。可以进行云图、流线、Glyph、等值线/等值面等功能。后处理功能的开发其实比较简单,大体思路就是借助于VTK完成后处理数据的生成个,然后将生成的数据导入到OIV渲染管线。
Post