我想知道如何在 FiPy 中编写以下方程:
(如果有人好奇,它来自 this type of model )。我在将右侧第三项翻译成 FiPy 代码时遇到了一些麻烦。在示例中,A 和 B 都是变量。
我尝试了以下形式:
(ImplicitSourceTerm(coeff=chi_A) * (B.getGrad()) / \
(numerix.sqrt(1 + lambda_ * (B.getGrad())^2))).getGrad()
但我想人们不能 .getGrad() 不是变量的东西。我欢迎任何帮助;非常感谢!
最佳答案
问题中术语的表示只是明确的表示。有两种方法可以隐式地表示该术语。
A
的单个方程
仅假设 A
正在求解( A
的单个方程),那么所讨论的项可以表示为 ConvectionTerm
.
ConvectionTerm(coeff=chi_A * B.getGrad() / \
numerix.sqrt(1 + lambda_ * B.grad.mag**2), var=A)
查看此FAQ .
A
的多重方程和B
如果A
正在与 B
一起解决(多个方程),那么可以将方程耦合起来,以便所讨论的项可以是具有 B
的扩散项作为要求解的变量(项的因变量),
DiffusionTerm(coeff=chi_A * A / \
numerix.sqrt(1 + lambda_ * B.grad.mag**2), var=B)
A
的方程和B
然后需要耦合,
coupled_eqn = eqn_A & eqn_B
参见this example .
这个选择(耦合)更好,因为 B
上有明确的时间步长限制。比 A
的时间步限制更严格对于相关术语。
注意
语法,(B.getGrad())^2
问题中的内容不正确,应该是B.grad.mag**2
.
关于pde - 将偏微分方程转换为正确的 Fipy 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39303034/