在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.C

    template<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,而是通过改变离散后的系数矩阵起作用。


登录后回复
 

与 CFD中文网 的连接断开,我们正在尝试重连,请耐心等待