计算力学OpenFOAM讲座-高级篇(殷亮)ppt课件

上传人:我*** 文档编号:148663627 上传时间:2020-10-21 格式:PPT 页数:43 大小:89.50KB
返回 下载 相关 举报
计算力学OpenFOAM讲座-高级篇(殷亮)ppt课件_第1页
第1页 / 共43页
计算力学OpenFOAM讲座-高级篇(殷亮)ppt课件_第2页
第2页 / 共43页
计算力学OpenFOAM讲座-高级篇(殷亮)ppt课件_第3页
第3页 / 共43页
计算力学OpenFOAM讲座-高级篇(殷亮)ppt课件_第4页
第4页 / 共43页
计算力学OpenFOAM讲座-高级篇(殷亮)ppt课件_第5页
第5页 / 共43页
点击查看更多>>
资源描述

《计算力学OpenFOAM讲座-高级篇(殷亮)ppt课件》由会员分享,可在线阅读,更多相关《计算力学OpenFOAM讲座-高级篇(殷亮)ppt课件(43页珍藏版)》请在金锄头文库上搜索。

1、开源计算力学软件OpenFOAM讲座,OpenFOAM的结构和能力,南京工业大学城市建设与安全工程学院 OpenFOAM研讨小组 研讨小组QQ群号码:127471850,殷亮 2010.12.18于南京,本讲稿的内容参考了Hrvoje Jasak的演讲内容,版权OpenFOAM研讨小组 ,遵守GPL协议,归可自由的复制和拷贝。,1、OpenFOAM介绍,OpenFOAM:面向对象的计算力学数值模拟库 对偏微分方程算子实施有限体积离散(积分形式) 故最多处理二阶方程(传递方程适用) 使用非结构化网格(但精度与网格相关性较大) 以类封装的形式提供离散和数值算法(最大优点) 有效的进行大规模并行化计

2、算,并且在很多平台可以移植和调试(底层并行化实施) 同时提供: 自动网格运动 网格拓扑改变:体单元的层化,滑动界面(ggi)及其它 拉格朗日粒子追踪及喷射 有限元离散及有限面积离散(ext版本) 工具类库:ODE求解器、热物理属性、CHEMKIN界面,OpenFOAM是什么,1.1、OpenFOAM历史,上世纪90年代掀起的C+及面向对象编程(主要解决软件危机) OpenFOAM与英国帝国大学Gosman的小组和热流体分部相关联(Spalding、帕坦卡S.V.Patankar的研究相关,PHOENICS与STAR-CD-非结构网格) 初始类来自于Charlie Hill (1993)的博士论

3、文 数值工作来自于1993年Henry Weller和Hrvoje Jasak(两个版本),1、 OpenFOAM背景,2开发与应用,OpenFOAM 的PhD项目包括:数值分析、误差估计、网格自适应、RANS、LES湍流模型、自由液面、多相流等等 材料力学:非线性结构分析(如何分量解耦)、接触弹塑性、流固耦合 在Chalmers大学的Diesel喷射模型 瑞士军方应用(水动力) 多所大学贡献:Imperial College: Poly Milano, Chalmers University, University of Zagreb, Croatia, University College

4、 Dublin, Kings College London等 在cfd-online上其活跃程度与FLUENT相当,3、版本发展,在2000年,FOAM作为Nabla公司的商业版本 与Fluent公司进行策略合作:为下一代CFD软件进行软件设计( Hrvoje Jasak) 自2002年提供了大学免费版本 满足复杂要求的高端客户 在2004年10月提供公共域版本支持,4、 OpenFOAM和C+,OpenFOAM基于坚实而彻底的C+开发 OpenFOAM实施要早于C+的稳定版本的推出,故其并未用标准库,但其类库也随语言而进化 其核心代码不断的重写或提炼:清除冗余代码、使用新的语言知识和程序理念

