有关p_rgh收敛的问题



  • 大家好,有关p_rgh我有一个疑问:
    在使用PIMPLE算法进行计算的后输出残差曲线会出现两个p_rgh(p_rgh0,p_rgh1),我查阅资料了解到

    0_1522461089770_be804f47-631f-4496-88dd-eb2eedb5db75-image.png

    是因为在图中nCorrectors中设置的,网上有人说是p_rgh循环了两次的原因。

    我的问题是:假如我将nCorrectors的数值改为3,在计算后输出残差曲线发现p_rgh0,p_rgh1的收敛的标准比较低在0.1多一点,而p_rgh的收敛数值就会达到1e-5. 这样的压力能算做收敛吗?

    0_1522461709991_7b66483d-6dca-4f23-80d7-c3a978b4fb59-image.png

    这张图是我计算后输出的残差曲线,当nCorrectors的数值写为2时,在0.1那收敛,是不是收敛标准太低了呀,不能算作收敛呀。
    第一次在论坛发帖,希望大家能理解我的疑问,谢谢大家啦。



  • 第一次发帖,排版有点乱,抱歉啦


  • 管理员

    一言无法蔽之。

    你这个图看起来瘦脸的很稳定,你计算的是什么工况?哪个求解器?用代码的形式把fvSolution贴一下,把log贴一下,贴最后的200步左右。



  • @李东岳 我计算的是RTD曲线(停留时间分布曲线),我将流场与溶质扩散方程耦合在一起计算的,求解器我主要是基于buoyantPimpleFoam修改的,求解压力的方程我是使用twoLiquidMixingFoam的压力方程。(我不知道这样阐述您理不理解,因为OpenFOAM里没有我想要的求解器的成品,所以我自己拼凑修改了一个求解器)fvSolution文件如下
    0_1522465354248_b5042cbb-4477-4bc0-8800-11607cfba4dc-image.png
    0_1522465387548_7d14b5c7-de94-4829-8cf0-37d1b1bc2b41-image.png
    log文件我正在输出,现在还不能贴


  • 管理员

    fvSolution看没什么问题,你求解的几何很简单么?从你的收敛残差看,特别稳定。



  • @东岳 模型特别简单,网格质量也是1,我这两天又看了看OpenFOAM官方的求解器pimpleFoam,这个求解器求解压力也是PIMPLE算法,我发现它设定的时间步长也是非常小为0.001。我运行过这个求解器,发现瞬态过程仅仅计算1s也需要很长的计算时间。把pimpleFoam求解器的时间步长改到0.5,发现出错
    0_1522633593524_11.png
    对于瞬态问题的求解,为了得到好的收敛标准可以尽量缩短时间步长吗?这样不是加大了计算量了?


  • 管理员

    你需要尽可能的在可承受的范围下缩短时间步长,这在理论上有利于计算稳定。可与关注一下CFD中的库郎数,这个东西用来判断收敛性 http://www.cfdbaike.com/doku.php#courant_number



  • @东岳 我调过那种适应步长的方法,时间步长也挺小的。这里我说句题外的,师兄曾经用CFX计算过RTD的问题,据我问师兄,他的库朗数达到了100左右,我感觉简直不可思议,最后出的结果也挺好的(结果对错我不知道),看着挺正常的,库朗数太大也不行了吧,我感觉


  • 管理员

    CFX和Fluent那面库郎数限制不是很明显。

    但是CFD理论上都有库郎数限制,不清楚商软那面怎么处理的,代码不开源,无从可知。


  • OpenFOAM讲师

    @dingcy 对于瞬态问题,没有所谓的收敛,因为你每一步的结果都是不同的。你的pimple发散,确实是因为计算步长大了,用大步长计算,我的经验是增加nCorrectors,也就是增加了压力-速度耦合迭代的次数,以修正速度滞后的问题。



  • @dzw05 瞬态问题有时候会趋于稳态,比如我所研究的问题,中间包内加入示踪剂后,一直注入的是水,最后中间包内全部充满了水,这不就趋于一个稳态吗?增加nCorrectors我确实试过,比如nCorrectors调到4,它会有4个压力残差值,前几个压力残差值还是比较大,越靠后的压力残差值越小,我可以直接以最后一个压力残差值作为评判标准吗?


  • OpenFOAM讲师

    @dingcy 那你这个问题就是稳态问题了,只不过你用的是瞬态求解器;如果不关心中间结果, 你完全可以用稳态求解器,这样计算还更快一些。
    至于压力残差值,只有最后一个有意义,因为前几个都是压力-速度迭代的中间结果。



  • @dzw05 中间过程对我来说很重要,我研究的对象就是中间过程。至于最后一个压力残差值的问题,我不太确定呀,我曾经也像你那样想过,能有一个解释或者说明吗?比如为什么下一个时间步第一个压力残差不是接着上一个时间步最后一个压力残差而是接着上一个时间步第一个压力残差值呢?还有商业软件为什么最后都是一个压力残差值呢?


  • OpenFOAM讲师

    @dingcy 抱歉我之前的解释可能有误。
    (1)残差的定义是: r=Ax-b, 即当前步的解代入当前步的线性方程组时,产生的偏差。所以如果要判断是否收敛,应该看的是p_rgh0,即第一次迭代时的残差。
    (2)比如为什么下一个时间步第一个压力残差不是接着上一个时间步最后一个压力残差而是接着上一个时间步第一个压力残差值呢。至于这个问题,因为下一个时间步的线性方程组系数(A,b)已经更新了,所以残差不会跟上一步的最后残差。
    (3)这里说的时间步是外循环,你设定里的nCorrectors,其实是在一个时间步中的内迭代。
    (4)用foamLog会把每一个内迭代的残差都生成单独的文件(p_rgh0即对应第一个内迭代,p_rgh1对应第二个内迭代),所以你画图的时候,其实是对每个内迭代的残差画曲线。

    最后,需要强调的是,残差并不是收敛的判断标准。收敛是指两个相邻时间步的结果不再变化,而残差只是在当前时间步内的线性方程组的残值。


  • OpenFOAM讲师

    @dingcy 商业软件中的压力残值,应该是指p_rgh0。


  • OpenFOAM讲师

    @dzw05 应该改为:残差并不是收敛的唯一标准。



  • @dzw05 谢谢您的解答,讲解的很明白,我还要看一看,如果有新想法,会回复您的。


登录后回复
 

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