当前位置:
文档之家› OpenFOAM报告ppt—中冶赛迪2011.01
OpenFOAM报告ppt—中冶赛迪2011.01
Xi’an Jiaotong University
OpenFOAM 一种开源计算程序包 种开源计算程序包
苏军伟
2011.01于中冶赛迪
Xi’an Jiaotong University
作者简历
学习经历
2000-2004年西安交通大学过程装备与控制工程系、计算机科学与技术系
学士 2004-2007 2004 2007年西安交通大学过程装备与控制工程系 工学硕士 2007-至今 西安交通大学机械工程学院博士在读 2008-2009年在Imperial college London(OpenFOAM发源地)访问博士
–柴油雾化库 –Intermediate –CDEM的设计理念
作者blog:/openfoamresearch
Xi’an Jiaotong University
基本内容
OpenFOAM O FOAM的求解器及其前后物理功能 OpenFOAM常用基础类
作者blog:/openfoamresearch
Xi’an Jiaotong University
OpenFOAM功能库介绍
拉格朗日
cloud类 • src\OpenFOAM\fields\cloud\ • 功能 Cloud 类模板 • src\lagrangian\basic\Cloud • 功能
工学双
研究方向
多相流体力学数值模拟 描述任意复杂区域内密相颗粒流离散单元程序包(Jasak, 4th workshop) 描述生物反应器传质过程模型 任意非结构化网格有限容积Lattice Boltzmann模型 描述多分散系统的群体平衡模型 单相流动拓扑优化求解器 全隐式浮力驱动流求解器 一种全隐式是任意多区域共轭换热求解器
Xi’an Jiaotong University
OpenFOAM功能库介绍
Xi’an Jiaotong University
O FOAM发展史 OpenFOAM
什么是Foam F Field Operation And Manipulation(场的运算与操作) 伦敦帝国理工学院机械工程系,93年Hrvoje Jasak在做博士论文时候和HenryWeller等通过开发 基于C++的CFD软件包(更确切:一种CFD语言) Nabla公司() 2004年8月2日Foam2.3发布 OpenFOAM 2004 年 12 月 Henry Weller 的 OpenCFD 公 司 () 成 立 并 发 布 开 源 的 Foam OpenFOAM1.0 2004年12月Hrvoje Jasak的Wikki公司()成立,并维护OpenFOAM的扩充 2007年9月Hrvoje Jasak的OpenFOAM extension工程确立,实现在OpenCFD ltd发布的OpenFOAM上 进一步完善 当前的版本 OpenCFD(Henry Weller等人)稳定版:OpenFOAM 1.7 开发版:OpenFOAM 1.7.x Wikki稳定版:OpenFOAM-dev O FOAM d 1.5 1 5 (压缩包) 开发版:OpenFOAM-dev 1.5 (实时更新版)
作者blog:/openfoamresearch
Xi’an Jiaotong University
OpenFOAM功能库介绍
基础矩阵类 • 稀疏矩阵类:lduMatrix • 临近节点寻址:lduAddressing • 代数方程器求解器 •
– 预条件共轭梯度求解器PCG/PBICG – 光滑求解器 smoothSolver – 代数多重网格求解器 预条件器 – 对角不完全Cholesky(对称矩阵);DIC – 快速对角不完全Cholesky;FDIC – 对角不完全LU(反对称矩阵);DILU – 对角预条件器;diagonal – 代数多重网格求解器;GAMG – 没有预条件器;none 光滑器 – 高斯赛德尔;GaussSeidel – 对角不完全Cholesky(对称矩阵);DIC – 高斯赛德尔+对角不完全Cholesky(对称矩阵)DICGaussSeidel – 对角不完全LU(反对称矩阵);DILU – 高斯赛德尔+对角不完全LU(反对称矩阵)DILUGaussSeidel 书:Yousef Saad, Iterativemethods for Sparse Linear Systems
作者blog:/openfoamresearch
•
•
Xi’an Jiaotong University
OpenFOAM功能库介绍
有限容积库 有 容 库
数值离散:fvm • ddt, ddt d2dt2, d2dt2 div, div laplacian, laplacian sp, sp SuSp 表面插值格式(TVD非延迟修正) • QU QUICK, C , upw upwind, d, supe superBee, ee, 多项式拟合等 算子:fvc • ddt, div, grad, curl, laplacian等 场内点插值 • Cell • cellPoint llP i t • cellPointFace 有限容积矩阵类 fvMatrix(lduMatrix子类)
–粒子集合的顶层类,本类主要负责粒子的输入和输出位置管理 –父类是ObjectRegistry,使得粒子集可以在程序任何位置被访问 –本身并不存储粒子
–负责粒子集的管理,粒子的存储、增加、删除、移动等 –父类cloud和IDLList类,IDLList为双链表类模板 –负责position的输入输出 –负责 IOField 对象的构建和有效性检查( cloud 的每个粒子的属性都是通过 IOField来输入输出的) • 以存储对象为模板参数
作者blog:/openfoamresearch
Xi’an Jiaotong University
OpenFOAM功能库介绍
db库 • 字典类(dictionary) • • • • •
– 参数控制 对象注册机(objectRegistry) –Time, i mesh, h cloud l d – 对象容器、输出统一控制、任何地方方便查找 对象注册类(regIOobject) – 定义可以在对象注册机注册的对象,比如字典 运行期选择表: 行 选择表 runTimeSelection – 对象动态创建(C++不允许构造器虚拟),单一接口、多重实现的基础 – 湍流模型、差分格式、粘性模型等 库的动态加载:dlLibraryTable – 函数对象:functionObject – 独立于solver的solver功能的附加 时间基本库:Time – 控制整个程序运行 – 参数修改重新加载 – 库的动态加载 – 所有注册对象的容器
器id,初始id) • 负责位置跟踪 –方法:trackToFace: 从当前位置移动到经过的面
from l to
l | to from |
–优点: 时刻知道粒子所在网格单元,避免粒子网格单元确定,容易 CFD耦合 任意多面体网格内的颗粒跟踪 –缺点:纯颗粒流动计算也需要内部网格
作者blog:/openfoamresearch
作者blog:/openfoamresearch
Xi’an Jiaotong University
OpenFOAM功能库介绍
Particle P i l 类模板
src/lagrangian/basic/Particle 功能 • 负责存储粒子的基本属性(位置、所在单元、所在面,初始的处理
作者blog:/openfoamresearch
目前已经基于OpenFOAM的工作
Xi’an Jiaotong University
作者blog:/openfoamresearch
Xi’an Jiaotong University
check=full ,检查内存泄露情况)
--tool=memcheck --leak-
插值相关 • 点单元:interpolatePointToCell • xy插值:interpolateXY • 插值表:interpolationTable • 边界patchToPatchInterpolation
作者blog:/openfoamresearch
Xi’an Jiaotong University
基本内容
OpenFOAM O FOAM发展史 OpenFOAM下的微分方程 OpenFOAM功能库介绍 基础库 有限容积库
拉格朗日 • 拉格朗日库的几种设计方式 动网格 湍流模型库 传输模型库
Xi’an Jiaotong University
OpenFOAM功能库介绍
基础库
基本数据类型 • C++所有类型 • scalar, vector, tensor, quaternion, septernion, complex, Switch 等 复合数据类型 • List, Field, linkList, DLList, ptrList等 场类型 • Field:一串数,连续空间,模板类。类名:Field • 边界条件:一串数+边界。类名patchField • 单位:7个国际单位制。类名 个国际单位制 类名dimensionSet • 几何场:Field+边界条件。类名GeometricField • 场操作:+,-,*,/,sin, cos,等
作者blog:/openfoamresearch
Xi’an Jiaotong University
OpenFOAM下的微分方程
连续力学数学表达:微分方程 连续力学数学表达 微分方 OpenFOAM下的描述
solve ( fvm::ddt(k) + fvm::div(phi, k) - fvm::laplacian(nu() + nut, k) == nut*magSqr(symm(fvc::grad(U))) - fvm::Sp(epsilon/k, k) );