과꾸로

[Octopus] TDDFT 프로그램 설치하기. 수소원자 에너지 준위 구하기. 본문

연구자료

[Octopus] TDDFT 프로그램 설치하기. 수소원자 에너지 준위 구하기.

(gguro) 2017. 8. 23. 19:23

Time-Dependent Density Functional Theory 계산 도구인 Octopus를 깔아본다. 예전에도 한 번 깔았으니 이번엔 좀 쉽게 할 수 있겠지. (예전글: http://yongsop.tistory.com/57)



설치하려는 서버는

# uname -a

Linux SERVERNAME 4.4.0-53-generic #74-Ubuntu SMP Fri Dec 2 15:59:10 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux



1.

일단 gcc gfortran을 설치하고 시작.


# apt-get install gcc

# apt-get install gfortran


그리고 octopus-7.1을 받아서 설치 (설치매뉴얼 위키)


./configure를 하면 에러가 난다. libxc를 설치하라고 함.




2.

libxc 3.0 설치


# ./configure

# make 

# make install


그런데 ./configure 이후에 make를 하니 make가 없다고 나온다. 왜 인지 모르겠으니 예전에 했던 것처럼 autoconf를 먼저 깐다. 

# apt-get install autoconf


여전히 make가 안 된다.


# ./configure

...

configure: creating ./config.status

config.status: creating Makefile

config.status: creating xc_version.h

config.status: creating src/Makefile

config.status: creating testsuite/Makefile

config.status: creating build/Makefile

config.status: creating build/libxc.pc

config.status: creating build/libxc.spec

config.status: creating config.h

config.status: config.h is unchanged

config.status: executing depfiles commands

config.status: executing libtool commands


# make

-bash: make: command not found


make라는 걸 깔아야 되는 것 같다. make도 깔아야 되는 거였구나. 그냥 있는 게 아니었네...

# apt-get install make

잘 깔렸다.

이제 다시 libxc-3.0.0으로 돌아와서

# make
# make install


잘 된다. 



3. 

그럼 다시 문어로 돌아와서


./configure --with-libxc-prefix=/opt/etsf


여기까지 하면 원래 BLAS가 없다고 나오게 되어 있다. 그게 정해진 시나리오.


configure: error: could not find required BLAS library


자 이제 BLAS를 깔자.


# apt-get install liblapack-dev


BLAS 됐고




4. 

다시 octopus로 돌아와서 


./configure --with-libxc-prefix=/opt/etsf


역시 시나리오대로 gsl 어쩌고가 없다고 나옴. 무슨 Scientific library임.


# apt-get install libgsl0-dev


설치하고 다시 문어 컨피규어. 이번엔 예상대로 fftw. 




5.

역시나 우리의 유명한 Steven G. Johnson 횽이 만든 fftw를 http://www.fftw.org/ 에서 잘 받아서 깔도록 하자. v 3.3.6을 깔자. 


# tar xzf fftw-3.3.6-pl2.tar.gz

# cd fftw-3.3.6-pl2

# ./configure

# make

# make install


잘 된 것 같다. 가 아닌가.....

fftw를 못 찾는다고 계속 나와서 libxc와 같은 방법으로 fftw library가 있는 곳을 지정해주었다.

# ./configure --with-libxc-prefix=/opt/etsf --with-fftw-prefix=/usr/local

# make



뭔가 에러가 나는데 g++이 없다고 하는 것 같다.


g++ -DHAVE_CONFIG_H -I. -I../..  -I../../src/include -I../../src/include -I../../external_libs/spglib-1.5.2/src -I../../liboct_parser -I/usr/include  -I/usr/local/include -DSHARE_OCTOPUS='"/usr/local/share/octopus"'     -c -o cublas.o cublas.cc

../../build-aux/depcomp: line 772: exec: g++: not found

Makefile:684: recipe for target 'cublas.o' failed

make[3]: *** [cublas.o] Error 127

make[3]: Leaving directory '/usr/local/src/octopus-7.1/src/basic'

Makefile:448: recipe for target 'all-recursive' failed

make[2]: *** [all-recursive] Error 1

make[2]: Leaving directory '/usr/local/src/octopus-7.1/src'

Makefile:495: recipe for target 'all-recursive' failed

make[1]: *** [all-recursive] Error 1

make[1]: Leaving directory '/usr/local/src/octopus-7.1'

Makefile:436: recipe for target 'all' failed

make: *** [all] Error 2


그럴 땐 그냥 설치 

# apt-get install g++

그러고나서 다시 메이크.


잘 되는 것 같다....


일리가 없지.



6.

뭔가 이상한 에러에 걸렸다. 메이크를 하니 이런 게 나왔다. 


 reference to `operator new(unsigned long)'

../../src/math/libmath.a(spline_low.o):(.eh_frame+0x8b): undefined reference to `__gxx_personality_v0'

../../src/basic/libbasic.a(write_iter_low.o): In function `write_iter_clear_':

write_iter_low.cc:(.text+0x367): undefined reference to `std::cerr'

write_iter_low.cc:(.text+0x36c): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'

write_iter_low.cc:(.text+0x377): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'

write_iter_low.cc:(.text+0x384): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'

write_iter_low.cc:(.text+0x38f): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'

write_iter_low.cc:(.text+0x39c): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'

write_iter_low.cc:(.text+0x3a1): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)'

