FEMモデルを用いた数値計算結果を評価する際、ミーゼス応力が利用される。しかし、ParaViewには応力テンソルを基にミーゼス応力を計算する仕組みが用意されていない。
またParaViewでテンソルを扱う場合、3×3行列形式で入力されることが好ましい。しかし、データ形式によっては6成分形式(σxx, σyy, σzz, σxy, σyz, σzx)で入力される場合も多く、3×3行列を前提としたフィルタが適用できない場合がある。
本スクリプトを適用すると、6成分形式の応力テンソルが3×3行列形式に展開され、ミーゼス応力が計算される。
動作確認バージョン
ParaView 4.3.1
Output Data Set Type
任意
Script
import math s6_name = 'NodalSTRESS' tri2mat = ( (0, 3, 4), (3, 1, 5), (4, 5, 2), ) pdi = self.GetInput() pdo = self.GetOutput() pdo.ShallowCopy(pdi) n = pdo.GetNumberOfPoints() s9 = vtk.vtkDoubleArray() s9.SetNumberOfComponents(9) s9.SetName(s6_name + '_3x3') mises = vtk.vtkDoubleArray() mises.SetNumberOfComponents(1) mises.SetName('Mises') for i in range(n): s = ( pdo.GetPointData().GetArray(s6_name).GetValue(i * 6 + tri2mat[0][0]), pdo.GetPointData().GetArray(s6_name).GetValue(i * 6 + tri2mat[0][1]), pdo.GetPointData().GetArray(s6_name).GetValue(i * 6 + tri2mat[0][2]), pdo.GetPointData().GetArray(s6_name).GetValue(i * 6 + tri2mat[1][0]), pdo.GetPointData().GetArray(s6_name).GetValue(i * 6 + tri2mat[1][1]), pdo.GetPointData().GetArray(s6_name).GetValue(i * 6 + tri2mat[1][2]), pdo.GetPointData().GetArray(s6_name).GetValue(i * 6 + tri2mat[2][0]), pdo.GetPointData().GetArray(s6_name).GetValue(i * 6 + tri2mat[2][1]), pdo.GetPointData().GetArray(s6_name).GetValue(i * 6 + tri2mat[2][2]), ) for j in range(9): s9.InsertNextValue(s[j]) sm = math.sqrt(0.5 * (\ (s[0] - s[4]) ** 2 + (s[4] - s[8]) ** 2 + (s[8] - s[0]) ** 2\ + 3.0 * (s[1] ** 2 + s[2] ** 2 + s[3] ** 2 + s[5] ** 2 + s[6] ** 2 + s[7] ** 2)\ )) mises.InsertNextValue(sm) pdo.GetPointData().AddArray(s9) pdo.GetPointData().AddArray(mises)
コメントを残す