Python
 Computer >> コンピューター >  >> プログラミング >> Python

matplotlibで2次元FEM(有限要素法)の結果を可視化する方法

2次元FEM結果をmatplotlibでプロットする方法

有限要素法(FEM:Finite Element Method)は、さまざまな材料タイプのモデリングや複雑な形状の解析、設計の一部に作用する局所的な影響の可視化など、幅広い用途で活用されている数値解析手法です。FEMの基本的な考え方は、大きな空間領域を「有限要素」と呼ばれる単純な部分に分割し、各要素を記述する簡単な方程式を組み合わせて、領域全体を表す大規模な連立方程式系を構築するというものです。

この記事では、Pythonのmatplotlibライブラリを使って、2次元FEMの計算結果をコンター図(等高線図)として可視化する手順を解説します。

実装の手順

matplotlibで2次元FEMの結果をプロットするには、以下のステップを実行します。

  • 図のサイズを設定し、サブプロット間および周囲のパディングを調整します。
  • numpyを使って、節点(ノード)、要素、節点値のデータポイントを作成します。
  • 節点データポイントを転置して、x座標とy座標に分解します。
  • tricontourf()関数を使って、塗りつぶしの三角グリッドコンタープロット(3D塗りつぶし等高線図)を作成します。
  • show()メソッドを呼び出して、図を表示します。

コード例

以下は、7つの節点と6つの三角形要素からなる簡単なメッシュに対して、各節点の値をコンター図として描画するサンプルコードです。

import numpy as np
import matplotlib.pyplot as plt

# 図のサイズとレイアウトを設定
plt.rcParams["figure.figsize"] = [7.00, 3.50]
plt.rcParams["figure.autolayout"] = True

# 節点の座標を定義
nodes = np.array([
   [0.0, 0.0],
   [1.0, 0.0],
   [2.0, 0.5],
   [0.0, 1.0],
   [1.0, 1.0],
   [1.7, 1.3],
   [1.0, 1.7]])

# 三角形要素を定義(節点番号の組み合わせ)
elements = np.array([
   [1, 2, 5],
   [5, 4, 1],
   [2, 3, 6],
   [6, 5, 2],
   [4, 5, 7],
   [5, 6, 7]])

# 各節点における値
cvalues = [1, 2, 1, 2, 7, 4, 5]

# 節点配列を転置してx座標・y座標を取得
x, y = nodes.T

# 三角形要素を使った塗りつぶしコンタープロットを描画
plt.tricontourf(x, y, elements - 1, values, 12, cmap='copper')

plt.show()

ここでのポイントは、elements - 1という処理です。numpy配列のインデックスは0始まりであるため、1始まりで定義した節点番号を0始まりに変換しています。また、cmap='copper'を指定することで、銅色を基調としたカラーマップで値の分布が表現されます。第5引数の12は、コンターのレベル数(等高線の分割数)を意味します。

実行結果

上記のコードを実行すると、三角形メッシュ上の節点値の分布が、滑らかに補間された塗りつぶしコンター図として表示されます。値が大きい領域ほど明るい色で、小さい領域ほど暗い色で表現され、FEM解析における物理量(温度、応力など)の空間分布を直感的に把握できます。

実際のFEM解析では、このように得られた節点値をもとに、tricontourf()を利用することで、市販のポストプロセッサーのようなカラーコンタープロットを簡単に作成できるため、解析結果の確認やプレゼンテーション資料の作成に非常に便利です。

  1. MatplotlibでグラフのX軸とY軸を入れ替える方法

    Matplotlibでグラフの軸(X軸とY軸)を入れ替えたい場合、subplots()メソッドを使って図(figure)を作成し、2つのサブプロットを追加する方法が便利です。1つ目のサブプロットに曲線を描画し、そのX・Yデータを抽出して、2つ目のサブプロットの曲線に設定し直すことで、軸を入れ替えたグラフを作成できます。 手順 NumPyを使って、xとyのデータポイントを作成します。 図を作成し、2つのサブプロットを追加します。 両方のサブプロットにタイトルを設定します。 plot()メソッドを使って、xとyのデータポイントをプロットします。 get_xdata()とget_ydata()を使

  2. Matplotlibで折れ線グラフをアニメーション化する方法を徹底解説

    Matplotlibでは、FuncAnimationを活用することで、折れ線グラフに動きのあるアニメーション効果を簡単に加えることができます。本記事では、基本的な手順と実際に動作するサンプルコードを交えながら、その方法をわかりやすく解説します。折れ線グラフをアニメーション化する基本手順subplots()メソッドを使用して、図(figure)とサブプロットを作成します。x軸・y軸それぞれの表示範囲(スケール)を設定します。NumPyを使って、xおよびtのデータ点を生成します。座標ベクトルからmeshgrid()で座標行列X2とT2を作成します。plot()メソッドでxとFのデータを使い、折れ線