开源CFD软件---OpenFOAM简介

什么是OpenFOAM

概要

OpenFOAM是ESI集团下属的OpenCFD公司开发的一款物理场计算软件。该软件是用C++语言编写的、符合GPL协议的开源软件。 该软件能够进行流体、传热、分子动力学、电磁流体、固体应力的解析,能够实现从网格划分到后处理的可视化流程。软件能够满足用户对于设计流程匹配、物理模型、需要的计算精度、自动化流程的要求,通过代码开发实现CAE仿真。

OpenFOAM的编程语言

OpenFOAM是用C++语言进行编写的。C++语言最重要的特征就是面向对象,可以进行模板化编程。OpenFOMA巧妙得利用了这两大特点。这与传统的CFD编程语言采用Fortran或者C语言是有很大不同的。利用C++语言后期绑定这一特点进行运行时间选择等也常被使用。

源代码结构

OpenFOAM的源程序有两个重要的代码层。 1个应用层和1个库层。下图是OpenFOAM的典型代码结构。 应用层是应用的路径,源代码保存于该层中的src库文件中。自动化网格生成器、流体求解器都保存于应用层中,比如,经典的物理模型、边界条件、FVM相关参数都保存于库层。 此外,应用层的代码描述,与经典的顺序结构语言类似。

编译

OpenFOAM在编译时,编译器基本使用GNU G++。编译脚本不使用一般的make,而是采用wmake脚本。同时,因为在OpenFOAM中区分使用大小字母,所以在Windows这种不区分大小写的文件系统下,默认源代码是不能使用的。

变量

OpenFOAM,将C++语言中通常使用的原变量进行包装,形成自己独有的变量类型。简单举例来说,将int、long和long long型包装成label型,将float和double包装成scalar型,String类型变成了string、word、?leName型。另外还包括复杂的vector、tensor数组类型。如上所述,OpenFOAM中含有非常丰富的数据类型。

并行计算

在OpenFOAM中,能够进行计算区域的分割,以实现并行计算的功能。为了能够方便地设定并行计算,OpenFOAM提供了pStream类作为处理器的通信层。如下面的图中,这个类是用作MPI库的适配器,您可以自己编写并行程序,而无需清楚知道每个MPI库的含义。 

运行时选择模型

为了方便的编写应用层的源代码,OpneFOAM封装了非常多的简单模型,可以方便地在使用时选择、组合不同的模型,从而完成模拟。这就是OpenFOAM运行时选择模型的思路。下图以不可压、RANS湍流模型来说明其类库关系。湍流模型是非常多的,没有必要每一个湍流模型都编写一个应用层的代码,湍流模型的选择采用运行时选择的模式,当应用层的湍流模型改变时,其设计也不需要改变任何代码。 

数据库

如果你需要深入理解OpenFOAM,你需要了解OpenFOAM是如何处理数据库的,因为在OpenFOAM中所有的数据都是以数据库的形式存在的。所以OpenFOAM被视为所有数据的一个数据库。如果你想使用数据库,需要使用Time类和fvMesh类,这两个类均继承自ObjectRegistry类。 ObjectRegistry类继承自哈希表。通过利用这些类可以轻松而安全地访问工作路径下的数据。下图以Time类为例子进行说明。 

求解器

如前所述,OpenFOAM为了能够轻松进行物理场的计算,做了很大努力。它提供了可以通过应用层进行操作的机制,OpenFoam可以用来求解描述该领域的所有偏微分方程组。譬如,非稳态扩散方程式能够像下图一样的方式进行程序的编写。 

解析机能

OpenFOMA可以求解可压缩流动、不可压缩流动、多相流、自由表面、DNS、燃烧、化学反应、考虑浮升力的热流动、流固耦合传热、拉格朗日多相流、分子动力学、直接蒙特卡洛方法求解热辐射、电磁流体、固体应力解析,与商用CFD软件一致。此外,对于可压缩和不可压缩流动,有50种以上的RAS和LES湍流模型与之配对,拥有多种差分格式。 自动化网格生成工具使用「snappyHexMesh」来生成6面体核心的计算网格。提供了从商用CFD软件如ANSYS Fluent、STAR-CD、gambit、CFX4、ideas,网格转化为OpenFOAM网格的工具。后处理,可以使用开源可视化工具ParaView,也可以将结果转化为第3方的数据格式,如EnSight格式等。

引自:http://www.idaj.cn/sp_iconcfd/

你可能感兴趣的:(开源CFD软件---OpenFOAM简介)