不可压湍流模型改成可压湍流模型
-
没有做过类似的东西,所以还蛮期待看看做出来的结果怎么样。
代码方面的区别你可以参考现有的模型,比如kEpsilon和可压kEpsilon的区别,印象中好像不是很大。注意,大概从2.3.0版本开始OF里面的湍流模型采用了更多的模板,所以实际上可压和不可压从代码的角度上区别不大。比如,kEpsilon不像老版本里面会有专门的incompressible::kEpsilon和专门的compressible:kEpsilon,而只有一个kEpsilon(src/TurbulenceModels/turbulenceModels/RAS/kEpsilon)。
下面链接里有关于如何修改湍流模型的详细步骤,我在OF-4.x里面照着这个做过一遍,至少是我能找到的最好的教程了。这个里面对湍流模型的代码架构解释也很到位,应该对你相当有帮助。
-
嗯嗯谢谢!
现在的KEpsilon代码好像就没有分可压不可压了吧,那一套代码对于可压不可压都适用,放在turbulenceModels里面。
所以我目前参考另一个低雷诺数湍流模型LS来修改LB模型,想让其也适用于可压情况,编译是通过了,但是计算还没收敛。后面看看情况。 -
-
@东岳 谢谢东岳老师。您说的这些是针对可压不可压求解器的修改?
我目前想改LamBremhorstKE低雷诺数湍流模型,从不可压改成可压/不可压都可以用的湍流模型,我是参照着LaunderSharmaKE模型来改的。
具体的k方程和e方程:
改成
改成
不确定这么改有没有效果,正在尝试。
-
@cccrrryyy 用的buoyantSimpleFoam,这个求解器适用于我的问题,应该没啥问题,湍流模型正在测试。
-
原始文献里面:
k方程
epsilon方程:
这么看来是不可压缩的?不确定我这么改成可压版本的会不会是徒劳。
另外,SuSp,kSource(),epsilonSource(),fvOptions这几项的添加我也不太确定有没有必要。
-
@东岳 谢谢老师!原始文献都只是不可压缩湍流方程,那我改成可压缩就不知道有没有意义了
-
@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上的这个帖子
听起来你对低雷诺数模型比我熟悉多啦,我一般就是k用kqRWallFunction,epsilon用你说的低雷诺数模型。这里我是参考Fluent的,因为Fluent里面有提到过壁面模型分成两块啥的,在什么y*小于11的时候用一个,大于11的时候用另一个,然后我看了OpenFOAM源码,感觉低雷诺数的那个壁面函数好像就是类似这样,所以就用了。我没有比较过它和zeroGradient的区别。
-
谢谢!这么看来fvoptions可以保留着,那么susp(2/3)这一项是从Bousinesq假设推导出来的话,它是在不可压里面适用?还是我理解有误。
另外我看不可压湍流模型里面没有susp fvoptions source这些项,而可压不可压通用的湍流模型就有。所以我改的时候就不知道怎么取舍。
而且目前湍流模型测试结果看起来不好,收敛性一直很差,调了边界条件、代码也都一样。
-
你看好像是比较早的版本的,从2.3.0开始可压不可压的代码应该是一样的,就是之前我们讨论过的,是全部用template去做的。比如kEpsilon在4.x里面就是
注意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 我看你在cfd-online也发了帖子,好像没有人回复,说明这个问题可能比较小众。这种有点麻烦,就是不知道从什么地方入手。我感觉你需要找更多的人讨论一下,按道理一个湍流模型应该是有可压缩版本的,但是这个湍流模型是不是在推导的时候做了什么假设之类的?希望有搞湍流模型的专家来解答。
-
@东岳 今天找到一篇论文:
论文根据LB模型做了一些修改,给出的方程:
看上去应该是可压的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等不等价,看上去差很多。还需要研究一番。