不可压湍流模型改成可压湍流模型



  • 大家好,

    我想把不可压的LamBremhorstKE湍流模型改成可压版本的,因为这个湍流模型对于我的问题比较适合。

    不知道有没有人有过把湍流模型从不可压改成可压的经验?不知道难度怎么样?谢谢。



  • 没有做过类似的东西,所以还蛮期待看看做出来的结果怎么样。

    代码方面的区别你可以参考现有的模型,比如kEpsilon和可压kEpsilon的区别,印象中好像不是很大。注意,大概从2.3.0版本开始OF里面的湍流模型采用了更多的模板,所以实际上可压和不可压从代码的角度上区别不大。比如,kEpsilon不像老版本里面会有专门的incompressible::kEpsilon和专门的compressible:kEpsilon,而只有一个kEpsilon(src/TurbulenceModels/turbulenceModels/RAS/kEpsilon)。

    下面链接里有关于如何修改湍流模型的详细步骤,我在OF-4.x里面照着这个做过一遍,至少是我能找到的最好的教程了。这个里面对湍流模型的代码架构解释也很到位,应该对你相当有帮助。

    https://pingpong.chalmers.se/public/pp/public_courses/course07056/published/1483976028698/resourceId/3473555/content/41433022-b456-4cd1-b467-4f7ef688841e/41433022-b456-4cd1-b467-4f7ef688841e.html?language=sv



  • 嗯嗯谢谢!

    现在的KEpsilon代码好像就没有分可压不可压了吧,那一套代码对于可压不可压都适用,放在turbulenceModels里面。
    所以我目前参考另一个低雷诺数湍流模型LS来修改LB模型,想让其也适用于可压情况,编译是通过了,但是计算还没收敛。后面看看情况。



  • 是的,貌似2.3.0之后就不再分了。

    我没有仔细研究过可压和不可压具体怎么实现,猜测大概跟可压和不可压求解器里面一个调用compressibleCreatePhi.H(/src/finiteVolume/cfdTools/compressible/compressibleCreatePhi.H)和createPhi.H(/src/finiteVolume/cfdTools/incompressible/createPhi.H)一样。你改过了湍流模型之后用的什么求解器呢?会不会你的湍流模型没问题但是求解器方面有问题。

    经供参考。



  • 不知道有没有人有过把湍流模型从不可压改成可压的经验?不知道难度怎么样?谢谢。

    1. 把不可压缩湍流模型divDevReff(Uc)这一项改掉

    2. 改速度压力耦合策略把密度包含进去

    3. 另外一般可压缩都包含能量方程

    大体这三步。前俩步不难,后一步需要考虑流体力学模型然后才能进行计算流体力学离散。



  • @东岳 谢谢东岳老师。您说的这些是针对可压不可压求解器的修改?
    我目前想改LamBremhorstKE低雷诺数湍流模型,从不可压改成可压/不可压都可以用的湍流模型,我是参照着LaunderSharmaKE模型来改的。
    具体的k方程和e方程:
    epsilon.png
    改成
    epsilongai.png

    k.png
    改成
    k改.png

    不确定这么改有没有效果,正在尝试。



  • @cccrrryyy 用的buoyantSimpleFoam,这个求解器适用于我的问题,应该没啥问题,湍流模型正在测试。



  • 原来如此,那你这个套路是正确的,步骤2 3你已经完成了 :ok2: 不过我才发现这个湍流模型竟然是不可压缩版本 为什么没有可压缩版?原始文献也没有么



  • 原始文献里面:

    k方程k1.png k2.png

    epsilon方程:epsilon1.png

    这么看来是不可压缩的?不确定我这么改成可压版本的会不会是徒劳。

    另外,SuSp,kSource(),epsilonSource(),fvOptions这几项的添加我也不太确定有没有必要。



  • 看起来是个不可压缩湍流方程...

    Susp对于可压缩有必要。对于你的单相流kSource(),epsilonSource()没必要,如果没有源项,fvOptions也没必要



  • @东岳 谢谢老师!原始文献都只是不可压缩湍流方程,那我改成可压缩就不知道有没有意义了:zoule:



  • 我建议你找找把他改成可压缩版本的SCI,然后引用,这就没得说了。不过如果审稿人不懂这方面,可能也不会挑。



  • @Calf-Z-DNS 原来原始文献是这样,那说明它的推导是按照不可压来进行的,按道理讲后续应该会有人把它延伸至可压吧?这个需要你自己去查文献了。

    一般可压比不可压好像会多出来一些项,参见Fluent处理可压kEpsilon的方式。OpenFOAM里面虽然代码上模板化了,但是也可以看到可压比不可压要多出来一些项(我也只看过kEpsilon)。



  • @cccrrryyy 对的,可压里面多了Susp(2/3...)、epsilonSource、fvOptions这些项,添加这些项不知道对收敛性会不会有影响,反正现在这个湍流模型跑的例子一直没收敛。

    另外对于低雷诺数湍流模型,k壁面我取定值,但epsilon壁面不知应该取epsilonWallFuntion(OF5中它可以用在低雷诺数湍流模型的情况下)还是取zeroGradient(Chalmers论文里面的建议)?



  • @Calf-Z-DNS 带有SuSp或者Sp字符的是为了增加计算稳定性弄的,这些字符可以保留,源项之类的就像东岳老师说的,单相流里面一般也不考虑这些。至于SuSp(2/3...)这个项,我之前研究kepsilon的时候推导过,这一项不是为了稳定性,这一项是从Bousinesq假设里面推出来的,所以它是理论上就存在的一项。这个地方建议你看看cfd-online上的这个帖子

    https://www.cfd-online.com/Forums/openfoam-solving/176542-k-epsilon-implementation-including-volscalarfield-g.html

    听起来你对低雷诺数模型比我熟悉多啦,我一般就是k用kqRWallFunction,epsilon用你说的低雷诺数模型。这里我是参考Fluent的,因为Fluent里面有提到过壁面模型分成两块啥的,在什么y*小于11的时候用一个,大于11的时候用另一个,然后我看了OpenFOAM源码,感觉低雷诺数的那个壁面函数好像就是类似这样,所以就用了。我没有比较过它和zeroGradient的区别。



  • 谢谢!这么看来fvoptions可以保留着,那么susp(2/3)这一项是从Bousinesq假设推导出来的话,它是在不可压里面适用?还是我理解有误。

    另外我看不可压湍流模型里面没有susp fvoptions source这些项,而可压不可压通用的湍流模型就有。所以我改的时候就不知道怎么取舍。

    而且目前湍流模型测试结果看起来不好,收敛性一直很差,调了边界条件、代码也都一样。:zoule:



  • 你看好像是比较早的版本的,从2.3.0开始可压不可压的代码应该是一样的,就是之前我们讨论过的,是全部用template去做的。比如kEpsilon在4.x里面就是

    https://github.com/OpenFOAM/OpenFOAM-4.x/blob/master/src/TurbulenceModels/turbulenceModels/RAS/kEpsilon/kEpsilon.C

    注意susp(2/3)那一项完整的是fvm::SuSp((2.0/3.0)*alpha()*rho()*divU, k_)或者fvm::SuSp(((2.0/3.0)*C1_ - C3_)*alpha()*rho()*divU, epsilon_)。不可压的时候这一项为0。我看了2.1.0的kEpsilon的代码,确实如你所说,不可压的里面没有susp这一项,可能是认为是0所以直接给去掉了。但实际上,把这一项加上是cfd里面更常规的做法,因为在计算没有收敛的时候(即使是不可压)这一项不一定就等于0,把它加上更有利于计算稳定性。总而言之,这一项应该是要加上的,对于不可压的case加上是有利于计算稳定性,原则上不会影响计算结果,但对于可压的case它不等于0,是有大小的。

    按你之前说的,我觉得你目前的问题可能不在代码方面,而是你要修改的这个湍流模型是否有可压缩版本(经过严格理论推导的),或者更基础的,这个湍流模型适用于可压缩流吗?

    仅供参考。



  • @cccrrryyy 谢谢,很有帮助!

    我目前也在找是否有可压缩版本的文献,但发现做低雷诺数湍流模型的本身就比较少,不知道有什么有效的途径可以找到。目前能参考的就是原始文献,从方程上看应该是不可压的,所以有点虚。



  • @Calf-Z-DNS LamBremhorstKE模型为什么没有可压缩版本?文献讨论没有?



  • @Calf-Z-DNS 我看你在cfd-online也发了帖子,好像没有人回复,说明这个问题可能比较小众。这种有点麻烦,就是不知道从什么地方入手。我感觉你需要找更多的人讨论一下,按道理一个湍流模型应该是有可压缩版本的,但是这个湍流模型是不是在推导的时候做了什么假设之类的?希望有搞湍流模型的专家来解答。



  • @东岳 今天找到一篇论文:
    名字.png

    论文根据LB模型做了一些修改,给出的方程:
    可压LB.png

    看上去应该是可压的LB模型了。

    我对比过它跟我改的代码的差别,基本都一样,不太明白的就在GB这一项,应该是由浮升力引起的项。
    openfoam里面是:fvm::SuSp((2.0/3.0)*alpha*rho*divU, k_)或fvm::SuSp(((2.0/3.0)*gamma_)*alpha*rho*divU, omega_)
    我不知道它跟GB等不等价,看上去差很多。还需要研究一番。



  • @Calf-Z-DNS 对于LB,应该是- fvm::SuSp(2.0/3.0*alpha*rho*divU, k_)与 - fvm::SuSp(((2.0/3.0)*Ceps1_ - C3_)*alpha*rho*divU, epsilon_),不小心复制成komega了。



  • 辛苦辛苦。

    OpenFOAM的kEpsilon模型是没有考虑浮升力的,所以这个文章里面带浮升力的项本身就是额外的。你从代码里也可以看到,OpenFOAM的kEpsilon是没有包含重力加速度的(OpenFOAM-4.x)。参见这里,https://www.openfoam.com/documentation/guides/latest/doc/guide-turbulence-ras-k-epsilon.html。

    我个人感觉你目前还不需要考虑浮升力这一项,这个文章看标题它是针对buoyancy-driven flow的,所以它需要处理浮升力。从你要修改湍流模型的角度来讲这些都属于附加项,可以先不考虑吧。

    话说这个Chalmers University of Technology好像开了好几年的针对OpenFOAM的课程了(http://www.tfd.chalmers.se/~hani/kurser/OS_CFD/),是个不错的学习材料!



  • @cccrrryyy 谢谢!

    不过我的case正好是研究考虑浮升力的影响而引起的传热恶化现象,所以感觉有必要研究一下GB这一项。Chalmers 的课程我之前有注意到过。



  • @Calf-Z-DNS不可压湍流模型改成可压湍流模型 中说:

    浮升力的影响而引起的传热恶化现象

    https://github.com/OpenFOAM/OpenFOAM-3.0.x/blob/master/src/TurbulenceModels/compressible/RAS/buoyantKEpsilon/buoyantKEpsilon.H

    我没关注过LB湍流模型。不过你看看能不能把上面代码中的GB放到你的LamBremhorstKE模型里面来考虑浮升力的影响而引起的传热恶化现象

    捕获.JPG



  • 谢谢老师!
    我正在尝试把buoyantKEpsilon的GB放到我的代码中。

    有两个问题:
    1.采用湍流模型的话,控制方程引入的项:
    动量.png
    能量.png

    这两项是采用湍流模型时自动加的,还是需要在求解器代码里面添加?

    2.如果我想在湍流方程里面添加红框的这两项
    源项.png

    是直接植入公式,还是要用fvm::Susp(...)或者fvm::Sp(...)套进去?
    我看有的直接写,有的是套进去,不知道有没有什么原则。
    另外我看fvm::Susp(...)跟fvm::Sp(...)前面经常加负号,这是为了收敛性?那如果公式里面是加上这个源项,那么应该写成 - fvm::Susp(- 源项)? 谢谢。



  • 最简单的是直接显性离散。就是直接写进去。

    具体显性离散还是隐性离散得看收敛性如何,需要去尝试。除非你确定他能增加对角占优,就隐性离散。加负号是因为这一项若隐形离散可以增加对角占优(很确定)。



  • @东岳 谢谢老师!

    我拿着改完的LB模型(植入GB这一项),去跑常温常压下普通水的流动传热。用的查表法获取物性,当做可压问题处理。

    奇怪的是一直遇到壁温不断升高的问题。
    温度异常.jpg

    图是中心剖面的温度场,头尾绝热,中间段加热,但是看上去热量一直传不进去,壁温也一直在升高。

    我用相同的求解器和物性库,拿kw模型来算就正常。

    算例设置,代码,网格我都有调试过,没有实质性突破。不知道可能会是啥原因造成的?谢谢!



  • 我还想问下大家有跑通用低雷诺数湍流模型的例子吗?

    不知道对它有没有什么特殊的边界条件设置,或者是其他需要注意的地方。

    我的例子都是压力跟速度的径向方向残差比较高,很难达到收敛。

    谢谢!



  • @Calf-Z-DNS 之前硕士的时候在做示踪剂在水中传输过程中,密度随浓度变化的问题,所处理的问题和你遇到的差不多,我的压力也是收敛的不太好,大概在0.01,然后硕士毕业时间紧迫问题就放下了,看见有人也在做这个问题,突然感觉我以前做的工作还挺有意义的(以前觉得没什么意义:xinlei: ),现在突然想捡起来做一做了:chitang:



  • @Dingcy 哈哈我是在用低雷诺数湍流模型算超临界CO2流动传热的例子,物性变化很剧烈,不好收敛。


Log in to reply