## 2.2 DIE SPARSEMATRIX-SOLVER

HINWEIS:Immer ohne Ausnahme FE-Berechnungen mit analytischen Überschlagsrechnungen, Versuchsergebnissen, Plausibilitätsbetrachtungen und anderen Überprüfungen kontrollieren !

Diese beiden Solverpaare

- Z88I1 und Z88I2 Iterationssolver
- Z88I1 und Z88PAR direkter Sparsematrix-Solver mit Fill-In

arbeiten mit Speicherung der Nicht-Nullelemente. Sie sind sehr geeignet für größere Strukturen, aber etwas aufwendiger zu bedienen wie der Direkte Cholesky-Solver Z88F.

Die vornehmlichste Aufgabe jedes FE-Programms ist die Berechnung der Verschiebungen. Das erledigen die Sparsematrix-Solver. Die berechneten Verschiebungen sind der Ausgangspunkt für eine Spannungs-Berechnung mit Z88D bzw. Knotenkraft-Berechnung mit Z88E.

2.2.1 Der Sparsematrix-Iterationssolver Z88I1/Z88I2

Der Iterationssolver arbeitet nur mit den sog. Nicht-Nullelementen – was ein absolutes Minimum an Speicherbedarf bedeutet – und besteht aus zwei Teilen:

Sparsematrix-Solver Part 1: Z88I1: Er wird sowohl für Z88I2 (Iterationssolver) als auch für Z88PAR (direkter Sparsematrix-Solver mit Fill-In) genutzt und baut folgende Pointer für die untere Hälfte der Gesamt-Steifigkeitsmatrix GS auf:

· Pointervektor IP zeigt auf die Diagonalelemente GS(i, i)

· Pointervektor IEZ zeigt auf die Spaltenindices GS(x, j)

Beispiel (vgl. Schwarz, H.R: Methode der finiten Elemente): Sei die untere Hälfte von GS

GS(1,1) |  |  |  |  |
GS(2,1) | GS(2,2) |  |  |  |
| GS(3,2) | GS(3,3) |  |  |
GS(4,1) |  |  | GS(4,4) |  |
GS(5,1) |  | GS(5,3) |  | GS(5,5) |
| GS(6,2) |  | GS(6,4) |  | GS(6,6)

GS wird zu folgendem Vektor der Nicht- Nullelemente:

GS(1,1) | GS(2,1) | GS(2,2) | GS(3,2) | GS(3,3) | GS(4,1) | GS(4,4)
GS(5,1) | GS(5,3) | GS(5,5) | GS(6,2) | GS(6,4) | GS(6,6) |

Damit wird IEZ:

1 | 1 | 2 | 2 | 3 | 1 | 4 | 1 | 3 | 5 | 2 | 4 | 6

und IP:

1 | 3 | 5 | 7 | 10 | 13

Der Pointer IEZ besteht aus MAXIEZ Elementen, vgl. Speichersteuerdatei Z88.DYN. Sie müssen vorab Speicher MAXIEZ für den eigentlichen Aufbau der Sparse-Matrix bereitstellen. Es gibt leider keine Möglichkeit, diesen Speicherbedarf vorab zu schätzen, aber Z88I1 teilt Ihnen mit, wenn dieser Wert zu klein war. Sie müssen ihn dann in Z88.DYN erhöhen und Z88I1 erneut starten. Z88I1 schreibt die beiden Pointervektoren in eine Binärdatei Z88O4.BNY, die recht groß werden kann.

Z88I1 teilt Ihnen mit, wieviel Speicher Sie für GS (= MAXGS) und KOI (= MAXKOI) vorsehen müssen; dies in Z88.DYN einstellen. Hier ein beispielhafter Ausschnitt aus Z88.DYN:

COMMON START

MAXGS 600000 < dies vor Z88I2/Z88PAR einstellen

MAXKOI 132000 < dies vor Z88I2/Z88PAR einstellen

MAXK 11000

MAXE 33000

MAXNFG 32000

MAXNEG 32

MAXIEZ 600000 < das müssen Sie vor Z88I1 einstellen

COMMON END

Bei großen Strukturen für Z88 gehen Sie also in 3 oder mehr Schritten vor:

1. Z88I1 starten

2. Wenn Z88I1 sauber gelaufen ist, Werte für MAXGS und MAXKOI ablesen und Z88.DYN ggf. korrigieren. Damit ist der Speicher für den eigentlichen Solver Z88I2 eingestellt.

3. Wenn Z88I1 abbrach, weil MAXIEZ zu niedrig war, MAXIEZ in Z88.DYN erhöhen und Z88I1 erneut starten. Ggf. diesen Schritt solange wiederholen, bis Z88I1 sauber durchläuft. Dann können Sie den zweiten Teil Z88I2 bzw. Z88PAR starten.

