Die Berechnung der Kapazitäten mit Hilfe der elektrostatischen Feldenergie
verlangt die Lösung von zwei Gleichungssystemarten: Erstens das große lineare
Gleichungssystem, welches für einen angelegten Spannungsvektor
die Potentialverteilung zwischen den Leitern liefert, um
daraus die elektrostatische Feldenergie zu berechnen.
Zweitens ist die Lösung eines kleinen linearen Gleichungssystems erforderlich,
um aus den Spannungsvektoren und Energien die Kapazitätsmatrix zu berechnen. Da
der Rang dieses Systems mit ,
wobei
die Leiteranzahl bezeichnet, relativ klein ist
,
kann die Lösung mit
einem einfachen Gaußschen Eliminationsverfahren ohne Speicherplatzoptimierung
gewonnen werden.
Da ein Großteil der CPU-Zeit zur Berechnung der Kapazitäten im Gleichungslöserteil des Programms gebraucht wird, soll dieses Kapitel der Lösung des diskretisierten Feldproblems gewidmet werden.
Das in Abschnitt 3.9 assemblierte Gesamtgleichungssystem
soll für die folgenden Abschnitte die in Zusammenhang mit Gleichungslösern übliche Schreibweise
erhalten. Außerdem sind in diesem Abschnitt die Bezeichnungen Spaltenmatrix und Vektor als äquivalent zu betrachteten, da im mathematischen Bereich der Ausdruck n-dimensionaler Vektor üblich ist, obwohl dieser hier keine geometrische Bedeutung hat.
Abbildung 4.1: Leiter zwischen zwei Kontaktflächen, 150 Tetraeder
Das in Abbildung 4.1 gezeigte Gitter hat
nach dem Assemblieren unter Verwendung quadratischer Formfunktionen die in Abbildung
4.2 gezeigte Matrixstruktur. Diese Matrixform ist auch für andere
Problemstellungen typisch: Ein Großteil der Matrix ist unbesetzt. Die gezeigte Matrix
weist eine Besetzungsdichte von auf. Da die Anzahl der nächsten Nachbarn
auch bei steigender Elementsanzahl nahezu gleich bleibt, sinkt
die Besetzungsdichte, je größer der Rang der Matrix ist.
Es liegt daher die Verwendung eines Datenkompressionsverfahrens nahe, um die Einträge mit Null zu eliminieren.
Abbildung 4.2: Einträge in der Koeffizientenmatrix für die Struktur:
Leiter zwischen zwei Kontaktflächen, Rang: 224
Da Gleichungsränge, die über zehntausend liegen, zu erwarten sind, zeigt es sich als absolut notwendig, Überlegungen in Richtung optimaler Speicherausnutzung anzustellen.
Bei einer Rechnerimplementierung zur Lösung diskretisierter Differentialgleichungen auf dreidimensionalem Gebiet ist einer effizienten Nutzung von Hauptspeicherressourcen prinzipiell höchste Priorität einzuräumen. Es ist nur dann ein optimales Laufzeitverhalten von direkten, aber vor allem iterativen Lösungsmethoden zu erwarten, wenn Matrixformate Verwendung finden, die Operationen mit von Null besetzten Matrixeinträgen direkt unterdrücken.
Zwei naheliegende Möglichkeiten, die jedoch noch nichts mit Matrixkompressionsverfahren
gemeinsam haben und in den Abschnitten 3.9 und 3.10.1
schon kurz erörtert wurden, sind eine Assemblierung ohne
Pseudo-Gleichungen
und außerdem die Ausnutzung der Symmetrie des Gleichungssystems, indem man nur
eine Hälfte der Matrix abspeichert.
In dieser Arbeit werden alle unteren Nichtdiagonalelemente (eine strikte untere
Dreiecksmatrix) plus die Einträge der Diagonale gespeichert.
Eine wichtige Komponente bei der Konzeption des Gleichungslösers
ist, daß das Matrixkompressionsverfahren auf den Gleichungslöser
optimal abgestimmt ist. Da das konjugierten Gradientenverfahren während der Iteration
keine zusätzlichen Matrixeinträge erzeugt,
können sämtliche Koeffizienten der Matrix, die den Wert Null besitzen, weggelassen
werden. Der zweite Gleichungslöser,
der direkte Gauß-Löser, erzeugt eine
Faktorisierung
der Matrix. Die Faktorisierung erzeugt neue
Einträge innerhalb der Hülle der Matrix, sodaß vom minimalen Spaltenindex
ungleich
null einer Zeile
bis zum Diagonaleintrag der Zeile
alle Elemente abgespeichert
werden müssen.