pisoFoam计算的U,求div(U)结果为何不是严格等于0
-
@coolhhh 在 pisoFoam计算的U,求div(U)结果为何不是严格等于0 中说:
为何of中最后输出phi不用fvc::flux(U),而是用了phi = phiHbyA - pEqn.flux()?
fvScalarMatrix pEqn ( fvm::laplacian(rAU, p) == fvc::div(phiHbyA) ); pEqn.setReference(pRefCell, pRefValue); pEqn.solve(); phi = phiHbyA - pEqn.flux();上面这几行代码里面,
pEqn实际上是建立在sum(phi)= sum(phiHbyA - pEqn.flux())=0,也就是说,在sum(phi)= sum(phiHbyA - pEqn.flux())=0的时候,才有fvm::laplacian(rAU, p) == fvc::div(phiHbyA)这个形式。所以求解fvm::laplacian(rAU, p) == fvc::div(phiHbyA),sum(phi)= sum(phiHbyA - pEqn.flux())=0。 -
李老师,我做了简单的对比:
-
下面计算的
div(U)与div(phi)结果基本相等,区别是小数点后五六位
①直接求div(U)
②已知U->phi = fvc::flux(U)->div(phi) -
接着对比
reconstruct(phi)。编译mypisoFoam,把pEqn.H中计算U修改为
U = fvc::reconstruct(phi); // U = HbyA - rAU*fvc::grad(p);同样计算计算of2206自带一个算例:Decay of homogeneous isotropic turbulence,模拟结果:
(1)对比div(U)与div(phi)的均值和标准差。采用reconstruct(phi),得到的div(U)的均值和标准差要小一点。这里有个注意点是,of计算的div(phi),基本数值都很小,但会有一个比较大的数,下面的计算结果是剔除了这个最大数的计算结果。

(2)对比湍流特性。可以看出
reconstruct(phi)结果要更差,还是原本of的U = HbyA - rAU*fvc::grad(p)计算准确

-
-
谢谢李老师,文章已经发表了,只是好奇做个对比。在想的问题是,一直以来各种湍流生成方法都在追求实现生成零散度的湍流场
U,我们直接构造的是0时刻的U,而不是phi。根据测试结果看,如果严格让
div(U)=0, 此时U -> phi = fvc::flux(U) -> div(phi)得到的div(phi)也基本等于0。但这种情况下0时刻的湍流特性会变化的比较大,结果会变差。of在后面时间步计算输出的
U实际上不满足div(U)=0,所以想法是0时刻提供的初始U也不需要强制要求div(U)=0,这样得到的结果可能才是更合理的。 -
C coolhhh 被引用 于这个主题
-
C coolhhh 被引用 于这个主题
