将PDE转换为适当的Fipy语法

时间:2016-09-03 03:44:16

标签: pde fipy

我想知道如何在FiPy中编写以下等式:

The messy equation in question

(如果有人好奇,它来自this type of model)。我在将右边第三个词翻译成FiPy代码时遇到了一些麻烦。在示例中,A和B都是变量。

我尝试了以下形式:

(ImplicitSourceTerm(coeff=chi_A) * (B.getGrad()) / \
 (numerix.sqrt(1 + lambda_ * (B.getGrad())^2))).getGrad()

但我想不可能.getGrad()不是变量。我欢迎任何帮助;非常感谢!

1 个答案:

答案 0 :(得分:2)

问题中术语的表示只是一种明确的表示。有两种方式以隐式方式表示术语。

A

的单个方程式

假设只有A被解析(A的单个等式),那么有问题的术语可以表示为ConvectionTerm

ConvectionTerm(coeff=chi_A * B.getGrad() / \
               numerix.sqrt(1 + lambda_ * B.grad.mag**2), var=A)

请参阅此FAQ

AB

的多个方程式

如果AB(多个方程式)一起求解,那么可以将方程耦合使得所讨论的项可以是{{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