有关OpenFOAM中的双流体模型
-
最近测试了几个数据,semi-conservative以及fully-conservative形式的方程求解的过程中,至少对于实验室规模的鼓泡床数据都还可以哈。
对于PEA,建议看Alberto的这个文章,相对更容易,你知道一般原始文章都比较晦涩:sunglasses: :
Passalacqua A, Fox R O. Implementation of an iterative solution procedure for multi-fluid gas–particle flow models on unstructured grids[J]. Powder technology, 2011, 213(1): 174-187.
-
一年过去了,好久没来,上次做这个验证还在2017年3月份...哈哈
目前并没有群体平衡模型,官方正在开发,看Henry造化了…
OpenFOAM已经发布。植入的是离散法。我的前雇主单位HZDR贡献的代码。目前还在测试中。
挖坟更新下,关于这个动量插值方法,理论上,来源于动量方程的源项处理。即将CFD动量方程中的力区分为体积力和表面力。
体积力
若按照体积力的方式处理。例如
twoPhaseEulerFoam
双流体模型中原本的曳力:UbEqn = ( (scalar(1) + Cvm*rhob*alpha/rhob)* ( fvm::ddt(Ub) + fvm::div(phib, Ub, "div(phib,Ub)") - fvm::Sp(fvc::div(phib), Ub) ) - fvm::laplacian(nuEffb, Ub) + fvc::div(Rcb) + fvm::div(phiRb, Ub, "div(phib,Ub)") - fvm::Sp(fvc::div(phiRb), Ub) + (fvc::grad(beta)/(fvc::average(beta) + scalar(0.001)) & Rcb) == - fvm::Sp(alpha/rhob*K, Ub)//按照体积力处理 + alpha/rhob*(liftCoeff + Cvm*rhob*DDtUa)//按照体积力处理 );
这种方式是一种非守恒的处理方式,在这种情况下,网格正交性、三个方向的导数均会影响计算结果。大量的案例均证实了
twoPhaseEulerFoam
双流体模型对非正交网格的支持性较差。同时,这种非守恒的处理方式,会引起非守恒误差,虽然网格分辨率越高,误差越小。但对于双流体模型,网格还不能的任意小(双流体模型网格限制性)表面力
另一种方式是按照表面力来处理,比如不可压缩流动量方程中的压力,代码为
solve(UEqn == -fvc::grad(p));//按照表面力计算fvc::grad(p)
VOF中的表面张力:
solve ( UEqn == fvc::reconstruct ( ( fvc::interpolate(interface.sigmaK())*fvc::snGrad(alpha1) //公式(23)第4项,按照表面力计算fvc::snGrad(alpha1) - ghf*fvc::snGrad(rho) //公式(23)第5项,同 - fvc::snGrad(p_rgh) //公式(23)第6项,同 ) * mesh.magSf() ) );
这是一种按照表面力的方式的直接植入。在有限体积法法中,力通常按照表面力的方式来处理(守恒的)。同时,需要注意压力棋盘分布的处理。
在新版的
twoPhaseEulerFoam
双流体模型求解器中,曳力、升力等均按照表面力的方式来处理。同时保留了体积力的处理方式,用户可进行选择。个人针对这个新算法做了一些测试,其能很好的保证无震荡,但是和实验值比起来误差非常大: http://www.cfd-china.com/topic/956 个人感觉是为了防止震荡,速度方程的处理过于激进,有待后续研究。各种力的处理方式,实际上都是求解的同一个方程,但是结果截然不同,可能这就是CFD算法的奥妙吧!!