Python Fipy中对流系数的处理:对流扩散方程

Python Fipy中对流系数的处理:对流扩散方程,python,vector,pde,coefficients,fipy,Python,Vector,Pde,Coefficients,Fipy,我正在尝试使用fipy在python中求解对流扩散方程。我想操纵对流系数,使它指向区域的中心 我的代码是 from fipy import * # Setting mesh and discretising space nx = 10 dx = 1. mesh = Grid1D(nx=nx, dx=dx) x = mesh.cellCenters[0] # Setting variable of results and adding inicial conditions phi = Cell

我正在尝试使用fipy在python中求解对流扩散方程。我想操纵对流系数,使它指向区域的中心

我的代码是

from fipy import *

# Setting mesh and discretising space
nx = 10
dx = 1.
mesh = Grid1D(nx=nx, dx=dx)
x = mesh.cellCenters[0]

# Setting variable of results and adding inicial conditions
phi = CellVariable(name="solution variable", mesh=mesh, value=0.)
phi.setValue(1., where=(4 < x) & (6 > x))

# Plotting inicial conditions
if __name__ == '__main__':
    viewer = Viewer(vars=phi, datamin=-0.1, datamax=1.5)
    viewer.plot()

# Diffusion and convection coefficients
D = 1.
C = (1.,)

# Setting PDE
eqX = TransientTerm() == DiffusionTerm(coeff=D) - \
                     ConvectionTerm(coeff=C)

# Solving Transient term
timeStepDuration = 0.1
steps = 15
t = timeStepDuration * steps

for step in range(steps):
eqX.solve(var=phi, dt=timeStepDuration)

# Plotting results
if __name__ == '__main__':
    viewer = Viewer(vars=phi, datamin=0., datamax=1.)
    viewer.plot()
从fipy导入*
#设置网格和离散化空间
nx=10
dx=1。
网格=Grid1D(nx=nx,dx=dx)
x=网格。单元中心[0]
#设置结果变量并添加特殊条件
φ=单元变量(name=“solution variable”,网格=网格,值=0。)
φ设置值(1,式中=(4x))
#恶劣条件
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
查看器=查看器(vars=phi,datamin=-0.1,datamax=1.5)
viewer.plot()
#扩散和对流系数
D=1。
C=(1.,)
#设置PDE
eqX=瞬变项()=扩散项(系数=D)-\
对流项(系数=C)
#求解瞬态项
timeStepDuration=0.1
步骤=15
t=时间步长持续时间*步长
对于步进范围(步数):
方程求解(var=phi,dt=timeStepDuration)
#绘图结果
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
查看器=查看器(vars=phi,datamin=0,datamax=1。)
viewer.plot()
如你所见,随着时间的推移,波的运动方向由对流系数的矢量确定。当波只向我的区域中心移动时,如何处理对流系数的代码


任何建议都将不胜感激

对流系数控制行波的方向。例如,要使波始终朝域中心移动,请将对流系数更改为

C = CellVariable(mesh=mesh, rank=1)
C[:] = 1.
C.setValue(-1., where=x > 5.)

如果波位于域的前半部分,这将使波以1的速度平流;如果波位于域的后半部分,则以-1的速度平流。如果初始方波偏离中心,则它将返回中心。

您好,我已将您的建议放入我的代码中,但它不起作用。它返回一个错误,指示对流系数必须是向量。抱歉,我省略了
rank=1
参数,使系数成为向量。