PyAnsys: Der Schlüssel zur Automatisierung von Workflows

Manuelle Prozesse prägen oft noch den Alltag in Simulation und Berechnung für Ansys Mechanical Anwender. Dabei bietet Automatisierung enorme Chancen: sie spart Zeit, schafft Standards und sichert die Qualität. Wie die Umsetzung gelingt, zeige ich Ihnen Schritt für Schritt an einem konkreten Praxisbeispiel.

Verschiedene Biegewerkzeuge eingespannt und aufeinanderfolgende Simulationsschritte dargestellt
Verschiedene Biegewerkzeuge eingespannt und aufeinanderfolgende Simulationsschritte dargestellt | © CADFEM (Austria) GmbH

Zusammenfassung 

  • Wiederkehrende, manuelle FEM-Simulationen bei Biegewerkzeugen sollen durch einen automatisierten Workflow ersetzt werden, der Geometrie- und Maschinendaten verarbeitet und automatisch Berichte erstellt.
  • Einsatz verschiedener PythonBibliotheken (u.a. PyGeometry, PyPrimeMesh, PyMAPDL, PyDPF-Core, PyDynamicReporting) für Geometrieaufbereitung, Meshing, Simulation, Auswertung und Berichterstellung in einem durchgängigen Prozess.
  • Strukturierte Automatisierung in drei Schritten: Named Selections erstellen, bestehenden Simulationsprozess per Skript nachbilden, Ergebnisse auswerten und automatisiert dokumentieren.

Motivation zur Automatisierung bei Trumpf 

Lassen Sie uns mit dem Praxisbeispiel beginnen: Die Firma Trumpf stellt Biegewerkzeuge her und simuliert dessen Beanspruchung. Aufgrund der Vielzahl an unterschiedlichen Werkzeugen, des repetitivem Simulationsprozesses und der hohen Qualitätsansprüche bietet sich die Automatisierung hier als hervorragende Lösung an. Das Ziel: einen Workflow zu entwickeln, der mit Geometrie- und Maschinendaten als Input automatisch einen Berechnungsbericht liefert.

Die Lösung: PyAnsys. PyAnsys ist eine Sammlung von Python Bibliotheken zur Interaktion mit der Ansys Produktpalette. Für fast alle Ansys-Softwareprodukte gibt es entsprechende Python-Pendants, beispielsweise ermöglicht PyMechanical die Python-basierte Ansteuerung von Ansys Mechanical. Die PyAnsys Bibliotheken sind frei zugänglich und nutzbar, allerdings ist zu beachten, dass eine gültige Ansys-Lizenz benötigt wird, um mit bestimmten Softwareprodukten zu interagieren. Auf der PyAnsys Webseite finden Sie detaillierte Informationen zu den einzelnen Modulen sowie zahlreiche Beispiele.

Zurück zum Projekt: Wie geht man eine so umfangreiche Aufgabe an? Wie auch bei der FEM, die komplexe Problematiken in kleine lösbare Elemente zerlegt, empfiehlt es sich auch hier, den Gesamtumfang in überschaubare Pakete zu unterteilen. Folgende Schritte sind notwendig:

  1. Geometrie aufbereiten
  2. Setup und Solving durchführen
  3. Ergebnisse auswerten und Bericht erstellen

Diese Aufgaben lassen sich mit den passenden PyAnsys-Modulen effizient automatisieren. Durch die direkte Interaktion der einzelnen Module entsteht ein durchgängiger Workflow. Im nächsten Abschnitt werfen wir einen genaueren Blick auf die einzelnen Schritte.

Blog_TechArticle_PyAnsys_Automatisierung_Input_Output_Definition

Darstellung Input und Output Definition des Biegewerkzeug Workflows von Trumpf | © CADFEM (Austria) GmbH

Geometrieaufbereitung mit Ansys Discovery

Wie auch in der manuell aufgesetzten Simulation bildet die Geometrie den Ausgangspunkt. Der Schlüssel zu einer erfolgreichen Automatisierung liegt in einer möglichst einheitlichen und strukturierten Vorgehensweise – besonders bei der Geometrievorbereitung. Ein zentrales Element sind die sogenannten Named Selections: Sie ermöglichen es, relevante Geometriebereiche zu gruppieren und eindeutig zu benennen. Somit spielt es keine Rolle, wie viele Kanten/Flächen eine Geometrie hat, auf die etwa eine Last aufgebracht wird, da anschließend nur mit den Named Selections gearbeitet wird. Der Workflow wird dadurch deutlich effizienter, da nachfolgende Module gezielt auf diese benannten Bereiche zugreifen können und unterschiedliche Geometrien einheitlich behandelt werden können.

