02. 물리학

Introduction to VASP for DFT Simulation

amadeus-system 2025. 1. 2. 23:44
  • Date : 2022-04-02
  • Last modified date : 2022-06-27

Introduction to VASP for DFT Simulation


VASP

이번 글에서는 계산과학/계산화학 분야의 전공자들이 자주 사용하는 물질 시뮬레이션 도구인 VASP(The Vienna Ab initio Simulation Package)에 대해 알아보고자 한다.

VASP는 제일원리(Ab-initio) 계산에 특화된 프레임워크이다. 여기서 "제일원리"라는 표현은, 실험적인 값을 고려하지 않고 순수하게 양자역학적 이론에 기반하여 계산한다는 뜻이다.

나는 일반적인 작업환경은 Window를 사용하고, DFT 계산과 같이 서버에서 작업을 할 때는 Putty를 통해 원격으로 연구실의 서버 또는 KISTI Nurion과 같은 슈퍼컴퓨팅 서버에 접속해서 시뮬레이션을 하는 경우가 많다. 이에 대해 간단히 설명하고자 한다.


What Can We Do with VASP?

VASP로 할 수 있는 시뮬레이션의 예시는 다음과 같다.

  • Na 원자가 결합되어 있는 표면에 K(포타슘)이 특정한 밀도로 결합될 때, 표면의 일함수(Work Function)이 어떻게 변화하는가?
  • SrTiO3와 같은 페로브스카이트의 전자구조가 어떻게 되고, Density of State (DOS), Projected DOS(PDOS)는 어떻게 되어 있는가?
  • 결정구조에 일부러 Defect을 발생시켰을 때, 자연스러운 입자의 구조는 어떻게 될 것인가? (Geometric Optimization)

VASP를 활용하여 DFT 시뮬레이션을 하면, 물질에 대해 우리가 상상할 수 있는 다양한 상황들에 대해 이론적인 예측을 할 수 있게 된다.

사실 대부분의 계산물리/계산화학 대학원생이라면 VASP에 대해 나보다 더 많이 알 것이므로 그런 분들에게 이 글은 별로 의미가 없을 것 같다! 이제 막 연구실에 들어온 학부생 레벨에서 조금이라도 간단히 물질을 시뮬레이션해서 빠르게 논문을 쓰고 졸업하고 싶은 사람들에게는 조금 도움이 될 것 같다. 어쩌면 졸업연구 따위는 3일만에 뚝딱! 하고 끝낼 수 있을지도 모른다.


so, What is VASP?

VASP는 "The Vienna Ab initio Simulation Package"의 약자로, DFT 시뮬레이션을 편리하게 도와주는 계산과학 프레임워크이다.

DFT 계산을 도와주는 많은 프레임워크들이 이미 유료/무료로 배포되어 있지만 진지하게 계산과학을 사용하는 대부분의 연구실에서는 VASP를 사용하는 것으로 알고 있다.

VASP를 사용하는 이유는, 우선 이것이 유료(!?) 프레임워크이기 때문에 다른 무료 프로그램들에 비해 굉장히 계산속도가 빨라서 대규모 계산을 수행하기 편하기 때문이다. 또한 다른 프레임워크에 비해 사용법이 쉽고 초보자를 위한 Wiki가 있기 때문에, 혼자 공부하기에 편리하다는 것도 장점이다.

밑에서 자세히 설명하겠지만 3~4학년 정도의 물리/화학/재료관련 전공 학부생도 물질의 구조에 대한 약간의 직관만 갖고 있다면, 간단한 DFT 계산은 쉽게 할 수 있다.


How to use VASP

핵심을 먼저 설명하자면 VASP는 POSCAR, INCAR, KPOINTS, POTCAR 라는 4종류의 파일을 특정한 계산 디렉터리에 준비하고, 실행 커맨드를 입력하면 바로 실행된다. 그리고 계산결과는 해당 디렉터리에 여러 종류의 파일로 바로 저장되는 간편한 특성을 갖고 있다.

  • POSCAR
  • INCAR
  • KPOINTS
  • POTCAR
  • (환경에 따라) .sh 확장자로 끝나는 Shell Script File

하나하나 차근차근 알아보자.


POSCAR

POSCAR는 우리가 계산하고 싶은 물질의 구조정보가 입력되는 파일이다.

물질의 화학식, Unitcell 정보, Scaling Parameter, Unitcell 내부 원자의 종류와 해당 원자의 좌표 정도를 입력해주면 된다.

