fvSchemes 到底要不要 corrected?一个惨痛教训

OpenFOAM 的 fvSchemes 字典定义了离散方法,其中 laplacianSchemes 和 snGradSchemes 都要填写一个和网格正交性相关的字段,具体介绍用户手册里写得很详细了,OpenFOAM v9 User Guide。这字段有以下几种取值:

    default         corrected;
    default         limited corrected 0.33;
    default         limited corrected 0.5;
    default         orthogonal;
    default         uncorrected;

其中,corrected 表示网格的非正交性被完全修正,而 uncorrected 表示网格的非正交性完全没有修正,0.33 和 0.5表示部分修正。官方的 tutorial 里很多算例网格简单,正交性也非常好,所以用了 corrected。手册给了一个网格非正交性和字段取值的大致关系,uncorrected 和 orthogonal 仅适用于非正交性非常低的网格(最大5°),一般来说推荐使用 corrected,但如果最大非正交性超过70°,或许需要使用 limited 选项,而非正交性超过80°就很难收敛了,也就是说要重画网格。看到这里,相信大家和我一样,觉得 corrected 简直是人见人爱花见花开的小可爱,可我最近就在这里翻了船。

小编最近计算一个重力驱动的孔口出流,几何简单,网格用icem的o-block做了全六面体网格,非正交性也就40°,简直就是模范网格。这样的模范网格必须要配上corrected模范算法,我甚至都没有考虑其他选项。同时,fvSolution里的nNonOrthogonalCorrectors也设置为1。

用interFoam计算到水流到达边界附近就发散,我以为是边界条件设置原因,大概换了10种边界条件组合,咋咋都不行。想着不如调下离散方法,精度降一降,就决定把corrected改成limited corrected 0.5,结果奇迹发生了,原本压强50次迭代都达不到5e-9的收敛判据,改了之后不超过10次迭代就收敛。原来用户手册里只说corrected精度高,却没说这么费时间,害得我把多少花前月下的时间浪费在了显示器前。

最后总结一下,fvSchemes 里使用 corrected,精度最高,最难收敛,最费机时,最不稳定,退而求其次选择limited corrected 0.5也不错。要想了解更多底层知识,可参考以下文章

Hasenoch:面法向梯度的非正交修正理论和OpenFOAM源码分析

Hasenoch:细谈Simple循环中的correctNonOrthogonal底层逻辑

常恭

作者: 常恭

略懂 OpenFOAM

发表评论