Mit Ansys Discovery lassen sich Named Selections einfach erstellen. Im Scripting Editor der Software können Körper, Flächen oder Kanten regelbasiert selektiert und abgespeichert werden – beispielsweise anhand ihrer Position, Form, Ausrichtung oder Größe. Die Herausforderung hierbei ist es, einen Algorithmus zu entwickeln, der automatisch die relevanten Körper und Flächen für jede Geometrie erkennt. Die in Ansys Discovery entwickelte Routine kann direkt als Text übernommen und mittels der PyGeometry Bibliothek aufgerufen werden. Im Folgenden zeigt ein vereinfachter Code, wie an dem Biegewerkzeug zwei Flächengruppen selektiert und in einer Named Selection abgespeichert werden.

Code:

# import libraries
import os
from ansys.geometry.core import launch_modeler_with_discovery

# create string with discovery code
cmd = """
# fix Small Faces with a smaller width of 1.5 mm
FixSmallFaces.FindAndFix(FixSmallFacesOptions(Width=MM(1.5)))

# define variables
bending_face = None
z_bending_face = float('inf')

# loop through faces
for face in GetRootPart().Bodies[0].Faces:

# get z coordinates and shape
z_cordinates = face.EvalMid().Point.Z
shape = face.Shape.Geometry.ToString()

# get bending face on the bottom
if (shape.Contains("Cylinder")):

if(z_cordinates < z_bending_face):

z_bending_face = z_cordinates
bending_face = face

# […] identify other important faces (clamping faces for example)

# save the faces in named selections
Selection.Create(bending_face).CreateAGroup("bending_face")
# […] also save other faces in named selections

"""

# create a text file and input the discovery code
fd = os.getcwd()
path = os.path.join(fd, "discovery.py")
with open(path, "w", encoding="utf-8") as file:

file.write(cmd)

# start discovery, open the geometry and run the code
modeler = launch_modeler_with_discovery(product_version = 251, hidden = True)
design = modeler.open_file(os.path.join(fd,"geometry.step"))
modeler.run_discovery_script_file(os.path.join(fd,"discovery.py"))

# save the finished geometry and delete the code file
design.save(os.path.join(fd,"geometry_prepared.scdocx"))
modeler.close()
os.remove("discovery.py")

Bonus Tipp: Ansys Discovery eignet sich nicht nur zur Erstellung von Named Selections, sondern auch zur Bereinigung von Geometrien und zur Modellierung weiterer geometrischer Elemente. Für die Programmierung hilfreich ist die Aufzeichnungsfunktion, die die manuellen Aktionen in der Software direkt in Python Code übersetzt. Für weitere Vertiefungen empfehlen sich die beiden Seminare Geometriebearbeitung mit Ansys Discovery und Automatisierung mit Ansys Discovery Scripting.

Ausführung des Codes in Discovery mit PyGeometry | © CADFEM (Austria) GmbH

PyPrimeMesh & PyMAPDL: Vom Mesh zur Simulation

Wie geht es nach der Geometrieaufbereitung weiter? Im Regelfall liegt bereits eine manuell aufgesetzte Simulation vor, so auch bei Trumpf. Diese dient als Vorlage, um den Prozess anschließend zu reproduzieren und zu automatisieren. Für strukturelle Probleme stehen zwei Ansätze zur Verfügung:

  1. Interaktion mit Mechanical über PyMechanical - hier lässt sich – ähnlich wie in Discovery – mithilfe der Aufzeichnungsfunktion automatisch der passende Python-Code generieren und direkt einbetten. Diese Methode eignet sich besonders für Anwender, die bereits mit Ansys Mechanical vertraut sind. Einen ausführlichen Einstieg bietet der Techartikel „Erste Schritte mit PyAnsys anhand eines End-to-End-Beispiels“.

  2. Nutzung von MAPDL mittels PyMAPDL – wir werden uns hier für diese Variante entscheiden. Bevor wir uns aber daran wagen, die Simulation in MAPDL aufzusetzen, wird zunächst aus der Geometrie ein Mesh erzeugt. Hierfür bietet sich die PyAnsys Bibliothek PyPrimeMesh an. Nachfolgend wird ein kleiner simpler Democode aufgeführt, mit dem die Geometrie schnell und effizient vernetzt werden kann.

