1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| from fipy import *
from math import *
a = 0.25
b = 0.75
d = 20
nx = 20
ny = nx
dx = 1.
dy = dx
L = dx * nx
mesh = Grid2D(dx=dx, dy=dy, nx=nx, ny=ny)
u = CellVariable(name = "concentration u", mesh = mesh, hasOld=True, value = 0.5)
v = CellVariable(name = "concentration v", mesh = mesh, hasOld=True, value = 0.5)
D = 1.
eqn0 = TransientTerm(var=u) == a - u + u*u*v + DiffusionTerm(1, var=u)
eqn1 = TransientTerm(var=v) == b - u*u*v + DiffusionTerm(d, var=v)
eqn = eqn0 & eqn1
#pas d'échange avec l'extérieur -> conditions de Neumann
u.faceGrad.constrain(((0,),(0,)), where=mesh.facesTop)
u.faceGrad.constrain(((0,),(0,)), where=mesh.facesBottom)
u.faceGrad.constrain(((0,),(0,)), where=mesh.facesRight)
u.faceGrad.constrain(((0,),(0,)), where=mesh.facesLeft)
v.faceGrad.constrain(((0,),(0,)), where=mesh.facesTop)
v.faceGrad.constrain(((0,),(0,)), where=mesh.facesBottom)
v.faceGrad.constrain(((0,),(0,)), where=mesh.facesRight)
v.faceGrad.constrain(((0,),(0,)), where=mesh.facesLeft)
vi = Viewer((u, v))
for t in range(1):
u.updateOld()
v.updateOld()
eqn.solve(dt=1.e-3)
vi.plot() |
Partager