【问题标题】:How can I express the term like diffusion term?我如何表达像扩散项这样的术语?
【发布时间】:2020-07-28 03:29:59
【问题描述】:

如何在 FIPY 中使用转置矩阵来表达类似于扩散项的术语?

【问题讨论】:

  • \phi 是向量吗?如果不是,我什至不确定那个表达是什么意思。
  • 是的,它是一个向量。

标签: fipy


【解决方案1】:

我没有看到如何使用@wd15 的建议来使用各向异性扩散系数来实现转置。

通过爱因斯坦符号来工作,在我看来,它看起来像:

也许这是一个明显的结果,但对我来说并不明显。

FiPy 没有代表这个的Term,所以我认为你只需要明确地计算它,例如

grad_div_phi = phi.divergence.grad
u_eq = TransientTerm(...) == ... + grad_div_phi.dot([1, 0, 0])
v_eq = TransientTerm(...) == ... + grad_div_phi.dot([0, 1, 0])
w_eq = TransientTerm(...) == ... + grad_div_phi.dot([0, 0, 1])

如果@wd15 同意我对这个术语的解释,他可能会看到一种更隐含的方式将其纳入你的方程式。

【讨论】:

  • 我认为数学等同于我的答案,因此上述隐式公式将起作用。也可能没有耦合方程,但有一部分隐式和一部分显式。
  • 感谢您的帮助。这对我帮助很大。祝你有美好的一天。
【解决方案2】:

FiPy 允许以下形式的一般扩散术语

系数需要 2D 中的 2x2 分量或 3D 中的 3x3 分量,但在每个分量中仍然可以在空间上变化。有关详细信息,请参阅FiPy FAQ


更新的解决方案

现在我明白了以上内容并不是特别有用 应该是一个向量。让我们假设一组方程的形式,

其中 k 没有求和,但表示方程和 的部分分量正在求解。这导致以下扩散项,

在你的情况下。在 FiPy 中,您需要用多个扩散项来表示这一点,因为现在每个方程中要求解的变量不止一个。假设我们有 k=x,y,那么只有第一个方程的扩散项才会是

eq_x = ... ==
DiffusionTerm(coeff=[[1, 0], [0, 0]], var=phi_x) + DiffusionTerm(coeff=[[0, 1], [0, 0]], var=phi_y)

然后需要使用eq = eq_x & eq_y 将方程组合成一个方程

【讨论】:

  • 谢谢。我知道一般的扩散术语,但它有一点不同。我会再试一次。
  • 非常感谢。我会仔细研究你的方法。
猜你喜欢
  • 1970-01-01
  • 2014-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多