首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Fipy calcNormals函数

Fipy calcNormals函数
EN

Stack Overflow用户
提问于 2021-04-01 09:45:23
回答 1查看 66关注 0票数 1

关于图中faceNormals的计算,我有一个问题:似乎每个脸的法线向量指向相同的方向,除非脸位于网格的x-、y-和z轴的一个极值处(在这种情况下,它们指向与其他法向量相反的方向)。这样,法线总是指向细胞的内部。为什么会这样呢?如果所有法线指向相同的方向(即最后一个法线指向网格的外部),这会产生什么样的效果。这是(作为解释的)一维非均匀网格的法线计算代码,但是对于2D和3D网格和网格,其原理似乎是相同的:

代码语言:javascript
复制
    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方向和速度,这是正确的吗?

在这种情况下,网格的最后法线在另一个方向上会导致计算边界通量的错误,不是吗?

谢谢你的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-01 14:22:02

正如代码中的注释所述

代码语言:javascript
复制
# 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。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66902218

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档