OpenFOAM中动量方程扩散项的问题
- 
							
							
							
							
							
							
首先贴出动量方程,这张文章的截图引用自冶金领域公认SCI(MMTB)   式中的有效黏度(effective viscosity)为层流黏度与湍流黏度之和,我平常对湍流黏度的理解即为论文中湍流黏度的公式定义。但是在openfoam中UEqn.H文件中对此项的编写为turbulence->divDevRhoReff(rho, U),对此我不是很理解,此项具体返回的是怎样的表达式呢? 
 在OpenFOAM的算例constant文件中设置了层流黏度,湍流黏度的边界是在0文件中的nut中设置的吗?
 nut与turbulence->divDevRhoReff(rho, U)有怎样的联系吗?
 对于turbulence->divDevRhoReff(rho, U)这一项的理解我也查阅了一下,大家可以参考以下的链接中Tobi的解释,他的解释中表达式和我图片中贴的是一回事吗?
 网站链接如下:https://www.cfd-online.com/Forums/openfoam-solving/58214-calculating-divdevreff.html (可能要使劲往下翻一翻  ) )
 问题有点多,我可能是个问题少年     
- 
							
							
							
							
							
							
@dingcy 在 OpenFOAM中动量方程扩散项的问题 中说: turbulence->divDevRhoReff(rho, U),对此我不是很理解, 长答案turbulence是一个指针,divDevRhoReff(rho, U)是函数名称。举例,如果你用的是simpleFoam,其在createFields.H中创建了autoPtr<incompressible::turbulenceModel> turbulence ( incompressible::turbulenceModel::New(U, phi, laminarTransport) );其中``为OpenFOAM的智能指针,你可以理解为指针。这一句表示创建名称为 turbulence的incompressible::turbulenceModel类型的智能指针autoPtr。对于 incompressible::turbulenceModel,incompressible表示C++中类的名称空间,turbulenceModel在文件turbulentTransportModel.H中被改名,实际上他就是IncompressibleTurbulenceModel<transportModel>。IncompressibleTurbulenceModel<transportModel>在文件IncompressibleTurbulenceModel.H,其为一个类模板。在求解器中,simpleFoam调用了 turbulence->divDevReff(U)其对应IncompressibleTurbulenceModel.H文件中的函数virtual tmp<fvVectorMatrix> divDevReff(volVectorField& U) const;其返回 divDevRhoReff(U);同时, IncompressibleTurbulenceModel继承了incompressibleTurbulenceModel,incompressibleTurbulenceModel是一个虚基类,不能创建具体的类型,在它基础上,可以创建RAS, LES等类型。举例,在kEpsilon这个具体的类型里面,其建立在eddyViscosity类型上,eddyViscosity类型建立在linearViscousStress类型上,在linearViscousStress.C文件里,定义了template<class BasicTurbulenceModel> Foam::tmp<Foam::fvVectorMatrix> Foam::linearViscousStress<BasicTurbulenceModel>::divDevRhoReff ( 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) ); }此项具体返回的是怎样的表达式呢? 短答案上面代码的最终形式就是这个表达式。 式中的有效黏度(effective viscosity)为层流黏度与湍流黏度之和, 见下面的代码,正是 nut的定义,二者之和//- Return the effective viscosity virtual tmp<volScalarField> nuEff() const { return tmp<volScalarField> ( new volScalarField ( IOobject::groupName("nuEff", this->alphaRhoPhi_.group()), this->nut() + this->nu() ) ); }湍流黏度的边界是在0文件中的nut中设置的吗? 是的 nut与turbulence->divDevRhoReff(rho, U)有怎样的联系吗? turbulence->divDevRhoReff(rho, U)见上文描述,nut只是湍流粘度。对于turbulence->divDevRhoReff(rho, U)这一项的理解我也查阅了一下,大家可以参考以下的链接中Tobi的解释,他的解释中表达式和我图片中贴的是一回事吗? 
 网站链接如下:有点长,暂时先不看了。。不过Tobi这个人玩CFD理论很多年了,他贴出来的应该没问题。 对了,OpenFOAM的Turbulence类型变得越来越复杂,但是目前还不是最复杂的,其中类的调用纷杂交错,看起来非常混乱。如果要学习,建议从粘度模型开始学习。湍流代码放后一些。 
 
			