Simple, Piso, Icofoam等不可压求解器
来源:互联网 发布:日本校园霸凌 知乎 编辑:程序博客网 时间:2024/06/08 18:45
首先三者求解的方程略有不同
icofoam中的方程:
而simplefoam中无时间项。
Simple 算法
while (simple.loop()){ *** solve(UEqn() == -fvc::grad(p)); surfaceScalarField phiHbyA("phiHbyA",fvc::interpolate(HbyA) & mesh.Sf()); //通量,用来构建压力方程 while(simple.correctNonOrthogonal()) { fvScalarMatrix pEqn ( fvm::laplacian(rAU, p) == fvc::div(phiHbyA) ); pEqn.setReference(pRefCell, pRefValue); pEqn.solve(); if (simple.finalNonOrthogonalIter()) { phi = phiHbyA - pEqn.flux(); //非正交修正结束后,重新计算通量,此时应该满足连续方程 } } // Explicitly relax pressure for momentum corrector p.relax(); //这个是与piso重要区别之一 // Momentum corrector U = HbyA - rAU*fvc::grad(p); //修正速度, U.correctBoundaryConditions(); ***}
PISO算法
PISO算法求解瞬态问题,需要时间信息,受时间步影响。
其主要循环如下:
while (runTime.loop()){ *** if (momentumPredictor) { solve(UEqn == -fvc::grad(p)); } // --- PISO loop for (int corr=0; corr<nCorr; corr++) { *** surfaceScalarField phiHbyA ( "phiHbyA", (fvc::interpolate(HbyA) & mesh.Sf()) + fvc::interpolate(rAU)*fvc::ddtCorr(U, phi) ); for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) { fvScalarMatrix pEqn ( fvm::laplacian(rAU, p) == fvc::div(phiHbyA) ); pEqn.setReference(pRefCell, pRefValue); if (corr == nCorr-1 && nonOrth == nNonOrthCorr) { pEqn.solve(mesh.solver("pFinal")); //这是什么作用?在piso修正过多时提前退出? } else { pEqn.solve(); } if (nonOrth == nNonOrthCorr) { phi = phiHbyA - pEqn.flux(); } } U = HbyA - rAU*fvc::grad(p); U.correctBoundaryConditions(); } }
可以看出没有用到压力松弛。压力松弛和瞬态的关系?理论还不太清楚
icofoam
icofoam貌似用的是pisofoam,两者在压力求解的时候有细微差别,前者没有用到pFinal,实际有差别吗?
Pimple
结合了SIMPLE和PISO,可以用大时间步求解瞬态问题,不至于发散。
主要循环如下:
while (runTime.run()) { while (pimple.loop()) { #include "UEqn.H" while (pimple.correct()) { #include "pEqn.H" } if (pimple.turbCorr()) { turbulence->correct(); } } }
在每个时间都内都有一个pimple循环,而在pEqn里面,UEan的rAU没有变化,即压力方程的系数没有变,但是phiHbyA会更新,因为速度也更新了。
Pimple的具体的设置可参考[1].
Refenrence
[1] http://www.cfd-online.com/Forums/blogs/tobi/2489-all-about-pimple-algorithm-part-i.html
[2] http://www.cfd-online.com/Forums/blogs/tobi/2490-all-about-pimple-algorithm-part-ii.html
[3] http://www.dyfluid.com/icoFoam.html
疑问
虽然大体上知道了这些求解器的区别,但是对于其理论,即应用缺乏了解。
如在PISO内循环中,速度长多次更新,这个和时间推进中的更新是什么关系?
0 0
- Simple, Piso, Icofoam等不可压求解器
- 不可表示数求解分析
- Codeforces 570B Simple Game 概率求解,简单数学思维
- 计算不可压缩流体- NS方程求解算法
- 智能算法求解器,内含NSGAII,PSO,SMPSO等智能算法
- sqlserver查询语句优化,求解在线等。。。。
- simple
- Simple
- Simple Java—Strings and Arrays(三)为什么String被设计成了不可变型
- POJ3468 A Simple Problem with Integers 线段树求解区间和
- volatile 等C++中固有的不可移植特性
- TextView ImageView 等控件bg透明情况下不可点
- 利用aws访问“非死不可”等网站
- 如何为页面增加保护,不可Copy,看源代码等
- HTML中设置input等文本框为不可操作
- 求解两个等长升序序列的中位数
- Simulink的求解器
- 一款矩阵求解器
- pregel 与 spark graphX 的 pregel api
- 主外键关联取出主键时报错[org.hibernate.LazyInitializationException] could not initialize proxy - no Session
- FFmpeg:'UINT64_C' was not declared in ths scope
- sdut 2886 Weighted Median 结构体
- Spark组件之SparkR学习3--使用spark-submit向集群提交R代码文件data-manipulation.R
- Simple, Piso, Icofoam等不可压求解器
- 利用session做国际化引起的old区内存爆满及修复方法
- verilog过程块与赋值
- ABAP 动态生成内表的几种方法
- ZOJ 3876--May Day Holiday
- 《sort命令的k选项大讨论》-linux命令五分钟系列之二十七
- 趣味整数-黑洞数
- 基于Xilinx的Synthesize
- .NET中获取指定文件夹下所有文件的全路径