【发布时间】:2018-02-17 01:15:52
【问题描述】:
我在 FiPy 的帮助下通过各种结构对电流进行建模。为此,我求解了电势的拉普拉斯方程。然后,我使用欧姆定律推导出场,并在电导率的帮助下获得电流密度。
FiPy 将电位存储为以细胞为中心的变量,并将其梯度存储为以面为中心的变量,这对我来说很有意义。我有两个关于以人脸为中心的变量的问题:
如果我有二维或三维问题,FiPy 会计算所有方向(ddx、ddy、ddz)的梯度。渐变是一个 FaceVariable,它总是定义在两个单元中心之间的面上。对于结构化(四边形)网格,只有一个导数应该大于零,因为对于任何面,所涉及的两个单元中心的位置应该只在一个坐标上不同。然而,在我的模拟中,经常出现不止一个导数(ddx、ddy、ddz)大于零,即使对于结构化网格也是如此。
该手册对 FaceGrad-Method 进行了以下解释: 使用法线方向的差分(二阶梯度)将梯度(phi)作为 rank-1 FaceVariable 返回。
我看不出,这与我上面指出的理解有何不同。
是什么让它更成问题:每当包含“太多”衍生物时,电流似乎并不守恒,即使在我建模的最简单的结构中也是如此......有没有一种聪明的方法可以访问存储在 face-centered 变量中的数据?假设我想计算通过我的建模结构的电流。
截至目前,我将存储在 FaceVariable 中的数据保存为 tsv 文件。这会产生一个包含 (x,y,z) 位置和 (ddx, ddy, ddz) 值的表。我读取文件并将数据保存到数组中以在 Python 中使用它。这似乎违反直觉,真的很不方便。能够沿某些平面或某些点访问 FaceVariable 会好很多。
【问题讨论】:
-
您如何确定当前的连续性?
-
我有两个外部面,其中 Dirichlet 边界条件,即施加电压。我计算通过这个边界的总电流和通过另一个边界流出的电流。有时这些值相差几个百分点,这不应该是这种情况......(这也适用于简单的几何形状,如二维矩形......)
-
你是如何计算电流的?
-
通过欧姆定律。电导率 x 梯度(电位)= 电流密度
-
你用的是什么表达方式?正如我在回答中引用的 Jupyter 笔记本所示,您在计算此值时可能做出的每个选择都会产生影响。
标签: python simulation fipy