在openfoam对边界层的处理,为什么仅仅修正边界,而不是跟边界相邻的那一层网格?
-
比如说,对nut的边界问题,调用的是nutWallFunctionFvPatchScalarField.h
void nutWallFunctionFvPatchScalarField::updateCoeffs() { if (updated()) { return; } operator==(calcNut()); fixedValueFvPatchScalarField::updateCoeffs(); }
其中
operator==(calcNut());
仅仅更新了fvPatch相对应的边界boundaryField,而不是跟边界相邻的那一层网格patchInternalField。 请问这样的处理是一种折衷吗? -
@yuan_neu
我觉得是更新对用壁面网格体心的值,对于固定值边界类型边界采用固定值边界。 -
@yuan_neu 由于不同湍流模型的nut计算方法不一样,因此OpenFOAM把对nut internalField的更新放在了各湍流模型的具体代码实现里面。
可参考kOmegaSST模型的相关代码:
src/TurbulenceModels/turbulenceModels/Base/kOmegaSST/kOmegaSSTBase.Ctemplate<class TurbulenceModel, class BasicTurbulenceModel> void kOmegaSST<TurbulenceModel, BasicTurbulenceModel>::correctNut ( const volScalarField& S2, const volScalarField& F2 ) { this->nut_ = a1_*k_/max(a1_*omega_, b1_*F2*sqrt(S2)); this->nut_.correctBoundaryConditions(); fv::options::New(this->mesh_).correct(this->nut_); BasicTurbulenceModel::correctNut(); }
计算完nut后再调用
this->nut_.correctBoundaryConditions()
更新边界条件。 -
不是折衷,是壁面的值不是由插值得出的。
插值只是对内部场执行。你说的那个第一层网格上面的内部场里的面上的值,是插值得出的。
边界值,是边界值。有的边界值的计算需要使用内部场的信息,有的是你自己定的。 -
边界条件不直接修改patchInternalField,而是通过改变离散后的系数矩阵起作用。