Home Science Coding Design Etc. AboutMe

VASP DFT 계산을 통해 Optimization (구조 최적화) 계산 하는 법

Dec. 3, 2019   /   5 mins read   /  

This post was written with reference to vasp.atsite.


Density Functional Theory (DFT, 밀도범함수이론) 계산 툴 중에는 범용적으로 사용되는 Vienna Ab initio Simulation Package (VASP) 가 있습니다. 이름에도 나와있듯 VASP는 제 1원리 계산 (Ab initio) 방법을 다루는데요. 제 1원리 계산은 실험을 통한 경험적 값들을 고려하지 않고, 수식들을 이용하여 계산하는 방법을 뜻합니다.


저는 로컬 환경으로는 Window를 사용 중이며 SSH로는 PuTTY를 통해, 원격으로 서버에 접근하여 사용하고 있습니다. 서버는 Linux 기반입니다. DFT 계산 툴로는 VASP (공식 홈페이지: https://vasp.at)를 이용해 진행하였습니다.


DFT 계산을 통해 할 수 있는 것들?

일반적으로 DFT 을 통해서 다음과 같은 예시들을 계산 할 수 있습니다.

  • Pt(111) 면에 CO 분자가 어떻게 흡착되는지? Fig.1a
  • Monolayer MoS2 의 electronic structure (전자 구조) 는 어떻게 되고, band gap (밴드갭, 띠틈) 은 얼마인지? Fig.1b
  • C2H5OH (에탄올) 이 산화될 때 $$ \Delta H$$ 은 얼마인지?
  • C28H31N2O3Cl (Rhodamine 6G) 의 전자 분포는 어떻게 되는지? Fig.1c
  • Graphene (그래핀) 의 lattice parameter 는 얼마인지? Fig.1d

Fig 1. DFT로 계산할 수 있는 예시들


이처럼 DFT를 이용하면 다양한 계산들을 수행할 수 있는데요. 이 글에서는 특정 구조에서의 가장 안정한 (최적화된) 구조를 구하는 Optimization 계산에 대해 알아보겠습니다.

특정 결합 (또는 상호작용) 이 형성 될 때 전하의 분포가 어떻게 바뀌는 지에 대해 분석하는 Charge Density Difference Plot (Mapping) 은 이 글에 소개해두었습니다.



계산하기 전에 기본적으로 필요한 사전 조사들

우선 Optimization 은 대부분의 경우 당연히 필수로 거쳐야하는 과정입니다. 여기서는 계산에 들어가기 앞서 전반적으로 고려해야할 사항들을 얘기하려고 합니다.

  • 어떤 계산을 해야 하나?

    • optimization, charge, spin, DOS, bandgap, etc.
    • 특정 구조에서 가장 안정한 구조를 찾거나,
    • 물질의 밴드구조를 구해서 금속성인지, 절연체성인지, 반도체성인지. 밴드갭은 얼마나 되는지,
    • 전하 분포가 어떻게 이루어져서 반응이 어떻게 진행이 될 지 등을 예측한달지,
    • Density of state (DOS)를 확인해서, 자기성을 확인한달지 등등...
  • 어떤 물질인지?

    • element, molecule structure, metal surface, ...
    • electric property (insulator? metallic? semiconductor?)
    • space group, size, vacuum slab, ...
  • 구조 그리기 - 격자 상수 (Lattice parameter)

  • 공간 군 (Space group) : 일종의 점 군 (point group)과 비슷한 개념으로써, 결정성 구조를 분류한 것
  • 참고 논문 검색
    • Keyword: Density functional theory, ab initio, first-principle, electronic structure, VASP 등
    • 키워드 + 물질명을 넣는다든지, 자기가 하려는 계산에 대한 논문을 Google scholar에 검색
    • 잘 찾아보면 이미 다른사람들이 계산을 한 경우도 있으니, 꼼꼼히 검색해볼 것! - 이미 publish가 된 논문이면 좋은 참고자료가 될 수 있다.


사전 조사 결과, 구조 최적화가 필요하다면 다음 과정을 진행하면 됩니다.


VASP에서 Optimization 계산 하기

VASP (Vienna Ab initio Simulation Package)에서 Optimization을 하기 위해서는 기본적으로 4+1개의 파일이 필요

  • INCAR
  • KPOINTS
  • POSCAR
  • POTCAR
  • 실행파일 (~.sh, batch files...)


INCAR

what to do and how to do it

어떤 계산을 할지, 어떻게 할지에 대한 정보가 담겨있는 파일. 다양한 parameter 값들(tag)이 있고, 이 값을 '=' 을 통해 지정해 줌.

INCAR

! This is example INCAR file
!--- Basic Setting -------------------------!
 ISTART   = 0
 PREC     = accurate
 NELMIN   = 6
 ENCUT    = 500
 ISMEAR   = 0
 SIGMA    = 0.05
 ALGO     = fast
 LREAL    = auto
 NSIM     = 4
 LMAXMIX  = 4
 EDIFF   = 1e-3
 EDIFFG  = -0.1
 NCORE   = 4
 ISIF    = 2
 NSW     = 100
 IBRION  = 2
!--- vdW correction ------------------------!
 IVDW  = 11
!--- Spin polarized calculation ------------!
 ISPIN = 2


POSCAR

이온들의 위치 (position)을 지정해주는 파일.

POSCAR

C  Ni
 1.000000000000000
     4.2712372914648610    0.0000000000000010    0.0000000000000000
     0.0000000000000000   12.3300000000000000    0.0000000000000000
     0.0000000000000000    0.0000000000000000   25.0000000000000000    
! Unit cell 구조
   C    Ni
    4    2        ! 탄소 4개 / 니켈 2개
Direct
  0.0125078261802145  0.0000034556703279  0.0644459556532813
  0.5123681692117822  0.1000335100346497  0.0636163358416558
  0.1785030252042110  0.1000378514365216  0.0636403393794355
  0.6786323092638339  0.0000426395663475  0.0644515581286740
  0.0123335614065641  0.2000413800678819  0.0628840403586159
  0.5124605797770893  0.2999999999999972  0.0625954945140051   
 ! 각 원소의 위치. 이 경우 차례대로 1번부터 4번까지 탄소, 5번 6번이 니켈에 해당된다.


KPOINTS

k-points의 설정값을 지정하는 파일. 만약 2번째 줄에 0을 넣으면 Monkhorst-Pack's technique 을 통해 자동으로 k-points 값들을 생성해준다.

KPOINTS

Title
 0
G  ! auto gen
 6  12  1
 0  0  0


POTCAR

각 원소(element)의 정보를 담는 파일. pseudopotentials를 포함하여 mass, valence electron 등이 담겨있다. 보통 reference 을 활용하며, 별도의 수정은 하지 않습니다.

POTCAR

  PAW_PBE C 08Apr2002
   4.00000000000000
 parameters from PSCTR are:
   VRHFIN =C: s2p2
   LEXCH  = PE

~~~

  0.000000000000E+00  0.000000000000E+00
 End of Dataset


실행파일 (.sh, etc.)

앞서 소개한 4가지 파일 (INCAR, KPOINTS, POSCAR, POTCAR)이 다 준비되면 계산을 진행할 수 있습니다. 보통 많은 연산량을 요구하는 경우 병렬식으로 core를 여럿 동원해야 하므로 그에 맞는 script가 필요한데요, 이 부분은 환경마다 script가 다르므로 생략하겠습니다.




결과 처리

대부분의 결과는 OUTCAR 파일에 저장되며, 경우에 따라 다른 파일들을 참고하면 됩니다. 구조에 어떠한 변화가 생겼는 지 (=원자 위치) 보려면 CONTCAR 파일을 참고하면 됩니다. 에러 관련한 것은 보통 stdout에 담기구요, 하나의 SCF 계산 동안 에너지 변화나, dipole moment 등의 양상을 보려면 OSZICAR 파일을 참고하면 됩니다.


여기까지 VASP를 통한 Optimization 계산을 알아보았는데요. 이를 통해 특정 구조에서 가장 안정한 (최적화된) 구조를 구할 수 있습니다.

물론, 이 외에도 다양한 정보를 DFT 계산이 끝나면 얻을 수 있는데요, 혹시 궁금하신 것 있으면 댓글이나 이메일 주시면 제가 아는 범위에서 답변 드리도록 하겠습니다. 읽어주셔서 감사합니다. 😀