注釈
Go to the end をクリックすると完全なサンプルコードをダウンロードできます.
ポンプブラケットのモーダル解析の可視化#
次の例は,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
データセットのプロット#
データセットにある利用可能な配列からモードシェイプを選択します.各 "disp_N" 配列は,与えられた振動モードに対する固有解または単一モード形状を表します.
データセットの4番目のモードをプロットします.これはブラケットの最初のねじりモードです.
変位モード形状の可視化#
ここでは, 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()
モード形状の変位をアニメーション化します#
各時間ステップで頂点位置を更新することで,モードシェイプの変位をアニメーション化します.よりリアルなアニメーションを実現するために,正弦波関数を使用して変位を変化させます.
# 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()
Total running time of the script: (0 minutes 17.167 seconds)