Code:

# import libraries
import os
import ansys.meshing.prime as prime
from ansys.meshing.prime.graphics.plotter import PrimePlotter

# start client and assign lucid meshing
prime_client = prime.launch_prime()
model = prime_client.model
mesh_util = prime.lucid.Mesh(model=model)

# define path to geometry
fd = os.getcwd()
input_file = os.path.join(fd," geometry_prepared.dsco ")

# create a surface mesh
mesh_util.read(file_name=input_file)
mesh_util.surface_mesh(min_size=2.0)

# create a volume mesh and display
mesh_util.volume_mesh()
display = PrimePlotter()
display.plot(model, update=True)
display.show()

# save mesh
mesh_file_cdb = os.path.join(fd, "mesh.cdb")
mesh_util.write(mesh_file_cdb)

Sobald das Mesh vorliegt, kann mit der Erstellung des APDL-Codes begonnen werden. Die Entwicklungsumgebung hierbei ist das Mechanical APDL oder auch Ansys Classic genannt. Ein kleiner Tipp am Rande: Der Code muss nicht vollständig manuell erstellt werden – in der Workbench lässt sich eine Inputdatei generieren, die anschließend angepasst werden kann. Sobald das Setup und das Solving in MAPDL wie gewünscht funktionieren, wird der Code in Python übertragen, nützlich hierbei ist folgende Funktion:

from ansys.mapdl import core as pymapdl
pymapdl.convert_script("mapdl.mac","mapdl.py")

Mesh erstellt mit PyPrimeMesh

Mesh erstellt mit PyPrimeMesh | © CADFEM (Austria) GmbH

Ergebnisaufbereitung mit PyDPF Core

Nach der erfolgreich abgeschlossenen Simulation liegen die Ergebnisse in der result-Datei vor. Für einfache Postprocessing-Aufgaben eignet sich das Python-Modul PyDPF-Post. Sollen hingegen komplexere Auswertungen über gesamte Ergebnisfelder durchgeführt werden, empfiehlt sich die Nutzung der umfangreicheren PyDPF-Core Bibliothek. Damit lassen sich effiziente und leistungsfähige Workflows erstellen. Ein einfaches Beispiel, um die Verschiebungsergebnisse als vtk-Datei (3D-Modell) zu exportieren, ist nachfolgend angeführt:

Code:

# import libraries
import os
from ansys.dpf import core as dpf

# open result file
fd = os.getcwd()
model = dpf.Model(os.path.join(fd,"result.rst"))

# get results and mesh
results = model.results
mesh = model.metadata.meshed_region

# extract displacement results
displacements = results.displacement()
field = displacements.outputs.fields_container()

# export the displacement field
my_export = dpf.operators.serialization.vtk_export()
my_export.inputs.file_path.connect(os.path.join(fd,"displacement.vtk"))
my_export.inputs.fields1.connect(field)
my_export.inputs.mesh.connect(mesh)
my_export.run()

# shutdown all dpf servers
dpf.server.shutdown_all_session_servers()

Es lassen sich jedoch auch deutlich komplexere Workflows realisieren – etwa die Berechnung des Auslastungsgrades gemäß der FKM-Richtlinie, wie sie beispielsweise von Trumpf implementiert wurde.

Abschließend fehlt noch der Schritt der Berichterstellung. Hierfür kann zum einen die Bibliothek PyDynamicReporting genutzt werden, die sich besonders anbietet, wenn zuvor PyMechanical eingesetzt wurde. Mit ihr lassen sich Berichtsvorlagen schnell und unkompliziert erstellen, sowie automatisch mit Inhalten befüllen. Alternativ besteht die Möglichkeit, Berichte individuell zu gestalten – etwa als html-Datei – unter Verwendung beliebiger Module aus der Python-Welt. Auch hierbei können interaktive 3D-Ergebnisplots eingebunden werden, die eine weiterführende Analyse direkt im Bericht ermöglichen.

