ミーゼス応力の計算(その2)

ミーゼス応力の計算スクリプトをDataset Adapter形式に書き換えたものである。本スクリプトを適用すると、6成分形式の応力テンソルが3×3行列形式に展開され、ミーゼス応力が計算される。
for文で逐一データを追加する方法に対し、Dataset Adapterを利用した方が圧倒的に高速である。

dataset_adapterモジュールの場所はVTKのバージョンによって異なるため、条件分岐を行っている。

動作確認バージョン

ParaView 4.3.1
ParaView 4.4.0

Output Data Set Type

任意

Script

from paraview.vtk import vtkVersion

import math

if int(vtkVersion.GetVTKMajorVersion()) >= 7 or (int(vtkVersion.GetVTKMajorVersion()) == 6 and int(vtkVersion.GetVTKMinorVersion()) >= 2):
    from paraview.vtk.numpy_interface.dataset_adapter import numpyTovtkDataArray as da
    from paraview.vtk.numpy_interface.dataset_adapter import vtkDataArrayToVTKArray as va
else:
    from paraview.vtk.dataset_adapter import numpyTovtkDataArray as da
    from paraview.vtk.dataset_adapter import vtkDataArrayToVTKArray as va

s6_name = 'NodalSTRESS'

pdi = self.GetInput()
pdo = self.GetOutput()

pdo.ShallowCopy(pdi)

s6 = va(pdi.GetPointData().GetArray(s6_name))
pdo.GetPointData().AddArray(da(s6[:, array((0, 3, 4, 3, 1, 5, 4, 5, 2))], s6_name + '_3x3'))
pdo.GetPointData().AddArray(da(\
    sqrt(0.5 * (\
        (s6[:, 0] - s6[:, 1]) ** 2 + (s6[:, 1] - s6[:, 2]) ** 2 + (s6[:, 2] - s6[:, 0]) ** 2\
            + 3.0 * (s6[:, 3] ** 2 + s6[:, 4] ** 2 + s6[:, 3] ** 2 + s6[:, 5] ** 2 + s6[:, 4] ** 2 + s6[:, 5] ** 2)\
    )), 'Mises'))
タグ: , , , ,

コメントを残す

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

*