OpenFOAM对网格的拓扑有着严格的要求。其中,每一个单一的面(face)都会有其对应的owner和neighbour。在考虑某一面的面法向向量时,方向应该是朝哪一边?下面用一个简单的网格测试一下。找到任意一个求解器,注释掉时间循环体的内容,在main()下添加下面的代码:
const labelList& owner = mesh.faceOwner();
forAll(mesh.faces(), facei)
{
if(mesh.isInternalFace(facei))
{
Info<<"face"<<facei<<"'s owner is:"<<owner[facei]<<endl;
Info<<"owner's location is"<<mesh.C()[owner[facei]]<<endl;
Info<<"face's Cf:"<<mesh.Cf()[facei]<<endl;
Info<<"face's Sf:"<<mesh.Sf()[facei]<<endl;
}
}
编译后,在一个简单的只有几个网格的算例下运行,终端会输出:
face0's owner is:0
owner's location is(-0.0175 -0.00125 0)
face's Cf:(-0.0175 0 0)
face's Sf:(0 2.5e-05 0)
face1's owner is:0
owner's location is(-0.0175 -0.00125 0)
face's Cf:(-0.015 -0.00125 0)
face's Sf:(1.25e-05 0 0)
face2's owner is:1
owner's location is(-0.0175 0.00125 0)
face's Cf:(-0.015 0.00125 0)
face's Sf:(1.25e-05 0 0)
face3's owner is:2
owner's location is(-0.00833333 -0.00125 0)
face's Cf:(-0.00166667 -0.00125 0)
face's Sf:(1.25e-05 0 0)
画一个示意图表示结果。如下图,每个格子中间对应的是单元(cell)的序号,每条线上标的是面(face)的序号,序号后面的括号是对应的owner序号。比如说,0(0)代表0号face,其对应的owner是0号cell(即下面那个)。箭头代表面法向向量的指向。
由图可知,面法向向量都不是指向owner的,也就是说,是相对于owner指向外侧。也可以说是指向neighbour方向。这样的设定在计算梯度的时候(snGrad)是很有必要的
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容