2.2 DER ITERATIONSSOLVER Z88I1/Z88I2

HINWEIS:

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

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

Der Iterationssolver ist genau das Richtige für große Strukturen. Für kleine und mittlere Strukturen wählen Sie den direkten Solver Z88F.

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

Iterationssolver Part 1: Z88I1: Er 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)

Dazu wird zunächst eine Structure IJ aufgebaut, die dann mit einem QSORT- Algorithmus sortiert (nach einer Idee von Dipl.-Ing Frank Koch) wird. Dieser Schritt kann durchaus sehr viel Speicher brauchen, aber da es reine Integer- Operationen sind, geschieht dies relativ schnell.

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

Die Structure IJ besteht aus MAXSOR Elementen, vgl. Speichersteuerdatei Z88.DYN. Sie müssen vorab Speicher MAXSOR 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. Den Wert MAXPUF (sorgt für ein Zwischensortieren) in Z88.DYN stellen Sie so ein, daß er etwa ein Viertel bis ein Zehntel des Wertes von MAXSOR hat, z.B. so:

`MAXSOR 5000000
MAXPUF 500000
`

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 das müssen Sie vor Z88I2 einstellen
MAXKOI 132000 das müssen Sie vor Z88I2 einstellen
MAXK 11000
MAXE 33000
MAXNFG 32000
MAXNEG 32
MAXSOR 5000000 das müssen Sie vor Z88I1 einstellen
MAXPUF 500000 das müssen Sie vor Z88I1 einstellen
COMMON END
`

Bei großen Strukturen für Z88 gehen Sie also beim direkten Solver 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 MAXSOR zu niedrig war, MAXSOR in Z88.DYN erhöhen und Z88I1 erneut starten. Wählen Sie für MAXPUF etwa Viertel bis ein Zehntel des Wertes von MAXSOR. Ggf. diesen Schritt solange wiederholen, bis Z88I1 sauber durchläuft.

Iterationssolver Part 2: Z88I2: Er berechnet die Elementsteifigkeitsmatrizen, compiliert die Gesamt- Steifigkeitsmatrix, baut die Randbedingungen ein, skaliert das Gleichungsystem 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. Standard ist SOR- Vorkonditionierung, das braucht auch weniger Speicher. Die Partielle Cholesky- Zerlegung (shiftet incomplete Cholesky decomposition SIC) verwenden Sie nur in Sonderfällen.

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 drei Steuerwerte in die Steuerdatei Z88I4.TXT geben:

- Abbruchkriterium: maximale Anzahl der Iterationen (z.B. 10000) überschritten
- Abbuchkriterium: Residuenvektor < Grenzwert Epsilon (z.B. 1e-7)
- Steuerwert für die Konvergenzbeschleunigung. Je nach gewähltem Vorkonditionierer hat er eine unterschieliche Bedeutung:

1. Im Falle SOR: Relaxationsfaktor Omega (zwischen 0 und 2, brauchbare Werte können oft zwischen 0.8 und 1.2 liegen).
2. im Falle SIC: Shift- Faktor Alpha (zwischen 0 und 1, brauchbare Werte können oft zwischen 0.0001 und 0.1 liegen). Näheres entnehmen Sie ggf. der Spezialliteratur)

HINWEIS:

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

Eingabedateien:

Z88I1.TXT (allgemeine Strukturdaten)

Z88I2.TXT (Randbedingungen)

Z88I4.TXT (Steuerdatei für den Iterationssolver Part 2: Z88I2)

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.