Macro export transient FEM results/de

Generisches Makro-Symbol Erstellen Sie Ihr persönliches Symbol mit demselben Namen des Makros Exportieren von transienten FEM-Ergebnissen

Beschreibung
Exportiert mehrere FEM-Ergebnisse aus einer transienten Analyse zur Nachbearbeitung in ParaView.

Versionsmakro : 0.1
Datum der letzten Änderung : 2019-08-30
FreeCAD version : Alle
Herunterladen : Macro file (3 kB)
Beispieldatei ohne Ergebnisse (200 kB)
Beispieldatei mit Ergebnissen (10 MB)
Alle Beispieldateien, einschließlich des Ordners vtk-export (21 MB)
Autor: Luftschraube
Autor
Luftschraube
Herunterladen
Macro file (3 kB)
Beispieldatei ohne Ergebnisse (200 kB)
Beispieldatei mit Ergebnissen (10 MB)
Alle Beispieldateien, einschließlich des Ordners vtk-export (21 MB)
Links
Macro-Version
0.1
Datum der letzten Änderung
2019-08-30
FreeCAD-Version(s)
Alle
Standardverknüpfung
None
Siehe auch
None

Beschreibung

Dieses Makro exportiert mehrere FEM-Ergebnisobjekte aus einer transienten Analyse in das VTK-Format und generiert eine PVU-Datei, mit der die Ergebnisse direkt in ParaView zur Nachbearbeitung geladen werden können.

Hintergrund

Eine transiente Analyse in FreeCAD führt zu einer Reihe von FEM-Ergebnisobjekten, eines für jeden Zeitstempel. Die einzelnen Ergebnisse können direkt in FreeCAD untersucht und mit Pipelines nachbearbeitet werden. Die Möglichkeiten innerhalb von FreeCAD sind jedoch nach wie vor begrenzt, insbesondere für transiente Analysen. Ein besseres Werkzeug für die Nachbearbeitung und Visualisierung ist ParaView. Man kann einzelne FEM-Ergebnisobjekte aus FreeCAD als .vtk- oder .vtu-Datei exportieren, die dann mit ParaView geöffnet werden können. Leider unterstützt der Arbeitsbereich FEM (noch) nicht den Export mehrerer .vtk-Dateien auf einmal. Hier kommt dieses Makro ins Spiel.

Anwendung (für erfahrene Benutzer)

Das Makro in einem FreeCAD-Projekt ausführen, das mehrere FEM-Ergebnisobjekte aus einer transienten Analyse enthält. Neben der .FCStd-Datei wird ein neuer Ordner 'vtk-export' erstellt, der die einzelnen Ergebnisse (.vtu-Dateien) und eine .pvu-Datei enthält, die mit ParaView geöffnet werden kann.

Anwendung (Schritt für Schritt mit Beispiel)

Als Beispiel wird die Biegung eines Bimetallstreifens aus Aluminium/Stahl verwendet. Eine Schritt-für-Schritt-Anleitung zum Erstellen der Beispieldatei findet man hier, oder man kann die Datei aus dem Download-Bereich dieser Seite herunterladen. Die FCMacro-Datei im FreeCAD-Makroordner speichern, den man über Bearbeiten → Einstellungen → Python → Makro findet.

Nachdem die Beispieldatei geöffnet ist, gehen wir zu Makro → Makros..., wählen „ExportTransientResults_190830.FCMacro“ (oder den Namen, unter dem man die Datei gespeichert hat) aus und führt sie aus. Das Makro erstellt nun neben der .FCStd-Datei einen Unterordner 'vtk-export'. Je nach Anzahl und Größe der Ergebnisobjekte kann dies einige Zeit dauern. In der Berichtsansicht (Ansicht → Berichtsansicht) sollte „Macro finished“ (Makro abgeschlossen) angezeigt werden, wenn alles geklappt hat – oder es werden Fehlermeldungen angezeigt. (Hinweis: Manchmal erscheinen Meldungen wie „PropertyFloatList NOT exported to vtk“, aber ich konnte trotzdem mit den VTK-Dateien arbeiten...) Im Unterordner „vtk-export” finden wir .vtu-Dateien, eine für jeden Ergebnissatz für jeden Zeitstempel. Zusätzlich wird eine .pvd-Datei erstellt, die ParaView mitteilt, welcher Ergebnissatz zu welchem Zeitstempel gehört.

Nun öffnen wir ParaView, gehen zu Datei → Öffnen... und öffnen die .pvd-Datei. Auf der Registerkarte „Eigenschaften“ klicken wir auf „Übernehmen“, um die Ergebnisse zu laden. Auf der Registerkarte „Informationen“ sehen wir eine Liste mit Index und Wert, die den Zeitstempeln der gerade importierten Ergebnisse entsprechen. (Natürlich ist es immer sinnvoll zu überprüfen, ob die hier angegebenen Zeiten korrekt sind oder ob während des Exports etwas Ungewöhnliches passiert ist.) Von hier aus können wir ParaView verwenden, um mit den Ergebnissen zu experimentieren. Da ParaView viele Möglichkeiten bietet, liest man bitte die entsprechenden Dokumentationen im Internet.

Zur Veranschaulichung visualisieren wir nun die Temperatur des gebogenen Bimetallstreifens: In der Registerkarte 'Eigenschaften' auf der linken Seite wählen wir unter 'Farbgebung' die Option 'Temperatur' aus, woraufhin das Bild entsprechend der lokalen Temperatur farblich dargestellt wird. Über das kleine Symbol mit einem Herz wählen wir die Farbskala 'kalt bis warm' aus. Mit den rekorderähnlichen Symbolen oben können wir durch alle einzelnen Ergebnisse blättern, die während der Analyse erstellt wurden. Die Schaltfläche 'Wiedergabe' zeigt die einzelnen Bilder in ihrer Reihenfolge an. Die einzelnen Ergebnisse sind jedoch nicht durch ein konstantes Zeitintervall voneinander getrennt, sodass die Animation nicht zeitlich proportional ist.

