Je veux afficher le fichier VTK du résultat de la simulation de température bidimensionnelle avec jupyter.
Lisez le fichier VTK avec Python, extrayez les données de coordonnées et les données de température et affichez-les avec Matplotlib.
OS: Windows 10 home edition
Tool: Anaconda(Python 3.7.4)
En utilisant le logiciel libre de la méthode des éléments finis Freefem ++, nous avons résolu l'équation de diffusion thermique et créé le fichier VTK résultant. Le code de l'équation de diffusion de chaleur a utilisé Heat.edp de l'exemple. J'omettrai comment installer et exécuter Freefem ++. Le fichier VTK utilisé est stocké dans ici.
Installez en utilisant conda.
conda install vtk
Importez les bibliothèques Numpy, Matplotlib et VTK nécessaires au fonctionnement.
import numpy as np
import maptlotlib.pyplot as plt
import vtk
from vtk.util import numpy_support
%matplotlib inline
Le fichier VTK étant une grille non structurée, lisez-le avec Unstructured.
#Lecture de fichier
filename = "heat_result.vtk"
reader = vtk.vtkUnstructuredGridReader()
reader.SetFileName(filename)
reader.Update()
Les données de coordonnées de ce fichier VTK sont des données de point et les données de température sont des données de cellule. Je veux avoir une relation univoque entre les données de coordonnées et les données de température, donc je les convertis toutes en données de point.
#Conversion de données de cellule en données de point
cell2point = vtk.vtkCellDataToPointData()
cell2point.SetInputData(reader.GetOutput())
cell2point.Update()
Lisez le fichier VTK et utilisez vtk_support pour extraire les données de coordonnées et les données de température des données VTK.
#Conversion numpy des coordonnées et des données de température
coord = numpy_support.vtk_to_numpy(cell2point.GetOutput().GetPoints().GetData())
x = coord[:,0]
y = coord[:,1]
z = coord[:,2]#ne pas utiliser. Tous sont 0 parce que c'est le résultat d'une équation de diffusion thermique bidimensionnelle.
#GetAbstractArray(0)Étiquette, GetAbstractArray(1)Contient des données de température.
temperature = numpy_support.vtk_to_numpy(cell2point.GetOutput().GetPointData().GetAbstractArray(1))
Maintenant qu'il est prêt, tout ce que vous avez à faire est de le visualiser dans Matplotlib. Puisqu'il s'agit de données non structurées, la carte des couleurs est affichée à l'aide de trikontourf.
##Sortie de la carte couleur
plt.tricontourf(x,y,temperature,levels=15,cmap="jet")
plt.colorbar()
https://github.com/matsxxx/show_vtk_on_jupyter
import numpy as np
import matplotlib.pyplot as plt
import vtk
from vtk.util import numpy_support
%matplotlib inline
#Lecture de fichier
filename = "heat_result.vtk"
reader = vtk.vtkUnstructuredGridReader()
reader.SetFileName(filename)
reader.Update()
#Conversion de données de cellule en données de point
cell2point = vtk.vtkCellDataToPointData()
cell2point.SetInputData(reader.GetOutput())
cell2point.Update()
#Conversion numpy des coordonnées et des données de température
coord = numpy_support.vtk_to_numpy(cell2point.GetOutput().GetPoints().GetData())
x = coord[:,0]
y = coord[:,1]
z = coord[:,2]#ne pas utiliser. Tous sont 0 parce que c'est le résultat d'une équation de diffusion thermique bidimensionnelle.
#GetAbstractArray(0)Étiquette, GetAbstractArray(1)Contient des données de température.
temperature = numpy_support.vtk_to_numpy(cell2point.GetOutput().GetPointData().GetAbstractArray(1))
#Sortie de la carte couleur
plt.tricontourf(x,y,temperature,levels=15,cmap="jet")
plt.colorbar()
Pour la classe VTK, la [référence de classe] de c ++ (https://vtk.org/doc/nightly/html/index.html) est ouverte au public. La structure et le nom de Python VTK sont les mêmes que ceux de la référence c ++, vous pouvez donc y faire référence. Les sites suivants ont été principalement mentionnés.
https://vtk.org/doc/nightly/html/classvtkFieldData.html
https://vtk.org/doc/nightly/html/classvtkCellDataToPointData.html
https://stackoverflow.com/questions/23138112/vtk-to-matplotlib-using-numpy
https://matplotlib.org/3.1.1/api/_as_gen/matplotlib.pyplot.tricontourf.html
Recommended Posts