Model crashes while solving advection diffusion equation
I am using excel VBA to solve the advection diffusion equation. I have used Van Leer TVD scheme to solve the advection term and I used central difference second order for the diffusion term. My model runs smoothly until I use the value of diffusion coefficient as 30 m2/s. However, when I increase the value of D beyond 30 m2/s the model shows a lot of oscillation. I don't know why the model is behaving this way. Is there any way I can control this oscillation ? Please suggest me what can I do to solve this issue. BTW, I am using explicit scheme to solve advection diffusion equation.
How do you control the timestep? Does reducing the timestep reduce the oscillations? Are you solving the linear adv diff equation?
First if your diffusion coefficient is not zero,TVD scheme are not essential.
Anyway you have a stability condition which implies the diffusion coefficient which is:
dt<(dx²)/(2D) where dt isthe time step and dx the space step.
As suggested by cfdnewbie try to reduce the time step and it should be ok
if the reducing the time step is not good enough or take too much cpu to progress in time, you can of course solve the diffusion term implicitly while still solving for the advective term explicitly. In most applications second order space derivatives (diffusive) terms are solved implicitly as this provides stability, while even a small time step cannot always guarantee stability especially on a very long running time.
Note that the condition on the explicit time step is to make sure that the numerical solver advances faster than the processes taking place in the flow and this has to be realized everywhere in the flow at all times.
For advective terms the maximum speed of the propagation is usually taken to be sound speed (though it is really the sound speed + the flow speed), such that the integration has to be faster than that:
dx/dt > Cs , which gives dt < dx/Cs [or dt < dx/ (Cs + V) ]
where dx is the grid space and dt is the time step and Cs is the sound speed (and V is the flow speed). So you get some dt_adv, a restriction on the time step dt given by advection.
For the diffusion term, dt is dictated by the condition given in the post of leflix above. And you get a restriction on dt dictated by the diffusion term where dt < dt_diff
You have to make sure the time step is smaller than the smallest :
dt < min (dt_diff, dt_adv)
That's for the explicit time marching methods.
|All times are GMT -4. The time now is 11:23.|