과꾸로

[Octopus] Tutorial 따라하기. 질소원자, 메탄분자 에너지 계산 본문

연구자료

[Octopus] Tutorial 따라하기. 질소원자, 메탄분자 에너지 계산

(gguro) 2017. 9. 25. 18:07

[Octopus] Tutorial 따라하기. 질소원자, 메탄분자 에너지 계산


Octopus라는 Time-Dependent Density Functional Theory (TDDFT) 계산 프로그램을 설치했었다. (설치후기


설치하고 나서 Tutorial 첫번째 예제인 수소원자 에너지 준위 구하는 걸 해 보았다. 그리고 잠시 손을 놓고 있다가 다시 마음 먹고 Tutorial을 따라가보기 시작했다. (Octopus Tutorial 링크: http://octopus-code.org/wiki/Tutorial)



Tutorial 2. 질소 원자 


링크: http://octopus-code.org/wiki/Tutorial:Nitrogen_atom


1번 예제와 마찬가지로 ground state에서의 에너지 준위를 구하는 문제이다. 원자의 종류만 수소에서 질소로 바뀌었다. 


이 예제에서는 Spacing이라는 것에 대해 알려주는데, 그게 일반적인 다른 시뮬레이션의 grid size, mesh 같은 거라고 생각하면 된다. 즉 Spacing이 작으면 계산을 더 촘촘하게 하고, 그만큼 정확하지만 시간이 오래 걸린다는 뜻.


  # Spacing: mesh, grid size


bashell 의 environment에 변수를 넣고 loop를 돌리는 방법도 함께 알려준다. 


spacing.sh 라는 shell script 파일을 만들고 실행할 때에는 source spacing.sh 를 입력해주면 된다.


계산 결과를 그래프로 그려보았다.



Spacing이 커짐에 따라 오차가 커지는 걸 보여주는 그래프이다. 스페이싱의 단위는 옹스트롱.




Tutorial 3. 메탄 분자



그 다음 예제는 메탄(CH4)이다. 이번에는 Spacing과 더불어서 Radius에 따라 어떻게 결과가 달라지는지를 알아본다. Radius는 전체 계산공간의 크기라고 보면 된다.

 # Radius: 계산공간. computation space.


일단 앞에서 했던 것처럼 spacing에 따라 total energy가 어떻게 달라지는지 확인해본다.


Spacing을 0.18 A 보다 작게 줄여도 energy 값이 0.1 eV 보다 차이가 적게 난다. 그러니 0.18 A 으로 계산을 하도록 하자.




이제 계산 공간인 Radius를 바꿔보자. 그러기 위해서 radius.sh 라는 스크립트를 짰다.


#!/bin/bash

echo "#Radius    Total energy" > radius.log

list="2.5 3.0 3.5 4.0 4.5 5.0"

export OCT_PARSE_ENV=1 

export OCT_Spacing=$(echo 0.18*1.8897261328856432 | bc)

for Radius in $list 

do

 export OCT_Radius=$(echo $Radius*1.8897261328856432 | bc)

 octopus >& out-Radius-$Radius

 energy=`grep Total static/info  | head -1 | cut -d "=" -f 2`

 echo $Radius $energy >> radius.log

 rm -rf restart

done

unset OCT_Radius


다 돌리고 나서 생각해보니 unset OCT_Spacing 을 빠뜨렸다는 걸 깨달았다. 뭐 변수 하나 정도 환경에 남겨두어도 별 문제 없겠지. 그리고 저 스크립트에 보이는 1.88972.... 라는 숫자는 흠... 눈치챈 사람이 있을까? 옹스트롱을 보어 반지름으로 바꿔주는 값이다. 즉 1 A = 1.88972 r_Bohr. 문어에서 atomic unit을 기본 단위로 사용하는데 그 때 길이의 단위가 Bohr radius 이다. 반대로 1 r_Borh = 0.52917 A. 


그럼 Radius에 따라서 total energy가 어떻게 달라지는지 확인해보자. 





Radius가 너무 작으면 계산 결과가 달라진다. 메탄 분자를 충분히 포함할 수 있는 크기로 Radius를 잡아야 하는데 여기서는 그 값이 3.5 A.




차근차근 Tutorial을 따라가고 있는데, Octopus는 참 잘 만든 프로그램이라는 생각이 든다. 체계적이고 설명도 깔끔하다. Optical-response calculations까지 따라가고 나면 내가 하고 싶은 것들을 직접 해볼 수 있을 것 같다. 



덧붙여: 리눅스에서 > 와 >> 의 차이를 처음으로 알았다. 헐... ㅡㅡ;; >는 새로 쓰기. >>는 있는 파일 뒤에 이어서 쓰기. 그리고 &> 는 warning 같은 것까지 함께 넣어준다. octopus 돌릴 때는 &>로 하는 것이 좋음.


2017년 9월 25일

과꾸로



Comments