请教一下标准k-epsilon湍流模型中的epsilon_()与k_()与epsilon_和k_有什么区别
-
各位大佬,
标准k-epsilon模型中的epsEqn:// Dissipation equation tmp<fvScalarMatrix> epsEqn ( fvm::ddt(alpha, rho, epsilon_) + fvm::div(alphaRhoPhi, epsilon_) - fvm::laplacian(alpha*rho*DepsilonEff(), epsilon_) == C1_*alpha()*rho()*G*epsilon_()/k_() - fvm::SuSp(((2.0/3.0)*C1_ - C3_)*alpha()*rho()*divU, epsilon_) - fvm::Sp(C2_*alpha()*rho()*epsilon_()/k_(), epsilon_) + epsilonSource() + fvModels.source(alpha, rho, epsilon_) );
请问epsilon_()与k_()中的操作符()返回的是上一个迭代步/时间步的值吗?
另外,我想像LaunderSharmaKE一样改变这一项的系数
- fvm::Sp(C2_*alpha()*rho()*epsilon_()/k_(), epsilon_)
参考LaunderSharmaKE中定义系数的代码:
//LaunderSharmaKE.H声明 tmp<volScalarField> f2() const; //LaunderSharmaKE.C定义 template<class BasicMomentumTransportModel> tmp<volScalarField> LaunderSharmaKE<BasicMomentumTransportModel>::f2() const { return scalar(1) - 0.3*exp(-min(sqr(sqr(k_)/(this->nu()*epsilon_)), scalar(50.0))); }
参考LaunderSharmaKE定义的epsilonEqn:
tmp<fvScalarMatrix> epsEqn ( fvm::ddt(alpha, rho, epsilon_) + fvm::div(alphaRhoPhi, epsilon_) - fvm::laplacian(alpha*rho*DepsilonEff(), epsilon_) == C1_*alpha*rho*G*epsilon_/k_ - fvm::SuSp(((2.0/3.0)*C1_ - C3_)*alpha*rho*divU, epsilon_) - fvm::Sp(C2_*f2()*alpha*rho*epsilon_/k_, epsilon_) + alpha*rho*E + epsilonSource() + fvModels.source(alpha, rho, epsilon_) );
LaunderSharmaKE中直接使用的是epsilon_,k_,不加括号表示的是下一个迭代步的待求值吗?
如果在标准k-epsilon中定义一模一样的函数
f2()
,并加到eqsEqn
中,只有将标准k-epsilon中的epsilon_(), k_()
改为epsilon_, k_
,编译才能通过,否则会因为无法匹配Sp函数报错:error: no matching function for call to ‘Sp(Foam::tmp<Foam::Field<double> >, Foam::volScalarField&)’ 418 | - fvm::Sp(C2_*f2()*alpha()*rho()*epsilon_()/k_(), epsilon_)
那么我将
epsilon_()/k_()
直接改为epsilon_/k_
会影响结果吗?或者有没有其他解决方法
谢谢各位大佬!!
-
epsilon,k
在声明时:volScalarField epsilon_; volScalarField k_;
这俩变量类型都是
volScalarField
,volScalarField
就包含internalField
和boundaryField
,epsilon_()
和k_()
以及rho()
和alpha()
中的operator()
返回internalField
,类型相当于volScalarField::Internal
目的:减少并行通信,从而降低并行计算的计算成本。(只有boundaryField才需要通信)
注意:
epsilon_()
和k_()
以及rho()
和alpha()
使用时仅在方程右边构造源项 -
https://www.cfd-online.com/Forums/openfoam-programming-development/224302-difference-between-rho-rho_-rho.html
@李东岳 李老师,这里。修正下:大部分通信发生在boundaryField
另外,两个湍流模型里的divU
和G
的定义也不一样://standard k-epsilon volScalarField::Internal divU ( fvc::div(fvc::absolute(this->phi(), U))() ); tmp<volTensorField> tgradU = fvc::grad(U); volScalarField::Internal G ( this->GName(), nut()*(dev(twoSymm(tgradU().v())) && tgradU().v()) ); //LaunderSharmaKE volScalarField divU(fvc::div(fvc::absolute(this->phi(), U))); tmp<volTensorField> tgradU = fvc::grad(U); volScalarField G(this->GName(), nut*(tgradU() && dev(twoSymm(tgradU()))));
可以看到,标准模型里都是
InternalField