2015년 5월 11일 월요일

Open Source CAE Toolchain 14 - FEM with FreeCAD 0.15 including Netgen and Calculix


FreeCAD를 처음 테스트해 본게 V0.1 정도 즈음부터였던 것 같다.
그때는 완성도가 너무 낮아서 "재미있는 장난감이군" 정도의 느낌이었는데, 몇 년 지난 지금의 V0.15 에서는 굉장히 완성도가 높이 올라와 있어서 대단히 놀랍다.
물론 여전히 상용 CAD의 완성도에는 크게 못 미치지만, 3D 프린터를 기반으로 하는 교육 커리큘럼 같은데서 사용하기에는 충분한 완성도에 이미 도달했지 않나 싶다.

일단 옛날보다 안정성이 굉장히 좋아졌다.
갑자기 다운되어서 데이타가 날아가버린다던가 하는 증상의 빈도수가 크게 줄었다.

개발 속도도 갈수록 가속도가 붙는 것 같다.
특히 Python 스크립트로 확장성을 개방해 놓은 오픈소스 특유의 특징 덕분에, 사용자 커뮤니티가 마치 눈덩이처럼 점점 더 불어나면서 동시에 각종 모듈이나 매크로 기능들이 빠르게 붙어나간다.

가만히 보면 이미 구색은 다 갖춘 것 같다.  심지어 OpenPLM 하고도 연동될 지경이니....

아무튼 이렇게 붙은 확장 모듈들 중에서, FreeCAD에 기본으로 포함된 주요 모듈의 하나로 FEM 모듈이 있다.  이걸 어떻게 사용하나 싶어서 이리저리 혼자 해 봤는데 도무지 해법이 보이지 않았고, 아직 제대로 된 Tutorial 문서도 없는 상태라 어떻게 사용하는지 지침도 없었다.

그러다가 오늘 사용법을 알아냈기에 간단히 기록해 본다.


현재 FEM 모듈은 Netgen 매쉬 생성기와 Calculix 솔버를 사용하도록 준비되어 있다.
FreeCAD를 우분투 계열 리눅스에 설치할 때 PPA 저장소를 설정해서 apt-get 으로 설치하도록 되어 있는데, 이때 FreeCAD만 설치하지 말고 ccx 및 Netgen을 함께 설치하면 환경 구성은 끝난다.

FEM 모듈이 중요하다고 판단했는지, FreeCAD 저장소에 ccx(Calculix)와 Netgen을 함께 제공해줘서 환경구성하는데 삽질할 필요가 없도록 배려해 놨다.

다만 윈도우 버전의 FreeCAD에서는 Calculix 솔버 사용이 불가능하다.  Calculix 자체가 리눅스 기반이라 그런 것 같다.  뭐 억지로 윈도우 버전으로 된 걸 구해다가 해킹해서 이어붙이면 안될것도 없겠지만 그런 방식은 생명연장을 위해 지양하자.

아무튼 이걸 테스트한 컴퓨터는, 오래된 Core2Duo CPU 및 2GB RAM을 가진 노트북이다.
설치된 리눅스 배포판은 Chromixium이다.
현재의 Chromixium 1.0은 우분투 14.04 32bit 위에 크롬북 느낌 나게 이것저것 유틸리티들을 조합해서 만들어 놓은 것이다.  잡스러운 어플리케이션들이 다 빠져있어서, 1GB 용량의 USB 메모리 스틱에 심어넣고 컴퓨터에 설치하는 것이 가능하다.
이런 저성능의 컴퓨터에서 칼큘릭스를 돌려본다는 느낌도 나쁘지 않은 것 같다.

이제 이렇게 환경 구성이 되었으니 시작해 본다.


1. 3D 모델링


FreeCAD의 3D 모델링 방법은 일반적인 Parametric 3D CAD 툴들과 큰 차이는 없다.
Parametric 툴의 특징은, 2D 스케치를 일단 닥치고 먼저 그린다는 것이다.
이때 그리는 2D 스케치 단계에서, 선이나 점 따위 엔티티들의 치수 및 구속조건들을 지정해 주는 것이 Parametric 툴의 기본 개념이다.
FreeCAD에서는 2D 스케치를 그리는 툴이 Part Design 모듈에 들어 있으므로 그것을 이용하면 된다.
2D 스케치에서 각종 구속조건들을 줄 때, CAD 시스템 내부적으로는 주어지는 구속조건들의 기하학적 정합성을 계산해서 모순관계가 없느냐 따위를 실시간으로 판단하게 되는데, 이 일을 해 주는 알고리즘을 보통 "스케치 솔버"라고들 부른다.

