ポンプブラケットのモーダル解析の可視化#

次の例は,PyVistaを使用して,異なる振動モードのモード形状を表す点配列に基づいて,ポンプブラケットのモード解析を可視化する方法を示しています.

背景 モーダル解析は,機械構造物の動的特性を周波数領域で研究するものです.特に自動車,航空宇宙,土木工学などの構造力学において一般的な手法です.

モード形状とは,構造物の特定の固有振動数かモードで発生する変形パターンです.構造物が外力によって励起されると,構造物はすべての固有振動数で応答し,各モード形状は他から独立しています.この例では,モード形状を可視化することで,ポンプブラケットが異なる振動モードに対してどのように応答するかを理解することができます.

import numpy as np

import pyvista as pv
from pyvista import examples

データセットを読み込む#

download_pump_bracket() を使って,データセットをロードすることから始めます.

この例では,ポンプブラケットのモード形状の可視化,その大きさの表現,および変位のアニメーションを示しています.この例で使用したデータセットには,10個のモード形状(disp_0~disp_9)が含まれています.

dataset = examples.download_pump_bracket()
dataset
HeaderData Arrays
UnstructuredGridInformation
N Cells124806
N Points250487
X Bounds-5.000e-01, 5.000e-01
Y Bounds-4.000e-01, 0.000e+00
Z Bounds-2.500e-02, 2.500e-02
N Arrays10
NameFieldTypeN CompMinMax
disp_0Pointsfloat323-5.702e-021.000e+00
disp_1Pointsfloat323-9.769e-011.000e+00
disp_2Pointsfloat323-9.165e-011.000e+00
disp_3Pointsfloat323-9.808e-011.000e+00
disp_4Pointsfloat323-9.494e-011.000e+00
disp_5Pointsfloat323-9.759e-011.000e+00
disp_6Pointsfloat323-7.134e-011.000e+00
disp_7Pointsfloat323-8.740e-011.000e+00
disp_8Pointsfloat323-6.784e-011.000e+00
disp_9Pointsfloat323-8.212e-011.000e+00


データセットのプロット#

データセットにある利用可能な配列からモードシェイプを選択します.各 "disp_N" 配列は,与えられた振動モードに対する固有解または単一モード形状を表します.

データセットの4番目のモードをプロットします.これはブラケットの最初のねじりモードです.

cpos = [
    (0.744, -0.502, -0.830),
    (0.0520, -0.160, 0.0743),
    (-0.180, -0.958, 0.224),
]

dataset.plot(
    scalars='disp_3',
    cpos=cpos,
    show_scalar_bar=False,
    ambient=0.2,
    anti_aliasing='fxaa',
)
pump bracket

変位モード形状の可視化#

ここでは, warp_by_vector を使って元のデータセットを変位させ,ポンプブラケットのモード形状を可視化します.

# Create a plotter
pl = pv.Plotter()

# Add the undeformed pump bracket
pl.add_mesh(dataset, color="white", opacity=0.5)

# Add the deformed pump bracket with the mode shape
warp = dataset.warp_by_vector('disp_2', factor=0.1)
pl.add_mesh(warp, show_scalar_bar=False, ambient=0.2)

pl.camera_position = cpos
pl.enable_anti_aliasing('fxaa')
pl.show()
pump bracket

モード形状の変位をアニメーション化します#

各時間ステップで頂点位置を更新することで,モードシェイプの変位をアニメーション化します.よりリアルなアニメーションを実現するために,正弦波関数を使用して変位を変化させます.

# feel free to change this to visualize different mode shapes
mode_shape = 'disp_6'

# copy the dataset as we will modify its coordinates
ds = dataset.copy()

pl = pv.Plotter(off_screen=True)
pl.add_mesh(ds, lighting=True, color='w')
pl.camera_position = cpos
pl.enable_anti_aliasing('fxaa')

n_frames = 16
pl.open_gif("pump_bracket_mode_shape.gif")
for phase in np.linspace(0, 2 * np.pi, n_frames, endpoint=False):
    # use the original unmodified points, modify copy inplace
    ds.points = dataset.points + ds[mode_shape] * np.cos(phase) * 0.05
    pl.write_frame()

pl.close()
pump bracket

Total running time of the script: (0 minutes 17.167 seconds)

Sphinx-Galleryによるギャラリー