<img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=725996008059693&amp;ev=PageView&amp;noscript=1">

Technisches Magazin Ausgabe 2 | 2021

SIMULIA | SIMULATION |
Dr.-Ing. Sven Reinstädler, Consultant FEM

Automatisierung von ABAQUS-Simulationen

In diesem Artikel wird gezeigt, wie man mit Einsatz von Sensoren und der User-Subroutine UAMP die Simulation beschleunigt und automatisiert. Die entwickelte Methodik wird an einer einfachen Klipp-Mechanik gezeigt, die schnelle erfasst werden kann. Wenn Sie auf den Play-Button klicken, sehen Sie, wie der Klipp zuerst positioniert und anschließend auf Zug beansprucht wird.

 

FilmKlipp3D_3_red

Abb. 1: Simulation - Positionierung und MIses-Spannung bei Zugbelastung

Motivation

In Verbrauchsgütern oder auch der Computerindustrie werden häufig Schraub- und Klipp-Verbindungen eingesetzt. Mit Klipp-Verbindungen ist zum Beispiel die sensible Mechanik einer Stereoanlage hinter einer Blende gesichert. Auch wenn die Mechanik während des Betriebs gesichert ist, bleibt die Stereoanlage über die Nutzungsdauer einfach zugänglich, so dass defekte Bauteile leicht ersetzt werden können. Mobile Telefone sind ein weiteres Beispiel. Hier müssen die Klipp-Verbindungen so ausgelegt sein, dass das Gehäuse nicht gleich aufspringt falls das Telefon mal hinunterfällt. So müssen Klipp-Verbindungen in einem Telefon schlagartig einwirkenden Lasten während eines Aufpralls sicher Widerstand bieten.

Bereits heute werden Falltests häufig von numerischen Simulationen begleitet, um die Entwicklungsdauer und die Entwicklungskosten für ein neues Produkt möglichst gering zu halten. Auch wenn die Entwicklungsdauer insgesamt reduziert werden kann, so erfordern manche Berechnung eine durchaus intensive Betreuung durch Simulations-Experten. In diesem Artikel wird gezeigt, wie während der Vorkonfigurationen die Positionierung von Bauteilen automatisiert werden kann, so dass während der Berechnung nicht weiter eingegriffen werden muss.

Klipp-Modell

Sind die einzelnen Bestandteile eines Mehrkörpersystems innerhalb eines CAD-Modells noch nicht exakt zueinander ausgerichtet, muss der Simulations-Experte vor der eigentlichen Analyse zunächst einen Positionierungsschritt durchführen, der häufig eine zeitaufwendige Überwachung des Berechnungsfortschrittes erfordert:

  1. Im Ausgangszustand ist der Klipp offen (Abb. 1)
  2. Es wird für den eingerasteten Zustand in einem ersten Step zunächst positioniert (siehe Abb. 1). Für eine schnelle Positionierung ist der Kontakt zwischen Klipp und Halter im ersten Step ausgeschaltet, so dass sich die beiden Körper ungehindert durchdringen können.
  3. Ist der Klipp positioniert, wird die Bewegungsrichtung im zweiten Step umgekehrt und der Kontakt hinzugefügt. Im zweiten Step wird der Klipp so lange weiter weggesteuert verfahren, bis die Traglast ermittelt ist und sich die Verbindung fast wieder löst.

Kennwerte und Informationen zum Modell:
Das dargestellte Finite-Elemente-Modell modelliert einen Kunststoff-Klipp mit einem E-Modul von E = 1567 N/mm2 und einer Querdehnzahl von ν = 0,45. Der 4 mm breite und 1,5 mm hohe rechteckige Schaft des Klipps ist 8 mm lang. Er ist mit dem Python-Skript ws_contact_snap-fit.py angelegt, das Teil des Kurses Modeling Contact with Abaqus/Standard ist. Die Python-Skripte zum Kurs sind mit Abaqus/CAE über das Hauptmenü Plug-ins > Tools > Install Courses.. frei zugänglich.

Für die folgende Betrachtung ist angenommen, dass der Abstand zwischen den farblich hervorgehobenen Kontaktflächen im Ausgangszustand < 0 und im eingerasteten Zustand > 0 ist.
Zur Identifikation des vorzeichenbehafteten Abstandes werden auf beiden Kontaktflächen dünne Schalenelemente appliziert, die mit einem contact pair gegenseitig in Verbindung gesetzt werden. Die Kontakte zwischen den Schalenflächen werden im Folgenden als Pseudo-Kontakte bezeichnet. Wirken zwischen den aufgesetzten Schalen Kontaktkräfte, ist der Klipp positioniert. Der Abbruch des ersten step erfolgt mit der User-Subroutine UAMP. Die entwickelte Routine liest Sensoren aus, die die zuvor beschriebenen Kontaktkräfte aufnehmen. Auf die Integration der Sensoren in das Finite-Elemente-Modell wird am Ende dieses Abschnitts im Detail eingegangen.