Verschiebungsergebnisse in mm des vtk Modells

Verschiebungsergebnisse in mm des vtk Modells | © CADFEM

Das Automatisierungs-Kochrezept für Simulationen

Für all jene, die sich im Zuge dieses Artikels das erste Mal mit dieser Materie auseinandersetzen, ist das wahrscheinlich ziemlich viel neue Information. Lassen Sie uns aus diesem Grund die wichtigsten Schritte noch einmal zusammenfassen:

  • Schritt 1: Alle geometrischen Elemente, die in der Simulation benötigt werden – etwa eine Fläche, auf die eine Kraft aufgebracht wird – sollten unbedingt als Named Selection abgespeichert werden. Die Zuweisung kann regelbasiert in Discovery erfolgen.

  • Schritt 2: Nutzen Sie einen bestehenden manuellen Simulationsprozess als Grundlage und verwenden Sie anschließend PyMechancial oder PyMAPDL, um den Workflow in automatisierter Form zu reproduzieren. Entwickeln Sie die Codes schrittweise in der jeweiligen Entwicklungsumgebung (Mechanical Scripting Editor oder Ansys Classic), testen diese dort und überführen Sie die einzelnen Codeschnipsel anschließend in Ihre Python-Umgebung.

  • Schritt 3: Für weitergehende Analysen oder Nachbearbeitungen lassen sich mit PyDPF-Core maßgeschneiderte Workflows erstellen. Den Abschluss bildet die Berichterstellung: Hierfür kann entweder die Bibliothek PyDynamicReporting genutzt werden, oder Sie erstellen manuell beispielsweise eine html-Datei, in die auch interaktive 3D-Ergebnisplots eingebunden werden können.

Damit haben Sie nun ein Kochrezept zur Hand, mit dem Sie direkt starten können. Die gezeigten Codebeispiele sind selbstverständlich vereinfachte Ausschnitte, dienen jedoch als solide Ausgangsbasis. Um Ihre eigenen Aufgaben zu automatisieren – so wie es beispielsweise Trumpf umgesetzt hat – müssen Sie diese lediglich auf Ihre spezifischen Anforderungen erweitern. An dieser Stelle sei nochmals auf die PyAnsys-Webseite verwiesen, die zahlreiche weiterführende Beispiele bereithält. Einen guten Einstieg in die Thematik bietet auch das Seminar Einführung in Python für Ansys. Damit verfügen Sie nun über alle notwendigen Werkzeuge, um Ihre Workflows zu automatisieren und sich mühsame, repetitive Arbeit zu ersparen. Ich wünsche Ihnen viel Spaß und Erfolg bei der Umsetzung!

Kochrezept für die Automatisierung eines Workflows mit PyAnsys

Kochrezept für die Automatisierung eines Workflows mit PyAnsys | © CADFEM (Austria) GmbH
python-primer-for-ansys-18616

 

Seminar Tipp

Einführung in Python für Ansys

In dieser Schulung erlernen Sie die Grundlagen der Python-Programmierung für den Einsatz von PyAnsys und die Automatisierung Ihrer Ansys-Simulationen.

Info & Anmeldung

Ansys Fluent GPU Performance Testing – Use Case

Ob im Maschinenbau, in der Luftfahrt oder bei der Produktentwicklung: Strömungssimulationen sind für präzise und schnelle Entwicklungsprozesse unerlässlich. Doch wie unterscheiden sich CPU- und GPU-basierte Simulationen, und was sind die wichtigsten Kriterien bei der Hardwarebewertung? Dieser Beitrag beleuchtet grundlegende Unterschiede, Leistungsmetriken und die Anwendungsmöglichkeiten von GPU- und CPU-Setups für Ihre CFD-Projekte.t

Use Case entdecken

Teaser_24_18_GPU_640x360_AdobeFirefly

Mehr zum Thema

Portrait_MOW_Blog

Autor

Moritz Weißenbäck

Engineering Services

+43 (0)1 587 70 73 22
moritz.weissenbaeck@cadfem.at

Portrait_MKU_Blog-1

Redaktion

Malte Küper

Engineering Services

+43 (0)512 319056-23
malte.kueper@cadfem.at