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

3 mins read

Density Functional Theory (DFT, 밀도범함수이론) 계산 소프트웨어에는 Vienna Ab initio Simulation Package (VASP),[1] Quantum ESPRESSO, Siesta, FHI-aims 등이 있습니다. 오늘 소개해드릴 소개해드릴 DFT 계산은 VASP를 기준으로 진행하도록 하겠습니다.

DFT 계산 소프트웨어 트렌드

최근 Google citation을 통해 집계한 트렌드(2022년 기준)를 아래에 나타내었습니다.[2] 분자 수준의 계산 소프트웨어에서는 화학분야에서 널리 쓰이는 Gaussian 을 선두로, VASP, Gromacs, LAMMPS 등이 뒤를 쫓고 있습니다.


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

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

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


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

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

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



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

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



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


VASP에서 Optimization 계산 하기

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


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 계산이 끝나면 얻을 수 있는데요, 혹시 궁금하신 것 있으면 댓글이나 이메일 주시면 제가 아는 범위에서 답변 드리도록 하겠습니다. 읽어주셔서 감사합니다. 😀

Reference

[1] VASP wiki

[2] Atomistic simulation engines

Content is available under GNU Free Documentation License 1.2.