关于buoyantPimpleFoam的几个问题


  • OpenFOAM副教授

    看了东岳老师的buoyantPimpleFoam解析,有几个问题和疑惑提出来和大家探讨。

    1、buoyantPimpleFoam采用了rhoThermorhoThermo里的密度FOAM里面叫thermo::rho,而求解器的密度叫做rho。很好奇这样做的原因是什么,在压力方程的开头会有一个赋值的操作,即rho = thermo.rho(),在每个时间步的末尾也会有一样的赋值操作。那rhothermo.rho()的区别是什么?

    解析里提到buoyantPimpleFoam的求解变量增加了能量和密度。我觉得这里可能会引起一些概念上的问题。虽然求解器求解了密度(#include "rhoEqn.H"),但密度最后还是被赋值了thermo.rho()。密度还是通过状态方程得到的,而状态方程里面的压力才是通过计算得出,也就是说buoyantPimpleFoam是一个基于压力的求解器,而不是基于密度的求解器。(我理解的基于密度的求解器是求解密度,然后通过状态方程得到压力;基于压力的求解器则是求解压力,然后通过状态方程得到密度)

    解析末尾提到更新压力之后再次进去密度方程,但我认为这一步是为了后面的计算连续性误差(#include "compressibleContinuityErrs.H"),而不是为了求解密度。

    2、和第一个问题有关,buoyantPimpleFoam是不是一定要采用rhoThermo,如果采用psiThermo会有什么问题?有人试过类似的算例么

    3、解析里面对psi*correction(fvm::ddt(p_rgh))这一项的讲解很到位,不过这一项的来源是什么?在psiThermo里面我们知道FOAM是假设了rho = psi * p,那么rhoThermo里面这个假设还成立么?

    4、我看到有人做过将buoyantPimpleFoam修改为一个低马赫数求解器(变密度求解器,但密度不随压力变化)的工作,为什么buoyantPimpleFoam本身不是一个低马赫数求解器?或者说buoyantPimpleFoam里哪里体现出了“密度随压力变化”这一点?

    感觉成了十万个为什么:zoule:



  • 我有计划将附加密度的瞬态求解器重写一遍 http://dyfluid.com/rhoSimpleFoam.html 这个是稳态版本 对于密度的更新更详细 针对你的问题 我找个整块的时间看一下回复你


  • OpenFOAM副教授

    @东岳 非常感谢!:146: FOAM热物性这一块一直就没彻底搞明白,稳态的解析我也学习一下。



  • http://dyfluid.com/rhoSimpleFoam.html http://dyfluid.com/simplefoam.html
    我重写了,尤其是rhoSimpleFoam解析,尤其是说明了rho=thermo.rho(),写的比较仓促,你先对一下看看能不能自我回答你的问题,我要出去一趟,过几天把瞬态的更新下,同时更新下thermo,.psi之类,需要很多工作



  • 我还把代码解析删了,代码解析写不了太细,一行一行代码分析工作量太大了,完成不了,写的不细的话,也没什么用,后续我会把所有代码解析删掉



  • http://dyfluid.com/rhopimplefoam.html 我更新了下rhoPimpleFoam解析,这个跟buoyantPimpleFoam非常接近了,我下周处理buoyantPimpleFoam


  • OpenFOAM副教授

    @东岳 太感谢了!我详细看一下之后回复你!


  • OpenFOAM副教授

    @东岳 我回来了!不好意思隔了快一周了。看了rhoSimpleFoam和rhoPimpleFoam,目前还有以下几个问题希望和大家一起探讨。

    1. 高版本的rhoPimpleFoam既可以调用psiThermo也可以调用rhoThermo,而低版本调用的是psiThermo。给人的感觉有点混乱,这两个热物性的区别到底是什么。换句话说,psiThermo和rhoThermo是否可以随意使用,还是某些求解器只适合调用某一种。如果我想自己组装一个新的求解器怎么判断选择psiThermo还是rhoThermo呢?

    2. 还是关于密度方程的("rhoEqn.H")。我的理解是求解密度方程的原因是为了获得连续性误差(pEqn.H的末尾#include "rhoEqn.H"和#include "compressibleContinuityErrs.H")。如果仅仅是这个原因,为什么每一个时间步的开头要求解密度呢。(对于rhoPimpleFoam,如果PISO修正步数小于等于1则调用"rhoEqn.H";对于buoyantPimpleFoam则没有判定,一定要调用。)这一点其实还好,因为如果每一个时间步严格收敛了,那密度也不会再变化了,求解器密度和热物性密度应当完全一样。

    3. 综合我看到的关于buoyantPimpleFoam的解析,它适用于求解浮升力引起的温度变化而导致的密度变化。这个是不是类似于所谓的低马赫数假设(密度不随压力变化,而随温度、组分等变化)?如果是(或者不是),原因是什么?


  • Linux讲师 OpenFOAM讲师

    @cccrrryyy 第二个我知道,求解密度方程是为了求解质量守恒方程,连续性残差是密度残差的反映,具体什么关系没研究过,当做相等也没什么,顶多有个常系数关系。

    质量守恒方程所运输的物理量就是密度,所以一直在围着密度转,所以时间步开头就算密度,然后通过迭代减小残差。


  • OpenFOAM副教授

    @bestucan 感谢回复!我理解连续性残差其实就是在算求解器得到的密度(质量守恒方程)和热物性更新得到的密度(状态方程)之间的差别,但这个步骤在每次求解完压力并更新速度之后(即pEqn.H的末尾)都已经进行了,所以不太理解为什么每个时间步的开头要计算一次密度。


  • Linux讲师 OpenFOAM讲师

    @cccrrryyy 惭愧惭愧,您的理解比我深入多了,:146:

    我再猜测一下,可能是求解动量守恒方程的时候(夹在物质守恒和能量守恒中间?)要用密度。我记得求解器里的压力是除过密度的压力。这个时候开头算不算密度应该会有影响?

    好了,肚里没货了,再和您讨论要明天充充电了:shangxue:



  • http://dyfluid.com/rhoPimpleFoam.html 公式5的描述解释了为什么要rhoEqn.H。至于Pimple多次迭代,是因为肯定会更新$A_\rP$,所以没必要开始rhoEqn.H

    我昨天想更新buoyantPimpleFoam,发现这俩差不多就没写
    不过我整理下heRhoThermo与hePsiThermo然后回复你


  • OpenFOAM副教授

    @bestucan 每天都在充电学习,谈不上理解深入或者不深入啥的。:chouchou:


  • OpenFOAM副教授

    @东岳 有点理解了!buoyantPimpleFoam和rhoPimpleFoam确实差不多,我这几天想着拿一个小算例用这两个求解器试一下,感觉很有可能会解出来不一样的结果。目前我的猜测是buoyantPimpleFoam用了rhoThermo,而rhoPimpleFoam(低版本)用了psiThermo,用rhoThermo的话求解压力方程的时候密度是已知的,而用psiThermo的话求解压力方程的时候密度是未知的(或者说 psi*p 这一项 p是未知的),但不知道这样会对求解造成什么影响。

    东岳老师太辛苦了,是我辈楷模!



  • 有点耽误 这周事情有点多 但我没忘这件事 当我有时间 我会更新 我先把一段代码写完


  • OpenFOAM副教授

    @东岳 你忙~我最近再看Ferziger和Peric那本书的Compressible Flow一章,了解的也更多了。看代码之余还是应该多温习理论!


Log in to reply
 

CFD中文网 2016 - 2020 | 京ICP备15017992号-2