OpenFOAM 框架-HQY
2013-08-27 22:08阅读:
OpenFOAM是一款可以模拟任何复杂流动,如化学反应流、湍流、热传导、流固耦合、电磁场和金融的计算流体工具。也是目前用户范围最为广的开源
CFD软件。OpenFOAM
是 OpenCFD
公司(2011 年 8
月为 SGI
公司收购)开发的开放源代码的软件。OpenFOAM
用有限体积法求解各种偏微分方程系统,使用 3D
非结构化多面体网格。OpenFOAM
支持基于网格区域分解的任务并行方法,支持自带或第三方的 MPI
接口。
OpenFOAM(Open Field Operation and
Manipulation)是一个 Linux
平台下使用
C++语言开发的用于连续流场模拟的计算流体力学(CFD)软件工具库。用户可以灵活的更具自己的需求在其程序框架上开发自定义解算器和前后处理函数,从而实现针对具体
CFD 问题求解。由于采用了面向对象编程技术,在
OpenFOAM的框架下,新模型的建立和加入变得更加容易,解决了商业软件修改困难的问题,因此该软件受到有定制需求的科研工作者和工业用户的清眛。
OpenFOAM 的前身是 FOAM
(
Field Operation and
Manipulation),起源于
1993年,由当时还在攻读博士学位的 Hrvoje
Jasak 和 Henry Weller
在伦敦帝国学院(Imperial College,
London)完成。他们开发这个计算流体力学软件的初始动机主要是对当时历史遗留下的
Fortran
程序不满意,他们想创造一些能够为他人所复用的软件。FOAM
一开始是作为一个封闭源代码的商业软件来开发,直到 2004
年 12月才变成开源软件并被命名为
OpenFOAM,版本号是
1.0。从那以后
OpenFOAM经过不断更新,最新的版本号是
2.0.1(截至 2011
年八月)。 OpenFOAM
目前由OpenFOAM 基金会支持,遵循的开源协议是
GNU General Public License。
OpenFOAM 关键特性
OpenFOAM 设计上的最主要优点包括:
l
表现力和灵活的语法,允许实现复杂的物理模型
l
多方面的功能,包括丰富的物理模型,和商业 CFD
软件相媲美的准确健壮的离散化和复杂几何结构处理
l
开放的架构和开放的开发过程,所有用户都可以免费自由定制扩展自己的应用
求解器(Solvers)
OpenFOAM
主要是用来计算计算流体力学的,但它也能应用于其他领域诸如应力分析,电磁学和金融等。这主要是因为
OpenFOAM
并不仅是一个传统意义上的计算流体力学软件包而是一个基础的偏微分方程求解工具。OpenFOAM
中自带的常用求解应用类型包括:
l 基础求解器
包 括 求 解
简 单 拉 普
拉 斯 方 程
的 laplacianFoam ,
简 单 的 势
流 求 解
的potentialFoam,求解因变量传递方程的scalarTransportFoam。
l 不可压缩流
包括不可压缩流动层流求解器icoFoam,使用
PISO 算法的不可压湍流求解器pisoFoam
和使用 SIMPLE 算法的不可压湍流求解器
pimpleFoam, 一维稳态不可压缩湍流的
boundaryFoam 等。
l 多相流
包括分散相的双组分不可压缩多相流求解器
bubleFoam,采用 VOF
相分数界面捕捉方法求解 2 个等温混溶可压缩流体的
compressibleInterFoam,计算 n
个不可压缩流的界面,包括各相的表面张力和接触角的
multiphaseInterFoam 等。
l 燃烧氧化
包括求解柴油发动机的喷射和燃烧场分析的
dieselEngineFoam,求解火焰和湍 流
扩 散 火 焰
的 瞬 态 的
fireFoam , 基 于
密 度 热 力
学 求 解 化
学 反 应
的rhoReactionFoam 等。
l 浮力驱动的流动
包括瞬态求解浮力,不可压缩流湍流的
buyantBoussinesqPimpleFoam,稳态求解浮力,不可压缩流湍流的buoyantBoussinesqSimpleFoam
等。
l 共轭传热
包括求解固液间的传热的chtMultiRegionFoam,稳态求解可压缩流,包括辐射,通风和传热的
buyantSimpleRadiationFoam 等。
l 可压缩流
包括可压缩流密度求解器rhoCentralFoam,可压缩层流或
RANS 湍流
simple算法稳态求解器
rhoSipmleFoam,支持动网格的层流或湍流可压缩跨音速/超音速气流瞬态求解器
sonicDyMFoam 等。
l
粒子方法(DEM,DSMC,MD)
包括求解 3D 瞬态多相流直接 Monte
Carlo 模拟的
dsmcFoam,求解平衡和/或先决条件的分子动力学系统的
mdEquilibrationFoam,求解分子动力学求解流体动力学。
l
其他(固体动力学,电磁学)
包 括 求 解
静 电 场 的
electrostaticFoam , 求
解 永 久 磁
铁 产 生 的
磁 场
的magneticFoam,求解不可压缩导电层流在磁场下的作用的
mhdFoam,瞬态分离有限体积法求解固体的线弹性小应变变形、热扩散和热应力的solidDisplaceFoam等。
图一: OpenFOAM 框架示意图
OpenFOAM功能库介绍
OpenFOAM的主要构架为由各种类组成的功能库,这也是其实现CFD模拟功能的重要组成部分,因此对功能库做一全面分析,以更清楚全面的认识OpenFOAM的内部构架,如所示,包括以下几个功能库:
表一:OpenFOAM 功能库
基础库
包含如下几点内容
(1)基本数据类型:C++所有类型以及scalar,
vector, tensor, quaternion,septernion, complex,
Switch等
(2)复合数据类型:List, Field, linkList,
DLList, ptrList等
(3)场类型:Field:一串数+连续空间+模版类。类名:Field
边界条件:一串数+边界。类名patchField
单位:7个国际单位制。类名dimensionSet
几何场:Field+边界条件。类名GeometricField
场操作:+,-,*,/,sin,cos等
(4)
db库:字典类dictionary–参数控制
对象注册机objectRegistry
–Time, mesh,
cloud–对象容器、输出统一控制、任何地方方便查找
对象注册类(regIOobject)–定义可以在对象注册机注册的对象,比如字典
运行期选择表:runTimeSelection
–对象动态创建(C++不允许构造器虚拟),单一接口、多重实现的基础
–湍流和粘性模型以及差分格式等
库的动态加载:dlLibraryTable
–函数对象:functionObject
–独立于solver的solver功能的附加
时间基本库:Time
–控制整个程序运行
–参数修改重新加载
–库的动态加载
–所有注册对象的容器
(5)内存管理相关:
自动指针autoPtr:不能直接作为参数传递
瞬态对象tmp:可以实现返回值不被释放,直接将地址传给调用函数左值,防止内存泄漏
(6)插值相关:点单元:interpolatePointToCell
xy插值:interpolateXY
插值表:interpolationTable
边界:patchToPatchInterpolation
(7)基础矩阵类:
稀疏矩阵类:lduMatrix
临近节点寻址:lduAddressing
代数方程器求解器:–PCG(对称矩阵的求解)/PBICG(非对称阵的求解)
–光滑求解器smoothSolver
–代数多重网格求解器
预条件器:
–对角不完全Cholesky(对称矩阵):DIC
–快速对角不完全Cholesky:FDIC
–对角不完全LU(反对称矩阵):DILU
–对角预条件器:diagonal
–代数多重网格求解器;GAMG
–没有预条件器:none
光滑器:
–高斯赛德尔:GaussSeidel
–对角不完全Chol