Zum Inhalt

Erweiterungen durch Benutzersubroutinen

FrontISTR stellt Benutzersubroutinen bereit, mit denen Funktionen erweitert werden können, ohne den Hauptquellcode zu ändern. Unterstützt werden benutzerdefinierte Implementierungen von Stoffgesetzen sowie die Einbindung benutzerdefinierter äußerer Lasten. Dieses Kapitel gibt einen Überblick über die verfügbaren Erweiterungspunkte und die Schlüsselwörter in der Analysesteuerdatei, mit denen sie aufgerufen werden. Ausführliche Angaben zu den Subroutinenargumenten und zum erneuten Build finden Sie unter Benutzersubroutinen (Programmierleitfaden).

Überblick über die Funktionen

Die Erweiterungspunkte über Benutzersubroutinen gliedern sich in zwei Bereiche: Materialstoffgesetze und äußere Lasten. Für Stoffgesetze stehen vier getrennt aufrufbare Pfade zur Verfügung: lineare Elastizität, Hyperelastizität, Elastoplastizität und ein allgemeines benutzerdefiniertes Stoffgesetz. Für äußere Lasten gibt es einen Pfad, der Lastinformationen aus einer vom Benutzer bereitgestellten externen Datei einliest und dem globalen Lastvektor sowie dem Residuenvektor hinzufügt. Alle Erweiterungen werden verfügbar, nachdem die mit FrontISTR ausgelieferte Vorlagendatei bearbeitet und das Hauptprogramm neu gebaut wurde.

Erweiterungskategorie Schlüsselwort der Analysesteuerung Wichtige Benutzersubroutinen Zu bearbeitende Vorlage
Benutzerdefinierte lineare Elastizität !ELASTIC, TYPE=USER uElasticMatrix, uElasticUpdate fistr1/src/lib/user/uelastic.f90
Benutzerdefinierte Hyperelastizität !HYPERELASTIC, TYPE=USER uElasticMatrix, uElasticUpdate fistr1/src/lib/user/uelastic.f90
Benutzerdefinierte Elastoplastizität (Fließfunktion und Rückführalgorithmus) !PLASTIC, YIELD=USER uElastoPlasticMatrix, uBackwardEuler, uElastoPlasticNumStatus fistr1/src/lib/user/uyield.f90
Allgemeines benutzerdefiniertes Stoffgesetz !USER_MATERIAL uMatlMatrix, uUpdate fistr1/src/lib/user/umat.f90
Benutzerdefinierte äußere Last !ULOAD, FILE=<fname> ureadload, uloading, uResidual fistr1/src/lib/user/uload.f90

Benutzerdefinierte Verfestigungsgesetze (ein Pfad, bei dem die eingebaute Fließfunktion beibehalten und nur die Verfestigungskurve durch eine Benutzerimplementierung ersetzt wird) werden nicht unterstützt. Wenn eine benutzerdefinierte Verfestigungskurve erforderlich ist, wählen Sie !PLASTIC, YIELD=USER und ersetzen Sie das gesamte elastoplastische Stoffgesetz durch eine Benutzerimplementierung. Benutzerdefinierte Randbedingungen sowie Erweiterungspunkte für benutzerdefinierte Verarbeitung beim Neustart werden nicht unterstützt.

!CREEP mit TYPE=USER wird nicht unterstützt. Verwenden Sie !USER_MATERIAL, um ein zeitabhängiges Stoffgesetz als Benutzererweiterung zu implementieren.

Benutzerdefinierte Stoffgesetze

Benutzerdefinierte Stoffgesetze dienen als Einstiegspunkt, um Spannungs-Dehnungs-Beziehungen, die nicht durch die eingebauten Materialmodelle dargestellt werden können, in einer externen Subroutine zu implementieren. Entsprechend dem jeweiligen eingebauten Stoffgesetz stehen vier Pfade zur Verfügung: benutzerdefinierte lineare Elastizität, benutzerdefinierte Hyperelastizität, benutzerdefinierte Elastoplastizität und ein allgemeines benutzerdefiniertes Stoffgesetz. Bei jedem Pfad wird im !MATERIAL-Block der Analysesteuerdaten beim zugehörigen Schlüsselwort TYPE=USER oder YIELD=USER angegeben. Es können bis zu 100 Benutzerkonstanten angegeben werden, die an die Subroutine übergeben werden.

