cfd lecture 3

Post on 10-Dec-2015

230 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

This is a lecture note on CFD subject taught at University of Melbourne. It focuses on ODE topic. This is the 3rd lecture note on this subject

TRANSCRIPT

ENGR90024 COMPUTATIONAL FLUID DYNAMICS

Lecture O03

Analysis of the Euler’s Method!

!

Higher Order Taylor MethodIn general, Euler’s method is not very accurate because it is derived by truncating Taylor series at Δt2.

Taylor series

�(tl+1) = �(tl) +�t

1!

d�

dt

����tl

Euler’s method

�(tl+1) = �(tl) +�t

1!f(tl,�l)

To get a more accurate formula, we will derive a formula by truncating Taylor series at Δt3

Taylor series

�(tl+1) = �(tl) +�t

1!

d�

dt

����tl

+�t2

2!

d2�

dt2

����tl

Taylor method order 2

�(tl+1) = �(tl) +�t

1!f(tl,�l)

+�t2

2!

d2�

dt2

����tl

�(tl+1) = �(tl) +�t

1!f(tl,�l) +

�t2

2!

d2�

dt2

����tl

�(tl+1) = �(tl) +�t

1!f(tl,�l) +

�t2

2!

d

dt

d�

dt

����tl

�(tl+1) = �(tl) +�t

1!f(tl,�l) +

�t2

2!

d

dtf(t,�(t))

����tl

�(tl+1) = �(tl) +�t

1!f(tl,�l) +

�t2

2!

✓@f

@t(tl,�l) +

@f

@�(tl,�l)

d�

dt

�(tl+1) = �(tl) +�t

1!f(tl,�l) +

�t2

2!

✓@f

@t(tl,�l) +

@f

@�(tl,�l)f(tl,�l)

Chain rule

�(tl+1) = �(tl) +�t

1!f(tl,�l) +

�t2

2!

✓@f

@t(tl,�l) +

@f

@�(tl,�l)f(tl,�l)

◆O03.1

Equation (O03.1) is called the Taylor Method order 2. It is!more accurate than the Euler’s method because it has a local!truncation error O(Δt3)

Taylor method order 2•Advantage - More accurate•Disadvantage - Need to calculate derivatives of f(t,ɸ)

Example O03.1: !Using Taylors method order 2, solve !!!!!For 0 < t < 8 with ɸ(t=0)=0 and a) Δt=2 b) Δt=1 c) Δt=0.5 d) Δt=0.1 !Compare your solution with Euler’s method

d�

dt= 1� �

@f

@�= �1

For this question

�(tl+1) = �(tl) +�t

1!f(tl,�l) +

�t2

2!

✓@f

@t(tl,�l) +

@f

@�(tl,�l)f(tl,�l)

Taylors method order 2

We need to find all terms in the equation above

f(t,�) = 1� �

@f

@t= 0

�(tl+1) = �(tl) +�t

1!f(tl,�l) +

�t2

2!

✓@f

@t(tl,�l) +

@f

@�(tl,�l)f(tl,�l)

f(t,�) = 1� � @f

@t= 0

�(tl+1) = �(tl) +�t

1!(1� �l) +

�t2

2!

�0 + 1(1� �l)

�l+1 = �l +�t

1!(1� �l) +

�t2

2!

�1� �l

@f

@�= �1

function MPO03p1() clear all; close all; Delta_t=0.5; phi(1)=0.0; t=0:Delta_t:8.0 for l=1:length(t)-1 phi(n+1)=phi(n)+Delta_t*(1-phi(l))-(Delta_t^2/2)*(1-phi(l)) end plot(t,phi,'ko-') hold on ezplot(@(t)1-exp(-t),[0,8,0,2]) xlabel('t'); ylabel('\phi'); legend('Euler','True');

function MPO02p1() clear all; close all; Delta_t=2.0; t=0:Delta_t:8.0 phi(1)=0.0; for l=1:length(t)-1 phi(l+1)=phi(l)+Delta_t*(1-phi(l)) end plot(t,phi,'ko-') hold on ezplot(@(t)1-exp(-t),[0,8,0,2]) xlabel('t'); ylabel('\phi'); legend('Euler','True');

