FiPy中的FaceVariables

2024-04-25 10:05:21 发布

您现在位置:Python中文网/ 问答频道 /正文

在FiPy的帮助下,我正在模拟各种结构的电流。为此,我解了拉普拉斯的电势方程。然后,我用欧姆定律来推导电场,并借助电导率,得到电流密度。在

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

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

  2. 有没有一种聪明的方法可以访问以面部为中心的变量中存储的数据?假设我想计算通过模型结构的电流。
    现在,我将存储在FaceVariable中的数据保存为tsv文件。这将生成一个包含(x,y,z)-位置和(ddx,ddy,ddz)-值的表。我读取文件并将数据保存到数组中,以便在Python中使用它。这似乎有违直觉,而且非常不方便。如果能够沿着某些平面或在某些点访问FaceVariable会更好。


Tags: 数据方法网格方向中心结构单元电流
1条回答
网友
1楼 · 发布于 2024-04-25 10:05:21
  1. 文档没有明确说明,但是.faceGrad包含了切向分量,这些分量不仅仅是相邻的单元中心值。 请参见this Jupyter notebook以获取FiPy可以计算的不同类型渐变的显式表达式(是的,这部分内容应该放在文档中:#560)。

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

相关问题 更多 >