Abb. 2 zeigt, dass auf Seite des vernetzten Klipps exemplarisch zwei Schalenelemente für zwei Berührungsflächen aufgesetzt sind. Da diese jeweils nur ein Volumenelement bedecken, werden im Folgenden die Berührungsflächen auch als Berührungspunkte bezeichnet. Bei diesem Modell würde auch ein Schalenelement/Sensor reichen. Bei komplexen Geometrien treten jedoch im allgemeinen Fall nicht alle Berührungspunkte zum gleichen Zeitpunkt mit der Kontaktfläche des zu kontaktierenden Körpers in Kontakt, so dass es sinnvoll ist, mehrere Schalenelemente/Sensoren an verschiedenen Stellen im Modell zu platzieren.

Mit Anwendung des Tools Edit Mesh können Schalenelemente mithilfe der Methode Offset (create shell layers) schnell und einfach erzeugt werden (siehe Abb. 2). Dabei ist zu beachten, dass mit Share nodes with base shell/surface auf die bereits angelegten Knoten der darunterliegenden Volumenelemente zurückgegriffen wird. Aktiviert man des Weiteren save offset elements to a set, kann anschließend eine shell-section leicht zugewiesen werden. Während auf Seite des Klipps einzelne Schalenelemente angelegt sind, ist die Kontaktfläche des Halters komplett mit Schalenelementen bedeckt (siehe Abb. 3). Damit sich der Klipp nahezu frei bewegen kann, ist eine lineare pressure-overclosure-relation mit geringer Kontaktsteifigkeit angenommen (siehe Abb. 3). Bezüglich der Kontaktflächen ist zu beachten, dass master- und slave-surface auf der jeweils richtigen Seite der Schalenelemente angelegt sind. Die Kontaktrichtung ist mit den in Abb. 3 dargestellten dünnen Pfeilen visualisiert, die angezeigt werden, wenn man eine angelegte Interaction zwischen Schalen mit Doppelklick auswählt.

Bild2

Abb. 2: Aufsetzen von Schalenelementen

Bild3

Abb. 3: Definition von Pseudo-Kontakten

Bevor gezeigt wird, wie die Sensoren implementiert werden, wird kurz dargestellt, wie die User-Subroutine UAMP eingebunden wird. Wählt man bei Create Amplitude den Typ User aus, weist die erscheinende Dialogbox bereits auf die Erfordernis von UAMP hin (siehe Abb. 4). Hier ist zunächst festzulegen, ob die step-time oder die total time als Zeitspanne verarbeitet werden soll. Des Weiteren ist anzugeben, wie viele interne Variablen von Abaqus für die Berechnung vorzuhalten sind. Da jeder Pseudo-Kontakt mit einem Sensor versehen wird, werden hier zwei interne Variablen angefordert. In diesem Modell wird mit internen Variablen festgehalten, ob und in welchem Pseudo-Kontakt jemals Kräfte übertragen wurden. Kommen die Schalen eines Pseudo-Kontaktes miteinander in Kontakt, wird die zugehörige interne Variable von 0 auf 1 gesetzt. Abschließend wird jetzt gezeigt, wie Sensoren in ein Finite-Elemente-Modell integriert werden. Mit einem History Output Request wird zunächst festgelegt, welche physikalische Größe (Output-Variable) ein Sensor aufnehmen soll. Im vorliegenden Modell sind zur Auswertung der resultierenden Kontaktkräfte in den zwei Pseudo-Kontakten zwei History Output Requests für die Variable CFNM angelegt. In der Dialogbox des History Output Request wird dazu als Domain Interaction ausgewählt, so dass im nebenstehenden Dropdown-Menü anschließend auf die angelegten Kontakt-Paare zugegriffen werden kann (siehe Abb. 5).

Sind die History Output Requests angelegt, wird ein Sensor implementiert, indem die Parameter SENSOR und NAME = MySensor der jeweils zugehörigen Keyword-Line im Input-Deck zugewiesen werden (siehe Abb. 6). Neben den zwei Sensoren ist auch die Deaktivierung der Schalenelemente mit dem Keyword *MODEL CHANGE farblich hervorgehoben. Im Gegensatz zu contact pairs wird die Aktivierung und die Deaktivierung von finiten Elementen nicht von Abaqus/CAE unterstützt, die Zeilen 36-39 sind manuell, über den Keyword-Editor, hinzugefügt. Mit der Deaktivierung der Pseudo-Kontakte und Schalenelemente ist sichergestellt, dass das Ergebnis für die Traglast des Klipps nicht verfälscht ist.

