找回密码
 注册
查看: 3690|回复: 1

[转贴]一起看看OpenFOAM-1.6中的pisoFoam

[复制链接]
发表于 2009-8-18 19:48:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
OpenFOAM-1.6在求解器方面做了较大的调整,很多以前的求解器在新版本都合到了一起,比如湍流求解器turbFoam和oodles就合成了新的pisoFoam,并新出了一个pimpleFoam(该求解器同样能够对层流、雷诺时均流、大涡适应,只是压力速度耦合的算法采用了simple+piso的混合算法,该算法以后在说明)。现在我们一起看看这个pisoFoam
pisoFoam的程序架构和以前求解器没有什么区别,这里不再累述。下面通过比较OpenFOAM-1.5里面的turbFoam和本求解器来说明他们的差别。如果对turbFoam不明白,清参看本站博文:“OpenFOAM中的不可压缩湍流流动求解器turbFoam的说明”和“OpenFOAM中雷诺时均湍流求解器turbFoam使用”。 闲言少序。

差别一
在createFields.H中主要差别在湍流模型的创建上,在turbFoam中,采用
autoPtr<incompressible::RASModel>turbulence
(
       incompressible::RASModel::New(U, phi, laminarTransport)
);
在pisoFoam中采用
autoPtr<incompressible::turbulenceModel>turbulence
(
       incompressible::turbulenceModel::New(U, phi,laminarTransport)
);
比较两个可以发现,前面创建的是RASModel动态对象指针,而后面创建的是turbulenceModel动态对象指针。前面只适合于雷诺时均模型求解流动,而后者适合于雷诺时均,层流,大涡。求解器的功能在pisoFoam中扩充了。这主要得益于OpenFOAM-1.6对湍流的架构进行了调整。以前版本雷诺时均和大涡他们是两个独立的库,而新版本将两个库合到了一起,采用一共同的父类,也就是你看到的turbulenceModel类。这样就可以用统一的父类来在程序书写程序,而通过New来动态创建autoPtr指向的动态对象。 autoPtr的使用,请参看本站博文“OpenFOAM中的智能指针autoPtr”。

差别二:
求解循环
在turbFoam中
    for(runTime++; !runTime.end(); runTime++)
在pisoFoam中
while (runTime.loop())
前面那个for循环,后面采用的是while循环。该while循环和以前的不太一样,loop是openfoam-1.6的一个新特性。在loop中其实做了两件事,一是判定是否在run,如果run的话,将当前的runTime推移。 也就是下面两句的合集
while(runTime.run())
runTime++;
因此在使用loop的时候,下面没有runTime++的。这样可以避免runTime++而造成的死循环,但是用了loop就不要加了。
前面for循环不必说了,以前的求解器都说过了。

其他都和turbFoam的一样,请参看前面提到的turbFoam的相关说明。

转自OpenFOAM研究:http://blog.sina.com.cn/openfoamresearch
发表于 2009-9-25 10:26:33 | 显示全部楼层

我还纳闷呢,找不到turbFoam
原来整合了 呵呵
谢谢了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表