在命令行窗口中运行的OpenFOAM | |
原作者 | Henry Weller |
---|---|
開發者 | The OpenFOAM Foundation |
首次发布 | 2004-12-10 |
当前版本 |
|
源代码库 | |
编程语言 | C++ |
操作系统 | Unix/Linux |
类型 | 计算流体力学 |
许可协议 | GNU通用公共许可证 |
网站 | www.openfoam.org |
OpenFOAM(英文 Open Source Field Operation and Manipulation 的缩写,意为开源的场运算和处理软件)是对连续介质力学问题进行数值计算的C++自由软件工具包,其代码遵守GNU通用公共许可证。它可进行数据预处理、后处理和自定义求解器,常用于计算流体力学(CFD)领域。该软件由OpenFOAM基金会维护[2](商标OpenFOAM的拥有者硅谷图形公司(SGI)赞助)。
OpenFOAM的早期开发始于1980年代末期的伦敦帝国学院,其目标是为了编写一个相对于当时事实上的标准,FORTRAN,更为强大和灵活的通用模拟计算平台。并且因此选择了拥有高度模块化和面向对象特性的C++作为其编程语言。在2004年OpenFOAM以开源方式发布之前,英国Nabla有限公司曾销售过FOAM,OpenFOAM的前身。[3]2011年8月15日,OpenCFD宣布它被硅谷图形公司(SGI)收购。[4]
OpenFOAM是最早的用C++写成的重要科学计算软件包之一[來源請求]。现已成为使用多面体网格的最主要的通用计算流体力学(CFD)软件.
OpenFOAM一个非常有特色的地方是它描述张量和偏微分方程的语法与被求解的方程本身非常相似,事实上便捷地在程序中表达传统的数学记号正是其语法设计的目标。例如方程[5]
对应的OpenFOAM代码是
solve
(
fvm::ddt(rho,U)
+ fvm::div(phi,U)
- fvm::laplacian(mu,U)
==
- fvc::grad(p)
);
得益于面向对象的程序设计和运算符重载,使用者可以相对容易地建立自己的求解器。然而,大量模板元编程的运用以及相应开发文档的缺乏,使得越是深入库底层的定制化越是困难和充满挑战。
由于使用了工厂方法和基类作为接口,OpenFOAM具有很好的可扩展性。使用者在建立定制化的物体或对象(例如边界条件或湍流模型)时,无需修改或是重新编译OpenFOAM软件包,便可在已有的求解器上工作。OpenFOAM称之为运行时决策(run-time selection)[6]
OpenFOAM核心功能的实现是由大量的基础库完成的,其中包括:
利用便捷直观的高级语法和基础库提供的功能完成开发应用。通常应用可以归为两类:
每个应用有其专注的功能:如应用blockMesh用于从用户提供的输入文件生成网格,而另一个应用icoFoam,则用来求解不可压层流的Navier-Stokes方程。
最后,一些第三方软件包被用来提供并行化能力(即OpenMPI)和进行图像后处理(ParaView)。
OpenFOAM的功能含有[15]:
除以上列举的标准求解器之外,由于OpenFOAM的语法,建立自定义的求解器也是容易的。
OpenFOAM实用程序被细分为:
OpenFOAM是自由软件和开源软件,在GNU通用公共许可证版本3下发布。[26]
|