Finite Differenzen Methode

Werbung
Finite Differenzen Methode
Blockkursunterlagen *
28. November 2011
*Technische Universität Berlin, Fachbereich Mathematik, Projektgruppe Praktische Mathematik
Inhaltsverzeichnis
1 Einleitung
1.1 Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2 Allgemeine Bemerkungen zur Numerik . . . . . . . . . . . . . . . . . . . . . .
3
3
3
2 Grundlagen der Finiten Differenzen Methode
2.1 1-D Wärmeleitung als einührendes Beispiel . . . . . . . . . . . . .
2.2 Herleitung der Finiten Differenzenformeln anhand der Taylorreihe
2.3 Randbedingungen . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3.1 Dirichlet . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3.2 Neumann . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3.3 Cauchy . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.4 Globaler Verfahrensfehler . . . . . . . . . . . . . . . . . . . . . . . .
2.5 Hausaufgabe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4
4
5
7
7
8
8
9
9
3 Instationäre Probleme - Die Zeitdiskretisierung
3.1 Explizite Differenzenformulierung . . . . . . . . .
3.2 Implizite Differenzenformulierung . . . . . . . . .
3.3 Modifizierte Verfahren (Crank-Nicolson) . . . . .
3.4 Allgemeine Formulierung der Zeitdiskretisierung
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
9
10
10
11
12
4 Das Konvektions-Diffusions-Problem
4.1 Die Konvektions-Diffusions-Gleichung . . . . . . . . . . . . . . . . . . . . . .
4.2 Der stern-Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.3 Testbeispiel ür den 2-dimensionalen Fall . . . . . . . . . . . . . . . . . . . . .
12
12
13
14
5 Specials
5.1 Ortsabhängige Stoffwerte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.2 Singulär gestörte Probleme (Upwind-Schema) . . . . . . . . . . . . . . . . . .
14
14
15
6 Lösung linearer Gleichungssysteme
6.1 Tridiagonale Gleichungssysteme . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2 Iterative Verfahren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2.1 Beispiel Einzelschri-Verfahren . . . . . . . . . . . . . . . . . . . . . .
16
18
19
21
7 Programmierhinweise
24
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
8 Ergänzungen
8.1 Nichtäquidistante Gier . . . . . . . . . . . . . . . . . . . . . . . . . .
8.2 Mehrdimensionale Probleme mit unterschiedlichen Gierschriweiten
8.3 DQ’s mit höherer Fehlerordung . . . . . . . . . . . . . . . . . . . . . .
8.4 Krumme Ränder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.5 ADI-Verfahren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
25
25
25
25
26
26
1 Einleitung
In diesem Skript wird die numerische Lösung partieller Differentialgleichungen mit Hilfe der
Finiten Differenzen Methode (FDM) behandelt. Es wird dabei auf die Anwendung ür einfache, äquidistante Gebiete im ein- und zweidiminsionalen eingegangen. Die Berechnung kann
sowohl stationär als auch instationär erfolgen. Neben den numerischen Grundlagen werden
noch Programmierhinweise gegeben und im letzten Kapitel Ergänzungen vorgestellt, die über
die oben gemachten Beschränkungen hinausgehen.
1.1 Motivation
Die mathematische Beschreibung von naturwissenschalich-technischen Problemstellungen
ührt häufig auf partielle Differentialgleichungen. Analytische Lösungen dieser DGL’s existieren nur ür Spezialälle. In allen anderen Fällen muß man auf numerische Lösungsverfahren
zurückgreifen, wobei auch hier Einschränkungen an das mathematische Modell gemacht werden müssen.
Die hier behandelten partiellen Differentialgleichungen sind entweder elliptisch oder parabolisch. Im ersten Fall haben alle unabhängigen Variablen die Bedeutung von räumlichen Koordinaten, und die gesuchte Funktion beschreibt in der Regel einen stationären Zustand. Im
anderen Fall ist eine Variable gleich der Zeit, und die Funktion beschreibt einen instationären
Zustand in Abhängigkeit von der Zeit.
1.2 Allgemeine Bemerkungen zur Numerik
Digitalrechner können nur algebraische Gleichungen bearbeiten. Da man es nun aber mit partiellen Differentialgleichungen zu tun hat, müssen die nichtalgebraischen Ausdrücke durch
entsprechende algebraische ersetzt werden. Die Umsetzung hängt von den verschiedenen numerischen Verfahren ab.
Mit der Methode der Finiten Differenzen (FDM) lassen sich im Prinzip alle DGL’s mit Randund Anfangswerten numerisch berechnen. Es gibt aber auch andere Verfahren, die in bestimmten Fällen der FDM vorzuziehen sind.
Die numerischen Verfahren berechnen ür diskrete Werte der unabhängigen Variablen jeweils diskrete angenäherte Werte ür die gesuchte Funktion. Die Ergebnisse stellen keinen geschlossenen Lösungsausdruck dar, sondern liegen als Zahlenreihen vor und müssen graphisch
aufgearbeitet werden. Zum Schluß müssen diese dann noch auf ihre physikalische Plausibiltät
hin untersucht werden.
Die berechneten Ergebnisse sind nur Näherungen, sie sind also fehlerbehaet. Der Einfluß
dieser Fehler auf die Ergebnisse darf nicht außer acht gelassen werden. Des weiteren muß noch
die Stabilität eines Verfahrens beachtet werden, d.h. ob Störungen im Verlauf der Berechnung
wieder abklingen oder sich aufschaukeln.
3
2 Grundlagen der Finiten Differenzen Methode
2.1 1-D Wärmeleitung als einführendes Beispiel
Im folgenden wird die Methode der Finiten Differenzen (FDM) anhand der instationären DGL
der Wärmeleitung eingeührt, siehe auch [3]. Wir betrachten zunächst die stationäre 1-D Wärmeλ
leitung in einem Stab mit ortsabhängiger Wärmequelle und a = ρ∗c
= const (Abb. 1).
T innen
q
T wand
Abbildung 1: 1-D Wäremeleitung in einem Stab
Das Problem wird beschrieben durch die Gleichung
d2 T (x)
+ s(x)
(1)
dx2
mit den Randbedingungen T (x = 0) = T0 und T (x = l) = TN .
Wie bereits erwähnt, müssen die Ableitungen der Differentialgleichung durch algebraische
Ausdrücke ersetzt werden. Die Idee geht dabei auf die Einührung der Ableitung ür eine Funktion f (x) zurück:
0=a
f (x + ∆x) − f (x)
∆x→0
∆x
Für hinreichend, jedoch nicht unendlich kleine ∆x stellt der Differenzenqoutient (DQ) schon
eine gute Lösung dar und man kann ür die erste Ableitung folgende Näherung des Differentialquotienten schreiben:
f ′ (x) = lim
4
f (x + ∆x) − f (x)
∆x
Dieser Ausdruck stellt den sogenannten vorwärtigen (bzw. rechtsseitigen) DQ dar. Eine Aussage über den Fehler dieser Näherung erhält man mit Hilfe der Taylorreihe. Im folgenden soll
nun die Entwicklung der Differenzenformeln miels der Taylorreihe behandelt werden.
f ′ (x) ≈
2.2 Herleitung der Finiten Differenzenformeln anhand der Taylorreihe
Mit Hilfe der Taylorreihe kann man den Funktionswert einer Funktion f (x) an der Stelle x+∆x
bzw. x − ∆x berechnen, wenn man den Funktionswert an der Stelle x kennt. Die Formulierungen der Taylorreihen lauten:
∆x ′
∆x2 ′′
f (x) +
f (x) + · · ·
1!
2!
∆x ′
∆x2 ′′
f (x − ∆x) = f (x) −
f (x) +
f (x) − · · ·
1!
2!
f (x + ∆x) = f (x) +
(2)
(3)
Stellt man nun die Taylorreihe (2) nach f ′ (x) um, so erhält man folgenden Ausdruck:
f (x + ∆x) − f (x) ∆x ′′
∆x2 ′′′
−
f (x) −
f (x) − · · ·
∆x
2!
3!
Nimmt man nun an, daß ∆x kleiner als 1 ist, so wird der erste Summand des Restes dominant. Die Größe des Restes ist ein Maß ür die lokale Fehlerordung Olok des Verfahrens.
Bestimmend ür den Rest ist die Schriweite ∆x. Man sagt daher, daß das Verfahren die lokale
Fehlerordnung Olok (∆x) hat und schreibt
f ′ (x) =
f (x + ∆x) − f (x)
+ O(∆x)
∆x
Für die Praxis, d. h. in der späteren Programmierung, läßt man den Ausdruck O(∆x) weg.
Den entstehenden Ausdruck ür f ′ (x) nennt man vorwärtigen oder auch rechtsseitigen DQ mit
der Fehlerordnung O(∆x). Im folgenden wird der Begriff vorwärtig verwendet. Auf gleiche
Weise erhält man mit der Taylorreihe in der Form (3) den rückwärtigen bzw. linksseitigen
Differenzenquotienten.
f ′ (x) =
f (x) − f (x − ∆x)
+ O(∆x)
∆x
Eine weitere, und bessere Formulierung ür einen Differenzenquotienten (DQ) erhält man,
indem man die Differenz von (2) und (3) bildet:
f ′ (x) =
f ′ (x) =
f (x + ∆x) − f (x − ∆x)
+ O(∆x2 )
2∆x
Dies ist der zentrale DQ und besitzt die Fehlerordnung O(∆x2 ).
5
Die Differentialgleichung der Wärmeleitung besitzt nun aber Ableitungen 2. Ordung, so daß
hier nun noch erst die Differenzenquotienten höherer Ordnung eingeührt werden müssen. Für
die zweite Ableitung ergibt sich der zentrale DQ durch Addition von (2) und (3) zu
f (x + ∆x) − 2f (x) + f (x − ∆x)
+ O(∆x2 )
∆x2
Zu den vor- bzw. rückwärtigen DQ’s höherer Ableitung gelangt man über verschiedene Linearkombinationen der Taylorreihen (2) und (3).
Um nun auf die Finite Differenzen Formulierung zu kommen, geht man folgendermaßen vor:
f ′′ (x) =
i=1
2
3
4
T innen
q
T wand
Abbildung 2: Diskretisierung
Das zu berechnende Gebiet, hier eindimensional nämlich der Stab, adiabat isoliert, wird in
einzelne Punkte (x0 , x1 , ..., xN ) gleichen Abstands ∆x, d.h. äquidistant zerlegt (Abb. 2), wobei
jeweils
xi = x0 + i ∗ ∆x
ür
i = 1, · · · , N
und x0 der linke und xN der rechte Rand des Gebiets ist. Zu jedem dieser Punkte xi gehört ein
Näherungswert Ti ür den gesuchten Funktionswert von T , also
Ti ≈ T (xi )
i = 1, · · · , N − 1
ür
6
Dieses Vorgehen nennt man Diskretisierung.
Mit dem zentralen DQ der zweiten Ableitung hat man nun einen Ausdruck, um die DGL
0=a
d2 T (x)
+s
dx2
ür jeden inneren Gierpunkt xi anzunähern.
Ti−1 − 2Ti + Ti+1
+ si
∆x2
Umformen ergibt
0=a
ür
i = 1, · · · , N − 1
−Ti−1 + 2Ti − Ti+1 = ∆x2 ∗ si /a
ür
mit
si = s(xi ) .
i = 1, · · · , N − 1 .
Für die angenäherten Funktionswerte am Rand T0 und TN , auf die jeweils in der 1. und
N −1. Gleichung zugegriffen wird, seien feste Werte vorgegeben. Dies entspricht der DirichletRandbedingung s.u..
Man schreibt das entstandene lineare Gleichungssystem praktischerweise in der Matrix-VektorForm


 

