구조공학과 코딩 구현

구조해석 프로그램 제작기 (2)

krespers 2024. 7. 6. 20:40

https://github.com/krespers/Structural_Codes/blob/main/Structural_Analysis/matrixdemo.ipynb

 

python으로 데모 격인 구조해석 프로그램을 만들기 위해서 2차원 트러스 구조물을 해석하는 방법을 구현해본다.

트러스 구조물 해석 프로그램을 기반으로 빔(beam), 프레임(frame) 구조해석까지 확장할 것이다.

 

위 트러스 구조물을 해석해보자.

 

1. 데이터 입력

필요 변수) 

절점(joint) 위치 및 좌표 / 트러스 구조물의 support 형태 / 절점을 잇는 부재 Member / 각 부재에 사용될 E(탄성계수), A(단면적) / 절점(joint)에 가해지는 외부힘 Joint load 

 

혹은 아래와 같은 식으로 나열하여 만들 수 있다.

 

 

2. 입력값의 시각화

 matplotlib라는 고전적이면서도 강력한 라이브러리를 활용하였다. 

부재는 붉은색, 절점하중은 초록색 화살표 및 크기 벡터,

절점이 검은 색인 것은 pin support

절점이 초록 색인 것은 roller support 

절점이 파란 색인 것은 그냥 support 없는 hinge임을 말한다. (원래 트러스의 모든 절점은 hinge임을 가정한다.)

 

3. 부가기능 - Degree Of Freedom과 Indeterminancy 

DOF는 어찌보면 강성매트릭스법에서 [U] 혹은 [P] 행렬에서 미지수라고 할 수 있는 값의 갯수이다.

정정 트러스였으니 Indeterminancy가 0이다. Indeterminancy 계산은 트러스 구조물에서 (부재 수) + (지지 반력 수 = 여기서는 support data의 restraint 숫자를 활용하였음.) - 2 * (joint 수) 임을 활용한다.

 

 

4. [P] [K] [U] 구하기

절점하중으로부터 국소행렬을 구한다.

빈 칸을 0으로 둘 순 없다 (미지의 값을 함부로 사용해서는 안된다.) 따라서 Numpy의 np.nan 기능을 활용하였다.

 

 

강성행렬의 경우

좌표계에는 크게 Local(지역) Coordinate와 Global Coordinate가 있다. 

Local Coordinate System에서 Stiffness Reltion을 구해서 변환하기 보다는 그냥 Global Coordinate System에 해당하는 에서 Stiffness Matrix를 바로 구해냈다.

 

 

 

또한 global matrix의 joint를 맞추기 위해서 각 index를 아주 잘 맞춰나가야 한다.

즉 아래 과정을 수행하는 것이다.

 

 

5. 연산

stiffness matrix가 역행렬이 존재하면 안정적인 구조물이다. 모든 값을 계산할 수 있다.

이 unknown 값을 구하기 위해서는 알고 있는 행렬 원소들만을 따로 떼서 계산해줘야 한다.

이를 위해서 nan 값이 있는 것들을 모두 추적해 주었다. 처음에 unknown 갑을 0으로 쓰지 않은 이유가 여기 있다.

즉 위의 연산 (국소적으로 행렬의 일부분을 떼와서 역행렬을 취하고 미지의 값을 찾아낸 뒤에 다시 [P]=[K][U]를 계산하여 미지의 [P] [U] 값이 모두 채워진 것을 리턴하는 과정을 아래와 같이 구현하였다.

 

 

결과를 시각화해보면 아래와 같다.

파란색 화살표와 벡터로 이동량을 추가로 구현해냈다.

 

여기서 더 수정할 사항으로

1. plot에 대한 문제 수정 및 support 형태를 그림으로 더 나타내기

2. 입력방법에 대해 수정하기

가 있을 것이다.

 

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

'구조공학과 코딩 구현' 카테고리의 다른 글

구조해석 프로그램 제작기 (1)  (0) 2024.06.15