Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Matplotlib으로 2D 유한요소법(FEM) 결과 시각화하는 방법

유한요소법(Finite Element Method, FEM)은 다양한 재료의 모델링, 복잡한 기하학적 구조 검증, 설계의 특정 영역에 작용하는 국소적 효과 시각화 등 여러 분야에서 활용되는 수치 해석 기법입니다. FEM은 큰 공간 도메인을 '유한 요소(finite element)'라고 불리는 단순한 부분들로 나누고, 각 요소를 모델링하는 간단한 방정식들을 하나의 큰 연립방정식 체계로 통합하여 전체 도메인을 해석합니다.

2D FEM 결과를 Matplotlib으로 플롯하는 단계

Matplotlib을 사용해 2D FEM 결과를 플롯하려면 다음 단계를 따르면 됩니다.

  • 그림 크기를 설정하고 서브플롯 주변 및 사이의 패딩을 조정합니다.
  • NumPy를 사용하여 노드(nodes), 요소(elements), 노드 값(values) 데이터 포인트를 생성합니다.
  • 노드 데이터 포인트를 전치(transpose)하여 x, y 좌표로 분리합니다.
  • tricontourf() 함수를 사용하여 채워진 삼각형 등고선 플롯을 생성합니다.
  • show() 메서드를 호출하여 그림을 화면에 표시합니다.

예제 코드

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]])

values = [1, 2, 1, 2, 7, 4, 5]

x, y = nodes.T

plt.tricontourf(x, y, elements - 1, values, 12, cmap='copper')

plt.show()

실행 결과

위 코드를 실행하면 노드와 요소 정보를 기반으로 한 2D FEM 결과가 'copper' 컬러맵이 적용된 채워진 등고선 플롯으로 표시됩니다. 각 삼각형 요소 내에서 값들이 부드럽게 보간되어, 유한요소 해석 결과를 직관적으로 확인할 수 있습니다.

참고로 tricontourf() 함수에서 요소 인덱스 배열에 elements - 1을 사용하는 이유는, NumPy 배열의 인덱스가 0부터 시작하기 때문입니다. 즉, 1부터 시작하는 노드 번호를 0 기반 인덱스로 변환하는 과정입니다. 또한 마지막 인자인 12는 등고선 레벨 수를 지정하며, 이 값을 조절하면 색상 구분의 세밀함을 변경할 수 있습니다.