动网格求解中correctPhi的作用是什么
-
现在OpenFOAM比较成熟的求解器都能求解动网格算例,与v5.0中普通求解器相比,现在的求解器为了求解动网算例,都会在循环中加这么一段:
while (pimple.loop()) { if (pimple.firstIter() || moveMeshOuterCorrectors) { mesh.update(); if (mesh.changing()) { // Do not apply previous time-step mesh compression flux // if the mesh topology changed if (mesh.topoChanging()) { talphaPhi1Corr0.clear(); } gh = (g & mesh.C()) - ghRef; ghf = (g & mesh.Cf()) - ghRef; MRF.update(); if (correctPhi) { // Calculate absolute flux // from the mapped surface velocity phi = mesh.Sf() & Uf(); #include "correctPhi.H" // Make the flux relative to the mesh motion fvc::makeRelative(phi, U); mixture.correct(); } if (checkMeshCourantNo) { #include "meshCourantNo.H" } } } ........ }
其中比较关键的是correctPhi.H,这个文件主要是实现一个面通量的预修正,引入了一个修正压力pcorr。但是这一块具体实现了什么功能,我还是不清楚,于是我把这一行给注释掉了,然后比较原始的interFoam和注释掉correctPhi.H后的求解器求解结果,算例采用OpenFOAM自带的interFoam tutorial算例——testTubeMixer。比较了两个算例在t=0.89s的结果:
下图为原始的interFoam求解的结果:
下图为注释掉correctPhi.H后的求解结果:
就上面的结果来看,没有任何的区别。但是作为OpenFOAM的程序设计师们,肯定不会把一段没用的代码放在一个这么经典的求解器中。有没有哪位CFDer能够解释一下这个correctPhi.H是做什么呢? -
上面的图片实在上传不上去,主要是证明两种结果一样,两个图看起来确实是一样的,就不再另外挂图了
-
t=0.89s
原始interFoam求解器结果
file:///media/sh/SH/OpenFOAM/droplets/tutorials/noPcorrInterFoam/testTubeMixer1/interFoam.jpg
去掉correctPhi.H后的结果
file:///media/sh/SH/OpenFOAM/droplets/tutorials/noPcorrInterFoam/testTubeMixer2/interNoPcorrFoam.jpg
把图补上,原来的图太大了上传失败了 -
我记得是修正非正交网格的面通量。两个相邻的网格,共用面的中心点到两个网格体中心点连线。如果两个连线不重合就要修正。你看那个correctPhi里不是面的法向量和速度向量相乘么。
phi = mesh.Sf() & Uf();
我说的不严谨,大概是这个意思。
-
是的,一般情况下你1)可以忽略correctPhiH,2)pcorr也可以不求解
论坛登录问题反馈可联系 li.dy@dyfluid.com