Fipy calcNormals 函数

Fipy calcNormals function

我对 Fipy 中 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

对于不均匀的 3D 网格,法线应该指向单元格的中心还是简单地指向内部(并且长度为 1)?

每个面的法线用于计算平流和扩散流的方向和速度,是否正确?

在这种情况下,网格的最后一条法线指向与其余方向不同的方向会导致计算边界处的通量错误,不是吗?

感谢您的帮助!

正如代码中的注释所说

# 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,但我看不出它们有什么不同。

注意:方法以“_”作为 'weak "internal use" indicator' 开头。这些是实现细节,您不应该调用它们。对于像“._calcSomething()”这样的方法来说,这是双重的;这些总是 属性 .something 背后的主力军,您应该改用它。如果您发现需要调用这些内部方法,请告诉我们,以便我们扩充 public API.