Euler’s method!Example O02.1

�l+1 = �l +�t(1� �l)

Taylor method order 2!Example O03.1

�l+1 = �l +�t

1!(1� �l) +

�t2

2!

�1� �l

Only need!to change one!line of code!

function MPO03p1() clear all; close all; Delta_t=0.5; phi(1)=0.0; t=0:Delta_t:8.0 for l=1:length(t)-1 phi(l+1)=phi(l)+Delta_t*(1-phi(l))-(Delta_t^2/2)*(1-phi(l)) end plot(t,phi,'ko-') hold on ezplot(@(t)1-exp(-t),[0,8,0,2]) xlabel('t'); ylabel('\phi'); legend('Euler','True');

Output

0 1 2 3 4 5 6 7 80

0.2

0.4

0.6

0.8

1

1.2

1.4

1.6

1.8

2

t

φ

Taylor 2nd OrderTrueNote: the

Taylor method for Δt=2 predicts ɸ=0 for all values of t!

0 1 2 3 4 5 6 7 80

0.2

0.4

0.6

0.8

1

1.2

1.4

1.6

1.8

2

t

φ

Taylor 2nd OrderTrue

0 1 2 3 4 5 6 7 80

0.2

0.4

0.6

0.8

1

1.2

1.4

1.6

1.8

2

t

φ

Taylor 2nd OrderTrue

0 1 2 3 4 5 6 7 80

0.2

0.4

0.6

0.8

1

1.2

1.4

1.6

1.8

2

t

φ

Taylor 2nd OrderTrue

0 1 2 3 4 5 6 7 80

0.2

0.4

0.6

0.8

1

1.2

1.4

1.6

1.8

2

t

φ

Taylor 2nd OrderTrue

Δt=2.0 Δt=1.0

Δt=0.5 Δt=0.1

0 1 2 3 4 5 6 7 80

0.2

0.4

0.6

0.8

1

1.2

1.4

1.6

1.8

2

t

φ

Taylor 2nd OrderTrue

Δt=1.0

0 1 2 3 4 5 6 7 80

0.2

0.4

0.6

0.8

1

1.2

1.4

1.6

1.8

2

t

1−exp(−t)

φ

EulerTrue

Δt=1.0

0 1 2 3 4 5 6 7 80

0.2

0.4

0.6

0.8

1

1.2

1.4

1.6

1.8

2

t

φ

Taylor 2nd OrderTrue

Δt=0.5

0 1 2 3 4 5 6 7 80

0.2

0.4

0.6

0.8

1

1.2

1.4

1.6

1.8

2

t

φ

EulerTrue

Δt=0.5

Euler Taylor 2nd order

For a given Δt, the Taylor 2nd order method is more accurate than Euler

End of Example O03.1

STABILITY OF THE EXPLICIT EULER METHOD

(SEE PAGE 8 PRINTED LECTURE NOTES)

• In Lecture O02, we looked at the accuracy of the explicit Euler method. Let’s now look at the stability of the Euler method.!

• We know from previous lecture, the smaller Δt, the more accurate the solution, i.e. the truncation error go to zero. This feature is known as consistency.!

• When we make Δt big enough, the solution will “blow up”. Can we predict the value of Δt where the solution will “blow up”? For a numerical method to be useful, we need it to be stable.

• Stability and consistency are two quite different things (see later). It ispossible for a method can be consistent but not stable.

• If a numerical method is both consistent and stable, it is convergent.

• To carry out stability analysis, consider the model problem

d�

dt= �� (O03.2)

where λ is a constant and is a complex number

� = �Re + i�Im

In many engineering problems, λRe is zero or negative. Forstability analysis, you will always assume that λRe is zero ornegative.

Find analytical solution!at time level lΔt

Find approximated Euler’s! solution at time level lΔt

CompareStrategy d�

dt= ��

The analytical solution for Eq. (O03.2) can be written as

where ɸ1 is the initial value of ɸ

�(t) = �1e�t

= �1e(�Re+i�Im)t

= �1e�Retei�Imt

= �1e�Ret(cos(�Imt) + i sin(�Imt))