Benutzerdefinierte lineare Elastizität

Bei der benutzerdefinierten linearen Elastizität berechnet der Benutzer die Elastizitätsmatrix im Rahmen kleiner Verformungen. Wird in den Analysesteuerdaten !ELASTIC, TYPE=USER angegeben, behandelt FrontISTR dies als Stoffgesetz für kleine Verformungen und ruft bei der Berechnung der Elementsteifigkeit uElasticMatrix (liefert die Elastizitätsmatrix \(D\)) sowie bei der Spannungsaktualisierung uElasticUpdate (liefert die Spannung) auf. Dieser Pfad darf nicht zusammen mit einem vorhandenen hyperelastischen oder elastoplastischen Modell verwendet werden.

Benutzerdefinierte Hyperelastizität

Bei der benutzerdefinierten Hyperelastizität werden Spannung und Tangentensteifigkeit im Rahmen großer Verformungen (Total Lagrange) aus Ableitungen der Formänderungsenergiefunktion berechnet. Geben Sie in den Analysesteuerdaten !HYPERELASTIC, TYPE=USER an. Aufgerufen werden dieselben Subroutinen uElasticMatrix und uElasticUpdate wie bei der benutzerdefinierten linearen Elastizität; auch die Vorlage fistr1/src/lib/user/uelastic.f90 wird gemeinsam verwendet. Da die Schlüsselwortangabe festlegt, ob FrontISTR die Implementierung als kleine Verformung oder als Total Lagrange behandelt, kann dieselbe Vorlage nicht gleichzeitig für Implementierungen kleiner und großer Verformungen verwendet werden. Implementieren Sie sie als eines der beiden Stoffgesetze.

Benutzerdefinierte Elastoplastizität

Bei der benutzerdefinierten Elastoplastizität implementiert der Benutzer die Fließfunktion und das Rückführverfahren (return-mapping). Geben Sie in den Analysesteuerdaten !PLASTIC, YIELD=USER an. Damit wird ein von den eingebauten Fließfunktionen Mises, Mohr-Coulomb und Drucker-Prager unabhängiger Zweig verwendet. Bei der Elementsteifigkeitsberechnung wird uElastoPlasticMatrix (liefert die elastoplastische Tangentensteifigkeit \(D\)), bei der Spannungsaktualisierung uBackwardEuler (führt die Versuchsspannung auf die wahre Spannung zurück und aktualisiert die Zustandsvariablen) und bei der Initialisierung der Gauß-Punkte uElastoPlasticNumStatus (liefert die Anzahl der zu speichernden reellwertigen Zustandsvariablen) aufgerufen. Ein Pfad, der nur die Verfestigungskurve durch eine Benutzerimplementierung ersetzt, wird nicht unterstützt. Auch wenn nur eine benutzerdefinierte Verfestigungskurve benötigt wird, muss über diesen Pfad das gesamte elastoplastische Stoffgesetz durch eine Benutzerimplementierung ersetzt werden.

Allgemeines benutzerdefiniertes Stoffgesetz

Das allgemeine benutzerdefinierte Stoffgesetz ist ein Pfad zur Implementierung von Stoffgesetzen, die nicht in die Rahmen von Elastizität, Hyperelastizität oder Elastoplastizität passen. Geben Sie in den Analysesteuerdaten !USER_MATERIAL an. Standardmäßig wird das Updated-Lagrange-Verfahren verwendet; bei Angabe von KIRCHHOFF wird das Total-Lagrange-Verfahren verwendet. Die Anzahl der Zustandsvariablen wird mit NSTATUS angegeben. Bei der Elementsteifigkeitsberechnung wird uMatlMatrix (liefert die Tangentensteifigkeit \(D\)), bei der Spannungsaktualisierung uUpdate (aktualisiert Spannung und Zustandsvariablen) aufgerufen.

Übergabe von Benutzerkonstanten und Zustandsvariablen

