You are on page 1of 9

Solving Diffusion Problem Crank Nicholson

Scheme
The 1D Diffusion Problem is:

T
T
(D )
t x
x
Here the diffusion constant is a function of T:

D T

5/ 2

We first define a function that is the integral of D:

z
D
T
Or equivalently,

z (1 f ) T 7/2
with constant f = 5/7.

John Crank
1916 2006

Phyllis Nicolson
1917 1968

Insert z back into the diffusion equation we find:

T z T
(
)
t x T x
The RHS is then turned into the Laplacian of function z:

T 2 z
2
t x
Now split both sides at the nth time step, we get:

Ti n 1 Ti n zin1 2 zin zin1

t
x 2

If we substitute z back we get an expression for the function value at n+1 time
step ... ? But wait

Lets look at the stability requirement. By simple algebra we get the


time step for this scheme to be stable is:

x 2
t
2D
This is roughly the diffusion time across one cell. A domain
containing hundreds of cells would require enormous time for
the diffusion to cause some noticeable effect. Thus we need
some scheme that allows us to take larger time steps but
retains stability. The trick here is to link the function value at nth time step with n+1 th time step. We write the differencing
scheme as:

Ti n 1 Ti n zin11 2 zin 1 zin11

t
x 2

This graph shows how this scheme works:

It can be proven that by using this implicit method, the scheme


becomes unconditionally stable for any step size chosen. Now lets
do the back substitution. It should be:

Ti n 1 Ti n
(1 f ) Ti n11(7/ 2) 2(1 f ) Ti n 1(7 / 2) (1 f ) Ti n11(7/ 2)

t
x 2
Instead of stability issues, it requires us to solve a complicated
nonlinear equation system at each time step. But theres a way to get
around this problem.
We can write the integral of D at the n+1 th time step, which causes
the nonlinearity as:

zin 1 z (Ti n 1 ) z (Ti n ) (Ti n 1 Ti n )

z
T

i ,n

z (Ti n ) (Ti n 1 Ti n ) D(Ti n )


Now we make the n+1 dependence on the RHS linear. Do the substitution,
we get:

(Ti n1 )5/2 Ti n11 (2(Ti n )5/2 h)Ti n 1 (Ti n1 )5/2 Ti n11

ai

bi

ci

f [(Ti n1 )7/2 2(Ti n )7/2 (Ti n1 )7/ 2 ] h(Ti n )

ri
where

x 2
h
t

We define the coefficients as above then the equation becomes:


n 1
n 1
aiTi n11 bT

c
T
i i
i i 1 ri

The problem is then transformed into solving a tridiagonal matrix:

* taken from Numerical Recipies


This matrix can easily be solved by back substitution scheme, which
can be found in any elementary numerical method book.
Go 2D
Now consider the 2D diffusion problem.

T
T

T
(D ) (D )
t x
x
y
y
The 2D Crank-Nicholson scheme is essentially the same as the
1D version, we simply use the operator splitting technique to
extend the method to higher dimensions. Explicitly, the
scheme looks like this:

Step 1. evolve half time step on x direction with y direction variance attached
n 5/ 2
n 1/ 2
n
5/ 2 n 1/2
(Ti n1, j )5/ 2 Ti n1,1/2

2(
T
)

h
)
T

(
T
)
Ti 1, j
j
i, j
i, j
i 1, j

ai

ci

bi

f [(Ti n1, j )7/2 2(Ti ,nj ) 7/2 (Ti n1, j )7/2 ] h(Ti ,nj )
g (1 f )[(Ti ,nj 1 )7/2 2(Ti ,nj ) 7/ 2 (Ti ,nj 1 )7/ 2 ]

ri
2x 2
where h
t

x 2
g 2
y

Step 2. evolve another half time step on y direction with x direction


variance attached.
5/2 n 1
(Ti ,nj1/1 2 )5/ 2 Ti ,nj11 (2(Ti ,nj1/2 )5/2 h)Ti ,nj1 (Ti ,nj1/2
)
Ti , j 1
1

ai

ci

bi

7/ 2
n 1/ 2 7/ 2
n 1/2 7/ 2
n 1/2
f [(Ti ,nj1/2
)

2(
T
)

(
T
)
]

h
(
T
)
1
i, j
i , j 1
i, j
7/2
n 1/2 7/2
n 1/2 7/2
g (1 f )[(Ti n1,1/2
)

2(
T
)

(
T
]
j
i, j
i 1, j )

ri
2y 2
where h
t

y 2
g 2
x

Since the sweeps on different directions are identical, it is possible


to solve a multidimensional diffusion problem by a single
subroutine.

In solving Euler equation with diffusion, we can use operator


splitting: solve the usual Euler equation by splitting on different
directions thru time step dt to get the density, velocity and
pressure. Then from the pressure at each grid, find the
temperature distribution, do a Crank-Nicholson calculation with the
same time step dt (here we still need to split dt) to find a new
temperature distribution. Then use this temperature distribution to
find pressure distribution again. This is the actual pressure
distribution at dt. Then go on to the next time step.

You might also like