1. CacluliX 소개
CalculiX는 오픈소스 유한요소해석툴 중 하나이다. 해석 코드로 CalculiX CrunchiX(CCX) 를 제공하고 전/후처리기로 CalculiX GrahiX(CGX) 를 제공한다. 현재 2.6.1 버전까지 배포 중이며 아래 사이트에서 다운로드가 가능하다.
야후에 사용자 포럼이 개설 되어 있으며, 질문을 하면 실제 개발자가 친절히 답변을 해주기도 한다.
http://groups.yahoo.com/neo/groups/calculix/info
CCX는 Abaqus의 input format을 따르기 때문에 Abaqus에 친숙한 사용자라면 CCX를 사용하는데 큰 무리가 없다. 아주 엄밀한 문제나, 굳이 Abaqus로 해석하지 않는 한 믿을 수 없다고 하는 상사만 아니라면 연구목적으로는 충분히 사용이 가능하리라고 생각된다. 하지만 다음을 반드시 유의해야 한다.
첫째, 경험상 수렴성이나 해석 시간에서는 상용코드인 Abaqus에 많이 뒤떨어진다. 둘째, 해석결과에서 Abaqus와 차이가 발생할 수 있는데. 주로 접촉 문제에서 발생한다. 또한, 단순한 굽힘 문제에서 2차요소를 사용할 경우 abaqus와 티끌만큼의 오차도 없지만 1차요소를 사용할 경우에는 무지막지하게 큰 차이를 확인할 수 있는데, 이 것은 abaqus의 후처리 문제일 뿐, 실제로 각 적분점에서의 결과를 비교해 본다면 주목할만한 차이가 없다는 것을 알 수 있다. 만약 이것이 귀찮다면 abaqus의 field option 메뉴에 들어가서 스칼라 처리 옵션을 바꿔보자. 차이가 확연히 줄어드는 것을 확인할 수 있다. 셋째로 input의 양식만 같을 뿐 실제로 사용하는 데에는 미묘하게 차이가 있다. 넷째로 Shell 요소를 조금 독특한 방식으로 계산한다.
사용을 위해서는 리눅스 환경이나 Cygwin에 CCX를 컴파일 하여 사용하는 것을 추천한다. 그 이유는 실행가능한 버전(executable)을 받을 경우 종속성 문제 때문에 실행되도록 만드는게 더 피곤할 수가 있다. 컴파일하는 방법이 어렵지 않으니 공식 사이트의 install guide를 참고하거나. 이 글을 참고하여 컴파일 하면 문제가 없을 것이다. 혹은 아래의 윈도우에서 실행 가능한 버전을 사용하는 것도 좋다. 윈도우용 버젼은 무료로 배포중이며 Abaqus-CalculiX input 컨버터와 기술지원을 포함하는 프리미엄 버전은 유료이다. 몇만원 정도인 듯.
http://www.bconverged.com/products.php
calculixforwin 도 sourceforge에서 받는 것이 가능하다.
http://www.calculixforwin.com/
2. CalculiX 설치 방법
CCX 설치 방법은 libremechanics에 상세한 설명이 있다.
http://www.libremechanics.com/?q=node/9
설치를 위해 아래 소스들을 받는다. 계산을 빠르게 하려면 십몇만원 정도 하는 Intel MKL을 구매해서 사용하면 좋다. 그래도 돈 쓰기는 싫으니까 기본 설치를 해보자.
각 소스들의 압축을 풀어 준다. ARPACK patch는 가장 나중에 풀어주면 알아서 덮어 쓴다.
$ tar xzvf 파일이름
2.1. SPOOLES 컴파일
아래 경로에서 drawTree.c 라는 파일 이름을 draw.c 로 바꾸어 준다.
/usr/local/spooles.2.2/Tree/src/makeGlobalLib
아래 경로에서 Make.inc 파일을 에디터로 열고 C컴파일러 주소를 바꿔준다. 보통 패스가 걸려 있으면 그냥 cc라고 해도 상관 없다.
/usr/local/spooles.2.2/Make.inc
CC = /usr/lang-4.0/bin/cc
↓
CC = cc
라이브러리를 컴파일하고 멀티 스레드 라이브러리도 컴파일 한다.
$ sudo make lib
$ cd MT/src/
$ sudo make
2.2. ARPACK 컴파일
아래 경로의 ARmake.inc를 에디터로 열어서
/usr/local/ARPACK/ARmake.inc
ARPACK 소스 파일이 있는 위치를 알려준다.
home = $(HOME)/ARPACK
↓내가 풀어 놓은 주소로 바꿔주자
home = /usr/local/ARPACK
플랫폼을 linux로 바꾼다.
PLAT = SUN4
↓
PLAT = linux
FC = f77
↓
FC = gfortran
포트란 컴파일 할때 붙일 플래그를 바꿔준다.
FFLAGS = -O -cg89
↓
FFLAGS = -O2
Make가 있는 위치를 바꿔준다. 패스가 걸려있으면 그냥 make로 바꿔도 무방
MAKE = /bin/make
↓
MAKE = make
아래 경로의 second.f 파일을 에디터로 열어서 앞에 *을 붙인다.
In /usr/local/ARPACK/UTIL/second.f
EXTERNAL ETIME
↓
*EXTERNAL ETIME
ARPACK로 돌아가 라이브러리를 만든다.
$ sudo make lib
2.3. CCX 컴파일
아래 경로로 가서 Makefile을 에디터로 연다. 다른 부분이 있으면 아래와 같이 바꿔준다. spooles와 arpack라이브러리 위치는 컴파일 했던 곳으로 지정해준다. 멀티스레드로 문제를 풀고 싶으면 -DUSE_MT 는 꼭 붙여준다.
/usr/local/CalculiX/ccx_2.6/src/Makefile
CFLAGS = -Wall -O3 -I ../../../spooles.2.2 -DARCH="Linux" -DSPOOLES -DARPACK -DMATRIXSTORAGE -DUSE_MT
FFLAGS = -Wall -O3
CC=cc
FC=gfortran
.c.o :
(CC)(CFLAGS) -c <.f.o:(FC) (FFLAGS)−c<
include Makefile.inc
SCCXMAIN = ccx_2.6.c
OCCXF = (SCCXF:.f=.o)OCCXC=(SCCXC:.c=.o)
OCCXMAIN = (SCCXMAIN:.c=.o)DIR=../../../spooles.2.2LIBS= (DIR)/MT/src/spoolesMT.a \
(DIR)/spooles.a ../../../ARPACK/libarpacklinux.a −lpthread−lmccx2.6MT:(OCCXMAIN) ccx_2.6_MT.a (LIBS)./date.pl;(CC) (CFLAGS)−cccx2.6.c;(FC) -Wall -O3 -o @(OCCXMAIN) ccx_2.6_MT.a (LIBS)ccx2.6MT.a:(OCCXF) (OCCXC)arvr@ $?
ccx의 src 폴더에서 아래 명령어로 컴파일.
$ sudo make
2.4. 실행 파일 복사
ccx_2.6.1 이라는 파일이 생성 되었으면 이 파일을 /usr/local/bin 의 위치에 ccx라는 이름으로 복사한다.
$ cp ccx_2.6.1 /user/local/bin/ccx
쉘에 ccx라고 쳐 본다.
$ ccx
실행이 되지 않으면 /usr/local/bin 으로 가서 권한을 바꿔준다. 남이 쓸거 아니면 그냥 777로 때려준다.
cd/usr/local/bin chomod ccx 777
다시 실행해보면 잘 돌아 간다. 다음과 같이 스레드 넘버를 지정하고 문제를 풀면 멀티스레드로 수행하고 spooles.out에 spooles로 행렬을 풀 때 스레드 몇개를 썼는지 기록해준다.
2.5. 실행
다음과 같이 실행한다.
export OMP_THREAD_NUM=#
$ ccx -i jobname
매번 스레드 넘버를 써주기 귀찮으면 PATH에 넣어버리던지 아니면 쉘 스크립트를 써주자.
최근댓글