Bild4

Abb. 4: Definition einer Amplitude vom Typ User

Bild5

Abb. 5: Anlage eines History-Output-Requests

Bild6b

Abb. 6: Auszug aus dem Input-Deck

User-Subroutine

Im Folgenden werden der Aufbau und die Funktionsweise der User-Subroutine UAMP dargestellt, die wie in Abb. 7 gezeigt, über die Dialogbox Edit Job in die Berechnung mit eingebunden werden kann. Im Input-Deck ist allein definition=USER in 
    *Amplitude, name=AMP_USER, time=TOTAL TIME, definition=USER, variables=2
zu setzen (siehe Abb. 6 Zeile 1). Über die Kommandozeile wird die Berechnung alternativ mit  
    abaqus job= JobName user= MySubRoutine.f
gestartet. Soll die Fortran-Routine MySubRoutine.f nicht einsehbar sein, kann mit
    abaqus make library= MySubRoutine.f
zunächst eine Library erstellt werden, die dann mit
    abaqus job= JobName user= MySubRoutine-std
in die Berechnung miteingebunden wird.
Bevor die entwickelte User-Subroutine diskutiert wird, werden wichtige Regeln, die zur Interpretation der dargestellten FORTRAN-Routine bekannt sein müssen, in kompakter Form angegeben. In FORTRAN werden:

  • nur die Spalten 7 bis 72 vom Compiler als Anweisung umgesetzt
  • Zeilen als Fortsetzungszeile interpretiert, wenn in Spalte 6 ein Zeichen steht (das Leerzeichen und die Null sind ausgenommen)
  • Zwischen Groß- und Kleinschreibung wird im Allgemeinen nicht unterschieden
  • Variablen, die mit dem Zeichen i-n beginnen, automatisch als Integer-Variablen interpretiert. Steht zu Beginn ein Zeichen a-h oder o-z werden sie als Real-Variablen angelegt.

Die zuletzt aufgeführte Standard-Regelung darf bei Abaqus-Routinen mit implicit none nicht ausgeschaltet werden. Des Weiteren muss bei Abaqus/Standard nach subroutine name (Variablen) die Datei aba_para.inc mit include eingebunden sein (siehe Abb. 8 Zeile 7). Die Verwendung von Tabulatoren ist unbedingt zu vermeiden, da ein Tabulatorschritt als nur ein Zeichen gelesen wird, so dass die nachfolgende Anweisung vom Compiler häufig falsch oder gar nicht umgesetzt wird.

Hinweis: In vielen Editoren können Tabulatorschritte mit dem regulären Ausdruck \t gesucht und gefunden werden.

Die dargestellte User-Subroutine wurde aus der User-Subroutine uamp_rigmultimech.f abgeleitet, die im Abaqus Example Problems Guide 4.1.2 Crank mechanism enthalten ist. Für eine kompakte Darstellung wurden die Namen einiger Variablen verändert und nicht verwendete Variablen/Flags entfernt.
Nachdem die Datei aba_param.inc eingebunden ist (der Pfad zur Datei ist mit der Installation von Abaqus hinterlegt), werden die Längen der String-Variablen festgelegt, den Parametern konstante Werte zugewiesen und die Dimensionen und Größen der verwendeten Arrays gesetzt (siehe Zeile 9-17). Die Variablen charv, intv, realv und lop (Zeile 19) sind nicht primärer Bestandteil der Subroutine. Sie werden definiert, um die Anzahl der Pseudo-Kontakte in die MSG-Datei zu schreiben, die eine Kraft aktuell übertragen oder zurückliegend übertragen haben (Pseudo-Kontakte die unter Kraftwirkung stehen oder gestanden haben werden im Folgenden auch als aktive Kontakte bezeichnet). So wird auf die Zeilen 19-20 und 35-36 hier nicht näher eingegangen. Stattdessen ist auf den Abaqus User Subroutines Reference Guide Kapitel 2.1.14 verwiesen.
Mit dem Sachverhalt, dass jede Amplitude vom Typ User an ein und dieselbe Subroutine UAMP übergeben wird, folgt in Zeile 22 zunächst eine Fallunterscheidung bezüglich des Namens der übergebenen Amplituden. Da im vorgestellten Modell zur Klipp-Mechanik nur eine Amplitude definiert ist, könnten die Zeilen 22 und 48 auch auskommentiert werden.
Mit den Zeilen 24-27 läuft das Programm über alle Sensoren und fragt mit der Utility Routine GetSensorValue() den aktuellen Wert, der jeweils aufgenommenen Größe ab, hier mit CFNM die jeweilige Kontaktkraft. Ist die übertragene Kraft in einem Pseudo-Kontakt größer als 1.E-5 wird die zugehörige interne Variable auf Eins gesetzt (mit der Initialisierung ist Svars von Abaqus zu Beginn der Berechnung mit Nullen belegt). Damit bleibt für die Subroutine ein Kontakt auch dann aktiv, wenn die Kontaktkraft infolge zu großer Durchdringungen in den Kontaktflächen im Laufe der Berechnung wieder auf null abfällt. Die Anzahl der internen Variablen steht in der Variablen nSvars und ist mit variables=2 in
    *Amplitude, name=AMP_USER, time=TOTAL TIME, definition=USER, variables=2