다음 그림은 내가 연구중인 물질의 구조정보를 갖고 있는 POSCAR 파일의 예시이다.


POSCAR

위 그림에서 하나씩 설명하자면

  • "Cs1 Pb1 Br3"는 수행할 계산의 이름이다. 꼭 정확한 이름으로 할 필요는 없고, 다른 이름이나 중복된 이름으로 설정해도 된다. 이 이름으로 VASP가 시뮬레이션 이름을 정하지만, 반드시 필수는 아니어서 다른 이름을 쓰고 계산해도 문제없이 돌아간다.
  • 계산이름 밑의 "1.0" 이라고 쓰인 것은 Scaling parameter이다. 즉, 주어진 Unitcell을 시뮬레이션할 것인데 이 공간을 특정한 Scaling 없이 원 공간 크기 그대로 사용하겠다는 것을 의미한다. 만약 시뮬레이션 공간이 크다고 생각되어서 0.5로 설정하면, 공간을 절반으로 Scaling하고 계산하겠다는 뜻이다.
  • 그 다음 $3 \times 3$의 행렬로 보이는 것은 Unitcell을 구성하는 Real Space Vector의 정보이다. 3개의 벡터가 3차원 공간상에서 Unitcell을 정의하므로, 당연히 $3 \times 3$ 행렬이 된다.
  • 다음 줄에는 Cs 원자가 8개, Pb 원자가 8개, Br 원자가 24개 있음을 명시한다.
  • "Direct"는 Unitcell을 Fractional Coordinate에서 좌표입력 하겠다는 뜻이다. Fractional Coordinate는 Unitcell 내부의 상대적인 좌표축을 설정하여, 모든 방향의 좌표를 0과 1사이로 정규화해서 사용하겠다는 뜻이다. 이와 반대로 "Cartesian"이라고 명시하면, 일반적인 Cartesian Coordinate 좌표를 사용하겠다는 뜻이다. 순서는 Cs 원자 8개의 좌표가 먼저 순서대로 입력되고, 그 이후 Pb 원자 8개의 좌표, Br 원자 24개의 좌표가 순서대로 입력된다.

INCAR

INCAR는 시뮬레이션 조건을 설정하는 파일이다.

예를 들면, 물질을 시뮬레이션할 때 어떤 방식의 최적화(Optimization)를 할 것인가를 결정한다. 또는 어떠한 특성을 중점적으로 계산할지, 최소한의 SCF step은 얼마로 할 것인지 등을 결정한다.

다음 그림은 현재 진행중인 연구에서 학습 데이터를 생성하기 위한 Molecular Dynamics Simulation의 INCAR 파일이다.


INCAR

위 그림을 보면, 각 행마다 여러가지 이상한 이름의 Parameter 변수가 있고 어떤 값들이 할당되어 있다. "#" 이후에 쓰인 문장은 단순한 주석(Comment)이다.

예를 들면, "NSW"는 MD Simulation에서 몇 번의 Snapshot을 계산할 것인지를 지정한다. "TEBEG"는 MD Simulation이 시작되는 Initial Temperature를 지정한다. "POTIM"은 MD Simulation의 시간간격을 ps 단위에서 몇초로 설정할 것인지를 지정한다.

아마 VASP를 처음 보는 사람들은 이런 파라미터 설정에 겁을 먹을지도 모르겠다. 나도 그랬다. ㅎㅎ 하지만 친절하게도 VASP Wiki에서는 이에 대한 자세한 설명을 제공한다. VASP Wiki에서 자신이 이해할 수 없는 파라미터 이름이나 파일 이름을 검색하면, 자세한 설명이 나오고 관련 튜토리얼까지 있으니 관심있는 사람은 Wiki를 읽어보자. Tutorial이 굉장히 친절하게 되어 있으므로, 혼자서 주제를 정하고 튜토리얼을 모두 따라해보고 이해가 안되는 부분을 교수님께 물어보면 금방 배우게 될 것이다. (나는 못하지만요..)

또한 VASP는 아주 자세하게 시뮬레이션 조건을 명시하지 않아도, 대부분의 파라미터들이 모두 Default로 잘 설정되어 있다. 따라서 자신이 하려는 시뮬레이션과 관련있는 핵심적인 조건 몇가지만 제대로 설정하면, 대부분 괜찮은 결과가 나온다. 학부생의 연구 프로젝트로 계산을 한다면, 더더욱 걱정할 필요는 없을 것이다.


KPOINTS

KPOINTS는 고체물리학에서 자주 언급되는 K-space의 격자점을 어떻게 설정할지 결정하는 파일이다.

