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.