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.