在无通量边界条件的半无限域上数值求解耦合偏微分方程

计算科学 pde 数学 耦合
2021-12-18 03:19:51

我有以下 PDE 系统,我为其提供了参数γ,τμ,

Tt= γ(L+τFT)Ft=Fx(FLT)Lt= μLxx+(FLT)

无通量边界条件为x=0x=为了FL. 初始条件是L=T=F=ex2.

Mathematica 未能产生结果,因为边界条件中导数的阶数为F,(Fx(0)=Fx()=0)与导数的阶相同Fx在 PDE 中。

Mathematica 的任何替代品?

2个回答

这是我拼凑的东西,它肯定是不正确的,因为程序正在抛出错误。特别是,SolutionVariableNumberError提出了一个。这可能是因为方程写错了。可能的嫌疑人,我猜是在SourceTerm's。这是一个关于如何在 FiPy 中求解这些方程的开始。

也许论坛中的某个人对这个工具有更多的经验,并且可以详细说明这里出了什么问题。除此之外,如果您想继续使用此工具,我建议您阅读和学习更多 FiPy 的示例您也可以发布到他们的邮件列表,并在编写方程式时寻求帮助。我已经看到其他人在列表中这样做,因为我已经关注了一段时间。项目维护人员非常有帮助。(我与该项目无关,我只是一个粉丝)。

from fipy import CellVariable
from fipy import DiffusionTerm
from fipy import Grid1D
from fipy import ImplicitSourceTerm
from fipy import numerix
from fipy import PowerLawConvectionTerm
from fipy import TransientTerm

mu = 1.
gam = 1.
tau = 1.

m = Grid1D(nx=100,Lx=1.)

L = CellVariable(mesh=m, hasOld=True)
F = CellVariable(mesh=m, hasOld=True)
T = CellVariable(mesh=m, hasOld=True)

x = m.cellCenters

L.value = numerix.exp(-x**2)
F.value = numerix.exp(-x**2)
T.value = numerix.exp(-x**2)

eqn0 = TransientTerm(var=L) == DiffusionTerm(mu, var=L) + (ImplicitSourceTerm(var=F) - ImplicitSourceTerm(var=L*T))
eqn1 = TransientTerm(var=F) == PowerLawConvectionTerm(-1., F) - (ImplicitSourceTerm(var=F) - ImplicitSourceTerm(var=L*T))
eqn2 = TransientTerm(var=T) == gam * (ImplicitSourceTerm(1., var=L) + ImplicitSourceTerm(tau, var=F) + ImplicitSourceTerm(-1.,var=T))

eqn = eqn0 & eqn1 & eqn2

for t in range(100):
    L.updateOld()
    F.updateOld()
    T.updateOld()
    eqn.solve(dt=1.e-3)

看看你的边界条件是什么,你应该使用光谱(Galerkin)方法。我正在尝试解决一些类似的问题,但是在 9 个维度中,并且将无限场衰落视为边界条件的方法是使用 galerkin 方法。

可能使用像这样的基础Fk(x)=eαx2sin(kx). 尽管您应该更多地研究可能的基础。

这里边界条件隐含在基的选择中,因为每个函数都已经满足它们。

然后,您应该对初始条件进行级数扩展(例如傅立叶级数,但使用新的基础)。女巫会给你一个用于级数展开系数的 ODE-s 系统。

我希望这有任何帮助。