Bei allen Pfaden !ELASTIC, TYPE=USER, !HYPERELASTIC, TYPE=USER und !USER_MATERIAL werden die in den Datenzeilen der Analysesteuerdaten angegebenen Benutzerkonstanten (bis zu 100) unverändert über das Argument matl an die Subroutine übergeben. Bei !PLASTIC, YIELD=USER werden zusammen mit den über !ELASTIC angegebenen Elastizitätskonstanten die über die Datenzeilen von !PLASTIC angegebenen Benutzerkonstanten übergeben.

Beim allgemeinen benutzerdefinierten Stoffgesetz und bei !PLASTIC, YIELD=USER können Verlaufsinformationen aus dem vorherigen Schritt (z. B. plastische Dehnung, Rückspannung oder Schädigung) über die Zustandsvariable fstat an die Benutzerimplementierung übergeben und am Ende des Schritts zurückgeschrieben werden. Die Anzahl der Zustandsvariablen wird beim allgemeinen benutzerdefinierten Stoffgesetz durch !USER_MATERIAL und dessen NSTATUS sowie bei !PLASTIC, YIELD=USER durch den Rückgabewert von uElastoPlasticNumStatus bestimmt.

Benutzerdefinierte äußere Lasten

Benutzerdefinierte äußere Lasten ermöglichen es, äußere Kräfte, die nicht durch die eingebauten Einzelkräfte, verteilten Lasten oder Volumenkräfte dargestellt werden können, über Benutzersubroutinen zu definieren. Wird in den Analysesteuerdaten !ULOAD, FILE=<fname> angegeben, übergibt FrontISTR den angegebenen Dateinamen an ureadload; die von der Benutzerimplementierung eingelesenen Informationen werden als Moduldaten gespeichert.

Dem Aufruf von !ULOAD entsprechen die folgenden drei Subroutinen.

  • ureadload: Liest zu Beginn der Analyse benutzerdefinierte Lasten aus der in der Steuerdatei angegebenen externen Datei ein. Die Benutzerimplementierung öffnet die Datei und speichert die benötigten Daten in Modulvariablen.
  • uloading: Wird beim Zusammenbau des äußeren Lastvektors in jedem Schritt aufgerufen und addiert die Benutzerlast zum globalen Lastvektor. Die aktuelle Schrittnummer und der Lastfaktor werden als Argumente übergeben.
  • uResidual: Wird beim Zusammenbau des Residuenvektors in jeder Iteration aufgerufen und addiert den Beitrag der Benutzerlast zum globalen Residuenvektor. Die Subroutine wird sowohl aus nichtlinearen Iterationen als auch aus Gleichgewichtsberechnungen aufgerufen.

Für benutzerdefinierte Randbedingungen (Benutzererweiterungen vorgegebener Verschiebungen oder Kontaktbedingungen) ist kein Erweiterungspunkt vorgesehen. Wenn eine andere Benutzererweiterung als eine äußere Kraft erforderlich ist, verwenden Sie das entsprechende eingebaute Schlüsselwort oder einen Pfad für benutzerdefinierte Stoffgesetze.

Vorgehensweise zur Implementierung von Benutzersubroutinen

Zur Verwendung einer Benutzersubroutine bearbeiten Sie die in der FrontISTR-Quelldistribution enthaltene Vorlagendatei und bauen anschließend FrontISTR neu. In den ausgelieferten Binärpaketen können Benutzersubroutinen nicht ausgetauscht werden; für Benutzererweiterungen ist daher eine Umgebung erforderlich, in der FrontISTR aus dem Quellcode gebaut werden kann.

Die Vorlagen für Benutzersubroutinen befinden sich unter fistr1/src/lib/user/; für jede Erweiterungskategorie ist eine bestimmte Datei zu bearbeiten (Dateinamen siehe Tabelle unter Überblick über die Funktionen). Im Ausgangszustand enthalten die Dateien entweder leere Subroutinenkörper oder eine Beispielimplementierung linearer Elastizität; hier ergänzt der Benutzer sein eigenes Stoffgesetz oder seine Lastdefinition. Nach dem Bearbeiten der Vorlage bauen Sie FrontISTR wie üblich mit CMake neu und führen die Analyse mit der erzeugten ausführbaren Datei fistr1 aus.

Einzelheiten zur Bedeutung der Subroutinenargumente, zum Umgang mit Zustandsvariablenarrays und zu Hinweisen beim erneuten Build finden Sie auf den jeweiligen Seiten des Programmierleitfadens.

Verwandte Themen