VTK 파일을 읽고 jupyter로 컬러맵 표시를 한다.

소개



무엇을 하고 싶은가



2 차원 온도 시뮬레이션 결과의 VTK 파일을 jupyter로 표시하고 싶습니다.

어떻게?



VTK 파일을 Python으로 읽고 좌표 데이터와 온도 데이터를 검색하고 Matplotlib로 표시합니다.

환경



OS: Windows 10 home edition

도구: Anaconda(Python 3.7.4)

시뮬레이션 결과 VTK 파일



유한 요소법 프리 소프트웨어인 Freefem++을 이용하여 열확산 방정식을 풀고 결과 VTK 파일을 만들었다. 열 확산 방정식 부호는 example Heat.edp를 이용했다. Freefem++의 설치와 실행 방법은 생략한다. 이용한 VTK 파일은, 여기 에 둔다.

Python VTK 라이브러리 설치



conda를 사용하여 설치합니다.
conda install vtk

import 관계



작업에 필요한 Numpy, Matplotlib, VTK 라이브러리를 가져옵니다.
import numpy as np
import maptlotlib.pyplot as plt
import vtk
from vtk.util import numpy_support
%matplotlib inline

VTK 파일 불러오기



VTK 파일이 비구조 격자였기 때문에 Unstructured로 읽어들입니다.
#ファイル読み込み
filename = "heat_result.vtk"
reader = vtk.vtkUnstructuredGridReader()
reader.SetFileName(filename)
reader.Update()

온도를 셀 데이터를 포인트 데이터로 변환



이번 VTK 파일의 좌표 데이터가 Point Data이고 온도 데이터가 Cell Data입니다. 좌표 데이터와 온도 데이터를 일대일의 관계로 하고 싶기 때문에, 전부 Point Data로 변환한다.
#cell data から point data変換
cell2point = vtk.vtkCellDataToPointData()
cell2point.SetInputData(reader.GetOutput())
cell2point.Update()

변환된 데이터에서 좌표 및 온도 데이터 추출



VTK 파일을 읽고 vtk_support를 사용하여 VTK 데이터에서 좌표 데이터와 온도 데이터를 검색합니다.
#座標と温度データのnumpy化
coord = numpy_support.vtk_to_numpy(cell2point.GetOutput().GetPoints().GetData())
x = coord[:,0]
y = coord[:,1]
z = coord[:,2]#使わない。2次元の熱拡散方程式の結果なのですべて0である。
#GetAbstractArray(0)にはLabel、GetAbstractArray(1)に温度データが入っている。
temperature = numpy_support.vtk_to_numpy(cell2point.GetOutput().GetPointData().GetAbstractArray(1))

Matplotlib에서 컬러맵 표시



준비가 되었으므로, 나머지는 Matplotlib로 표시할 뿐이다. 비구조 데이터이기 때문에 tricontourf를 이용하여 컬러맵을 표시한다.
##カラーマップ出力
plt.tricontourf(x,y,temperature,levels=15,cmap="jet")
plt.colorbar()



모든 코드


import numpy as np
import matplotlib.pyplot as plt
import vtk
from vtk.util import numpy_support
%matplotlib inline
#ファイル読み込み
filename = "heat_result.vtk"
reader = vtk.vtkUnstructuredGridReader()
reader.SetFileName(filename)
reader.Update()

#cell data から point data変換
cell2point = vtk.vtkCellDataToPointData()
cell2point.SetInputData(reader.GetOutput())
cell2point.Update()

#座標と温度データのNumpy化
coord = numpy_support.vtk_to_numpy(cell2point.GetOutput().GetPoints().GetData())
x = coord[:,0]
y = coord[:,1]
z = coord[:,2]#使わない。2次元の熱拡散方程式の結果なのですべて0である。
#GetAbstractArray(0)にはLabel、GetAbstractArray(1)に温度データが入っている。
temperature = numpy_support.vtk_to_numpy(cell2point.GetOutput().GetPointData().GetAbstractArray(1))

#カラーマップ出力
plt.tricontourf(x,y,temperature,levels=15,cmap="jet")
plt.colorbar()

참고



VTK 클래스는 c++의 클래스 참조이 공개되어 있다. Python VTK의 구조와 이름은 c++ 참조와 동일하므로 참고할 수 있습니다. 주로 참고로 한 아래 사이트입니다.
  • htps : // vtk. rg/do c/에 gthly/HTML/cㅁsvtk 모두 1이었다. HTML
  • htps : // vtk. rg/do c/에 ghtly/html/cㅁsvtksell이었다고 하는 t였다. HTML
  • h tps : // s t c ゔ ぇ rf ぉ w. 코 m / 쿠에 s 치온 s / 23138112 / vtk - 토마 tp t t b - ushin g - mpy
  • htps // tp t b. rg/3.1.1/아피/_아s_겐/마 tpぉtぃb. pyp t. t 리콘 rf. HTML
  • 좋은 웹페이지 즐겨찾기