FreeCAD最初主要应用于建筑、机械等领域的参数化建模。随着FEM、Cfd、CfdOF等模块的发布与完善,FreeCAD应用范围才逐步拓展到了CAE领域。与此同时,FreeCAD也逐渐从一个CAD框架转逐渐转变成了一个CAx(CAD/CAE/CAM)框架。另外,从工艺流程上来看,CAE向前对接CAD系统,向后对接CAM系统。因此,非常有必要对FreeCAD中FEM等相关模块进行深入地分析。编写本博文的另一个目的:通过对FEM模块的分析来阐述大型CAE软件的设计思路,希望对从事国产自主工业软件研发的朋友们有所帮助。注1:文章内容会随着后续研究不断更新。注2:限于篇幅,部分引用未标注出处,在此致歉。注3:限于笔者认知水平与研究深度,难免表述不当,欢迎大家批评指正。一、功能概述FreeCAD不仅是一款开源免费的CAD软件,同时也是一套CAx(CAD/CAE/CAPP/CAM)软件开发框架。在FreeCAD强大的三维全参数建模基础之上,FEM模块通过集成Gmsh、Netgen、Calculix、Z88、VTK第三方工具,实现了全流程的有限元仿真分析(前处理、网格划分、求解、后处理)。具体来说,FEM模块实现的主要功能有边界条件定义了位移、力、温度、热流量等边界条件。网格生成在SALOME Mesh基础之上,设置网格划分相关参数,调用Gmsh、Netgen等第三方工具完成网格划分。求解配置算例,调用CalculiX、Z88、Elmer等第三方求解器进行求解。后处理使用VTK完成后处理数据生成。二、SALOME MeshSALOME是一套开源、跨平台的通用CAD/CAE软件集成平台。SALOME Mesh模块(简称SMESH)提供了网格生成、网格修改、网格数据交换等功能。基于Meshing Plug-in模块,可以将开源或商业网格生成程序嵌入到SMESH。开源Netgen、Gmsh商业MeshGemsFreeCAD直接借用了SALOME Mesh模块代码,代码在src/3rdParty/salomesmesh中。FreeCAD将其拆分成了Driver、DriverDAT、DriverSTL、DriverUNV、MEFISTO2、SMDS、SMESHDS、SMESH、StdMeshers、NETGENPlugin等模块。SMESH_Gen、SMESH_Mesh、SMDS_Mesh、SMESHDS_Mesh、SMESH_Hypothesis等类构成了整个SALOME Mesh的核心。2.1 网格生成技术概述网格是CAD与CAE之间的桥梁,是整个数值计算的基础和前提,也是影响数值计算精度、稳定性的关键因素,并且是一个技术瓶颈。我国著名空气动力学家、计算流体力学家张涵信院士曾经把CFD的研究内容概括为五个"M"和一个"A"。五个"M"分别是Machine、Mesh、Method、Mechanism、Mapping;一个"A"指的是Application。由此可以看出网格生成技术的重要性。网格生成技术涉及计算几何学、计算机图形学、计算力学等多个学科,目前国内很少有专业开设相关的课程,系统性地介绍网格生成技术的专著也比较少,这里仅罗列部分文献资料,供大家深入地研究。网格生成方法难以准确分类,而且分类方法有很多。按照网格单元维度,可以分为0D、1D、2D、3D;按照网格拓扑结构,可以分为结构化网格、非结构化网格和混合网格。结构化网格代数方法、保角变换法、偏微分方程法非结构化网格阵面推进法、Delaunay法、四叉树/八叉树法混合网格层推进法