주기적인 규칙성을 갖는 결정구조는 주기성을 갖는 원자들을 원래의 공간(Primitive Space or Real Space)에서 분석하는 것보다, 푸리에변환된 공간인 K-Space에서 관찰하는 것이 물질의 성질을 더 정확히 볼 수 있다고 알려져있다. KPOINTS 파일은 K-Space에서 물질의 스펙트럼이 그려지는 공간의 격자점을 설정한다.

보통 물리학과는 학부 4학년에 고체물리학을 공부하게 되는데, 대부분 K-Space에 관한 내용을 배웠던 것 같다. 다만, K-Space에 대해 더 자세히 설명하면 이야기가 길어지므로 나중에 하도록 하겠다.


KPOINTS

당연히 VASP Wiki에서 KPOINTS로 검색하면 상황에 따라 다양하게 KPOINTS를 설정하는 방법을 알려준다.

특히 Density of States(DOS)나 PDOS를 정교하게 관찰하려면 이 부분을 잘 설정해야 한다. 다행히 내가 진행중인 연구에서는 K-Space에 별로 신경을 안 써도 되서 적당히 간단한 옵션으로 지정했다.


POTCAR

POTCAR 파일은 시뮬레이션의 대상이 되는 물질의 개별 원자에 대한 Pseudo Potential 정보를 갖고 있다.

Pseudo Potential에 대해 간단히 설명하자면, 일반적으로 원자를 중심으로 주변 공간에 무한한 거리로 퍼져나가는 연속적인 퍼텐셜 대신, 특정한 Cutoff-Radious 안에서만 존재하고 그 반경을 넘어서면 0으로 처리되는 함수를 말한다. 아마도 계산상의 편의를 위해 도입된 것 같은 Numerical한 개념이다.


POTCAR

위 그림을 보면 아마도 겁먹는 사람들이 있을 것 같다. 중요한 것은 파일의 내용을 여러분이 일일이 다 쓸 필요가 없다는 것이다!

VASP는 설치과정에서 개별 원자들의 여러 종류의 Pseudo Potential 정보를 함께 가져온다. 따라서 여러분이 할 일은, 시뮬레이션하려는 물질의 구성원자에 대한 POTCAR 정보를 하나씩 찾고, 그것을 Concat(이어붙임)하기만 하면 되는 것이다. 우리 연구실에서는 지도교수님께서 친히 만들어주신 GenPOTCAR.py라는 파일이 있어서 해당 파일을 실행하면, 바로 조건에 맞는 POTCAR 파일이 자동생성된다.


Shell Script File

지금까지 설명한 4개의 파일이 준비되면 이제 계산을 할 수 있다. 평범한 로컬서버에서 DFT 계산을 한다면, 저 상태에서 VASP 실행 커맨드를 입력하면 된다.

하지만 KISTI Nurion 같은 슈퍼컴퓨팅 서버에서 계산을 하는 경우에는, 일반적으로 qsub이라는 명령을 더해야 한다. qsub은 자신의 계산작업을 서버에 제출하여 특정한 계산노드를 할당받고, 그 노드에서 계산을 하는 과정을 의미한다. 이 경우, 어떤 방식으로 작업을 제출하고 계산을 몇 시간 동안, 어느 정도의 계산자원을 사용할 것인지를 명시하는 .sh 확장자의 Shell Script 파일이 필요하다.

내가 KISTI Nurion 서버에서 사용하는 sh 파일의 예시는 다음과 같다.


Shell Script File

위 그림과 유사한 파일을 생성하고, qsub [.sh filename]으로 작업을 제출하면, 제출된 작업은 잠시 대기하다가 비어 있는 계산노드에 자동으로 들어가서 계산이 이루어진다.


Calculation Results

연구실 서버환경마다 다르겠지만, 보통 계산과학을 하는 연구실이라면 MPI(Message Passing Interface)로 여러 CPU Core를 함께 사용할 수 있는 환경이 마련되어 있을 것이다.

로컬서버에서는 다음과 같이 mpirun -np [계산에 사용하고자 하는 CPU Core 수] [VASP 경로] > mpi.out 커맨드를 실행하면 된다. 커맨드의 마지막 부분인 > mpi.out은 계산 로그를 mpi.out 이라는 파일에 모두 기록하겠다는 뜻이다.

