Abaqus ist eine Finite-Elemente-Software von SIMULIA. Sie ist auf dem Cluster in der Version 2021 installiert. Achtung: Die auf dem OMNI-Cluster installierte Betriebssystem-Version (Rocky Linux 8.6) wird von Abaqus offiziell nicht unterstützt.

Um Abaqus zu nutzen, muss das entsprechende Modul geladen werden:

module load abaqus

Ein guter Einstiegspunkt ist die integrierte Hilfefunktion von Abaqus, erreichbar mit dem Befehl:

abaqus doc

Dieser Befehl öffnet ein Fenster und Sie müssen deshalb mit X11-Forwarding (ssh -X) angemeldet sein.

Die Abaqus-Dokumentation ist außerdem aus dem Programm selbst erreichbar.

Lizenzen

Abaqus darf auf dem Cluster nicht benutzt werden, ohne sich an den Kosten zu beteiligen, die Nutzung ist nicht umsonst.

Die Fakultät IV finanziert die Abaqus-Lizenzen an der Uni Siegen. Sie dürfen nur für nichtkommerzielle Zwecke in Lehre und Forschung eingesetzt werden. Die Kosten sind jeweils im Dezember für das Folgejahr fällig und werden anteilsmäßig von verschiedenen Instituten getragen. Die Höhe der Kosten ergibt sich nach Anteil der Nutzung. Geringfügige Nutzung oder Testrechnungen sind kostenfrei. Ansprechpartner für die Abaqus-Lizenz-Vereinbarungen ist Holger Poggel.

Mit dem Befehl lmstat können die zur Verfügung stehenden Token (Lizenzen) für Abaqus angezeigt werden. Der lmstat-Befehl verfügt über Zusatzoptionen, die mit der Option lmstat -h angezeigt werden können. Beispielsweise zeigt die Option lmstat -a einen vollständigen Überblick der einzelnen Abaqus-Module sowie die Anzahl der freien Lizenzen für jedes Modul.

$ lmstat
lmutil - Copyright (c) 1989-2008 Acresso Software Inc. All Rights Reserved.
Flexible License Manager status on Thu 11/15/2012 16:33
...

Die Umgebungsdatei von Abaqus wurde erweitert, sodass die Option queue=tokens benutzt werden kann, um für einen Job die benötigten Token im Voraus zu ermitteln, ohne die Berechnung zu starten:

$ abaqus -j myjob -queue tokens
Number of Tokens Required:  5

oder alternativ:

$ abaqus j=myjob cpus=12 queue=tokens
Number of Tokens Required:  14

Nutzung

Abaqus verfügt über eine grafische Oberfläche sowie einen Kommandozeilenmodus. Erstere kann mit

abaqus cae

aufgerufen werden.

Kommandozeilenbefehle bestehen in der Regel aus dem Wort abaqus und mindestens einem weiteren Befehl. Mögliche Kommandozeilenbefehle können mit abaqus help angezeigt werden:

$ abaqus help

In the following execution procedures, "abaqus" refers to the command
used to run Abaqus.

 Obtaining information

 abaqus  {help | information={environment | local | memory | release |
           support | system | all} [job=job-name] | whereami}
...

Mit Abaqus auf dem Cluster rechnen

Abaqus kann parallele Rechnungen durchführen, da es intern MPI verwendet. Allerdings wird pro Prozess eine Lizenz benötigt und die Kosten vervielfachen sich entsprechend. Außerdem müssen zum Zeitpunkt der Rechnung genügend freie Lizenzen zur Verfügung stehen.

Die übliche Vorgehensweise für Abaqus-Jobs besteht darin, im Job-Skript den Abaqus-Befehl mit der entsprechenden Input-Datei aufzurufen:

abaqus job=<Jobname> input=<Inputdatei.inp> cpus=$SLURM_NTASKS

Die Umgebungsvariable $SLURM_NTASKS wird durch SLURM am Anfang eines Jobs gesetzt. Sie dient dazu, dass Sie die Anzahl der Prozesse, die Abaqus starten darf, nicht bei jedem Job händisch anpassen müssen.

Alternativ kann von der umfangreichen Python-Funktionalität von Abaqus Gebrauch gemacht werden. So kann ein Python-Skript geschrieben werden, das Abaqus aufruft. Im Job-Skript wird dann nur Python mit dem entsprechenden Python-Skript aufgerufen:

python3 <Skriptname.py>

Tipp für Numpy/Scipy-Nutzer: Abaqus benutzt die Datentypen "int32", "float32" und "float64". Wenn Sie in Python (z.B. in einem Numpy-Array) den Datentyp int angeben, stoppt Abaqus mit der Fehlermeldung, dass 64-Bit-Integers nicht unterstützt werden. Die in dieser Meldung empfohlene Lösung, den Datentyp "int" zu verwenden, ist irreführend, weil dieser auf dem Cluster standardmäßig 64-Bit-Integers erzeugt. Stattdessen ist es notwendig, explizit 32-Bit-Integer-Werte zu verwenden (z.B. dtype="int32" im Falle von Numpy-Arrays).

Aktualisiert um 12:52 am 8. Februar 2021 von Gerd Pokorra