Macro export transient FEM results/it

Icona macro generica. Crea la tua icona personale con lo stesso nome della macro export transient FEM results

Descrizione
Esporta più risultati FEM da un'analisi transitoria per la post-elaborazione in ParaView.

Versione macro: 0.1
Ultima modifica: 2019-08-30
Versione FreeCAD: All
Download: Macro file (3 kB)
Example file without results (200 kB)
Example file with results (10 MB)
All example files, including the vtk-export folder (21 MB)
Autore: Luftschraube
Autore
Luftschraube
Download
Macro file (3 kB)
Example file without results (200 kB)
Example file with results (10 MB)
All example files, including the vtk-export folder (21 MB)
Link
Versione macro
0.1
Data ultima modifica
2019-08-30
Versioni di FreeCAD
All
Scorciatoia
Nessuna
Vedere anche
Nessuno

Descrizione

Questa macro esporta più oggetti risultato FEM da un'analisi transitoria nel formato VTK e genera un file PVU che può essere utilizzato per caricare i risultati direttamente in ParaView per la post-elaborazione.

Contesto

Un'analisi transitoria in FreeCAD genera una serie di oggetti di risultati FEM, uno per ogni marca temporale. I singoli risultati possono essere analizzati direttamente in FreeCAD e post-elaborati utilizzando le pipeline. Tuttavia, le possibilità offerte da FreeCAD sono ancora limitate, soprattutto per le analisi transitorie. Uno strumento migliore per la post-elaborazione e la visualizzazione è ParaView. È possibile esportare singoli oggetti risultato FEM da FreeCAD come file .vtk o .vtu, che possono poi essere aperti con ParaView. Purtroppo, l'ambiente di lavoro FEM non supporta (ancora) l'esportazione di più file .vtk contemporaneamente. È qui che entra in gioco questa macro.

Come usarla (utenti esperti)

Eseguire la macro su un progetto FreeCAD che include diversi oggetti risultato FEM da un'analisi transitoria. Oltre al file .FCStd, verrà creata una nuova cartella 'vtk-export', contenente i singoli risultati (file .vtu) e un file .pvu che può essere aperto da ParaView.

Come usarla (passo dopo passo con esempio)

Come esempio, viene utilizzata la piegatura di una striscia bimetallica in alluminio/acciaio. Una guida passo passo per creare il file di esempio è disponibile qui, oppure è possibile scaricare il file dalla sezione download di questa pagina. Salvare il file FCMacro nella cartella delle macro di FreeCAD, raggiungibile tramite Modifica → Preferenze → Python → Macro.

Con il file di esempio aperto, andare su Macro → Macro..., selezionare "ExportTransientResults_190830.FCMacro" (o qualsiasi nome con cui è stato salvato) ed eseguirlo. La macro creerà ora una sottocartella "vtk-export" accanto al file .FCStd. A seconda del numero e delle dimensioni degli oggetti risultato, l'operazione potrebbe richiedere del tempo. Nella Vista Report (Visualizza → Vista Report), si dovrebbe vedere "Macro completata", se tutto è andato bene, oppure alcuni messaggi di errore. (Nota: a volte compaiono messaggi come "PropertyFloatList NON esportato in vtk", ma si riesce comunque a lavorare con i file VTK...) Nella sottocartella "vtk-export", si trovano i file .vtu, uno per ogni set di risultati per ogni timestamp. Inoltre, viene creato un file .pvd, che indica a ParaView quale set di risultati appartiene a quale timestamp.

Ora aprire ParaView e andare su File → Apri... e aprire il file .pvd. Nella scheda "Properties", cliccare su "Apply" per caricare i risultati. Nella scheda "Information" si vedrà un elenco di "Index" e "Value", corrispondenti ai timestamp dei risultati appena importati. (Naturalmente, è sempre opportuno verificare se i timestamp indicati qui sono corretti o se si è verificato qualcosa di anomalo durante l'esportazione). Da qui, si può usare ParaView per sperimentare con i risultati. Poiché ParaView offre numerose possibilità, si prega di fare riferimento alla documentazione appropriata disponibile online.

A scopo dimostrativo, visualizzare ora la temperatura della striscia bimetallica piegata: nella scheda "properties" a sinistra, sotto "coloring", selezionare la temperatura e l'immagine verrà mappata a colori in base alla temperatura locale. Tramite la piccola icona a forma di cuore, selezionare la scala di colori "cool to warm". Con le icone a forma di registratore in alto, si possono scorrere tutti i singoli risultati creati durante l'analisi. Il pulsante "play" visualizzerà le singole immagini in sequenza. Tuttavia, i singoli risultati non sono separati da un intervallo di tempo costante, quindi l'animazione non è proporzionale nel tempo.

Ciò di cui si ha bisogno è un'interpolazione dei risultati tra i vari intervalli temporali, disponibile tramite Filters → Temporal → Temporal Interpolator. Qui selezionare nuovamente la temperatura per la colorazione. Nella "animation view" (View → Animation View), si può ora passare dalla modalità "sequence" a quella "real time". Si può anche impostare l'istante di inizio (il valore predefinito è 0,01 s), l'istante di fine e la durata. Mentre l'istante di inizio e quello di fine si riferiscono al tempo di simulazione, la durata è il tempo reale effettivamente impiegato dall'animazione per essere riprodotta completamente. Con una durata di 10 s, il tempo di simulazione di 60 s verrà compresso in 10 s di tempo reale.

Si faccia un ulteriore passo avanti e si desideri visualizzare l'effettiva piegatura della striscia. Con il Temporal Interpolator selezionato, aggiungere Filters → Common → Warp by Vector. In "vectors" selezionare "DisplacementVectors" e impostare il "scale factor" a 10. Quando si riproduce l'animazione, si può effettivamente vedere la piegatura della striscia mappata a colori (esagerata di un fattore 10).

La post-elaborazione appena eseguita può essere salvata come "state" in ParaView, che può essere riaperto in qualsiasi momento e persino applicato a un diverso set di risultati.

Download

Script

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')


Link

Esempio Analisi transitorio FEM

La discussione sul Forum Export transient FEM results to vtk/vtu for ParaView