현재 상용 CAD 툴들 중에서 만족스러운 성능을 가진 스케치 솔버는 "없다".
현존 스케치 솔버들은 굉장히 멍청해서, 스케치가 조금만 복잡해져도 버벅대거나 스케치가 폭발(?) 해 버린다.
특히 PTC CREO 및 SolidWorks 같은 제품들의 스케치 솔버는 악명이 높다.
UG NX나 CATIA도 별 차이 없이 멍청하다.

개발된지 최소 20~30년 정도 된 제품들인데 이토록 스케치 솔버의 발전이 더딘 것이 놀라울 정도다.

FreeCAD의 스케치 솔버도 조금 사용해 보니 그다지 만족스럽지는 않다.
다만 상용 제품들의 것들과 비교해서 그다지 뒤떨어져 보이지도 않는다.
디테일이나 사용성에 대한 편리성 같은 부분에서 약간의 차이만 있을 뿐인 것 같다.

아무튼 그렇게 스케치 해서 갈고리 모양을 만들고, Extrude 시켜서 입체화 시킨 후에, 모서리에 Fillet을 주고 간단히 마무리했다.

다 그리고 보니, 화면 좌측 Feature Tree의 구성 방식이 PTC CREO에 익숙한 나로서는 좀 이해하기 어려운 체계다.  그냥 그러려니 한다.



 2. 전처리 과정

이제 해석을 하기 위해서, FEM 모듈로 들어간다.


해석하려는 형상을 확실히 해 주기 위해서, 위 그림과 같이 원하는 솔리드가 연두색으로 빛나도록(?) 선택된 상태가 되도록 해 준다.  그렇게 해 주려면, 앞서 모델링한 모델의 트리 구조에서 제일 마지막에 매겨준 Fillet Feature를 위 그림 처럼 마우스로 선택해 주면 된다.
왜 이런 식으로 선택이 되도록 구성되어 있는지는 모르겠으나, 그다지 직관적으로 생각되지는 않는다.  아직 FreeCAD의 체계에 대해 이해가 부족해서 그렇겠지만, 확실한건 이런 사소한 직관성으로 인해서 Professional Tool과의 차이가 갈라지는 것 같다.

아무튼 이렇게 원하는 솔리드 전체가 선택된 상태에서, "A"자 모양의 아이콘을 눌러주거나 또는 메뉴에서  FEM > New Mechanical Analysis 을 선택한다.
그러면 선택된 솔리드에 대한 해석 케이스가 새로 생성된다.


일단은 화면에서 선택된 솔리드가 위 그림처럼 사라진다(?).
 동시에 위 그림의 좌측 Task 영역에서 매쉬 툴이 나타난다.

솔리드가 사라진 이유는, 해당 솔리드의 Visability가 False로 자동 변경되기 때문이다.
매쉬 툴은 당연히 Netgen이다.
컴퓨터의 낮은 사양을 고려하여 매쉬가 약간 성글게 형성되도록  Fineness를 Moderate로 놔 둔다.

참고로, 솔리드를 선택하지 않은 상태에서 New Mechanical Analysis를 해 주면, 매쉬 생성툴이 안 나타난다.  때문에 아무 일도 할 수 없다.  별다른 경고문구도 안 나타나기 때문에 사용자는 자기가 잘못 한 것인줄도 모른다.  때문에 이 과정에서 반드시 솔리드 선택 상태여야 한다는 점을 알고 있는 사용자만이 다음 과정으로 넘어갈 수 있게 된다.  ....  게임인가?

OK버튼을 누르고 약간 기다리면 매쉬가 딱 나타난다.


