mercurial
- 14
- 0
To the moderator: please move this to the section on differential equations if you think it would be better there.
I'm looking at a reaction-diffusion equation of the form
\frac{\partial u}{\partial t} = \frac{\partial^2 u}{\partial x^2} + f(u),
where, e.g., f(u) = u(1-u) for the Fisher-Kolmogorov eqation, and I'm assuming the spatial domain is the unit interval with Neumann boundary conditions:
\frac{\partial u}{\partial x}(0, t) = 0, \; \frac{\partial u}{\partial x}(1, t) = 0, \; t\geq 0.
To keep things totally simple, I'm using the backward Euler method. When the original equation is just the heat equation, i.e., f = 0, this method just involves solving a simple matrix equation,
BU^{n+1} = U^n,
for evolving the solution from time step n to n+1. The matrix of course depends on the boundary conditions. The nonlinear version of Euler's method involves a nonlinear multi-variable equation:
BU^{n+1} + F(U^{n+1}) = U^n,
which can be solved for each time step using Newton's method.
Where I'm getting confused is: exactly how do I incorporate the boundary conditions when deriving the system of nonlinear equations? My reasoning tells me that they should be the same as for the linear equation, i.e., the matrices B are the same for both the linear and nonlinear systems.
My solver works perfectly for the heat equation with Neumann conditions, but gives only garbage for the Fisher-Kolmogorov equation after the first time step (if it converges at all). I'm convinced that the problem is not a bug in programming Newton's method. Anyway I'm using a library for that, and I've checked the functions I've supplied a thousand times already. Anyone here have experience with nonlinear parabolic equations? They're not the kind of thing that's typically covered in basic numerical analysis texts.
I'm looking at a reaction-diffusion equation of the form
\frac{\partial u}{\partial t} = \frac{\partial^2 u}{\partial x^2} + f(u),
where, e.g., f(u) = u(1-u) for the Fisher-Kolmogorov eqation, and I'm assuming the spatial domain is the unit interval with Neumann boundary conditions:
\frac{\partial u}{\partial x}(0, t) = 0, \; \frac{\partial u}{\partial x}(1, t) = 0, \; t\geq 0.
To keep things totally simple, I'm using the backward Euler method. When the original equation is just the heat equation, i.e., f = 0, this method just involves solving a simple matrix equation,
BU^{n+1} = U^n,
for evolving the solution from time step n to n+1. The matrix of course depends on the boundary conditions. The nonlinear version of Euler's method involves a nonlinear multi-variable equation:
BU^{n+1} + F(U^{n+1}) = U^n,
which can be solved for each time step using Newton's method.
Where I'm getting confused is: exactly how do I incorporate the boundary conditions when deriving the system of nonlinear equations? My reasoning tells me that they should be the same as for the linear equation, i.e., the matrices B are the same for both the linear and nonlinear systems.
My solver works perfectly for the heat equation with Neumann conditions, but gives only garbage for the Fisher-Kolmogorov equation after the first time step (if it converges at all). I'm convinced that the problem is not a bug in programming Newton's method. Anyway I'm using a library for that, and I've checked the functions I've supplied a thousand times already. Anyone here have experience with nonlinear parabolic equations? They're not the kind of thing that's typically covered in basic numerical analysis texts.