NOMO.asia

예전에 기업체 과제로 유연다물체동역학 기반 진동 해석을 할 일이 있었다. 먼저 1D 해석을 통해 유압력 데이터를 얻고, 그 데이터를 FE Body 가 포함된 다물체 동역학 해석에 적용하여 유연체 표면 노드의 가속도를 측정하는 것이 목표였다. 그러니까 실시간으로 co-simulation 을 하는 것이 아닌 비연성(uncoupling) 해석이었다.

유압력의 경우 시간에 따라 변하는 정도가 크지 않았기 때문에 report time step 을 1/100s 로만 잡아도 충분했다.

참고로 report time step 을 쉽게 설명하면, 결과를 postprocessor 에서 그래프로 확인할 때 그래프의 각 포인트간 시간 간격을 말한다. 내부에서 solver 가 계산할 때 수렴을 위해 실제로 더 낮은 time step size로 해석하더라도, 모든 step 을 다 결과 파일에 쓰게 않고 report time step 에 해당하는 결과만 output 으로 쓰게 함으로써, 결과 파일의 용량을 줄이고 file I.O. 시간을 줄이는 용도로 사용된다.

실제 다물체 해석의 report time step 은 1D 모델과 다르게 1/20000 s 수준이었다. 이유는 관찰하고 싶은 진동의 주파수가 1000hz 정도였고, 최소 1/20 * (target frequency) 정도의 time step 으로 해석해야 진동의 한 주기를 제대로 나타낼 수 있는 정확도를 얻을 수 있기 때문이었다.



출처: https://nomo.asia/431 [SU의 블로그]ㅡ

다물체 동역학을 기반으로 한 시간 영역에서의 진동 해석 시 Body 의 움직임을 입력 조건으로 사용하는 경우(예: time-stroke), 이 입력 값을 보간된 값으로 사용한다면 보간의 결과물 때문에 이상한 진동 패턴이 나타나는 경우가 있으므로 주의해야 한다.

내 경우에는 Shock absorber 의 진동 해석을 위해 Rod 의 입력조건으로 time-stroke 값을 보간해서 사용했더니 문제가 발생했다.

보간 값의 에러 확인

y=sin(x) 그래프를

① x축의 point 간 간격이 1e-2 가 되도록 찍은 다음, 1e-5 간격으로 Akima spline 으로 다시 보간한 것과
② 처음부터 1e-5 간격으로 찍은 것

위 두 경우의 차이(error)를 비교해보면 아래와 같다.

조금 더 확대해보면 아래와 같이 나온다.

10^-8 이면 얼마 되지 않는 것처럼 보이지만 실제로는 A*sin(x) 처럼 입력 값에 계수가 곱해질 것이므로 에러는 더욱 크게 나올 것이다.

진동 해석 시 위와 같은 에러가 문제가 되는 이유

이것이 Body 의 움직임(time-stroke)으로 입력될 경우 문제가 될 수 있다. stroke 를 두번 미분한 값은 가속도이고, 가속도의 변화는 결국 하중의 변화로 나타나므로(F=ma) stroke 의 값이 작더라도 기울기 변화가 크면 유의미한 수준의 진동 성분으로 나타날 수 있다. 예를 들어, Motion constraint 를 준 Body 가 다른 Body와 연속적으로 접촉하면서 진동을 만들어 내는 경우가 이러한 예가 될 수 있다.

특히 입력 값보다 상대적으로 높은 Target frequency 를 관찰하기 위해 Bandpass 나 Highpass filter 로 저주파수 대역을 날려버리거나, 아니면 input 값으로 사용한 sin 에 해당하는 주파수 성분을 날려버리는 경우, 위와 같은 고주파 성분이 남게 될 수 있다.

결론

시간 영역에서의 다물체 동역학을 기반으로 한 진동 해석 시 Input motion 을 보간할 경우, 보간하기 전 데이터의 해상도는 관찰 주파수보다 더 높아야한다.