Explicit Euler Method

Im

Ree

hIm

hRe

�(t)

�(t)

�(t)

�(t)

�(t)

�(t) = �1e�Ret(cos(�Imt) + i sin(�Imt))

Re

Analytical solution will decay with time if lRe<0

Applying Euler’s formula for the model problem (Eq. (O03.2)) gives

�l+1 = �l + ��t�l

= (1 + ��t)�l

= ��l

where σ = (1+λΔt) is the amplification factor

(O03.3)

Find analytical solution!at time level lΔt

Find approximated Euler’s! solution at time level lΔt

Compared�

dt= ��

�(t) = �1e�Ret(cos(�Imt) + i sin(�Imt))

Thus, running a program using Euler’s method will give you

�1 = Given

�2 = ��1

�3 = ��2 = �2�1

= �3�1�4 = ��3

... =...

�l+1 = ��l

=...

= �l�1

For solution to be stable!|�| � 1

(O03.4)

�l+1 = ��l

-1-2

� = 1 + ��t

� = (1 +�t�Re + i�t�Im)

|�|2 = (1 +�t�Re)2 + (�t�Im)2 1

�Im�t

�Re�t

Example O03.2: !Write a Matlab program that uses Euler’s method to solve !!!

!!for 0 < t < 2 with ɸ(t=0)=1. Using the analysis from the previous slides, what are the values of Δt for the numerical solution to be stable?

d�

dt= �8�

So for this problem λ=-8. So λRe=-8 and λIm=0.0. In order for the numerical solution to be stable, λΔt need to be within the stable region.!

d�

dt= �8�

We have

-1-2

�Im�t

�Re�t

-8Δt, Δt large

�2 ��t 0

�2 �8�t 0

0 �t 1/4

-1-2

�Im�t

�Re�t

So for solution to !be stable Δt must!be between 0 and 0.25

function MPO03p2() clear all; close all; Delta_t=0.01; t=0:Delta_t:2.0; %Preallocating memory phi=zeros(size(t)); phi(1)=1.0; for l=1:length(t)-1 phi(l+1)=phi(l)+Delta_t*(-8*phi(l)); end plot(t,phi,'ko-') hold on ezplot(@(t)exp(-8*t),[0,2,-2,2]) xlabel('t'); ylabel('\phi'); legend('Euler','True');

0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2−40

−20

0

20

40

60

80

100

t

φ

EulerTrue

0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2−2

−1.5

−1

−0.5

0

0.5

1

1.5

2

t

φ

EulerTrue

0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2−2

−1.5

−1

−0.5

0

0.5

1

1.5

2

t

φ

EulerTrue

0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2−2

−1.5

−1

−0.5

0

0.5

1

1.5

2

t

φ

EulerTrue

Δt=0.5

Δt=0.25

Δt=0.1 Δt=0.01

0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2−40

−20

0

20

40

60

80

100

t

φ

EulerTrue

0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2−2

−1.5

−1

−0.5

0

0.5

1

1.5

2

t

φ

EulerTrue

0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2−2

−1.5

−1

−0.5

0

0.5

1

1.5

2

t

φ

EulerTrue

0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2−2

−1.5

−1

−0.5

0

0.5

1

1.5

2

t

φ

EulerTrue

Δt=0.5

Δt=0.25

Δt=0.1 Δt=0.01

Euler solution is unstable for Δt=0.5

Euler solution is stable for Δt=0.1 & Δt=0.01Euler solution is neutrally stable for Δt=0.25

-1-2

�Im�t

�Re�t

0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2−40

−20

0

20

40

60

80

100

t

φ

EulerTrue

Δt=0.5

��t = �8⇥ 0.5 = �4

-4

-1-2

�Im�t

�Re�t

��t = �8⇥ 0.25 = �2

0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2−2

−1.5

−1

−0.5

0

0.5

1

1.5

2

t

φ

EulerTrueΔt=0.25

-1-2

�Im�t

�Re�t

0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2−2

−1.5

−1

−0.5

0

0.5

1

1.5

2

t

φ

EulerTrue

Δt=0.1

��t = �8⇥ 0.1 = �0.8

-1-2

