Управление коэффициентом адвекции в 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()

Как вы могли видеть, с течением времени волна движется в направлении, определяемом вектором коэффициента конвекции. Каким образом код для управления коэффициентом конвекции для волны движется только к центру моей области?

Любое предложение будет оценено!

1 ответ

Решение

Коэффициент конвекции контролирует направление бегущей волны. Например, чтобы волна всегда двигалась к центру области, измените коэффициент конвекции на

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

Это приведет к тому, что волна будет либо со скоростью 1, если волна находится в первой половине домена, либо со скоростью -1, если она находится во второй половине домена. Если начальная прямоугольная волна смещена от центра, она вернется в центр.

Другие вопросы по тегам