Netgen이기 때문에 큰 무리없이 왠만하면 잘 나온다.
FEM 모듈에서 별도 아이콘으로 매쉬 생성 아이콘이 있긴 있는데, 이 아이콘은 Netgen이 아니고 SMESH라는 다른 매쉬 생성 툴이다.  SMESH는 Salome에 들어있던 것인데, 그걸 떼어다가 FreeCAD에 내장시키려고 하고 있는 것이다.
다만 아직 개발이 덜 되어서, SMESH로는 에러메시지만 나오고 매쉬 생성은 되지 않는 상태다.
성능좋은 Netgen이 있는데도 불구하고, SMESH를 굳이 집어넣으려는 이유는 당연히 더 간지나는(?) Hexahedron 매쉬를 만들고 싶은 개발자의 욕심 때문일 것이다.



아무튼  이제 노란 공 모양의 아이콘을 누르면, Material 선택 툴이 위 그림처럼 나타난다.
여기서는 Steel 재질로 골랐다.
제공되는 Material 목록을 보면 전부 각국의 표준기호로 표기되어 있어서 뭐가 뭔지 보통 사람은 알기 어렵다만...  잘 살펴보면 중간중간 ABS 라던가 Wood 같은 친숙한 재료 명칭도 보인다.



이제 바운더리 컨디션을 잡아줄 차례다.
FreeCAD FEM 모듈에서는, 매쉬의 면에 선택하는게 아니고, 솔리드 면에다가 바운더리를 선택하도록 되어 있다.   따라서 위 그림처럼 일단 솔리드를 보이도록 해 주고...



또 매쉬를 안 보이도록 해 준다.  그래서 솔리드만 보이도록 해 놓는다.
그래야만 원하는 면을 선택할 수 있다.
역시 이걸 미리 모르는 사용자는 헤맬 것 같은 대목이다.







어떤 경우에는 버그 때문에 마우스로 원하는 면을 아무리 눌러줘도 선택이 안되는 경우가 있다.
그때는 화면상에서 마우스 오른쪽 버튼을 눌러서 나오는 메뉴 중에서 Navigation Styles를 선택해서, 마우스 조작 방식을 CAD naigation 같은 걸로 바꿔준다.
그러면 선택 가능하게 될 가능성이 높아진다.

아무튼 위 그림은 Fixed 면의 경계조건을 선택해 준 것이다.




위 그림은 Forced면의 경계조건을 선택해 준 것이다.
좌측 툴에서 Reverse direction 라디오버튼을 체크해 줘서 힘이 눌러지는 방향이 되도록 해 준다.
그 바로 위의 Direction 에서는 방향을 결정해줄 면을 선택해서 Shear Force로 만들어주는 것도 가능하다.  이번 경우에는 면에 대한 Normal force로 할 것이므로 건드리지 않았다.
그리고 그 바로 위에 Area load를 1000으로 해 준다.
당연히 N 단위다.

그리고 OK하면 끝.


3. FEM 해석
 

이제 솔버를 시작하기 위해 위 그림에서 표시한 아이콘을 누르면, 솔버 툴이 나타난다.
맨 처음 버튼인 Write Caculix Input File을 누른다.
그러면 혼자 꿍얼꿍얼 하면서 잠깐 작업을 한다.




무슨일을 했는지 확인하기 위해 그 밑의 버튼을 누르면, 탐색기가 뜨면서 만들어진 *.inp 파일이 나온다.  칼큘릭스 솔버 인풋 파일이다.
어떤 버전의 리눅스에서는 탐색기가 아니고 에디터가 바로 떠서 해당 파일의 내용을 보여줄 수도 있는데 각자 환경에 따라 동작이 다를 것이다.


 


일단 칼큘릭스 인풋 파일 내용을 뜯어고칠 만한 능력과 의지가 없으므로 그냥 구경만 하고 그대로 둔다.




그리고 마지막 세 번째 버튼을 누르면 솔버가 구동된다.
위 그림처럼 녹색 글씨가 나오면 이상없이 잘 끝난 것이다.
작업 시간은 이번 경우에는 8.6초 걸렸다는 것을 알 수 있다.



4. 후처리(가시화)


해석이 끝났으므로 결과를 보기 위해, Task 탭에서 Model 탭으로 넘어오면 위 그림과 같은 변화를 볼 수 있다.
Displacement 및 MisesStress 항목이 생겼고, 또 후처리기 아이콘이 활성화 되어 있다.
활성화된 후처리기 아이콘을 눌러본다.
 