Was wir brauchen, ist eine Interpolation der Ergebnisse zwischen den Zeitschritten, die über Filters → Temporal → Temporal Interpolator verfügbar ist. Hier wählen wir erneut die Temperatur für die Farbgebung. In der 'animation view' (View → Animation View) können wir nun vom 'Sequenz'-Modus in den 'Echtzeit'-Modus wechseln ('sequence' mode to 'real time' mode). Wir können auch die Startzeit (Standard ist 0,01 s), die Endzeit und die Dauer festlegen. Während Start- und Endzeit sich auf die Simulationszeit beziehen, ist die Dauer die tatsächliche Echtzeit, die die Animation benötigt, um vollständig abgespielt zu werden. Bei einer Dauer von 10 s wird unsere 60 s lange Simulationszeit auf 10 s Echtzeit komprimiert.

Wir gehen noch einen Schritt weiter und möchten die tatsächliche Biegung des Streifens visualisieren. Bei ausgewähltem Temporal Interpolator fügen wir Filter → Common → Warp by Vector hinzu. Unter 'Vektoren' wählen wir 'DisplacementVectors' und setzen den 'Skalierungsfaktor' auf 10. Wenn wir nun die Animation abspielen, können wir tatsächlich sehen, wie sich der farblich abgegebene Streifen biegt (um den Faktor 10 übertrieben).

Die soeben durchgeführte Nachbearbeitung kann in ParaView als 'Zustand' gespeichert werden, der jederzeit wieder geöffnet und sogar auf einen anderen Satz von Ergebnissen angewendet werden kann.

Herunterladen

Skript

Macro_export_transient_FEM_results.FCMacro

#!/usr/bin/python
# -*- coding: utf-8 -*-

#
# Macro to export multiple FEM results objects from a transient analysis for
# post-processing in ParaView.
#
# Created by <Luftschraube> under the GNU Lesser General Public License (LGPL)
#
# Version 0.1 (30.08.2019)
#

import FreeCAD
import Fem
import feminout.importVTKResults
import os
from sys import exit

FreeCAD.Console.PrintMessage(">>>---------Macro started\n")

#Get the file path and name of the active document 
p = FreeCAD.ActiveDocument.FileName
FilePath = "/".join(p.split("/")[:-1])
FileName = p.split("/")[-1].split(".")[0]
FreeCAD.Console.PrintMessage("File path:" + FilePath + "\n")
FreeCAD.Console.PrintMessage("File name:" + FileName + "\n")
FreeCAD.Console.PrintMessage("\n<<<----------Macro finished with errors\n")

#Get FEM result objects into a list
FreeCAD.Console.PrintMessage("Looking for result objects...")
FEMResultObjects = []

for obj in App.ActiveDocument.Objects:
	if obj.TypeId == "Fem::FemResultObjectPython":	
		FEMResultObjects.append(obj.Label)
		#FreeCAD.Console.PrintMessage(obj.Label + '\n')

NumberOfResultObjects = len(FEMResultObjects)
FreeCAD.Console.PrintMessage(str(NumberOfResultObjects) + " found\n")

if NumberOfResultObjects > 0:
	
	#Export result objects as .vtu file and generate .pvu file
	ExportFolderName = "vtk-export"
	ExportOutputPath = FilePath + "/" + ExportFolderName
	if not os.path.exists(ExportOutputPath):
		os.makedirs(ExportOutputPath)
		FreeCAD.Console.PrintMessage(ExportOutputPath + " has been created\n")
	else:
		FreeCAD.Console.PrintMessage(ExportOutputPath + " already exists\n")
	
	PVUFile = open(ExportOutputPath + "/" + FileName + ".pvd","w")
	PVUFile.write("<VTKFile type=\"Collection\" version=\"1.0\" byte_order=\"LittleEndian\" header_type=\"UInt64\">\n\t<Collection>\n")
	
	n = 0
	for ExportObject in sorted(FEMResultObjects):
		n = n + 1
		
		#Read and format time stamp (e.g., 12.37 s = 0001237)
		FreeCADResultLabelParts = ExportObject.split("_")
		PreDecimal = FreeCADResultLabelParts[-3]
		PostDecimal = FreeCADResultLabelParts[-2]

		if len(PostDecimal) == 1:
			PostDecimal = PostDecimal + str(0)
		TimeValue = float(PreDecimal) + float(PostDecimal)/100
		TimeString = str(int(round(TimeValue*100,0))).zfill(7)
	
		#For some reason, the VTK exporter expects a list (although only one object is processed at once...) - so build a list with the current object
		ExportObjectList = []
		ExportObjectList.append(FreeCAD.ActiveDocument.getObject(ExportObject))
		FileNameOUT = FileName + "_" + TimeString + ".vtu"
		FilePath = ExportOutputPath + "/" + FileNameOUT
		FreeCAD.Console.PrintMessage(FilePath + " is to be created\n")
		feminout.importVTKResults.export(ExportObjectList,FilePath)
	
		PVUFile.write("\t\t<DataSet timestep=\"" + str(TimeValue) + "\" file=\"" + FileNameOUT + "\"/>\n")
	
	#Close the .pvu file
	PVUFile.write("\t</Collection>\n</VTKFile>")
	PVUFile.close()
else:
	FreeCAD.Console.PrintMessage("Nothing to export!")

FreeCAD.Console.PrintMessage('\n<<<----------Macro finished\n')


Verweise

Beispiel Transiente FEM-Analyse

Die Forumsdiskussion Export transient FEM results to vtk/vtu for ParaView