|
发表于 2009-7-31 08:29:41
|
显示全部楼层
基本上读完了foam部分,基本上还是peric书中和jasak论文的东西。真真核心的部分看懂就可以了。
foam的缺点是太c++,每个类都是构造、析构、拷贝等,代码太长,容易bug。本来oop就是希望 类的层次不要太多,3个级别的类已经容易出错了,但foam完全不理这套,而且各种类互相关联。
我觉得比较重要的部分有:
多面体网格:数据格式,这个很重要,如果初次进入非结构化的,需要一个过程。
网格检查:
梯度计算: gauss leastsqure等
snGrad计算:较简单
线形代数求解器:比较难懂,不是CSR格式,类似CSR格式。非代数多重网格的求解器(iccg,cgstab,gmres等,已经看懂,转化为fortran测试过。但代数多重网格求解器,还没看懂。
fvc:容易看懂,处理一些进源项的部分
fvm:有点难度,处理进系数矩阵和源项
sufaceInterpolate:对流项格式,比较重要,但不难。
边界:有些我还没看懂。但处理方法值得借鉴。
希望有更多的人,剖析openfoam。
我不同意有人说 openfoam的算法落伍的说法,在什么无网格方法,格子Boltzmann方法等方法还没完全成为主流的时候,说这些不适宜。
openfaom的核心是 以有限体积法离散 微分方法的 各类项的方法(时间 对流 扩散 甚至叉乘) 的方法, 顶层的算法 如SIMPLE, PISO是可
用户构造的,也不是这是针对 不可压的 ,完全可在 顶层构造可压的求解器,很大例子已证实。
上层的应用:
需要理解:openfoam的符号操作,实际上就是对 系数矩阵在操作。
如流动、湍流。看了一下,看懂底层的,上层的已经不是问题了。 |
|