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 Gier . . . . . . . . . . . . . . . . . . . . . . . . . . 8.2 Mehrdimensionale Probleme mit unterschiedlichen Gierschriweiten 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 naturwissenschalich-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 fehlerbehaet. 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 miels 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 Schriweite ∆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 Gierpunkt 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 Gierpunkten 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 Zeitschrie die weiteren Funktionsverläufe. 3.1 Explizite Differenzenformulierung Die explizite Differenzenformulierung hat den großen Vorteil, daß außer bei der Anfangsverteilung in folgenden Zeitschrien 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 Miel 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 Gier definieren, wobei M die Anzahl innerer Gierpunkte in x-Richtung, und N die Anzahl innerer Gierpunkte 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 Gierschriweite 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 Gierpunkt 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 Gierpunkt 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 Gierlinie zusammenfallen, muß mit einem Mielwert ür a (arithmetisches, geometrisches bzw. harmonisches Miel) 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 Schrien 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 Gesamtsritten 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 Iterationsschries ausnutzt. Dies ührt auf die sogenannte Iteration in Einzelsritten 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 Gier über das zu berechnende Gebiet mit der Gierweite 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: Beispielgier Für alle inneren Gierpunkte 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 Gier. 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 Gierpunkte, die nicht auf irgendwelche Randpunkte zurückgreifen müssen, entsprechen den beiden mileren fegedruckten Zeilen siehe auch Abb.(10). Normalerweise wird man bei großen Giern 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 Gierpunkte 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 Gier. 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 Randgierpunkte ( damit sind die Gierpunkte im Inneren gemeint, bei deren Berechnung man auf Randpunkte zugreifen muß). 7 Programmierhinweise In diesem Kapitel sollen allgemeine Hilfestellungen zum Programmauau, 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 Soware erfolgen. Das Programm sollte in sinnvolle Unterprogramme aufgeteilt werden, die dann jedes ür sich in eigenen Hauptprogrammen getestet werden sollen. Eine Rechnung mit verschiedenen Gierpunktzahlen 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. MaxGier. Des weiteren sollten hier auch Programmerläuterungen stehen. • Eingabe: In diesem Teil werden die Gierdaten, 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 Graphiksoware 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 Zeitschrie 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, stadessen wird, wenn möglich, auf weiterührende Literatur verwiesen. 8.1 Nichtäquidistante Gier Ein Rechnen mit nichtäquidistanten Giern 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 Gier mehr und muß deshalb die Beschreibung des Gebietes in einer Datei o.ä. realisieren. 8.2 Mehrdimensionale Probleme mit unterschiedlichen Gierschriweiten Bei mehrdimensionalen Problemen mit unterschiedlichen Gierschriweiten ü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 β auaucht. 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 Gierpunkten 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 Gier. Das Problem hierbei liegt in der Bestimmung der Transformationsfunktionen, um von dem Körperangepaßten Gier auf ein einfaches, rechteckiges Gier 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, Stugart 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, Stugart 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