5、 其代表了在面向对象、模块化、代码重用方面的经典案例,值得研读。,5、 OpenFOAM完成了以下的创新,多面体网格支持 新的自由液面算法 Halo-free并行化(无ghost) 自动多面体(任意)网格求解器 新方法进行拓扑网格变化 通过实时选择表进行用户定制,1.2设计理念,用户修改要预先定义 模型与模型作用的矩阵过于复杂 难于开发、维护及支持 缺少支持层:不同相关性的代码混合在一起难以区分 开发与维护需要大的团队 即使小的改变也需要专业的知识 化很长时间才能变得专业 封闭的框架,对用户而言存在代码重用性问题 单一的开发使得需要单一的测试,1曾经主流的设计特点,有利于新模型的实现 无介入的

6、分层开发 便利的代码重用及模块化 能应用于超出流体流动的更多应用 在不改变已有组件的条件下实现代码的开发和定制化 如下例,2、新的理念,软件中方程的表达为 solve ( fvm:ddt(k) + fvm:div(phi, k) - fvm:laplacian(nu() + nut, k) = nut*magSqr(symm(fvc:grad(U) - fvm:Sp(epsilon/k, k) );,3、分层实现,软件中不同的功能层 张量代数 场代数 场的映射和差分 不同类型的离散 有限体积方法 有限元 网格处理、网格运动、拓扑改变,差分格式 拉格朗日追踪 边界条件定制化 线性方程组求解技术

7、分离的物理模型 应用程序的定制 流体流动、传热 燃烧、湍流、喷射 电磁学 其它 模型组合:流固耦合 各层可以独立开发,同时又相互依赖。,4、用户考虑因素,功能能交换,考虑使用同一界面,使用实时选择表 功能块可选 用户定制:线性方程求解、梯度计算、对流差分格式 开源高层代码共享 自动优化:内存和执行分支,1.3、使用,面向问题的求解器框架 通用的CFD软件包不可能预先知道并满足求解器需求 不能写出完全通用的求解器 取而代之的是数值库及实施代码重用 通过重用提供基本工具直至需求满足 如果重用很难,继续分解代码,并重写代码 伴随着高层应用的工具开发 求解器的编写及优化 所有这些,使得要检查建立求解器

8、必要的部件,再检查能否用在其它处(重用性)。,2、主要的对象及相互关系,从面向对象的观点,在于识别对和它们所需提供的功能。,2.1 元类及容器类,其封装了label,scalar,bool,string,complex,1、元类,2、容器类(内存管理问题),OpenFOAM写在STL之前,所以有自己的容器类 容器类对代码的优化相当重要,需要紧密的控制 所有的容器类都以内容类型作为模板,具体实现,Lists:数组容器 List:提供序列存储的容器,类似于数组,为数值求解的主要容器,将其视为对单一内存的封装 SubList:对List的片段抽取(基于效率考虑) DynamicList: 具有动态长

9、度的List Linked List:动态数组 SLList:单链 DLList:双链 Hash Tables HashTable HashSet:无内容,指针物体的容器: List被创建时,默认为无参构造函数,但有些对象没有无参构造,或不能被拷贝,则要使用指针列代替 对指针列需要附带操作: 哪一个元素已经被设置了 在列的构析函数执行中,谁负责删除指针 PtrList存储指针的容器,字典(Dictionary) 处理数据的输入和输出 关键字-值对的嵌入 次序无关,用分号隔开 允许嵌入表:表的表,处理数据的输入和输出 Ioobject封装了隐式对象注册管理(树形结构) 所有的物体都应该从一个文件

10、读或写 IOobject由名字、类名、路径、对注册对象objectRegistry的应用、决定储存状态的参数来创建:MUST_READ、READ_IF_PRESENT、NO_READ 、AUTO_WRITE、 NO_WRITE objectRegistry管理者读写请求,2.2、空间和时间的描述,1空间的描述 空间为基本的计算网格。其主旨为网格独立于离散,应该满足合法的网格需求,网格元 点 边(两点) 面(点列) 体(面列) 提供体网格的识别,主要可以实现网格转化及后处理,多面体网格 点列 面列 体列 边界网格(元面网格列) 要保证有序,元网格和元面网格 此两类提供了网格特拓扑和几何信息 几何

11、 体中心 面中心 体体积 面面积 边界长 拓扑信息 围绕体的面 体-体 点-面 支持网格运动,拓扑改变,2时间描述,控制时间和迭代次数 控制数据库读写 Time类为顶层类 时间记录 起始时间 结束时间 时间步长 CPU时间 经历时间 处理物体注册功能 I/O注册 Root和case路径 读写控制、格式及精度,2.3、张量运算,1、张量基础,矢量和张量的运算 采用笛卡尔坐标描述 采用自动的扩展到n阶的张量运算,三维, 现为二阶 使用模板,2、实施,模板的使用,可以拓展到complex VectorSpace解决通用性 类型的自动演绎(typname功能) 运算符重载 分量采用枚举类,不用列举多个

12、函数名 包含维数和阶数信息,2.4 场及场的代数,1. 场对象,张量列+运算的再实施 场的场,2.边界条件:面网格场,不光是数,包含了行为信息,如本值和梯度值 实时读取 虚界面 虚函数界面 继承与面网格场类 可定制 与特性和功能相关,与并行,3.单位,单位一致可运算 单位检查 自动单位运算(嵌于场),4、几何场,必要条件 值和边界条件 网格 值在几何下的关系 内部场和边界场分离 如此 对mesh的引用 内场 边界场-场的场:含边界几何、访问内场、边界条件 由于面场为离散服务,模板处理不同类型 单位 几何场为一完整的独立单元 为其注册入数据库 继承于IOobject,读写处理,3、矩阵支持,ld

13、uMatrix类 矢量稀疏矩阵 对角线,上三角和下三角分别存储 lduAddressing类地址索引,1、稀疏矩阵,具有基本的矩阵代数 M+M S*M 低松弛因子 矩阵矢量乘,矩阵结构的识别和求解器的选择 只有对角线 对称性矩阵 非对称性矩阵,2、线性方程求解器,继承于lduMatrix:solver 实施了迭代求解器 ICCG Bi-CG AMG 通过C指针优化 并行化通过lduCoupledInterface类,升级矩阵矢量乘,3、有限体积矩阵,对矢量和张量采用分离求解 储存b 处理边界条件 实施FV相关的操作 H(),4、偏微分方程表达,高层机制 网格代表空间 时间代表进展和迭代 带有单

14、位和边界条件的几何场 微积分类 矩阵支持、储存及吸收处理 线性方程求解器 方法类,转化算子为矩阵,处理方程 方程离散现在能通过算子的复合操作 最终体现为对矩阵的贡献 单位检查,单元离散,网格支持,并行化都在底层完成,与方程看似无关 离散受表控制 如此,其能解决一大类计算力学问题。,5、物理模型,当前的机理足够写出复杂的物理模型 但不方便,如湍流模型等使流动求解器复杂化 模型可实时选择 不是写大通用的湍流问题可执行程序 而是要分装这些模型,1、方程表达,2、物理模型相互作用,数值模拟软件的复杂性多数在于模型与模型的相互作用 如:动量方程和湍流模型 动量方程需要雷诺应力和湍流粘度 湍流方程需要速度场合应力信息 湍流不同,结果不同 还有如非牛顿粘性模型,矩阵的相互作用等,3、模型库,将同一功能性组成库 模型对模型作用=实现共同的接口(标志) 实时选择(模型、离散、求解器选择方面),4、模型-模型作用,最好避免直接相互作用,使用虚基类代替 有助于简化作用矩阵,分层处理,但要注意有效性,小组未来研讨的计划,湍流实现 动网格,特别是其编程结构 自动网格划分结构(网格划分)、 网格自适应 基础库的C+编程技巧的分析 代数方程组求解技术 算法的优化技术 细节问题将分步进行研讨 欢迎大家在QQ群上上传自己成果,我们会编辑成电子期刊发布。,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号