1.4 Dynamischer Speicher Z88
Speichersteuerdatei Z88.DYN und Filechecker Z88V
Alle Z88- Module fordern Memory dynamisch an. Obgleich Z88 mit Standardwerten in Z88.DYN geliefert wird, kann und soll der Anwender diese Werte anpassen. Dazu wird die Datei Z88.DYN editiert.
Ferner wird in Z88.DYN die Sprache definiert. Tragen Sie in eine Zeile, am besten zwischen DYNAMIC START und NET START, die gewünschte Sprache als GERMAN oder ENGLISH ein.
Z88.DYN beginnt mit dem Schlüssel DYNAMIC START und endet mit DYNAMIC END. Dazwischen gibt es eine Sektion für den Netzgenerator (NET START, NET END), eine für alle Module gemeinsame Sektion (COMMON START, COMMON END), eine Sektion für das Plotprogramm (PLOT START, PLOT END) und eine Sektion für das Cuthill- McKee- Programm (CUTKEE START, CUTKEE END). .Dazwischen können beliebig Leerzeilen oder Kommentare sein, es werden nur die großgeschriebenen Schlüsselworte erkannt. Nach dem jeweiligen Schlüssel folgt eine Integerzahl, durch mindestens ein Leerzeichen getrennt. Die Reihenfolge der Schlüsselworte ist beliebig.
Mit dem Filechecker Z88V können Sie den in Z88.DYN definierten Datenspeicherbedarf für die speicherkritischen Module Z88F, Z88I1, Z88I2 feststellen. Zu den jeweiligen Werten müssen Sie noch ca. 200 KByte für die Programm-Module addieren, was bei Windows und bei UNIX allerdings vernachlässigbar ist.
Ein Anpassen der Speicheranforderung ist durchaus sinnvoll.
Fordern Sie aber nicht
unnötig viel Speicher an, da dies, insbesonders bei virtuellem Memory,
Geschwindigkeitseinbußen bedingt.
Bei großen Strukturen lassen Sie am besten einen Test laufen. Je nach Solver gehen Sie wie folgt vor:
Der direkte Cholesky- Solver Z88F:
Windows :Z88F > Mode > Testmode, Berechnung
> Start
UNIX: z88f -t
(Console) oder Z88F mit Option -T (Z88COM)
laufen. Erhalten Sie hier z.B. GS= 100.000, dann schreiben Sie in Z88.DYN für MAXGS vielleicht 120.000, aber nicht 1.000.000 ! Dann überschlagen Sie den Gesamtspeicherbedarf, wie weiter unten beschrieben, bzw. nutzen Sie Z88V.
Bei großen Strukturen für Z88 gehen Sie also in 2 Schritten vor:
1. MAXGS feststellen mit
Windows :Z88F > Mode > Testmode, Berechnung
> Start
UNIX: z88f -t
(Console) oder Z88F mit Option -T (Z88COM)
2. Z88.DYN ggf. korrigieren, Datenspeicherbedarf Z88F mit Z88V ermitteln
(Ablesen des Speicherbedarfs MAXGS und MAXKOI bei Windows. Bei UNIX sieht das sinngemäß aus)
Der Iterationssolver Z88I1 und Z88I2:
Hier gibt es keinen Testmode, denn der erste Teil des Iterationssolvers, d.h. Z88I1, ermittelt diesen Bedarf und zeigt ihn für den zweiten Part, d.h. Z88I2, an:
(Ablesen des Speicherbedarfs MAXGS und MAXKOI bei Windows. Bei UNIX sieht das sinngemäß aus)
Allerdings ist das Vorgehen beim Iterationssolver etwas subtiler, denn 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 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
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.
Stellen Sie sicher, daß Ihr Swapper-Space ausreichend ist. Gegebenenfalls einstellen:
Windows:
Start > Einstellungen > Systemsteuerung > System >
Leistungsmerkmale > virtueller Arbeitsspeicher , ggf. > ändern. Die
Größe der permanenten Auslagerungsdatei wählen Sie nach eigenen
Vorstellungen. Hinweis: Die momentane Z88-Version für Windows ist mit
32-Bit Integers compiliert. Für die 32-Bit Windows-Version bis XP sollte
das reichen. Jedoch können sehr große Strukturen größer
als 2~3 Mio. Freiheitsgrade die internen Zähler und Pointer zum
Überlaufen bringen, denn 232 ist nur ca. +/- 2 Milliarden.
UNIX:
Je nach System kann die Swap- Partition problemlos dynamisch
vergrößert werden oder es muß ein zusätzliches Swap- File
angelegt werden oder die Swap- Area muß gelöscht und
vergrößert neu angelegt werden.
Ich empfehle eine Größe zwischen 100 und 1000 MByte. Der Wert hängt von der zu rechnender FE-Strukturgröße ab. Erhalten Sie bei einem Rechenmodul (meist von Z88F) eine Meldung "Nicht genügend dynamisches Memory", dann setzen Sie die Größe der Auslagerungsdatei hoch.
Von Z88 her gibt es keinerlei Grenzen für die Größe der Strukturen. Die maximale Größe wird nur durch den virtuellen Speicher Ihres Computers und Ihre Vorstellungskraft begrenzt ! Ggf. müssen Sie bei sehr großen Strukturen auf 64-Bit Integers und Pointer übergehen (vgl. Kap.1.3.2), damit die internen Schleifenzähler nicht überlaufen.
Die Z88- Module prüfen, ob die vorgegebenen Werte für das aktuelle Problem ausreichen, bzw. Limits erreicht sind, und brechen ggf. ab.
Bei kommentarlosem Abbruch eines Z88- Moduls dessen .LOG -Datei betrachten. Oft ist MAXKOI zu klein gewesen!
Die mitgelieferten FEA-Beispieldateien kommen mit den gelieferten Standard-Einstellungen in Z88.DYN absolut aus. Sie nehmen dann in Z88.DYN Veränderungen vor, wenn Sie eigene, große Strukturen rechnen wollen.
In den .LOG- Dateien wird bei Erfolg der erforderliche Datenspeicher protokolliert, dazu kommt natürlich der Speicher für das eigentliche Programm, lokale Arrays und Stack, den man allerdings bei Windows und UNIX vernachlässigen kann.
Zu beachten ist: Z88 arbeitet normalerweise bei
Gleitkomma- Zahlen mit doubles = 8 Bytes
Ganzzahlen mit longs = 4 Bytes.
Bei bestimmten UNIX-Maschinen können die Solvermodule so compiliert (Compiler-Switches und Direktive FR_XQUAD, vgl. Kap. 1.3.2) werden, daß sie mit
rechnen. Achtung:
64-Bit Integers können für sehr große Strukturen (> 2~3 Mio.
Freiheitsgrade) ohne weiteres erforderlich sein, damit die internen Pointer-und
Ganzzahl-Berechnungen noch funktionieren! Hingegen brauchen Gleitkomma-Zahlen
mit Quad-Precision, d.h. 128 Bit, unverhältnismäßig viel
Rechenzeit gegenüber Gleitkomma-Zahlen mit Double-Precision, d.h. 64 Bit.
Tests mit einer SUN FIRE V890 und einer SGI ORIGIN 2000 mit Quad-Precision
ergaben bei uns am Lehrstuhl eine fünf- bis zehnfache Verlängerung
der Rechenzeit gegenüber Double-Precision. Ich würde also auf
größeren Maschinen zu jeweils 64-Bit für Ganz- und
Gleitkommazahlen raten.
Speicherkritisch
sind Z88F, Z88I1 und Z88I2.
Wenn diese Module laufen, läuft auch der Rest.
Es folgt die allgemeine Beschreibung für Z88.DYN.
DYNAMIC START
Sprache einstellen:
GERMAN oder ENGLISH. Wird hier nichts bzw. falsch angewählt, wird automatisch englische Sprache eingestellt.
Sektion Netzgenerator:
NET START
MAXSE Maximale Anzahl interner Knoten für FE- Netzerzeugung.
Muß deutlich höher sein als erzeugte FE- Knoten.
MAXESS Maximale Anzahl Superelemente
MAXKSS Maximale Anzahl Superknoten
MAXAN Maximale Anzahl von Knoten, die jeweils an ein Superelement
anschliessen können. Der Standardwert von 15 hat sich selbst für
komplexe Raumstrukturen mit Hexaedern Nr. 10 bewährt. Kann im Zweifelsfall
hochgesetzt werden.
NET END
Gemeinsame Daten:
COMMON START
MAXGS Maximale Anzahl Plätze in der Gesamtsteifigkeitsmatrix.
Anzahl GS wird bei Z88F und Z88I1 ausgewiesen.
MAXKOI Maximale Anzahl Plätze im Koinzidenzvektor = Anzahl Knoten
pro Element mal Anzahl Finite Elemente. Beispiel: 200 Finite Elemente Typ 10 =
20 Knoten/Element x 200 = 4000. Bei gemischten Strukturen geht man von dem
Elementtyp aus, der die meisten Knoten hat und multipliziert mit der
Gesamtanzahl Elemente. Benötigte Anzahl NKOI wird bei Z88F und Z88I2 ausgewiesen.
MAXK Maximale Anzahl Knoten der Struktur.
MAXE Maximale Anzahl Elemente der Struktur.
MAXNFG Maximale Anzahl Freiheitsgrade der Struktur.
MAXNEG Maximale Anzahl Elastizitätsgesetze der Struktur.
MAXPR: Maximale Anzahl der Flächenlasten
MAXSOR Nur für Iterationssolver Part 1, d.h. Z88I1. Z88I1 verwendet
einen Vektor für Sortierzwecke, der die Größe MAXSOR hat. 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 erhöhen und Z88I1 erneut starten.
MAXPUF Nur für Iterationssolver Part 1, d.h. Z88I1. Startet das
Zwischensortieren. MAXPUF sollte ca. 1/4 bis 1/10 von MAXSOR betragen
COMMON END
Für Plotprogramm Z88P:
PLOT START
MFACCOMMON Folgende Werte aus COMMON werden mit dem hier stehenden
Faktor multipliziert: MAXKOI, MAXE, MAXK. Standardfaktor 2. Ist für
Überprüfungen von Eingabefiles, die der Netzgenerator erzeugt hat,
sinnvoll.
MAXGP Maximale Anzahl Gaußpunkte für Spannungsplots.
Beispiel: 200 Finite Elemente Typ 10, Integrationsordnung 3: Pro Element dann 3
x 3 x 3 = 27 Gaußpunkte/Element, also 27 x 200 = 5400 Gaußpunkte.
PLOT END
Für den Cuthill-
McKee- Algorithmus:
CUTKEE START
MAXGRA Maximaler Grad der Knotenpunkte
MAXNDL Stufen des Algorithmus
CUTKEE END
DYNAMIC END
Wie schon erwähnt, können Sie mit Z88V feststellen, was die diversen Z88- Module an Speicher anfordern.
(Definierten Speicher bei Windows anzeigen lassen. Geht bei UNIX sinngemäß)