关于图中faceNormals的计算,我有一个问题:似乎每个脸的法线向量指向相同的方向,除非脸位于网格的x-、y-和z轴的一个极值处(在这种情况下,它们指向与其他法向量相反的方向)。这样,法线总是指向细胞的内部。为什么会这样呢?如果所有法线指向相同的方向(即最后一个法线指向网格的外部),这会产生什么样的效果。这是(作为解释的)一维非均匀网格的法线计算代码,但是对于2D和3D网格和网格,其原理似乎是相同的:
def _calcFaceNormals(self):
faceNormals = numerix.array((numerix.ones(self.numberOfFaces, 'd'),))
# The left-most face has neighboring cells None and the left-most cell.
# We must reverse the normal to make fluxes work correctly.
if self.numberOfFaces > 0:
faceNormals[..., 0] = -faceNormals[..., 0]
return faceNormals对于非均匀的三维网格,法线是指向单元的中心还是仅仅指向内部(并且长度是1)?
每个面的法线用来计算平流和扩散-flow方向和速度,这是正确的吗?
在这种情况下,网格的最后法线在另一个方向上会导致计算边界通量的错误,不是吗?
谢谢你的帮助!
发布于 2021-04-01 14:22:02
正如代码中的注释所述
# The left-most face has neighboring cells None and the left-most cell.
# We must reverse the normal to make fluxes work correctly.FiPy的实现使得faceNormals总是指向脸部两侧的两个单元格中的第二个。对于Grid1D中最右边的单元格,右边没有单元格,因此第一单元格和第二单元格相同,faceNormals指向左边。同样的考虑也适用于任何外表。
看起来我们本来想要区分.faceNormals和._orientedFaceNormals,但我没有看到任何迹象表明它们是不同的。
注意:方法以'_‘作为“内部使用”指标薄弱开始。这些是实现细节,您不应该调用它们。对于像“._calcSomething()”这样的方法来说,这是加倍的;这些方法都是属性.something背后的工作马,您应该转而使用它。如果您发现需要调用这些内部方法,请让我们知道,以便我们可以扩展我们的公共API。
https://stackoverflow.com/questions/66902218
复制相似问题