我想知道如何在FiPy中编写以下等式:
(如果有人好奇,它来自this type of model)。我在将右边第三个词翻译成FiPy代码时遇到了一些麻烦。在示例中,A和B都是变量。
我尝试了以下形式:
(ImplicitSourceTerm(coeff=chi_A) * (B.getGrad()) / \
(numerix.sqrt(1 + lambda_ * (B.getGrad())^2))).getGrad()
但我想不可能.getGrad()不是变量。我欢迎任何帮助;非常感谢!
答案 0 :(得分:2)
问题中术语的表示只是一种明确的表示。有两种方式以隐式方式表示术语。
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
(多个方程式)一起求解,那么可以将方程耦合使得所讨论的项可以是{{1}的扩散项}作为要解决的变量(术语的因变量),
B
然后需要耦合DiffusionTerm(coeff=chi_A * A / \
numerix.sqrt(1 + lambda_ * B.grad.mag**2), var=B)
和A
的等式,
B
请参阅this example。
这个选择(耦合)更好,因为coupled_eqn = eqn_A & eqn_B
的显式时间步长限制比B
对该术语的时间步长限制更严格。
问题中的语法A
不正确,应为(B.getGrad())^2
。