그러면 위 그림과 같은 툴이 뜬다.
폰미세스 응력 보는 걸로 선택해 준다.
그러면 Max,Ave,Min값이 나오므로 정량적인 판단을 할 수 있는 근거가 된다.

그런데 화면에 아무 변화가 없네??



위 그림 처럼, 아까 안 보이게 해 놨던 매쉬를 보이도록 변경해 준다.
그러면 매쉬의 색깔이 이렇게 변화되어 있는 것을 볼 수 있다.

원래 솔리드와 겹쳐져 있으므로, 변형된 형상 확인이 가능하다.



솔리드 비주얼이 허접하므로, Transparency를 50으로 줘서 반투명하게 해 본다.
좀 보기가 나은 것 같은 기분이 든다.



와이어프레임 선이 거슬리므로, 위 그림에 표시된 아이콘을 눌러서 안 보이는 상태로 변경해 준다.
그럼 보기가 좀 더 나은 것 같다.





이상의 기능이 현재까지 구현되어 있는 FreeCAD FEM 모듈 기능의 거의 전부인 듯 하다.
때문에 "FreeCAD에서 Caculix 돌리는 게 된다는 게 증명됐다"는 의미 정도다.

실제로 쓸만하게 이 FEM 모듈을 개발자가 끈기있게 발전시켜 나가기를 바란다.
보통 개인 오픈소스 개발자가 이런 걸 몇 년 하다가 결국 관두곤 하는 경우가 많기 때문에, 이것이 어느정도까지 발전할지는 예상하기 어렵다.

하지만 FreeCAD 전체적으로 봤을 때, 이런 다양한 기능들이 여러 사람들에 의해 시도되어 빠르게 발전된다는 점은 확실하다.


개인적인 소감은....

FreeCAD 한글화가 꼭 필요하지 않나 싶다.

요즘 기술교육 하는 학교 같은데서 3D 프린터 같은거 들여놓고 한학기 정도 되는 분량의 커리큘럼으로 수업을 만드는 움직임이 많이 보이던데, 3D 프린팅을 하기 전에 먼저 CAD로 모델링을 하는게 순서다.

그런데 상용 3D CAD는 교육용으로 쓰기에는 너무 오버스펙이고 가격도 너무 높아서 비현실적이다.  대안으로 무료로 사용가능한 적당한 툴이 필요한데, 현재까지 이 조건을 잘 만족시키는 툴은 거의 없다.
구글에서 제공하는 스케치업이 있긴 한데....
스케치업은 기본적으로 폴리곤 모델링 기반이기 때문에 한계가 있다.

FreeCAD는 제대로 된 Open Cascade CAD 커널을 사용한 진짜 CAD이기 때문에 실제 현장에서 사용하는 Parametric CAD 시스템의 특성을 그대로 다 가지고 있다.
때문에 FreeCAD를 교육용으로 활용하면 굉장히 좋지 않을까 한다.

(보통 3D CAD 유저들은 하나의 툴만 손에 익히면 다른 툴로 전환하는 것은 매우 쉽다.
모델링 개념이 비슷비슷 하기 때문이다.  서로 경쟁하면서 좋은 특성들을 주고받으면서 발전했기 때문에 그렇다.)


한국에서 이런 좋은 오픈소스 솔루션을 교육용으로 적극 활용 안하는 이유는 간단하다.
학교 선생님들이 각종 업무에 시달리면서 관료주의에 찌들어가기 때문에, 초년의 의욕을 나이가 들어가면서 점차 상실해서 결국 아무것도 안하게 되기 때문이다.
새로운 기술, 새로운 시도, 더 발전적인 연구 같은 것을 이야기하면 아마 교사 사회에서 왕따 비슷하게 당하는 분위기일지도 모르겠다. (교사 사회를 잘 몰라서 그냥 억측일 뿐임)

아무튼 FreeCAD 국내 유저가 많아졌으면 좋겠고, 유저그룹도 자연적으로 발생하였으면 좋겠다 하는 바램이 생긴다.

대략 5~10년 정도 계속 업데이트가 이루어지면 아마 굉장한 완성도를 가진 괴물 툴이 되어 있을지도 모르겠다.




댓글 없음:

댓글 쓰기