OpenFOAM是一款开源的计算流体动力学(CFD)软件,自2004年以来由OpenCFD Ltd及社区持续开发。其设计理念强调灵活性与可扩展性,通过模块化的架构覆盖了从单相流动到多物理场耦合的广泛仿真需求。以下从网格工具、求解器库、物理模型、并行计算及前后处理等方面,系统梳理OpenFOAM的核心功能模块。
核心网格与几何处理
OpenFOAM采用非结构化多面体网格系统,支持复杂几何的离散。其内置的网格工具包括:
- blockMesh:结构化块网格生成器,适用于规则几何的快速建模。
- snappyHexMesh:基于表面网格的六面体占优网格生成器,可自动贴合CAD模型生成高质量网格。
- 网格转换与修复:支持从ANSYS、STAR-CD、CFX等商业软件导入网格,并提供网格检查、优化与局部加密功能。
此外,丰富的网格工具库允许用户对网格进行移动、变形、拓扑变化等操作,适用于动网格和流固耦合场景。
丰富的求解器与物理模型
OpenFOAM的求解器库覆盖了流体动力学、热传递、化学反应、声学、固体力学及电磁学等多个领域。按应用场景可分为:
| 类别 | 典型求解器 | 应用范围 |
|---|---|---|
| 不可压缩流 | simpleFoam、pimpleFoam | 稳态/瞬态层流与湍流模拟 |
| 可压缩流 | rhoSimpleFoam、rhoPimpleFoam | 高速空气动力学、激波捕获 |
| 多相流 | interFoam、multiphaseEulerFoam | 自由表面流、分散相与颗粒流 |
| 传热与燃烧 | buoyantBoussinesqPimpleFoam、fireFoam | 自然对流、辐射传热、燃料燃烧与火焰传播 |
| 化学反应 | chemFoam、reactingFoam | 均相与非均相化学反应、多组分输运 |
| 声学 | sonicFoam、rhoCentralFoam | 气动噪声、声波传播 |
| 固体力学 | solidDisplacementFoam、stressAnalysis | 线弹性/弹塑性变形、热应力 |
| 电磁学 | electricFoam、mhdFoam | 静电场、磁流体动力学 |
每个求解器均采用偏微分方程友好的语法编写,使得用户可以直接修改方程项,极大降低了自定义物理模型的门槛。
开源架构与自定义扩展
OpenFOAM的全部源代码开放,并附带完整的文档注释。用户可以利用C++面向对象特性,通过继承现有类的方式创建新的边界条件、湍流模型、输运模型或数值格式。这种架构使得学术研究中的新算法能够快速原型验证,商业环境中的专属模型也能被安全地二次开发。
并行计算与性能优化
OpenFOAM内置了自动并行化机制:采用领域分解法将网格分区,使用MPI在分布式内存系统上进行通信。用户仅需调整一个参数文件即可完成串行到并行的转换,无需修改求解器代码。此外,支持动态负载平衡、混合并行(OpenMP+MPI)以及GPU加速(通过第三方贡献),适用于从单机多核到大规模集群的多种计算环境。
前后处理与结果分析
OpenFOAM不包含图形界面前处理,但提供了功能强大的命令行工具与接口:
- 数据输入:通过dict字典文件配置物理属性、数值格式和边界条件,便于脚本化批量处理。
- 数据输出:生成OpenFOAM自有格式(如fields、mesh),并支持VTK、EnSight等标准格式。
- 可视化:与Paraview深度集成,可直接在Paraview中加载OpenFOAM案例,进行流线、剖面、动画等后处理。
- 辅助工具:如renumberMesh(优化网格编号)、patchSummary(边界条件统计)、execFlowFunctionObjects(自动计算流量、力、涡量等工程量)等。
这些工具共同构成了一个完整的仿真工作流,用户无需离开OpenFOAM环境即可完成大部分前后处理任务。