DPMFoam速度方程代码与实际物理方程如何对应?
-
最近看DPMFoam的求解器源代码,速度方程的代码一直没看懂,速度方程文件中的代码如下
fvVectorMatrix UcEqn ( fvm::ddt(alphac, Uc) + fvm::div(alphaPhic, Uc) - fvm::Sp(fvc::ddt(alphac) + fvc::div(alphaPhic), Uc) + continuousPhaseTurbulence->divDevTau(Uc) == (1.0/rhoc)*cloudSU ); UcEqn.relax(); fvOptions.constrain(UcEqn); volScalarField rAUc(1.0/UcEqn.A()); surfaceScalarField rAUcf("Dp", fvc::interpolate(rAUc)); surfaceScalarField phicForces ( fvc::flux(rAUc*cloudVolSUSu/rhoc) + rAUcf*(g & mesh.Sf()) ); if (pimple.momentumPredictor()) { solve ( UcEqn == fvc::reconstruct ( phicForces/rAUcf - fvc::snGrad(p)*mesh.magSf() ) ); fvOptions.correct(Uc); }
而实际的物理方程为
问题总结如下
1、代码
fvm::ddt(alphac, Uc) + fvm::div(alphaPhic, Uc)
表示物理方程的左边两项好像比较清晰,但是代码
- fvm::Sp(fvc::ddt(alphac) + fvc::div(alphaPhic), Uc)
表示的意义有点难以理解。其中
fvc::ddt(alphac) + fvc::div(alphaPhic)
貌似恰好是连续性方程?
2、应力项代码
+ continuousPhaseTurbulence->divDevTau(Uc)
为何与孔隙率alphac无关,好像和实际物理方程无法对应(左边第三项)?
求解!谢谢。
-
谢谢@东岳 老师,但我依旧有两个后续问题想请教一下:
1、既然- fvm::Sp(fvc::ddt(alphac) + fvc::div(alphaPhic), Uc)
表示连续性方程和速度的乘积。
从物理意义上来说,连续性方程恒为0,那么将连续性方程放到速度方程里求解的意义是什么?
是为了更好的数值稳定性吗?还是说为了修正速度值?
2、我在湍流模型里确实找到了divDevTau的代码,如下template<class BasicMomentumTransportModel> Foam::tmp<Foam::fvVectorMatrix> Foam::linearViscousStress<BasicMomentumTransportModel>::divDevTau ( const volScalarField& rho, volVectorField& U ) const { return ( - fvc::div((this->alpha_*rho*this->nuEff())*dev2(T(fvc::grad(U)))) - fvm::laplacian(this->alpha_*rho*this->nuEff(), U) ); }
代码里面确实包含了密度rho和孔隙率alpha。由于我发现由于是不可压缩流体,速度方程代码两端都是除以密度rho表示的,然而应力求解出来却没有除以rho,这是不是与物理方程相违背
是不是速度方程应该改为
fvm::ddt(alphac, Uc) + fvm::div(alphaPhic, Uc) - fvm::Sp(fvc::ddt(alphac) + fvc::div(alphaPhic), Uc) + (1.0/rhoc)*continuousPhaseTurbulence->divDevTau(Uc)//这一项除以密度rho == (1.0/rhoc)*cloudSU
比较正确?
-
奥第二个问题刚刚查代码搞清楚了,对于不可压缩流动的应力计算,密度都设为1了,所以速度方程代码的量纲没有问题。
-
@mechanicsdog 在 DPMFoam速度方程代码与实际物理方程如何对应? 中说:
从物理意义上来说,连续性方程恒为0,那么将连续性方程放到速度方程里求解的意义是什么?
是为了更好的数值稳定性吗?还是说为了修正速度值?更好的有界性。在顺泰迭代的时候,时间步长内是不一定收敛的。有的时候可能会越界。主要起到这个作用。
-
十分感谢!@东岳