植入拉格朗日粒子的Ueqn中需不需要加phicForces?
-
各位大佬好,
本人想在interFoam中植入拉格朗日粒子,通过以下这个教程来学习一下
http://www.tfd.chalmers.se/~hani/kurser/OS_CFD_2013/AlejandroLopez/LPT_for_erosionModelling_report.pdf但是在这个教程里,对U.eqn的修改,只是添加了kinematicCloud.SU(U)这一项,
而在DPMFoam里,还添加了phicForces这一项,并且这一项会对P.eqn进行影响。
surfaceScalarField phicForces ( fvc::flux(rAUc*cloudVolSUSu/rhoc) + rAUcf*(g & mesh.Sf()) );
查了一些资料,是不是kinematicCloud.SU(U)指的是drag force,而phicForces包含了gravitational force,lift force和其他力?还有就是这个cloudVolSUSu指的是什么?
希望有大佬可以解答一下!
-
你指的SU应该是动量方程里面的源项,就是2-way coupling中的颗粒对流场的影响,那边是包涵了所有的颗粒对流场的影响的,具体你得去code里面查到底是怎么算的。
如果你考虑的是颗粒受力的话,你就得去submodel里面看了。
植入颗粒的话,下面这个教程可能说的更清晰
https://www.foamacademy.com/wp-content/uploads/2018/03/particles_slides.pdf至于你说的phicForces 因为没做DPMFoam 所以不知道具体是什么,不过看起来这个好像用在很dense的颗粒模拟里面吧
-
@oitocfd 是的大佬,就是在interFoam里加了拉格朗日粒子,two-way coupling,但是我不知道DPMFoam里的这个phicForces是干啥的,与cloudVolSUSu有关,其定义如下
fvVectorMatrix cloudSU(kinematicCloud.SU(Uc)); volVectorField cloudVolSUSu ( IOobject ( "cloudVolSUSu", runTime.timeName(), mesh ), mesh, dimensionedVector(cloudSU.dimensions()/dimVolume, Zero), zeroGradientFvPatchVectorField::typeName ); cloudVolSUSu.primitiveFieldRef() = -cloudSU.source()/mesh.V(); cloudVolSUSu.correctBoundaryConditions(); cloudSU.source() = Zero;
可见cloudVolSUSu是定义的cloudSU里的source项,而在U方程里加的cloudSU.source()定义为了0. 意思是cloudSU的source项和和非source项是分开算的。所以我不知道这个source()是什么?植入拉格朗日粒子,phicForces到底需不需要加?希望大佬可以解惑一下
这里的cloudSU在KinematicCloudI.H里定义如下:
template<class CloudType> inline Foam::tmp<Foam::fvVectorMatrix> Foam::KinematicCloud<CloudType>::SU(volVectorField& U, bool incompressible) const { if (debug) { Pout<< "UTrans min/max = " << min(UTrans()).value() << ", " << max(UTrans()).value() << nl << "UCoeff min/max = " << min(UCoeff()).value() << ", " << max(UCoeff()).value() << endl; } dimensionSet dim(dimForce); if (incompressible) { dim.reset(dimForce/dimDensity); } if (solution_.coupled()) { if (solution_.semiImplicit("U")) { volScalarField::Internal Vdt(mesh_.V()*this->db().time().deltaT()); if (incompressible) { Vdt.dimensions() *= dimDensity; } return UTrans()/Vdt - fvm::Sp(UCoeff()/Vdt, U) + UCoeff()/Vdt*U; } else { tmp<fvVectorMatrix> tfvm(new fvVectorMatrix(U, dim)); fvVectorMatrix& fvm = tfvm.ref(); fvm.source() = -UTrans()/(this->db().time().deltaT()); return tfvm; } } return tmp<fvVectorMatrix>::New(U, dim); }