- #1
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
[tex]\frac{\partial u}{\partial t} = \frac{\partial^2 u}{\partial x^2} + f(u),[/tex]
where, e.g., [tex]f(u) = u(1-u)[/tex] for the Fisher-Kolmogorov eqation, and I'm assuming the spatial domain is the unit interval with Neumann boundary conditions:
[tex]\frac{\partial u}{\partial x}(0, t) = 0, \; \frac{\partial u}{\partial x}(1, t) = 0, \; t\geq 0.[/tex]
To keep things totally simple, I'm using the backward Euler method. When the original equation is just the heat equation, i.e., [tex]f = 0[/tex], this method just involves solving a simple matrix equation,
[tex]BU^{n+1} = U^n,[/tex]
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:
[tex]BU^{n+1} + F(U^{n+1}) = U^n,[/tex]
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
[tex]\frac{\partial u}{\partial t} = \frac{\partial^2 u}{\partial x^2} + f(u),[/tex]
where, e.g., [tex]f(u) = u(1-u)[/tex] for the Fisher-Kolmogorov eqation, and I'm assuming the spatial domain is the unit interval with Neumann boundary conditions:
[tex]\frac{\partial u}{\partial x}(0, t) = 0, \; \frac{\partial u}{\partial x}(1, t) = 0, \; t\geq 0.[/tex]
To keep things totally simple, I'm using the backward Euler method. When the original equation is just the heat equation, i.e., [tex]f = 0[/tex], this method just involves solving a simple matrix equation,
[tex]BU^{n+1} = U^n,[/tex]
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:
[tex]BU^{n+1} + F(U^{n+1}) = U^n,[/tex]
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.