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

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:

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

Ausgabedateien:

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.