首页 > 解决方案 > 使用隐式源项在 python 中求解 pde

问题描述

我想使用 fipy 在 python 中解决以下 3 个耦合 pdes

∇2n − (∇2ψ)n − (∇ψ).∇n = n/10, 
∇2p + (∇2ψ)p + (∇ψ).∇p = p/10,
∇2ψ = −(p − n) 

变量pnψ。从第一个和第二个方程可以看出,第一项可以设置为fipy中pde求解器中的扩散项。如果将第一个和第二个方程的其他项合并到 fipy pde 求解器中,我想它们应该合并到 fipy 中的隐式源项中。但是考虑到这些术语中向量恒等式的存在,我在将这些方程合并到 fipy pde 求解器中时遇到了一些困难。对此的任何帮助将不胜感激。

标签: pythonpdefipy

解决方案


假设2你的方程中出现的实例是 nabla (del) 运算符的平方,你当然可以为第一个方程写:

DiffusionTerm(var=n) - ImplicitSourceTerm(coeff=psi.faceGrad.divergence, var=n) - psi.grad.dot(n.grad) == ImplicitSourceTerm(coeff=1./10, var=n)

然而,这不是一个非常隐含的表示。

更好的是应用链式法则:

$\nabla (n \nabla \psi) \equiv \nabla n \cdot \nabla \psi + n \nabla^2 \psi$

这样

$\nabla^2 n - \nabla(n \nabla psi) == n / 10$

这时候

DiffusionTerm(var=n) - DiffusionTerm(coeff=n, var=psi) == ImplicitSourceTerm(coeff=1./10, var=n)

如果你想耦合你的方程,并且

DiffusionTerm(var=n) - ConvectionTerm(coeff=psi.faceGrad, var=n) == ImplicitSourceTerm(coeff=1./10, var=n)

如果你不这样做。


推荐阅读