| 강성행렬 Stiffness Matrix | |
|---|---|
| 분야 | 유한요소법 × 구조해석 |
| 지배 방정식 | K u = f |
| 주요 성질 | 대칭성, 희소성, 양정치성 |
| 기호 | K (전역), ke (요소) |
1. 개요[편집]
구조물을 풀면 결국 딱 한 줄이 남는다. Ku = f. 나머지는 이 행렬을 어떻게 만드느냐의 문제다.
강성행렬(Stiffness Matrix, )은 유한요소법에서 구조물의 변위와 그에 필요한 힘 사이의 관계를 담은 행렬로, 선형 정적 구조해석의 지배 방정식 의 핵심이다. 여기서 는 절점 변위 벡터, 는 절점 하중 벡터다. 스칼라 스프링의 후크 법칙 를 다자유도로 일반화한 것이라 보면 정확하다. 강성행렬은 “이 절점을 이만큼 밀면, 저 절점에 얼마의 힘이 걸리는가”라는 구조물의 저항 특성을 통째로 인코딩한 물건이다.
유한요소 해석의 실체는 사실상 이 거대한 행렬을 조립하고, 라는 선형 연립방정식을 푸는 일이다. 자유도가 수백만~수억 개에 이르는 대규모 문제에서, 이 행렬의 성질을 잘 이해하고 활용하느냐가 해석 시간을 하루로 만들지 한 달로 만들지를 가른다.1
2. 요소 강성행렬과 조립[편집]
전역 강성행렬은 하늘에서 뚝 떨어지지 않는다. 먼저 구조물을 잘게 나눈 각 요소마다 요소 강성행렬(element stiffness matrix) 를 구한다. 이는 요소 내부의 형상함수(shape function) 와 재료 물성 로부터 다음 적분으로 얻어진다.
이 적분은 대개 수치적분(가우스 구적)으로 계산한다. 그다음, 각 요소가 공유하는 절점을 매개로 전역 자유도 위치에 요소 행렬을 더해 넣는 과정이 조립(assembly)이다.
여기서 는 요소의 지역 자유도를 전역 자유도로 매핑하는 위치 행렬이다. 실제 구현에서는 이 행렬 곱을 명시적으로 하지 않고, 인접 요소들이 공유 절점에서 기여를 겹쳐 더하는 “스캐터-애드(scatter-add)” 방식으로 처리한다. 이 겹침이 바로 서로 연결된 절점끼리만 행렬 성분이 생기는 구조를 만들며, 뒤에 나올 희소성의 원천이 된다.
3. 세 가지 핵심 성질[편집]
강성행렬이 사랑받는(그리고 활용되는) 이유는 세 가지 아름다운 성질 덕분이다.
3.1. 대칭성 (Symmetry)[편집]
가 성립한다. 이는 우연이 아니라 물리 법칙의 결과다. 선형 탄성체는 보존계라 변형에너지가 존재하고, 강성행렬은 이 에너지의 2차 형식의 헤시안이기 때문이다. 맥스웰-베티 상반정리(절점 를 밀 때 에서 느끼는 힘 = 그 반대)가 대칭성의 물리적 표현이다.2 실용적으로는 저장 공간과 계산량이 절반으로 줄어든다는 뜻이라, 매우 반가운 성질이다.
3.2. 희소성 (Sparsity)[편집]
한 절점은 자신과 요소를 공유하는 이웃 절점하고만 직접 연결된다. 따라서 강성행렬의 대부분 성분은 0이고, 0이 아닌 성분은 대각선 주변에 몰려 있다. 100만 자유도 문제라면 행렬은 개 성분을 가지지만, 실제 0이 아닌 것은 그 중 수천만 개 남짓이다. 이 희소성을 무시하고 꽉 찬(dense) 행렬로 다뤘다간 메모리가 테라바이트 단위로 폭발한다. 그래서 반드시 CSR/CSC 같은 희소 저장 형식을 쓴다.
3.3. 양정치성 (Positive Definiteness)[편집]
강체 운동(rigid body motion)을 경계 조건으로 제대로 구속한 강성행렬은 대칭 양정치(SPD)다. 즉 0이 아닌 모든 변위에 대해 변형에너지 이다. 물리적으로 “0이 아닌 변형은 항상 양의 에너지를 요구한다”는 당연한 사실이다. 이 SPD 성질 덕분에 촐레스키 분해가 가능하고, 반복법 중 가장 효율적인 켤레기울기법(CG)을 쓸 수 있다.
4. 경계 조건 처리[편집]
조립 직후의 강성행렬은 사실 특이(singular)하다. 아무 데도 고정하지 않은 구조물은 허공에서 자유롭게 떠다닐 수 있어(강체 운동), 가 특이해 방정식이 풀리지 않는다. 그래서 경계 조건으로 일부 자유도를 구속해줘야 비로소 가 양정치가 되고 유일해가 존재한다. 지정 변위(디리클레 조건)를 부과하는 방법은 크게 셋이다.
- 행/열 소거: 구속된 자유도에 해당하는 행과 열을 아예 시스템에서 제거한다. 가장 깔끔하지만 인덱스 관리가 번거롭다.
- 페널티법: 해당 대각 성분에 아주 큰 수를 더해 그 자유도를 사실상 고정한다. 구현은 쉽지만 조건수를 악화시킨다.3
- 라그랑주 승수법: 구속을 별도 미지수로 도입한다. 정확하지만 행렬 크기가 커지고 양정치성이 깨진다.
5. 대역폭과 절점 번호 매기기[편집]
희소 행렬이라도 어떻게 저장하고 푸느냐가 성능을 좌우한다. 직접법(가우스 소거, 촐레스키)에서는 절점 번호를 어떻게 매기느냐에 따라 0이 아닌 성분들이 대각선에서 얼마나 멀리 퍼지는지, 즉 대역폭(bandwidth)이 달라진다. 대역폭 인 밴드 행렬을 촐레스키 분해하는 비용은 대략 이므로, 대역폭을 줄이는 것이 곧 속도다. 절점 번호를 잘 재배열해 대역폭을 줄이는 알고리즘으로 커스힐-맥키(Cuthill-McKee)와 그 역순 버전(RCM)이 고전이다.4
더 근본적으로, 분해 과정에서 원래 0이었던 자리에 0이 아닌 값이 새로 채워지는 필-인(fill-in)을 최소화하는 재배열(예: 최소 차수 정렬, 중첩 분할)이 대규모 직접법의 핵심 기술이다. 반면 문제가 너무 커지면 직접법을 포기하고 크리로프 부분공간법 같은 반복법으로 넘어가는데, 이때는 전처리기의 품질이 수렴 속도를 결정한다. SPD 행렬에 대한 불완전 촐레스키 전처리와 켤레기울기법의 조합이 구조해석 반복법의 단골 메뉴다.
6. 관련 문서[편집]
7. Footnotes[편집]
-
유한요소 코드의 겉모습은 화려한 3D 형상과 컬러 컨투어지만, 내부에서 벌어지는 일의 90%는 이 희소 행렬을 조립하고 분해하는 지루한 선형대수다. 그래픽은 결과 발표용, 강성행렬은 밥벌이용. ↩
-
베티의 상반정리(1872)는 “A점에 힘을 줘 B점에서 생긴 처짐 = B점에 같은 힘을 줘 A점에서 생긴 처짐”이라는 얘긴데, 이게 곧 다. 150년 전 정리가 오늘날 메모리 절반을 아껴준다. ↩
-
페널티 값이 너무 작으면 구속이 헐거워 물체가 조금 움직이고, 너무 크면 조건수가 나빠져 반복법이 죽는다. 접촉 해석의 페널티 강성 튜닝과 정확히 같은 딜레마다. 세상 모든 페널티법은 결국 “얼마나 큰 수를 넣을 것인가”로 귀결된다. ↩
-
RCM(Reverse Cuthill-McKee)은 1969년에 나온 알고리즘인데, 지금도 대부분의 희소 행렬 라이브러리(MATLAB, SciPy 등)에 기본 탑재되어 있다. 반세기 넘게 현역인 걸 보면, 좋은 알고리즘엔 은퇴가 없다. ↩