2 −1
T1
∆x2 ∗ s1 /a + T0


..
2


 −1 2
  T2 
.
  ∆x ∗ s2 /a



=



..
..


..
..



.
.

.
. −1 
2
TN −1
∆x ∗ sN −1 /a + TN
−1 2
Die rechte Seite des Gleichungssystems nennt man ellvektor, wobei hier nicht nur die
eigentlichen ellen stehen, sondern auch Komponenten der Randbedingungen.
2.3 Randbedingungen
Zu der Aufgabenstellung gehören die Randbedingungen, die die Lösung des Problems eindeutig
festlegen. Die Berücksichtigung wird jeweils ür den linken Rand (i = 0) und der DGL f ′′ (x) =
0 dargestellt.
2.3.1 Dirichlet
Bei der Dirichlet-Randbedingung ist der Funktionswert f0 = γ am Rand gegeben. Die Gleichung ür den linken Rand lautet
f0 − 2f1 + f2 = 0
Da f0 bekannt ist, wird der Wert auf die rechte Seite der Gleichung, in der auch die Anteile
der ellen stehen, gebracht
−2f1 + f2 = −f0
7
q
11
00
-1
0
11 000
00
111
1
Abbildung 3: Neumann Randbedingung
2.3.2 Neumann
Bei der Neumann-Randbedingung oder auch Gradientenbedingung ist der Fluß γ in Richtung
der Normalen zum Rand gegeben (Abb. 3).
Für γ = 0 liegt ideale Isolation vor. Dieser Fall wird unter anderem ür Symmetrieränder
gebraucht. Betrachtet man nun den linken Rand, so stellt der Wert f0 eine weitere Unbekannte
dar, d.h. daß das Gleichungssytem unterbestimmt ist. Man muß nun zunächst eine weitere
Gleichung ür f0 aufstellen
f−1 − 2f0 + f1
f ′′ (x)0 ≈
=0
(4)
h2
Man muß jetzt nur noch einen Ausdruck ür f−1 finden. Dies geschieht mit Hilfe des gegebenen Gradienten
f1 − f−1
=γ
f ′ (x)0 ≈
2h
Gleichung (4) nach f−1 aufgelöst und in (5) eingesetzt ergibt
(5)
f0 − f1
γ
=−
2
h
h
Für γ = 0 hat das Verfahren am Rand die Fehlerordung O(∆x2 ). Für γ ̸= 0 hat das Verfahren
am Rand jedoch nur die Fehlerordung O(∆x). Man hat nun eine weitere Gleichung erhalten,
die in das Gleichungssystem eingeügt werden muß.
2.3.3 Cauchy
Bei der Cauchy-Randbedingung ist der Fluß in Richtung der Normalen nT zum Rand proportional zur Potenialdifferenz f0 − fa gegeben.
8
Man hat auch hier eine weitere Unbekannte an der Stelle xRand . Das weitere Vorgehen ist
analog zur Neumann-Randbedingung und bezieht sich wieder auf den linken Rand. Aufstellen der Gleichung (4) ür den Funktionswert f0 und ersetzen des Funktionswertes f−1 durch
Einsetzen der Randbedingung
f1 − f−1
= α(f0 − fa )
2h
ergibt
f0 (αh + 1) − f1
= αfa
h
Man hat nun eine weitere Gleichung erhalten, die in das Gleichungssystem eingeügt werden muß.
2.4 Globaler Verfahrensfehler
Die bisherigen Betrachtungen bezüglich der Fehlerordnung bezogen sich auf den lokalen Fehler
Olok . Eine allgemeine Abschätzung des glob. Fehlers ist nur ür Spezialälle möglich. Grundsätzlich sollte man sich merken, daß die kleinste Fehlerordung im Gebiet, z.B. die einer Randbedingung, einen maßgeblichen Einfluß auf den globalen Fehler Og lob hat. So gilt ür einfache,
rechteckige Gebiete mit stetigen Dirichlet Randbedingungen oder Neumann Randbedingungen mit γ = 0, daß Oglob = Olok ist. Für eine genauere Betrachtung und Herleitung sei auf
Schwarz [1] verwiesen.
2.5 Hausaufgabe
Man stelle ür ein Gebiet mit 4 bis 5 inneren Gierpunkten das entstehende Gleichungssystem
auf, wobei im ersten Fall eine Neumann und eine Dirichlet Randbedingung, im zweiten Fall
eine Neumann und eine Cauchy Randbedingung berücksichtigt werden soll.
3 Instationäre Probleme - Die Zeitdiskretisierung
Bisher wurden nur stationäre Probleme behandelt. Im folgenden wird nun die Behandlung
instationärer Probleme vorgeührt. Die DGL ür die instationäre Wärmeleitung ist gegeben
durch
∂2T
∂T
=k 2
(6)
∂t
∂x
Hier muß zunächst ein wichtiger Unterschied zu den stationären Problemen aufgezeigt werden. Die stationären Probleme sind Randwertaufgaben. Die instationäre Rechnung stellt eine
Anfangswertaufgabe und beides zusammen eine Anfangsrandwertaufgabe dar. Während bei
den Randwertaufgaben das Problem zwischen den Rändern eingespannt ist, ist dies beim Anfangswertproblem nicht der Fall und hier muß darauf geachtet werden, ob sich die Lösung
9
nicht in eine falsche Richtung entwickelt. Hierbei ist auch die Frage nach der Stabilität des
Verfahrens zu stellen, d.h. inwieweit Störungen abgebaut werden und sich nicht aufschaukeln.
Das Vorgehen ist nun folgendes: Man hat ür den Start einen plausiblen stationären Funktionsverlauf oder rechnet ihn aus. Aus diesem berechnet man dann ür die folgenden Zeitschrie
die weiteren Funktionsverläufe.
3.1 Explizite Differenzenformulierung
Die explizite Differenzenformulierung hat den großen Vorteil, daß außer bei der Anfangsverteilung in folgenden Zeitschrien keine Gleichungssysteme gelöst werden müssen. Für die
Zeitdiskretisierung nimmt man den vorwärtigen DQ und erhält
m
T m − 2Tim + Ti+1
Tim+1 − Tim
= k i−1
∆t
∆x2
(7)
bzw.
m
m
Tim+1 = Tim + M (Ti−1
− 2Tim + Ti+1
)
wobei M das sogenannte Modul ist, das sich aus k∆t/∆x2 zusammensetzt. Die Bedeutung
des Moduls wird später noch erklärt. Wie man sieht, läßt sich die Temperatur Tim+1 explizit
berechnen. Hierin liegt aber auch das große Manko dieser Methode, denn zwischen den einzelnen Funktionswerten einer Zeitebene gibt es keinen funktionalen Zusammenhang mehr. Das
Problem ist entkoppelt.
m+1
11
00
00
11
i -1
11
00
00
11
111
000
000
111
m
i +1
i
Abbildung 4: Explizite Zeitdiskretisierung
3.2 Implizite Differenzenformulierung
Bei der impliziten Differenzenformulierung muß man zwar ür jeden Zeitschri m + 1 ein
Gleichungssystem lösen, daür ist das Verfahren aber auch unbeschränkt stabil. Man nimmt
wieder den vorwärtigen DQ ür die Zeitdiskretisierung, aber ür die Ortsdiskretisierung den
zentralen DQ zum Zeitpunkt m + 1.
10
T m+1 − 2Tim+1 + Tim+1
Tim+1 − Tim
= k i−1
∆t
∆x2
Diese Gleichung kann nur im Zusammenhang mit den anderen Gleichungen gelöst werden.
Die Physik des Problems wird durch diese Kopplung besser wiedergegeben, als bei der expliziten Differenzenformulierung (7).
m+1
11
00
00
11
i -1
11
00
00
11
111
000
000
111
m
i +1
i
Abbildung 5: Implizite Zeitdiskretisierung
Das am Anfang erwähnte Modul M stellt ür das explizite Verfahren eine Begrenzung dar.
Für M ≤ 1/2n (n = Dimension) ist das Verfahren stabil, bei größeren Werten von M können
Störungen, die z.B. durch Rundungsfehler entstehen können, nicht mehr gedämp werden.
Für das implizite Verfahren gibt es keine Beschränkung bezüglich des Moduls, man sollte es
trotzdem nicht zu groß (∆x = ∆t) wählen, da sonst der globale Fehler zu groß wird. Eine
mathematische Begründung ür das Stabilitätskriterium findet man u.a. bei Schwarz [1]. Beide Verfahren haben eine Fehlerordnung von O(∆t, ∆x2 ). Im folgenden wird ein Verfahren
vorgestellt, das eine bessere Fehlerordnung der Zeitdiskretisierung besitzt.
3.3 Modifizierte Verfahren (Crank-Nicolson)
Das Verfahren von Crank-Nicolson berechnet den Funktionswert T zum Zeitpunkt m + 1/2
mit dem zentralen DQ, so daß man ür ∂T /∂t erhält
∂T m+1/2 T m+1 − T m
=
+ O(∆t2 )
∂t 2 ∗ ∆t/2
Die Zeitdiskretisierung hat nun die Fehlerordnung O(∆t2 ). Für die rechte Seite der Gleichung (6) muß nun der finite Ausdruck die Temperatur zur Zeitebene m + 1/2 wiedergeben.
Dies wird durch das arithmetische Miel der Temperaturen (T m+1 + T m )/2 erreicht, wobei
T m+1 und T m jeweils mit dem zentralen Differenzenquotienten berechnet werden
11
m+1
m + 1/2
11
00
00
11
t/2
11
00
00
11
i
i -1
111
000
000
111
m
i +1
Abbildung 6: Crank-Nicolson-Verfahren
Tim+1 − Tim
k
=
∆t
2
(
m+1
m+1
m − 2T m + T m
Ti−1
− 2Tim+1 + Ti+1
Ti−1
i
i+1
+
∆x2
∆x2
)
+ O(∆t2 , ∆x2 )
Das Verfahren ist ’unbegrenzt’ stabil. Für große Werte von M jedoch kann es zu oszillierenden Lösungen kommen.
3.4 Allgemeine Formulierung der Zeitdiskretisierung
Die bisher vorgestellten Zeitdiskretisierungen lassen sich in eine allgemeine Formulierung der
Zeitdiskretisierung überühren
Tim+1 − Tim
= ξk
∆t
(
m+1
m+1
Ti−1
− 2Tim+1 + Ti+1
∆x2
)
(
+ (1 − ξ)k
m − 2T m + T m
Ti−1
i
i+1
∆x2
)
Für ξ = 0 erhält man das explizite, ür ξ = 1 das implizite und ür ξ = 0.5 das CrankNicolson-Verfahren. Man kann also das allgemeine Verfahren programmieren und dann mit
Änderung des ξ-Wertes zwischen den einzelnen Verfahren wechseln. Für ξ ≥ 0.5 sind die
Verfahren der allgemeinen Formulierung stabil.
4 Das Konvektions-Diffusions-Problem
4.1 Die Konvektions-Diffusions-Gleichung
In diesem Kapitel soll das Konvektions-Diffusions-Problem mit seinen Spezialitäten erläutert
werden. Die allgemeine Gleichung ür den 2-D Fall lautet
( 2
)
∂ u ∂2u
∂u
∂u
∂u
=D
+ 2 − vx
− vy
+ q̇(x)
2
∂t
∂x
∂y
∂x
∂y
12
Hierbei bedeuten u die Konzentration, D die Diffusionskonstante, vA die Strömungsgeschwindigkeit in A-Richtung und q̇(x) die elle. Wie schon bei dem Beispiel der Wärmeleitung muß man zunächst einmal sein Gebiet diskretisieren, also ein Gier definieren, wobei
M die Anzahl innerer Gierpunkte in x-Richtung, und N die Anzahl innerer Gierpunkte in
y-Richtung ist. uij ist die genäherte Konzentration an dem Ort (xi , yj ), wobei gilt (xi , yj ) =
(x0 +ih, y0 +jh). Hierbei wurde eine in beiden Richtungen gleiche Gierschriweite h festgelegt, was aber nicht zwingend ist. Man betrachtet zunächst den stationären Fall und ersetzt die
Differentialquotienten durch DQ’s, wobei man darauf achten sollte, daß die DQ’s die gleiche,
möglichst hohe Fehlerordnung haben. Man verwendet deshalb die zentralen DQ’s der ersten
und zweiten Ableitung, deren Fehlerordnung O(∆h2 ) ist und erhält
D(ui−1,j + ui,j−1 − 4uij + ui+1,j + ui,j+1 )
h2
vx (ui+1,j − ui−1,j ) + vy (ui,j+1 − ui,j−1 )
−
+ q̇ij
2h
Durch umstellen der Gleichung erhält man
(8)
0=
0=
]
[
vy h
vy h
vx h
1
vx h
)
+
u
(D
+
)
+
u
(−4D)
+
u
(D
−
)
+
u
(D
−
)
+q̇ij
u
(D
+
i,j−1
i,j
i+1,j
i,j+1
i−1,j
h2
2
2
2
2
4.2 Der stern-Operator
Um die Gleichung einfacher schreiben zu können, wird der stern-Operator eingeührt. In diesem Operator sind alle Koeffizienten des Differenzenquotienten zusammengefaßt. Er wird folgendermaßen definiert

stern :=
1 
 D+
h2

v h
vx h
2
D − y2
−4D
v h
D + y2
D−
vx h
2


 mit  ui−1,j

ui,j+1
ui,j ui+1,j 
ui,j−1
Und man schreibt ür die Gleichung (8)
0 = stern(uij ) + q̇ij
Den Stern kann man nun sozusagen auf jeden Gierpunkt legen und erhält so die entsprechende Gleichung ür das Gleichungssytem. Der Vorteil dieser Schreibweise liegt darin, daß
man nur den Stern speichern muß und nicht die gesamte Koeffizientenmatrix. Die Gleichung
ür den instationären Fall erhält man folgendermaßen. Die allgemeine Formulierung lautet
um+1
− um
ij
ij
m+1
m
= α(stern(um+1
) + q̇ij
) + (1 − α)(stern(um
ij ) + q̇ij )
ij
∆t
und nach bekannten und unbekannten Größen sortiert
m+1
m
um+1
− α∆tstern(um+1
) = um
+ (1 − α)∆t(stern(um
ij + α∆tq̇ij
ij ) + q̇ij )
ij
ij
13
4.3 Testbeispiel für den 2-dimensionalen Fall
Betrachte die sogenannte Poissongleichung
∂2u ∂2u
+ 2 =4
∂x2
∂y
x, y ∈ R .
Man erkennt leicht, daß
u(x, y) = x2 + y 2
eine Lösung dieses Problems ist.
Um jetzt wenigstens vorab den richtigen Ablauf Eures Programmes bezüglich der Diskretisierung des Diffusionsanteils, des Einbaus der einfachen Dirichlet-Randbedingung und der iterativen Lösung des entstandenen Gleichungssystems bei der Diffusions-Konvektions-Gleichung
prüfen zu können, berechnet eine Lösung ür die angegebene Testgleichung auf dem Gebiet
[0, 1] × [0, 1] zum Beispiel mit der Diskretisierung i, j = 1, · · · , 9 .
Auf dem Rand ür i = 0 oder i = 10 bzw. j = 0 oder j = 10 gebt Ihr die bekannten Randwerte
der Lösungsfunktion
u(x, y) = x2 + y 2
vor. Ausgehend von einem beliebigen Startvektor z.B.
ür alle
ui,j = 0
i, j = 1, · · · , 9 ,
berechnet nun die numerische Lösung und vergleicht sie mit der analytischen, siehe Abb.(7)
Für die Umsetzung der iterativen Lösung des Gleichungssystems in Eurem Programm schaut
Euch das Beispiel am Ende des Kapitels Iterative Verfahren an.
5 Specials
5.1 Ortsabhängige Stoffwerte
Bisher wurde nur der Fall konstanter Stoffwerte behandelt, d.h. a = const. Im folgenden nimmt
man an, daß der Gierpunkt auf der Grenze zweier Gebiete mit unterschiedlichen a-Werten
liegt (Abb. 8)
Man kann nun die beiden Gebiete ür sich betrachten und am Übergang zum anderen Gebiet
eine Neumann-Randbedingung fordern. Des weiteren sei an der Grenze der beiden a-Werte
idealer Wärmeübergang vorrausgesetzt. Für die beiden Gebiete erhält man nun die DQ’s ür
die Temperatur Ti der Grenzfläche
)
−Ti + Ti+1
= q̇Grenze
ai
h
(
)
−Ti + Ti−1
ai−1
= −q̇Grenze
h
(
Gleichung (9) und (10) ergibt
14
(9)
(10)
u(x,y)
3
2.5
2
1.5
1
1
0.5
0
0
0.5
y
0.5
x
1
0
Abbildung 7: 2-D Testbeispiel
ai−1 Ti−1 − (ai + ai−1 )Ti + ai Ti+1 = 0
(11)
Die Fehlerordnung ür diese Näherung entspricht der der Neumann-Randbedingung, ist also
nur O(h).
Wenn die Grenzen von ai und ai−1 nicht auf einer Gierlinie zusammenfallen, muß mit
einem Mielwert ür a (arithmetisches, geometrisches bzw. harmonisches Miel) gerechnet
werden.
5.2 Singulär gestörte Probleme (Upwind-Schema)
Bei der Berechnung des Konvektions-Diffusions-Problems treten Probleme auf, wenn der konvektive Anteil weitaus größer ist, als der diffusive. Man kann sich das anhand der Abb. (9)
anschaulich klarmachen.
Betrachtet man eine einfache eindimensionale Rohrströmung mit einer Punktquelle, so ist
klar, daß bei starker Konvektion der zu berechnende Funktionswert nur unwesentlich von den
stromaufwärts gelegenen Werten abhängt, eine Berücksichtigung sogar einen Fehler, bzw. physikalisch unsinnige Ergebnisse produzieren würde. Um dies zu umgehen, verwendet man z.B.
das sogenannte UPWIND-Schema. Hierbei wird nur der Stromabwärtsgelegene Wert ür den
konvektiven Anteil verwendet, d.h. daß man ür vx ∂u/∂x folgenden Ausdruck verwendet
15
q
11
00
i -1
i
11
00
11
00
i +1
Abbildung 8: Wärmeübergang an der Grenzfläche zweier a-Werte
ui − ui−1
ür positives vx
h
ui+1 − ui
vx
ür negatives vx
h
vx
und man kann mit v + = M AX[0, v] und v − = M IN [0, v] auch schreiben
∂u
ui − ui−1
ui+1 − ui
= v+
+ v−
∂x
h
h
Abschließend sei noch gesagt, daß das UPWIND-Schema zwar nur die Fehlerordnung O(h)
hat, daür aber die Physik des Problems weitaus besser umsetzt als der zentrale DQ.
vx
6 Lösung linearer Gleichungssysteme
In diesem Kapitel wird auf die Gleichungslöser eingegangen, die ür die FDM von Bedeutung
sind.
Bei Anwendung der FDM-Methode auf die Wärmeleitungs- oder Konvektions-Diffusions-Gleichung
s.o. war entweder ein lineares Gleichungssystem mit tridiagonaler oder zumindest mit einer
sogenannten schwachbesetzten Koeffizientenmatrix entstanden.
Zur Lösung eines Gleichungssystems mit tridiagonaler Matrix stellen wir einen einfachen direkten Lösungsalgorithmus vor, der dem Gauß-Algorithmus bei Berücksichtigung der besonders einfachen tridiagonalen Bandstruktur entspricht.
16
Abbildung 9: Konvektion-Diffusion-Problem mit großem konvektivem Anteil
Für die schwach aber unregelmäßig besetzten Matrizen sollte man aufgrund des großen Speicherbedarfs bei großer Unbekanntenzahl nicht auf direkte Gleichungslöser zurückgreifen. Hier
bieten sich iterative Verfahren an, bei denen nicht die gesamte Koeffizientenmatrix gespeichert
werden muß.
Zuerst einige Definitionen, da diese Begriffe benötigt werden, um zu beschreiben unter welchen Voraussetzungen die verschiedenen Verfahren überhaupt erfolgreich angewendet werden
können.
1. Definition
Eine Matrix A ∈ Rn×n heißt stark diagonaldominant, falls in jeder Zeile der Betrag des
Diagonalelementes größer ist, als die Summe der Beträge der übrigen Matrixelemente
derselben Zeile:
n
∑
|aik |
ür
i = 1, · · · , n .
|aii | >
k=1
k̸=i
2. Definition
Eine Matrix A ∈ Rn×n heißt schwach diagonaldominant, falls
|aii | ≥
n
∑
|aik |
ür
i = 1, · · · , n .
k=1
k̸=i
3. Definition
Sie heißt im wesentlichen diagonaldominant, falls A schwach diagonaldominant und
|aii | >
n
∑
|aik |
(ür mindestens ein i)
k=i
k̸=i
17
4. Definition
Eine symmetrische reelle Matrix A heißt positiv definit, falls
T
⃗x A⃗x =
n ∑
n
∑
aik xi xk ≥ 0
f.a. x ∈ R
i=1 k=1
= 0
nur ür
⃗x = 0
Eine symmetrische reelle Matrix ist genau dann positiv definit, falls alle Eigenwerte positiv sind.
6.1 Tridiagonale Gleichungssysteme
Falls die Matrix A entweder diagonal dominant oder symmetrisch und positiv definit ist, läßt
sich ür tridiagonale Matrizen ein sehr einfacher Algorithmus zur Lösung des Gleichungssystems
A⃗x = d⃗
verwenden. Zur übersichtlichen Darstellung wählen wir hier ein Gleichungssystem mit vier
Unbekannten.
x1
a1
c1
x2
b1
a2
c2
x3
b2
a3
c3
x4
b3
a4
d1
d2
d3
d4
Die Matrix A läßt sich dann nämlich wie folgt in zwei Dreiecksmatrizen
A=L∗R
zerlegen.

 
a1 b1
1
 c1 a2 b2
  l1 1

=

c2 a3 b3  
l2 1
c3 a4
l3 1
 
 
∗
 
m1
r1
m2

r2
m3
r3
m4

.

Die unbekannten Größen li , mi , ri lassen sich durch Koeffizientenvergleich bestimmen. Man
erhält
a 1 = m1
b1 = r1
c1 = l1 ∗ m1 a2 = l1 ∗ r1 + m2 b2 = r2
c2 = l2 ∗ m2 a3 = l2 ∗ r2 + m3 b3 = r3
c3 = l3 ∗ m3 a4 = l3 ∗ r3 + m4
Aus diesen Bestimmungsgleichungen erhält man die Unbekannten in der Reihenfolge m1 , r1 , l1 , m2 , l2 , · · · .
Der Algorithmus zur Zerlegung der tridiagonalen Matrix A ür allgemeines n lautet damit, da
ri = bi ür alle i gilt:
18
m1 = a1
ür i = 1, 2, · · · , n − 1
li = ci /mi
mi+1 = ai+1 − li ∗ bi .
Um nun das Gleichungssystem A⃗x = d⃗ bequem mit Hilfe der Dreieckszerlegung zu lösen, geht
man in zwei Schrien vor, die sich folgendermaßen erklären.
A⃗x = d⃗
⇐⇒ L ∗ R⃗x = d⃗
⇐⇒
L⃗y = d⃗
definiere
⃗y := R⃗x
Zuerst löst man L⃗y = d⃗ . Dies ist wegen der einfachen Struktur von L nur eine einfache
Schleife.
• 1.Schri (Vorwärtseinsetzen ):
y1 = d 1
ür i = 2, 3, · · · , n
yi = di − li−1 ∗ yi−1
Danach ist nun noch R⃗x = ⃗y zu lösen, um den gesuchten Unbekannten-Vektor ⃗x zu
erhalten.
• 2.Schri ( Rückwärtseinsetzen ):
xn = −yn /mn
ür i = n − 1, n − 2, · · · , 1
xi = −(yi + bi ∗ xi+1 )/mi
Die Berechnung eines tridiagonalen Gleichungssystems mit der sogenannten LR-Zerlegung
besteht also im wesentlichen aus drei einfachen Schleifenanweisungen. Der Rechenaufwand ist
proportional zur Zahl der Unbekannten. Dieser Algorithmus ist also auch ür große tridiagonale
Gleichungssysteme unter der Voraussetzung der Diagonaldominanz oder der Symmmetrie und
Postiv-Definitheit der Koeffizientenmatrix A geeignet.
6.2 Iterative Verfahren
Unter der Voraussetzung das lineare Gleichungssystem
A⃗x = ⃗b
A ∈ Rn×n , ⃗x, ⃗b ∈ Rn
besitze ür jede beliebige rechte Seite ⃗b genau eine Lösung, d.h. A sei regulär, kann man durch
einfache Änderung der Reihenfolge der Gleichungen erreichen, daß die Diagonalelemente von
19
A von Null verschieden sind.
Das lineare GLS läßt sich dann auf folgende Gestalt bringen
−a11 x1
−a22 x2
−a33 x3
..
.
−ann xn
a14 x4 + · · · + a1n−1 xn−1 + a1n xn − b1
a24 x4 + · · · + a2n−1 xn−1 + a2n xn − b2
a34 x4 + · · · + a3n−1 xn−1 + a3n xn − b3
..
..
.
···
.
an4 x4 + · · · + ann−1 xn−1
−bn
=
a12 x2 + a13 x3 +
= a21 x1 +
a23 x3 +
= a31 x1 + a32 x2 +
..
..
..
=
.
.
.
= an1 x1 + an2 x2 + an3 x3 +
Teilung jeder Gleichung durch das Diagonalelement liefert dann ür die i -te Gleichung des
GLS


n
1 ∑

ür
i = 1, · · · , n .
(12)
aik xk − bi 
xi = − 
aii k=1
k̸=i
(0)
(0)
(0)
Ausgehend von einem Startvektor ⃗x(0) = (x1 , x2 , · · · , xn )T berechnet man nun nacheinander mit Hilfe der Vorschri (12) die Komponenten eines neuen Vektors ⃗x(1) :
(1)
x1
(1)
x2
1
= −
a11
( n
∑
)
(0)
a1k xk
− b1
k=2


n
∑
1 

(0)
a2k xk − b2 
= −

a22 k=1
k̸=2
..
.
. = ..
x(1)
n
1
= −
ann
(n−1
∑
)
(0)
ank xk
− bn
.
k=1
Wiederholtes Einsetzen des jeweils neuberechneten Näherungsvektors ⃗x(j) in die gleiche
Verfahrensvorschri liefert die sogenannte Iteration in Gesamtsritten auch genannt GaußJacobi-Verfahren:


n
∑
1 

(j+1)
(j)
xi
= − 
aik xk − bi 
ür i = 1, · · · , n , j = 0, · · ·
(13)
aii k=1
k̸=i
Mit der Konvergenz der Gauß-Jacobi-Iteration kann man rechnen, wenn die Diagonalelemente
in den jeweiligen Zeilen betragsmäßig stark überwiegen. Hier reicht die wesentliche Diagonaldominanz. Erklären läßt sich dieser Zusammenhang daraus , daß man die Iterationsvorschri
(13) durch Umstellen der Gleichungen nach den Unbekannten, die mit den Diagonalelemanten
der Koeffizientenmatrix A verknüp waren, erhalten hat.
20
Als Abbruchkriterium wählt man die betragsmäßige Änderung der einzelnen Komponenten
der Vektoren der alten und der neuen Iterationsstufe. Unterschreitet sie eine vorgegebene Grenze, beendet man die Iteration.
Eine verbesserte Konvergenz läßt sich erreichen, wenn man schon berechnete Zwischenergebnisse innerhalb jedes Iterationsschries ausnutzt. Dies ührt auf die sogenannte Iteration
in Einzelsritten auch Gauß-Seidel-Verfahren genannt.
Ebenfalls von einem Startvektor ⃗x(0) ausgehend berechnet man
(j+1)
xi
1
= −
aii
( i−1
∑
(j+1)
aik xk
k=1
+
n
∑
)
(j)
aik xk
− bi
ür i = 1, · · · , n
, j = 0, · · ·
k=i+1
Dieses Verfahren ist auf jeden Fall konvergent, wenn A in den Zeilen stark diagonaldominant
oder A positiv definit ist.
Die Konvergenz läßt sich mit passender Wahl eines sogenannten Relaxationsparameter ω noch
verbessern.
Die Verfahrensvorschri lautet
(j+1)
xi
ω
= (1 − ω)xji −
aii
( i−1
∑
(j+1)
aik xk
k=1
n
∑
+
)
(j)
aik xk − bi
ür i = 1, · · · , n
, j = 0, · · ·
k=i+1
Für ω = 1 ist dies genau die Gauß-Seidel-Iteration. Konvergenz kann nur im Bereich 0 <
ω < 2 vorliegen. Dieses Verfahren nennt man SOR-Verfahren ( successive overrelaxation).
Den optimalen Relaxationsparameter kann man nicht allgemein angeben.
Ein Vorteil neben der häufig schnelleren Konvergenz der Einzelschri-Verfahren ist, daß nur
ein Unbekannten-Vektor gespeichert werden muß, der immer wieder überschrieben wird. Beim
Gesamtschri-Verfahren sind immer zwei Vektoren ür die Unbekannten zu speichern.
Daür kann man das Gesamtschri-Verfahren auch parallel berechnen, wodurch es neuerdings
wieder an Bedeutung gewinnt. Einzelschri-Verfahren müssen hingegen sequentiell ablaufen.
Zu Fragen des Vergleichs von Aufwand und Konvergenzgeschwindigkeit der einzelnen Verfahren sei auf Hackbusch [2] hingewiesen.
6.2.1 Beispiel Einzelschri-Verfahren
Als Beispiel nehmen wir wieder die Poisson-Gleichung
∂2u ∂2u
+ 2 = f (x, y)
∂x2
∂y
Randbedingungen:
u(x, y) = r(x, y)
21
ür x, y, ∈ Ω
ür x, y, ∈ Rand(Ω)
Wir legen ein äquidistantes Gier über das zu berechnende Gebiet mit der Gierweite h, und
lassen die Indizes nur von i = 1, · · · , 4 bzw. j = 1, · · · , 3 laufen.
4
j
3
2
11
00
11
00
2
3
1
0
1
4
i
Abbildung 10: Beispielgier
Für alle inneren Gierpunkte läßt sich die Gleichung
ui−1,j − 2ui,j + ui+1,j
ui,j−1 − 2ui,j + ui,j+1
+
= fi,j
2
h
h2
bzw.
−ui,j−1 − ui−1,j + 4ui,j − ui+1,j − ui,j+1 = −h2 fi,j
22
5
aufstellen. Wir wählen als Anordnung der Unbekannten ui,j im Vektor ⃗u zum Beispiel
 
 
u11
  u  
  21  
  u  
31




  u41  


u12



 

u

22  
⃗u =  

  u32  



u42  





u
  13  
  u23  


  u33  
u43
Dies entspricht einem horizontalem Durchlaufen der Unbekannten von links nach rechts im
Gier.
Das Einarbeiten der Randbedingungen ergibt folgende Matrix



















4
−1
−1
−1
4
−1
−1
−1
4
−1
−1
−1
−1
4
4
−1
−1
−1

−1
−1
4
−1
−1
−1
−1
4
−1
−1
−1
−1
−1
4
4
−1
−1
−1
−1
4
−1
−1
−1
4
−1
−1
−1
4


















u11
u21
u31
u41
u12
u22
u32
u42
u13
u23
u33
u43




















 = −
















h2 f11 − r10 − r01
h2 f21 − r20
h2 f31 − r30
h2 f41 − r40 − r51
h2 f12
− r02
h2 f22
h2 f32
h2 f42
− r52
h2 f13 − r14 − r03
h2 f23 − r24
h2 f33 − r34
h2 f43 − r44 − r53
Die einzigen einfachen Gleichungen ür innere Gierpunkte, die nicht auf irgendwelche Randpunkte zurückgreifen müssen, entsprechen den beiden mileren fegedruckten Zeilen siehe
auch Abb.(10).
Normalerweise wird man bei großen Giern diese Matrix oben gar nicht aufstellen, da ein direktes Lösen dieses schwachbesetzten GLS mit i ∗ j Unbekannten zu aufwendig wäre.
Hier wählt man ein iteratives Verfahren, bei dem dieses Gleichungssystem zeilenweise abgearbeitet wird. Die gesamte Matrix muß also nicht gespeichert werden.
Für die inneren Gierpunkte gilt z.B. beim Gauß-Seidel-Verfahren
ür i = 2, · · · , 3
ür j = 2
−ui,j−1 − ui−1,j + 4ui,j − ui+1,j − ui,j+1 = −h2 fi,j
ui,j
= (ui,j−1 + ui−1,j + ui+1,j + ui,j+1 − h2 fi,j )/4
Den Einbau der Randbedingungen kann man in diesem Fall, bei dem die Funktionswerte am
Rand fest vor gegeben sind (Dirchlet), sehr einfach durchühren, indem man das Feld der Unbekannten ui,j jeweils um die Randindizes erweitert, und dort den Unbekannten die Randwerte
23



















ri,j fest zuweist. Dann erhält man nur eine Anweisungsschleife ür das gesamte Gier.
Falls man Cauchy- oder Neumann-Randbedingungen einbauen will, muß man jedoch die vier
Ränder und die vier Eckpunkte gesondert betrachten, da hier die Randwerte durch Hinzuügen
zusätzlicher Gleichungen und neuen einzusetzenden Bedingungen ür die zusätzlichen Unbekannten angenähert werden. Dadurch verändert sich die gleichmäßige Gestalt der Gleichungen
ür die Randgierpunkte ( damit sind die Gierpunkte im Inneren gemeint, bei deren Berechnung man auf Randpunkte zugreifen muß).
7 Programmierhinweise
In diesem Kapitel sollen allgemeine Hilfestellungen zum Programmauau, Programmieren und
Testen gegeben werden. Auf sprachspezifische Fragen wird in diesem Kapitel nicht eingegangen.
Zunächst zur Frage, was das Programm können soll: Mit dem Differenzenverfahren den angenäherten Funktionsverlauf der gesuchten Funktion berechnen und das Ergebnis als die Eingangs erwähnte Zahlenkolonne ausgeben. Die graphische Darstellung kann dann mit vorhandener Soware erfolgen.
Das Programm sollte in sinnvolle Unterprogramme aufgeteilt werden, die dann jedes ür
sich in eigenen Hauptprogrammen getestet werden sollen. Eine Rechnung mit verschiedenen
Gierpunktzahlen sollte ohne umprogrammieren möglich sein.
Im folgenden wird die grobe Struktur des Programmes vorgestellt. Jedes der großen Unterprogramme soll auch wieder in sinnvolle Unterprogramme aufgeteilt werden.
• Hauptprogramm:
Das Hauptprogramm soll zum einen die Unterprogramme verwalten und die Deklaration
wichtiger Variablen und Konstanten enthalten, wie z. B. MaxGier. Des weiteren sollten
hier auch Programmerläuterungen stehen.
• Eingabe:
In diesem Teil werden die Gierdaten, Randbedingungen und ellen eingelesen. Die
Eingabe sollte nicht nur von der Tastatur, sondern auch von einer Datei möglich sein.
In der Anfangsphase empfiehlt es sich, daß dieses Unterprogramm die Daten eines einfachen Gebietes direkt setzt, so daß man auf jeden Fall immer mit den gleichen Daten
rechnet.
• Berechnung:
In diesem Teil wird der eigentliche Rechenalgorithmus programmiert. Im ersten Schri
müssen die Koeffizienten des Gleichungssytems bestimmt werden, das dann im zweiten
Schri gelöst wird.
• Ausgabe:
Die Ausgabe der Ergebnisse sollte zumindest in Form einer Textdatei erfolgen, die man
sich dann im Editor angucken kann und zur graphischen Darstellung mit einer Graphiksoware verwenden kann.
24
Zum Test des Programmes empfiehlt es sich, mit einem einfachen Gebiet mit 4 bis 5 Unbekannten Funktionswerten zu rechnen, dessen Lösung man noch auf dem Papier nachvollziehen
kann. In einem ersten Schri sollte man den stationären Fall mit Dirichlet-Randbedingungen
rechnen ( siehe 4.3). Man kann dann Schri ür Schri die anderen Randbedingungen verwenden und schließlich den instationären Fall berechnen, ür den man auch 2 bis 3 Zeitschrie auf
dem Papier lösen kann.
Beim Arbeiten mit großen Matrizen kann es Speicherplatzprobleme geben. Da die Handhabung großer Matrizen in jeder Programmiersprache unterschiedlich ist - läu aber immer auf
das Arbeiten mit Zeigern hinaus - können hier keine weiteren Hinweise gegeben werden.
Bei der Fehlersuche muß man den Programmablauf transparent machen. Diese Aufgabe
übernehmen sogenannte Debugger, mit deren Hilfe man die Werte der Variablen während
des Programmablaufes einsehen kann. Steht kein Debugger zur Verügung, so hil man sich
mit einem My-Debugging, indem man in das Programm die Ausgabe von Zwischenergebnissen schreibt. Das Schreiben eines flexiblen Ausgabe-Unterprogrammes ür die Vektor- und/
oder Matrixausgabe, das von jedem Programmteil aufgerufen werden kann, erspart einem das
wiederholte Schreiben von Schleifen.
8 Ergänzungen
Dieses Kapitel geht auf Erweiterungen des bisherigen Stoffes ein, wobei hier die einzelnen
Aspekte nur kurz angerissen werden. Eine Beschreibung anhand von Formeln findet deshalb
kaum sta, stadessen wird, wenn möglich, auf weiterührende Literatur verwiesen.
8.1 Nichtäquidistante Gier
Ein Rechnen mit nichtäquidistanten Giern ist prinzipiell möglich, um z. B. Bereiche, in denen eine Verfeinerung aus physikalischen Gründen notwendig ist, besser aufzulösen. Man darf
dabei aber nicht vergessen, daß sich diese Verfeinerung sozusagen in das gesamte Rechengebiet reinzieht. Außerdem hat man nun kein strukturiertes Gier mehr und muß deshalb die
Beschreibung des Gebietes in einer Datei o.ä. realisieren.
8.2 Mehrdimensionale Probleme mit unterschiedlichen Gierschriweiten
Bei mehrdimensionalen Problemen mit unterschiedlichen Gierschriweiten ührt man den
Faktor β ein, der das Verhältnis ∆x/∆y beschreibt. Man kann dann weiterhin mit dem sternOperator arbeiten, in dem dann noch das β auaucht.
8.3 DQ’s mit höherer Fehlerordung
Es ist prinzipiell möglich, DQ’s erster und zweiter Ableitung auch mit höheren Fehlerordungen
zu approximieren, es gibt jedoch dann am Rand Probleme, da einzelne Punkte des DQ nicht
mehr im Rechengebiet liegen (Abb. 11).
25
i -2
i -1
i
i+1
i+2
Rand
Abbildung 11: DQ über 5 Punkte am Rand
8.4 Krumme Ränder
Fällt der Rand des Gebietes nicht mit den regulären Gierpunkten zusammen, so muß man die
einzelnen Komponenten der DQ’s über eine Interpolation bestimmen. Diese Vorgehensweise ist ausührlich bei Schwarz [1] beschrieben. Eine andere Methode liegt in der Verwendung
Körperangepaßter Gier. Das Problem hierbei liegt in der Bestimmung der Transformationsfunktionen, um von dem Körperangepaßten Gier auf ein einfaches, rechteckiges Gier zu
rechnen.
8.5 ADI-Verfahren
Das ADI-Verfahren dient dazu, das bei instationären 2-D Problemen normalerweise entstehende Pentadiagonle Gleichungssystem, das sich nicht effektiv direkt lösen läßt, durch zwei
Tridiagonale Gleichungssysteme zu ersetzen, deren Lösung weitaus schneller ist als die iterative eines Pentadiagonalen Gleichungssystems. Man geht dabei folgendermaßen vor. In einem
ersten Schri werden alle Funktionswerte in x-Richtung (x-sweep) mit konstantem y-Wert berechnet. In dem zweiten Schri wird dies ür die y-Richtung (y-sweep) gemacht, wobei die
x-Werte aus dem x-sweep verwendet werden.
Literatur
[1] Schwarz, H.R.: Numerische Mathematik. Teubner, Stugart 1993
Umfassendes, verständli es, modernes Lehrbu über die gängigen numeris en Verfahren
[2] Hackbusch,W.: Iterative Lösung großer schwachbesetzter Gleichungssysteme. Teubner,
Stugart 1993
Sehr ausührli es Bu zum  ema Iterative Verfahren
[3] Baehr, H.D. , Stephan, K.: Wärme- und Stoübertragung. Springer, Berlin Heidelberg 1993
Eigenes Kapitel zum Di erenzenverfahren
26
Herunterladen