OpenFOAM

OpenFOAM（英文 Open Source Field Operation and Manipulation 的缩写，意为开源的场运算和处理软件）是对连续介质力学问题进行数值计算的C++自由软件工具包，其代码遵守GNU通用公共许可证。它可进行数据预处理、后处理和自定义求解器，常用于计算流体力学(CFD)领域。该软件由OpenFOAM基金会维护（商标OpenFOAM的拥有者硅谷图形公司(SGI)赞助）。

## 历史

OpenFOAM的早期开发始于1980年代末期的伦敦帝国学院，其目标是为了编写一个相对于当时事实上的标准，FORTRAN，更为强大和灵活的通用模拟计算平台。并且因此选择了拥有高度模块化和面向对象特性的C++作为其编程语言。在2004年OpenFOAM以开源方式发布之前，英国Nabla有限公司曾销售过FOAM，OpenFOAM的前身。2011年8月15日，OpenCFD宣布它被硅谷图形公司(SGI)收购。

OpenFOAM是最早的用C++写成的重要科学计算软件包之一。现已成为使用多面体网格的最主要的通用计算流体力学(CFD)软件.

## 特色

### 语法

OpenFOAM一个非常有特色的地方是它描述张量和偏微分方程的语法与被求解的方程本身非常相似，事实上便捷地在程序中表达传统的数学记号正是其语法设计的目标。例如方程

$$\frac{\partial \rho \mathbf{U}}{\partial t} + \nabla \cdot\phi\mathbf{U} - \nabla \cdot\mu\nabla\mathbf{U} = - \nabla p$$

对应的OpenFOAM代码是

```cpp
solve
(
     fvm::ddt(rho,U)
   + fvm::div(phi,U)
   - fvm::laplacian(mu,U)
     ==
   - fvc::grad(p)
);
```

得益于面向对象的程序设计和运算符重载，使用者可以相对容易地建立自己的求解器。然而，大量模板元编程的运用以及相应开发文档的缺乏，使得越是深入库底层的定制化越是困难和充满挑战。

### 可扩展性

由于使用了工厂方法和基类作为接口，OpenFOAM具有很好的可扩展性。使用者在建立定制化的物体或对象（例如边界条件或湍流模型）时，无需修改或是重新编译OpenFOAM软件包，便可在已有的求解器上工作。OpenFOAM称之为运行时决策(run-time selection)

## OpenFOAM的架构

OpenFOAM核心功能的实现是由大量的基础库完成的，其中包括：

- 张量和场操作
- 人类可读的偏微分方程离散化语法
- 线性系统求解
- 常微分方程求解
- 高级操作的自动并行化
- 动态网格
- 通用物理模型
- 流变模型(Rheological models)
- 热力学模型及相关的数据库
- 湍流模型
- 化学反应和动理学模型
- 拉格朗日粒子追踪模型
- 热辐射传输模型
- 单参照系和多参照系方法

利用便捷直观的高级语法和基础库提供的功能完成开发应用。通常应用可以归为两类：

- 求解器：执行连续介质问题的求解计算
- 实用程序：用于准备网格、设置模拟样例、处理结果等

每个应用有其专注的功能：如应用blockMesh用于从用户提供的输入文件生成网格，而另一个应用icoFoam，则用来求解不可压层流的Navier-Stokes方程。

最后，一些第三方软件包被用来提供并行化能力（即OpenMPI）和进行图像后处理（ParaView）。

## 功能

OpenFOAM的功能含有：

<image>

- 基本的计算流体力学求解器
- 不可压流的雷诺平均纳维－斯托克斯方程法(RANS)和大涡流模拟法(LES)求解
- 可压流的RANS和LES求解
- 浮力流动求解器
- 直接数值模拟(DNS) 和 LES
- 多相流体求解器
- 粒子跟踪求解器
- 燃烧问题求解器
- 耦合热传输求解器
- 分子动力学求解器
- 电磁学求解器
- 刚体动力学模拟器

除以上列举的标准求解器之外，由于OpenFOAM的语法，建立自定义的求解器也是容易的。