festgelegt (siehe Abb. 6 Zeile 1). Werden ein oder mehr als zwei Pseudo-Kontakte im Modell implementiert, ist der Wert für variables entsprechend anzupassen. Mit den Zeilen 29-33 wird anschließend die Anzahl der aktiven Kontakte ausgewertet.
Zunächst ist unterstellt, dass sich das Programm im zweiten Step befindet, so dass der Klipp mit einer Geschwindigkeit von -3 mm/s gegen den Halter gezogen wird (siehe Zeile 38). Mit Zeile 40 ist sichergestellt, dass von dieser Geschwindigkeit und Richtung nur dann abgewichen wird, wenn das Programm noch den ersten Step auswertet. Sind dann noch nicht alle Pseudo-Kontakte aktiv, wird der Klipp mit einer Geschwindigkeit von 7 mm/s noch weiter positioniert (siehe Zeile 41-42). Sind hingegen alle Kontakte aktiv, bricht das Programm mit Zeile 44 die Berechnung des ersten Step selbständig ab.

Bild7

Abb. 7: Dialogbox Edit Job

Bild8

Abb. 8: User-Subroutine UAMP

Numerische Analyse

Mit zwei Kraftverläufen in der Zeit und dem extremalen Normalspannungsverlauf in Richtung des Klipps ist das beschriebene Modell im Folgenden numerisch analysiert. In Abb. 9a) ist der Verlauf der resultierenden Kontaktkraft in einem der beiden Pseudo-Kontakte dargestellt, in Abb. 9b) ist dagegen die resultierende Kraft im realen Kontakt dargestellt. Der Kraftverlauf zum Pseudo-Kontakt lässt klar erkennen, dass der Step zur Positionierung zum Zeitpunkt t = 0,9 s abgeschlossen werden kann. Da der eigens festgelegte Grenzwert aber noch nicht überschritten ist, wird noch ein weiteres Zeitinkrement ausgewertet und die Positionierung zum Zeitpunkt t = 1 s abgebrochen.

Der Kraftverlauf zum realen Kontakt zeigt, dass dieser erst im zweiten Step aktiviert wird. Im ersten Zeitinkrement des zweiten Step berühren sich die Oberflächen noch nicht (siehe Abb. 1 rechts), erst im zweiten Inkrement geraten sie in Kontakt. Die im Vergleich mit dem Pseudo-Kontakt wesentlich höhere reale Kontaktkraft verformt den Klipp deutlich. Da die Kontaktkraft außermittig zur Schwerachse des Klipps wirkt, weicht der Klipp dem Halter mit einer Biegeverformung aus. Dabei steigt die Kontaktkraft auf 13,2 N.

Die Traglast ist mit einem static step berechnet, so dass die Berechnung abbricht, sobald sich die Kanten der Kontaktflächen berühren und der Klipp kurz vor dem Abrutschen steht (siehe Abb. 10). Die Berechnung bricht schlagartig ab, weil an der Unterseite des Halters keine Kontaktfläche angelegt ist (siehe Abb. 1) und freigesetzte Energie bei einem static step nicht in kinetische Energie umgesetzt werden kann.

Bild9

Abb. 9: Kontaktkräfte

Bild10

Abb. 10: Verformung und Beanspruchung des Klipps bei Erreichen der Traglast

Fazit

Mit der Verwendung der User-Subroutine UAMP können Sie Ihre Simulationen automatisieren, so dass Sie in kürzerer Zeit zu realistischen Ergebnissen kommen. Nutzen Sie Ihre Ressourcen optimal aus - Sie werden sich schnell an die Verwendung von User-Subroutines gewöhnen. Sollten Sie Fragen haben, wir unterstützten Sie gerne.

Ansprechpartner:               

Dr. Sven Reinstädler (Consultant-FEM) s.reinstaedler@cenit.com

Florian Hinder (Fach-Vertrieb SIMULIA) f.hinder@cenit.com