CFD中文网

    CFD中文网

    • 登录
    • 搜索
    • 最新

    如何根据残差判断是否收敛?

    OpenFOAM
    5
    12
    7154
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • I
      Izumi 最后由 编辑

      我在使用buoyantSimpleFoam时,想要通过残差来判断是否收敛,得到如下的残差图,其中p_rgh在0.1左右就不变了,而k和epsilon也在0.001以上。
      为了减小残差,我调小了fvsolution中的tolerance和residualControl,另外也尝试了修改p_rgh的计算方法,但是都没有用,残差依旧如下图所示,请问这样收敛了吗?为什么残差这么大?谢谢!

      残差图:
      0_1512393903375_2017-12-04 21-21-48屏幕截图.png

      1 条回复 最后回复 回复 引用
      • 李东岳
        李东岳 管理员 最后由 编辑

        buoyantSimpleFoam是个稳态求解器,有的时候稳态求解器残差一直会下降不下去的。

        CFD高性能服务器 http://dyfluid.com/servers.html

        I 深 2 条回复 最后回复 回复 引用
        • I
          Izumi @李东岳 最后由 编辑

          @李东岳 谢谢!我在几个点上放了probe,确实变化不大,应该是收敛了。
          但是苏军伟在博客中提到:

          外残差: 对于方程f(x,t)=0在t_0时刻有收敛解x_0, 则f(x_0,t=t_0)=0; 当用t0时刻的结果代入到t1时刻的方程时,通常并不能满足方程,即 f(x_0, t = t_1) = r !=0; 这里的残差r称为外残差。
          内残差:在cfd计算中通常将方程转化为代数方程Ax=b;当得到某个解A*x_0-b = r1; 这里的r1 ->0时,认为Ax=b收敛。 这里的r1为内残差。
          对于稳态问题:只有当r->0时,才被认为收敛,也就是(x_1 - x_0)->0. 也就是我们在cfd计算中通常见到的那个残差,fluent及其pyFoam输出残差图就是这个r。r常被作为收敛判据。

          如果稳态问题只有r -> 0时才收敛,那么为什么buoyantSimpleFoam收敛时的残差还降不下去?

          1 条回复 最后回复 回复 引用
          • 夜
            夜阑烟寒 最后由 编辑

            你好,问一下您是用什么监测残差的,是新版本的foamMonitor吗,还是自己写的gnuplot脚本?

            I 1 条回复 最后回复 回复 引用
            • I
              Izumi @夜阑烟寒 最后由 编辑

              @夜阑烟寒 我用的是OpenFOAM 5自带的foamMonitor

              夜 2 条回复 最后回复 回复 引用
              • 夜
                夜阑烟寒 @Izumi 最后由 编辑

                @izumi 嗯谢谢啦,我用的是3.0.1的,所以找了个gnuplot脚本看残差,但是感觉显示的略有问题。

                1 条回复 最后回复 回复 引用
                • 夜
                  夜阑烟寒 @Izumi 最后由 编辑

                  @izumi 0_1516259759442_捕获.JPG
                  我用的也是基于simple算法的求解器,就是压力因为加了非正交修正,所以压力方程会被求解多次,然后脚本就把压力曲线化成了一个条带状曲线。所以我把压力残差去掉了

                  1 条回复 最后回复 回复 引用
                  • 李东岳
                    李东岳 管理员 最后由 编辑

                    如果稳态问题只有r -> 0时才收敛

                    我个人觉得有时候r不会趋向于0,会一直震荡

                    CFD高性能服务器 http://dyfluid.com/servers.html

                    I 1 条回复 最后回复 回复 引用
                    • 夜
                      夜阑烟寒 最后由 编辑

                      个人理解。其实对于稳态求解,残差曲线平了基本就收敛了,所有变量残差下降到tolerance是很难的,尤其对于压力方程,从log的输出也能看出,U、k、epsilon、omega方程的迭代次数和压力方程的迭代次数相比,一个时间步,压力方程需要更多的迭代次数,这是基于simple算法本身的特性决定的,压力泊松方程是双曲型方程,比较难求解。@李东岳 有不对地方,希望东岳老师纠正

                      1 条回复 最后回复 回复 引用
                      • I
                        Izumi @李东岳 最后由 编辑

                        @李东岳 看《Computational Methods for Fluid Dynamics》126页说:

                        根据经验内残差下降1到2个数量级就可以了,外残差则要下降3到5个数量级才行。

                        结合书中给的例子:

                        初值给0,初始误差大小和解相同,残差下降3到4个数量级,则误差可能下降到解的0.1%。

                        这样看来,如果初值给的好,外残差很可能降不下来,r就不能趋向于0了

                        1 条回复 最后回复 回复 引用
                        • 深
                          深海矿工 @李东岳 最后由 编辑

                          @东岳 那是下降呢?还是不下降呢?

                          1 条回复 最后回复 回复 引用
                          • S
                            Samuel-Tu 最后由 编辑

                            看论文发现有作者说fluent稳态计算残差降到1e-7则认为收敛停止计算,但是我用of的simpleFoam的时候发现残差根本降不到那么低,连降到1e-6都已经是极限了。我都不敢在论文里写残差判断标准了,一般你们怎么说收敛标准呢

                            1 条回复 最后回复 回复 引用
                            • First post
                              Last post