\

PythonとVTKライブラリを用いて、ベクトルフィールドの生成と可視化を行う方法について説明します。この記事では、具体的には2次元熱拡散シミュレーション結果をPython VTKで出力する方法と、3Dベクトルフィールドをnumpy配列から*.vtkファイルにエクスポートする方法について取り上げます。

2次元熱拡散シミュレーション結果のVTK出力

まずは、2次元熱拡散シミュレーション結果をPython VTKで出力する方法について見てみましょう。この方法では、Python VTKライブラリを利用して、StructuredGrid形式で出力します。

import fenics as fe
import numpy as np
import vtk

# 省略: FEniCSを用いた熱拡散シミュレーションのコード

# ndarray形式のシミュレーション結果を、VTKライブラリのStructuredGrid形式で出力
Nx = 80
Ny = 100
u = np.load("solution.npy")

points = vtk.vtkPoints()
for iy in range(Ny+1):
    for ix in range(Nx+1):
        x = ix
        y = iy
        points.InsertNextPoint(x,y,0)  # 2次元なので、z座標は0にする

structured_mesh = vtk.vtkStructuredGrid()
structured_mesh.SetExtent(0, Nx, 0, Ny, 0, 0)
structured_mesh.SetPoints(points)

# 温度データをvtk arrayに入力する
temp_value = vtk.vtkDoubleArray()
temp_value.SetName("Temperature")
for t in u:
    temp_value.InsertNextValue(t)
structured_mesh.GetPointData().AddArray(temp_value)

# データ出力
writer = vtk.vtkXMLDataObjectWriter()
writer.SetFileName("temperature.vts")
writer.SetInputData(structured_mesh)
writer.Update()

3Dベクトルフィールドのエクスポート

次に、3Dベクトルフィールドをnumpy配列から*.vtkファイルにエクスポートする方法について見てみましょう。この方法では、TVTKを利用します。

from tvtk.api import tvtk, write_data
import numpy as np

# 省略: ベクトルフィールドの生成コード

# We reorder the points and vectors so this is as per VTK's
# requirement of x first, y next and z last.
pts = pts.transpose(2, 1, 0, 3).copy()
pts.shape = pts.size // 3, 3

vectors = vectors.transpose(2, 1, 0, 3).copy()
vectors.shape = vectors.size // 3, 3

sg = tvtk.StructuredGrid(dimensions=xx.shape, points=pts)

sg.point_data.vectors = vectors
sg.point_data.vectors.name = 'velocity'

write_data(sg, 'vtktest.vtk')

以上のように、PythonとVTKを用いることで、ベクトルフィールドの生成と可視化を行うことができます。これらのコードを参考に、自分のプロジェクトに適用してみてください。.

投稿者 admin

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です