�Im�t

�Re�t

0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2−2

−1.5

−1

−0.5

0

0.5

1

1.5

2

t

φ

EulerTrue

Δt=0.01

��t = �8⇥ 0.01 = �0.08

End of Example O03.2

Consider now the case where λ is purely imaginary,

d�

dt= i�Im�

For this case, iλImΔt, is always on the vertical axis of the stability diagram. It is not within the stability region. Hence, in this case, Euler’s method is always unstable.

� = �Re + i�Im

0d�

dt= ��

Example O03.3: !Write a Matlab program that uses Euler’s method to solve !!!!!for 0 < t < 10 with ɸ(t=0)=1. Using the analysis from the previous slides, what are the values of Δt for the numerical solution to be stable?

d�

dt= 2i�

The analytical solution for this problem can be written as

d�

dt= 2i� 0 t 10 �(t = 0) = 1

� = (ARe + iAIm)e2it� = Ae2it

� = (ARe + iAIm)(cos(2t) + i sin(2t))

� = (ARe cos(2t)�AIm sin(2t)) + i(ARe sin(2t) +AIm cos(2t))

But we are given that ɸ=1 for t=0

1 + 0i = ARe + iAIm

ARe = 1

AIm = 0

Hence

So the analytical solution for this equation is

�(t) = e2it

= cos(2t) + i sin(2t)

d�

dt= 2i� 0 t 10 �(t = 0) = 1

� = (ARe + iAIm)e2it ARe = 1 AIm = 0

function MPO03p3()!clear all;!close all;!Delta_t=0.02;! ! !t=0:Delta_t:10.0;!%Preallocate Memory!phi=zeros(size(t));!phi(1)=1.0;! ! !for n=1:length(t)-1! phi(n+1)=phi(n)+Delta_t*(i*2*phi(n));!end! !plot(t,imag(phi),'ko-')!xlabel('t');!ylabel('\phi');!hold on!ezplot(@(t)sin(2*t),[0,10,-5,5])!legend('Euler','True');

0 1 2 3 4 5 6 7 8 9 10−5

−4

−3

−2

−1

0

1

2

3

4

5

t

φ

sin(2 t)

EulerTrue

0 1 2 3 4 5 6 7 8 9 10−5

−4

−3

−2

−1

0

1

2

3

4

5

t

φ

sin(2 t)

EulerTrue

0 1 2 3 4 5 6 7 8 9 10−5

−4

−3

−2

−1

0

1

2

3

4

5

t

φ

sin(2 t)

EulerTrue

0 1 2 3 4 5 6 7 8 9 10−5

−4

−3

−2

−1

0

1

2

3

4

5

t

φ

sin(2 t)

EulerTrue

Δt=0.5 Δt=0.2

Δt=0.1 Δt=0.02

Im(ɸ)

-1-2

�Im�t

�Re�t

i

��t = 2i⇥ 0.5 = i

0 1 2 3 4 5 6 7 8 9 10−5

−4

−3

−2

−1

0

1

2

3

4

5

t

φ

sin(2 t)

EulerTrue

Δt=0.5

-1-2

�Im�t

�Re�t

0.4i

��t = 2i⇥ 0.2 = 0.4i

0 1 2 3 4 5 6 7 8 9 10−5

−4

−3

−2

−1

0

1

2

3

4

5

t

φ

sin(2 t)

EulerTrueΔt=0.2

-1-2

�Im�t

�Re�t

0.2i

��t = 2i⇥ 0.1 = 0.2i

0 1 2 3 4 5 6 7 8 9 10−5

−4

−3

−2

−1

0

1

2

3

4

5

t

φ

sin(2 t)

EulerTrueΔt=0.1

-1-2

�Im�t

�Re�t

0.04i

��t = 2i⇥ 0.02 = 0.04i

0 1 2 3 4 5 6 7 8 9 10−5

−4

−3

−2

−1

0

1

2

3

4

5

t

φ

sin(2 t)

EulerTrueΔt=0.02

For all values of Δt, λΔt is outside the stable region. Hence the numerical solution obtained using Euler’s method will never be stable for any value of Δt.

End of Example O03.3

top related