Sparsematrix-Solver Part 2: Z88I2: Er berechnet die Elementsteifigkeitsmatrizen, compiliert die Gesamt-Steifigkeitsmatrix, baut die Randbedingungen ein, skaliert das Gleichungssystem und löst das (riesige) Gleichungssystem mit dem Verfahren der Konjugierten Gradienten. Zuvor wird vorkonditioniert, um eine schnellere Konvergenz zu erreichen. Dabei können Sie wählen, ob mit einem SOR-Schritt vorkonditioniert wird oder eine sog. Partielle Cholesky-Zerlegung zur Vorkonditionierung eingesetzt wird. Die Partielle Cholesky-Zerlegung (shiftet incomplete Cholesky decomposition SIC) ist die Standardeinstellung, weil sie hinsichtlich des Steuerparameters, des sog. Shift-Faktors a, unkritisch ist. Die SOR-Vorkonditionierung braucht weniger Speicher, aber der Steuerparameter, der Relaxationsparameter w, ist nicht a-priori bestimmbar.

1.) Konjugierte Gradienten mit SOR-Vorkonditionierung:

Windows: Z88I2 > Mode > Vorkon: Überrelaxation, Berechnung > Start

UNIX: z88i2 -s (Console) oder Solver: Z88I2 -S (Z88COM)

2.) Konjugierte Gradienten mit SIC-Vorkonditionierung:

Windows:Z88I2 > Mode > Vorkon: unvoll. Cholesky Zer., Berechnung > Start

UNIX: z88i2 -c (Console) oder Solver: Z88I2 -C (Z88COM)

Ferner müssen Sie noch fünf Steuerwerte in die Solver-Steuerdatei Z88I4.TXT geben:

· 1.Wert: Abbruchkriterium: maximale Anzahl der Iterationen (z. B. 10000)

· 2. Wert: Abbuchkriterium: Residuenvektor < Grenze Epsilon (z. B. 1e-7)

· 3. Wert: Steuerwert für die Konvergenzbeschleunigung für SIC: Shift-Faktor Alpha (zwischen 0 und 1, brauchbare Werte können oft zwischen 0.0001 und 0.1 liegen; beginnen Sie mit 0.0001). Näheres entnehmen Sie ggf. der Spezialliteratur)

· 4. Wert: Steuerwert für die Konvergenzbeschleunigung für SOR: Relaxationsfaktor Omega (zwischen 0 und 2, brauchbare Werte können oft zwischen 0.8 und 1.2 liegen).

· 5.Wert: Anzahl der zu verwendeten CPUs (nur Z88PAR, max. 9).

HINWEIS: Die hier genannten Dateien Z88I1.TXT, Z88I2.TXT, Z88I4.TXT und Z88I5.TXT sind in Kapitel 3 näher beschrieben.

Eingabedateien:

- Z88I1.TXT (allgemeine Strukturdaten)
- Z88I2.TXT (Randbedingungen)
- Z88I4.TXT (Steuerdatei für die Sparsematrix-Solver Part 2: Z88I2 bzw. Z88PAR)

· ggf. Z88I5.TXT (Strecken- und Flächenlasten, wenn vorhanden)

Ausgabedateien:

- Z88O0.TXT (aufbereitete Strukturdaten für Dokumentation)
- Z88O1.TXT (aufbereitete Randbedingungen für Dokumentation)
- Z88O2.TXT (Verschiebungen)

Ferner werden generell die beiden Binärfiles Z88O1.BNY und Z88O3.BNY erzeugt. Diese Binärfiles werden dann von Z88D (Spannungsprozessor) und Z88E (Knoten- Kraftprozessor) genutzt.

2.2.2 Der direkte Sparsematrix-Solver mit Fill-In Z88PAR

Vor Z88PAR starten Sie den ersten Solverteil Z88I1, vgl. Kap. 2.2.1.

Sparsematrix-Solver Part 2: Z88PAR. Der Solver Z88PAR führt eine direkte Zerlegung aus, aber im Gegensatz zu dem einfachen Z88F arbeitet er mit Fill-In, d.h. für die durch den Zerlegungsprozess neu entstehenden Speicherstellen fordert er ständig weiteren Speicherplatz an. Dadurch ist a-priori der Speicherbedarf nicht kalkulierbar. Reicht während der Berechnung der Hauptspeicher nicht mehr aus, bricht Z88PAR zwangsläufig ab.

Dieser Solver arbeitet bei mittelgrossen Strukturen (100.000 ~ 1.000.000 Freiheitsgrade) sehr schnell, da er mehrprozessorfähig ist, braucht aber um Zehnerpotenzen mehr Hauptspeicher als der Iterationssolver Z88I2. Daher ist der Einsatz von Z88PAR nur sinnvoll bei sehr viel Hauptspeicher, was dann wieder 64-Bit Pointer und Integers impliziert. Ich empfehle für Z88PAR die 64-Bit Version Z88 mit einem 64-Bit Windows Betriebssystem und mindestens 4 GByte Hauptspeicher (besser 8 oder 16 GByte). Bei 32-Bit Betriebssystemen und 4 GByte Hauptspeicher werden Sie keine Strukturen mit mehr als ~150.000 Freiheitgraden berechnen können. Als eigentlicher Solverkern wird PARDISO, entwickelt von O. Schenk, Universität Basel, genutzt. Aus rechtlichen Gründen geben wir die Quellen von Z88PAR nicht frei – die einzige Ausnahme zu unserem Open Source Konzept.