write_iter_low.cc:(.text+0x3a9): undefined reference to `std::ostream::operator<<(std::ostream& (*)(std::ostream&))'

../../src/basic/libbasic.a(write_iter_low.o): In function `write_iter_flush_':

write_iter_low.cc:(.text+0x431): undefined reference to `std::cerr'

write_iter_low.cc:(.text+0x436): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'

write_iter_low.cc:(.text+0x441): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'

write_iter_low.cc:(.text+0x44e): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'

write_iter_low.cc:(.text+0x459): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'

write_iter_low.cc:(.text+0x466): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'

write_iter_low.cc:(.text+0x46b): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)'

write_iter_low.cc:(.text+0x473): undefined reference to `std::ostream::operator<<(std::ostream& (*)(std::ostream&))'

../../src/basic/libbasic.a(write_iter_low.o): In function `__static_initialization_and_destruction_0(int, int)':

write_iter_low.cc:(.text+0xc1f): undefined reference to `std::ios_base::Init::Init()'

write_iter_low.cc:(.text+0xc2e): undefined reference to `std::ios_base::Init::~Init()'

../../src/basic/libbasic.a(sort_low.o): In function `void sort2<int>(int, int*, int*)':

sort_low.cc:(.text._Z5sort2IiEviPT_Pi[_Z5sort2IiEviPT_Pi]+0xb6): undefined reference to `operator new[](unsigned long)'

sort_low.cc:(.text._Z5sort2IiEviPT_Pi[_Z5sort2IiEviPT_Pi]+0x164): undefined reference to `operator delete[](void*)'

../../src/basic/libbasic.a(sort_low.o): In function `void sort2<double>(int, double*, int*)':

sort_low.cc:(.text._Z5sort2IdEviPT_Pi[_Z5sort2IdEviPT_Pi]+0xb6): undefined reference to `operator new[](unsigned long)'

sort_low.cc:(.text._Z5sort2IdEviPT_Pi[_Z5sort2IdEviPT_Pi]+0x16a): undefined reference to `operator delete[](void*)'

collect2: error: ld returned 1 exit status

Makefile:615: recipe for target 'octopus' failed

make[3]: *** [octopus] Error 1

make[3]: Leaving directory '/usr/local/src/octopus-7.1/src/main'

Makefile:448: recipe for target 'all-recursive' failed

make[2]: *** [all-recursive] Error 1

make[2]: Leaving directory '/usr/local/src/octopus-7.1/src'

Makefile:495: recipe for target 'all-recursive' failed

make[1]: *** [all-recursive] Error 1

make[1]: Leaving directory '/usr/local/src/octopus-7.1'

Makefile:436: recipe for target 'all' failed

make: *** [all] Error 2


뭔가 기본적인 라이브러리가 없는 것 같은데. 

혹시나 해서 다시 컨피규어 하고 메이크 하고 메이크 인스톨하니 된 것 같다. ㅋㅋㅋㅋ  don't know why but it works now


7. 

root로 실행하면 좀 그러니까 유저 하나 만들어서 실행해봐야겠다.


# adduser gguro


그리고 .vimrc.bashrc 좀 바꿔주고,


이제 새로 만든 사용자로 옥토푸스를 실행해보자.


8.

문어 제대로 해보자.


역시 시작은 수소원자 튜토리얼.


CalculationMode = gs


%Coordinates

 'H' | 0 | 0 | 0

%


vi를 열고 위의 내용을 긁어 붙인 다음에 파일 이름을 inp로 저장. test.inp 아니고!!! 그냥 inp !!!!!


그리고 같은 디렉토리에서 문어를 실행.


$ octopus



실행 결과




성공!!!!


하위 디렉토리인 restart/gs 에 들어가보면 *.obf라는 파일이 잔뜩 있다. 그리고 grid, mesh 등의 파일도 있다. 계산 설정 파일들인 것 같다.


계산 결과는 static/info 에 있는데 대략 다음과 같다.


Eigenvalues [H]

 #st  Spin   Eigenvalue      Occupation

   1   --    -0.233015       1.000000


Energy [H]:

      Total       =        -0.44637959

      Free        =        -0.44637959

      -----------

      Ion-ion     =         0.00000000

      Eigenvalues =        -0.23301533

      Hartree     =         0.28415395

      Int[n*v_xc] =        -0.30429902

      Exchange    =        -0.19375646

      Correlation =        -0.03975286

      vanderWaals =         0.00000000

      Delta XC    =         0.00000000

      Entropy     =         1.38629436

      -TS         =        -0.00000000

      Kinetic     =         0.41780781

      External    =        -0.91483203

      Non-local   =         0.00000000



이제 공부를 좀 더 해봐야겠다.



2017년 8월 23일

과꾸로

Comments