일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 그래프
- 물리학
- 나노포토닉스
- 메타표면
- Photolithography
- 토막잭슨
- Jackson Electrodynamics
- 우분투
- TDDFT
- 겨울떨개
- 광자학
- 자연
- 학술지
- 초록빛논문
- 리눅스
- octopus
- 메타물질
- 논문
- 자연 나노기술
- 3분논문
- 플라즈몬
- 양자 플라즈몬
- 자연 광자학
- 전자기학
- 과학
- metasurface
- Linux
- nature photonics
- gnuplot
- impact factor
- Today
- Total
과꾸로
[Octopus] TDDFT 프로그램 설치하기. 수소원자 에너지 준위 구하기. 본문
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
잘 된다.
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
# ./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
그러고나서 다시 메이크.
잘 되는 것 같다....
일리가 없지.
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
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일
과꾸로
'연구자료' 카테고리의 다른 글
[Vim-LaTeX] 윈도우즈에서 Vim으로 LaTeX 사용하기. MikTeX (2) | 2017.09.18 |
---|---|
[Vim] Windows용 gvim에서 .vimrc 설정: _gvimrc, _vimrc (0) | 2017.09.04 |
[FDTD] Lumerical FDTD에서 Bloch mode profile 그림 그리기 (0) | 2017.07.20 |
[GNU Octave] 16bit Tiff, 32bit Tiff 가져오기. GraphicsMagick (0) | 2017.07.10 |
[Octopus] TDDFT 계산 프로그램, Linux home directory에 설치하기 (0) | 2017.07.05 |