질문
시간이력해석시 모드별 감쇠비 또는 Strain Energy Proportional Damping을 적용했더니, 아래와 같은 메시지가 출력되고 해석이 중단됩니다. 왜 Damping Method를 변경해야 하나요? 메모리카드 용량을 늘려야 하나요?
ERROR : MEMORY SIZE IS NOT ENOUGH TO CONSTRUCT DAMPING MATRIX IN FULL MATRIX FORM.
PLEASE CHOOSE ANOTHER DAMPING METHOD(EXCEPT DIRECT MODAL & STRAIN ENERGY PROPORTIONAL
AVAILABLE MEMORY = 11363.1 MBYTES ( 11.1 GBYTES)
REQUIRED MEMORY = 38614.4 MBYTES ( 37.7 GBYTES)
답변
Direct Integration에 의한 시간이력해석을 수행하기 위해서는 아래와 같은 동적평형방정식에서 감쇠행렬 C를 먼저 구성해야 합니다. 질량행렬과 강성행렬은 구조물의 재료와 요소 정보로부터 만들어지게 되고, 하중벡터는 입력되는 값입니다. 하지만 감쇠행렬C는 구조물의 재료와 요소 정보만으로는 구하지 못하고, 대표적으로 감쇠는 질량과 강성에 비례한다고 가정하여 산정하는 Rayleigh Damping이나 또는 모드별 감쇠비와 모드벡터를 이용하여 역으로 감쇠행렬을 구성하는 방법이 있습니다. 그런데, 모드별 감쇠비 또는 Strain Energy Proportional Damping이 적용된 상태에서는 모드별로 감쇠비가 사용자에 의해 정의된 상태이므로 감쇠비와 고유진동수
, 모드벡터행렬
을 이용해서 모드의 직교성(orthogonality)을 이용하여 감쇠행렬
를 아래와 같이 구성하게 됩니다.
여기에서 감쇠행렬도 모드벡터에 의한 직교성이 성립된다고 가정하여, 앞뒤로 모드행렬과 질량행렬을 곱하면 아래와 같이 감쇠행렬C를 구성할 수 있습니다.
여기서, : 전체구조물의 감쇠행렬
: 전체구조물의 질량 행렬
: 전체구조물의 i-번째 모드 감쇠비
: 모드벡터 행렬
위의 수식에서 모드벡터는 1부터 n자유도까지 0이 아닌 값을 가지고 있기 때문에, 감쇠행렬 는 n X n 크기를 가지는 Full matrix가 됩니다. 따라서 감쇠행렬C를 구성하고 메모리를 확보하기 위해서는 Symmetric인 점을 고려하더라도 적어도 상삼각행렬의 정보를 저장할 수 있는 메모리 공간을 확보하여야 합니다. 행렬의 사이즈 즉, 구조물의 자유도수의 제곱만큼 메모리가 필요하게 되므로 구조물의 자유도수가 증가할수록 필요한 메모리의 양은 급증하게 됩니다.
메모리 증설로 대응은 가능하지만, 64bit 버전에서는 설치된 메모리의 최대 70%를 사용할 수 있도록 제한이 되어 있습니다. 이것은 안정적인 OS동작과 Multi-Tasking이 원활하게 동작하도록 하기 위한 것입니다(32bit용은 설치된 메모리 용량에 관계없이 1.4GByte로 최대값이 제한되어 있습니다).
결론적으로 Mass and Stiffness Proportional Damping(Rayleigh Damping) 또는 Element Mass and Stiffness Proportional Damping으로 변경하는 것을 추천합니다.
Modal Damping 또는 Strain Energy Proportional Damping을 꼭 적용해야 한다면, mash크기를 줄이거나 요소를 적절하게 merge하여 자유도개수를 줄여서 행렬의 크기를 줄이는 모델 수정이 필요합니다.
참고로, 배열 변수를 저장하기 위해서는 연속된 메모리 공간이 확보되어야 한다는 것에 대해 주의할 필요가 있습니다. 예를 들어 배열 변수 A의 크기를 100 X 100 으로 확보하기 위해서는 10000개의 연속된 메모리공간이 필요합니다. 가용할 수 있는 메모리의 전체 용량이 100000개로 충분하다고 하더라도, 여러 조각으로 나뉘어져 연속된 메모리공간으로 10000개를 확보할 수 없다면 메모리 할당을 할 수 없는 상황이 발생할 수 있습니다. 이런 경우에는 Severe (98): cannot allocate memory 와 같은 fortran run-time error 메시지가 출력될 수 있으므로 주의가 필요합니다. 이에 대해서는 별도 FAQ자료로 자세히 다루도록 하겠습니다.