OpenFOAM实用程序被细分为：

- 网格实用程序
- 网格生成: 它们通过输入文件或几何描述文件（如）来自动生成计算用的网格(hex-dominant, snappyHexMesh)
- 网格格式转化：转化其他工具生成的网格到OpenFOAM格式
- 网格处理：执行一些网格操作，如局部优化，区域定义等
- 并行处理工具：提供计算任务的分解、合并和重分发功能来实现并行计算
- 预处理工具：准备模拟样例
- 后处理工具：处理模拟结果，包含到OpenFOAM和ParaView的插件
- 表面处理工具
- 热物理工具

## 许可证

OpenFOAM是自由软件和开源软件，在GNU通用公共许可证版本3下发布。

## 优劣

### 优点

- 用户友好的偏微分方程描述语法
- 有非结构化多面体网格的处理能力
- 自动并行化OpenFOAM高级语言写成的应用
- 现成的涵盖宽领域的应用和模型
- 有由开发者提供的商业支持和培训
- 无许可证花费

### 缺点

- 缺少集成的图形化用户界面(GUI)（但有独立私有软件可选）
- 开发文档缺乏足够的细节，学习曲线陡峭
- 文档缺乏维护，入门困难

## 分支和改编

### 免费软件

- blueCFD 是改编自OpenFlow的运行在 Windows 上的OpenFOAM交叉编译版本。该软件包同时也含有一些有用的额外函数和工具。blueCAPE出品。
- FreeFOAM为了把OpenFOAM从它对系统的依赖中解脱出来，使其安装更为便携和用户友好而建立的分支。其开发紧跟最新的OpenFOAM发布版，不附带额外的功能，使用CMake作为编译系统。
- OpenFlow 是一个OpenFOAM的Windows平台交叉编译的源码补丁。blueCFD中OpenFOAM的部分既是由它而来。Symscape出品
- OpenFOAM-extend由Wikki有限公司维护。该分支有社区贡献的大量内容，并且当中的绝大部分贡献可以装入到OpenFOAM的官方版本中，而只产生最低限度的影响。它的开发与官方版OpenFOAM是并列进行的，对最新版OpenFOAM的合并可能要等到一至两年后。

### 付费软件

- Caedium 是Symscape出品的通用数值模拟环境。其RANS Flow的附加功能提供了用于OpenFOAM的模型建立、解操作和后处理的图形用户界面。
- CastNet DHCAE Tools出品的私有建模和模拟环境。其中包含一个OpenFOAM的图形界面前端。FOAM.
- ICON FOAMpro CFD 由ICON Process & Consulting Ltd进行维护。与大众汽车和福特汽车合作，主要围绕着汽车应用而开发。该分支既包含社区贡献的内容也包含ICON专有的开发。

## 替代软件

### 开源软件和自由软件

- Stanford University Unstructured (SU2)
- Code Saturne (GPL)
- FreeCFD
- Gerris Flow Solver
- OpenFVM
- CLAWPACK

### 私有软件

- ANSYS CFX
- ANSYS Fluent
- Pumplinx
- STAR-CCM+
- KIVA (software)
- RELAP5-3D
- PowerFlow
- FOAMpro

## 外部链接

### 官方资源

- Official OpenFOAM web site
- OpenFOAM official documentation
- OpenFOAM bug-reporting system

### 社区资源

- OpenFOAM Forum at CFD Online
- OpenFOAM wiki
- FOAM CFD web site, by one of the original developers of the code, who is not associated with OpenCFD.
- A Blog about OpenFOAM in Chinese
- OpenFOAM中文爱好者之家网站
- 入门课程

## 基本资料

- 域：

<image>

- 作者：Henry Weller
- 开发者：The OpenFOAM Foundation
- 发行日期：2004-12-10
- 软件版本周期：4.1
- 编程语言：C++
- 操作系统：Unix/Linux
- 状态：运行中
- 类型：计算流体力学
- 许可协议：GNU通用公共许可证
- 网站： www.openfoam.org