또는 다음과 같이 nohup mpirun -np 32 /bin/vasp.5.4.4.std > mpi.out & 명령으로 nohup을 걸고 사용할 수도 있다. 이렇게 하면 VASP 계산과정은 mpi.out 이라는 파일로 자동 입력되면서 Terminal 사용권한은 빼앗기지 않고 다른 작업이나 계산을 추가로 할 수 있다.

계산을 실행하면 시뮬레이션 결과로 OUTCAR, CHGARG, WAVECAR 등 다양한 파일이 계산을 실행한 디렉터리에 자동으로 추가된다. 계산과정을 확인할 때 열어보는 것은 보통 OUTCAR 아니면 vasprun.xml 파일일 것 같다. 다른 파일에는 보다 세부적인 계산결과가 저장된다.

먼저 OUTCAR 파일을 보자.


OUTCAR

OUTCAR 파일에는 계산이 시작되는 순간부터 종료까지의 모든 계산로그가 저장된다. 계산이 정상적으로 끝난다면 계산시간 등을 보고하며 종료된다. 그러나 최적화 과정에서 잘 수렴되지 않는 등의 문제가 발생하면, Iteration을 돌리는 중간에 계산이 종료될 수도 있다. 그런 경우 처음이나 중간지점부터 시뮬레이션을 다시 실행해야 한다.

나는 보통 OUTCAR 파일보다는 vasprun.xml 파일을 보는 것을 좋아한다. 지도교수님께 듣기로는 원래 VASP에는 계산결과를 xml 파일로 생성하는 기능이 없었는데, 나중에 패치로 추가되었다고 한다.

시뮬레이션 결과를 xml 파일로 얻을 수 있다는 것은, 머신러닝 프로젝트를 할 때 데이터 전처리가 훨씬 쉬워질 수 있음을 의미한다.

다음과 같이 xml은 HTML Tag와 유사한 방식으로 데이터를 표현한다. 결국 이 태그에 대한 정보만 잘 찾아갈 수 있으면 모든 데이터에 편리하게 접근할 수 있는 것이다.


vasprun.xml

예를 들면, 계산과정 동안의 물질의 각 원자 좌표의 변동을 알고 싶다면, 최상위노드인 "modeling"에서 시작하여 "calculation", "structure", "varray" 노드로 검색해 나아가고, 마지막에 "varray" 노드의 "name" 속성이 "positions"임을 확인하면 된다.

vasprun.xml 파일에 익숙하지 않다면 처음에는 조금 고생할 수 있다. 하지만 Python 등의 프로그래밍을 어느 정도 할 수 있는 사람이라면, vasprun.xml 파일에서 자신이 원하는 모든 정보를 추출하는 것은 어렵지 않다.


Visualization

검은 화면에 초록색 텍스트만 보여서 자신의 연구가 심심한 것 같으면 다음과 같이 VESTA 프로그램을 이용해 물질의 구조를 시각화할 수도 있다.

Materials Project에 접속하여 원하는 물질의 CIF 파일을 다운로드 받아 VESTA 프로그램에서 직접 열면 된다. 또는 POSCAR 파일을 VESTA로 열면 구조정보를 기반으로 시각화를 처리해준다. 발표할 때는 이런 그림을 넣어서 청중의 관심을 유도하자!

VESTA 프로그램을 사용하는 방법은 굉장히 쉽기 때문에 따로 설명하지는 않겠다. 만약 MD Simulation에 관심이 있는 사람이라면, OVITO라는 프로그램을 검색해보기 바란다. MD Simulation의 결과로 얻어지는 XDACAR 파일을 해당 프로그램으로 열면 분자들의 동역학적인 시뮬레이션을 볼 수 있다.


VESTA


Conclusion

이렇게 해서 VASP를 이용하여 물질을 시뮬레이션하는 간단한 소개를 마쳤다. 물질을 이론적으로 시뮬레이션할 수 있다는 점에서 VASP를 이용한 DFT 계산은 굉장히 매력적인 것 같다.

석사과정으로 입학하여 처음 DFT를 접했을 때는 리눅스 서버환경에서 명령어를 조작하는 것도 익숙하지 않고, 알 수 없는 원리로 작동하는 DFT 계산도 다루기 어려웠다. 결국 석사과정 내내 물리학보다는 딥러닝을 더 많이 공부했고, 연구도 그런 방향에 맞는 주제로 선택하게 되었다. 하지만 석사과정을 졸업할 시기에 다시 보니 역시 매력적인 연구분야임은 부정할 수 없는 것 같다.


'02. 물리학' 카테고리의 다른 글

Route Optimization using Quantum Annealing in AWS Braket  (0) 2025.01.02