0

我在 FiPy 的帮助下通过各种结构对电流进行建模。为此,我求解了电势的拉普拉斯方程。然后,我使用欧姆定律导出场,并在电导率的帮助下获得电流密度。

FiPy 将电位存储为以细胞为中心的变量,并将其梯度存储为以面为中心的变量,这对我来说很有意义。我有两个关于以人脸为中心的变量的问题:

  1. 如果我有二维或三维问题,FiPy 会计算所有方向的梯度(ddx、ddy、ddz)。渐变是一个 FaceVariable,它总是定义在两个单元中心之间的面上。对于结构化(四边形)网格,只有一个导数应该大于零,因为对于任何面,所涉及的两个单元中心的位置应该只在一个坐标上不同。然而,在我的模拟中,经常出现不止一个导数(ddx、ddy、ddz)大于零,即使对于结构化网格也是如此。
    该手册对 FaceGrad 方法给出了以下解释: 使用法线方向的差分(二阶梯度)将梯度(phi)作为 rank-1 FaceVariable 返回。
    我看不出,这与我上面指出的理解有何不同。
    是什么使它更成问题:每当包含“太多”衍生物时,即使在我建模的最简单结构中,电流似乎也不守恒......

  2. 有没有一种聪明的方法来访问存储在以人脸为中心的变量中的数据?假设我想计算通过我的建模结构的电流。
    截至目前,我将存储在 FaceVariable 中的数据保存为 tsv 文件。这会产生一个包含 (x,y,z) 位置和 (ddx, ddy, ddz) 值的表。我读取文件并将数据保存到数组中以在 Python 中使用它。这似乎违反直觉,真的很不方便。能够沿某些平面或某些点访问 FaceVariable 会好得多。

4

1 回答 1

1
  1. 文档没有说清楚,但.faceGrad包括切向分量,这些分量不仅仅是相邻单元中心值。请参阅这个 Jupyter 笔记本,了解 FiPy 可以计算的不同类型梯度的显式表达式(是的,这些东西应该进入文档:#560)。

  2. 该值可使用 访问,myFaceVar.value坐标使用myFaceVar.mesh.faceCenters。FiPy 是围绕非结构化网格设计的,因此获取任意切片并非易事。CellVariable对象通过调用支持插值myCellVar((xs, ys, zs)),但FaceVariable对象不支持。请参阅此讨论

于 2018-02-16T17:15:52.820 回答