본 매뉴얼은 리눅스(UBUNTU 20.04)환경에서 Terminal에 명령을 내리는 방식으로 작성되었습니다.
사용자는 UBUNTU 20.04 이상의 환경에서 리눅스 환경에 익숙해지는 과정을 거치면서 매뉴얼을 사용하시기 바랍니다.
https://sites.google.com/view/seoulqmt
University of Seoul QMT
Research Electronic properties of twisted bilayer graphene and other moire materials. Magnetism in 2D materials.
sites.google.com
이제 Band Energy 를 그릴 차례이다. 여기서는 이제 세 가지 파일을 필요로 한다.
SCF, NSCF, bands
1) Bands.sh 파일
우선은 vi Bands.sh 라고 Terminal 창에 입력해서 새 파일을 연다. 그리고 다음과 같이 입력한다.
#!/bin/bash Name=MoS2 cat > $Name.SCF.in << EOF &CONTROL calculation = 'scf' restart_mode = 'from_scratch' prefix = '$Name' pseudo_dir = '(Pseudopotential파일 디렉토리)' outdir = './tmp' disk_io = 'low' etot_conv_thr = 1.0D-8 forc_conv_thr = 1.0D-4 / &SYSTEM ibrav=0 A = 3.161 nat = 3 ntyp = 2 ecutwfc=80.0 nbnd = 60 / &ELECTRONS electron_maxstep = 100 conv_thr = 1.0e-10 mixing_beta = 0.3 / ATOMIC_SPECIES Mo 95.94 Mo_ONCV_PBE-1.2.upf S 32.065 S_ONCV_PBE-1.2.upf CELL_PARAMETERS (alat= 5.97342431) 1.007712043 0.000000000 0.000000000 -0.503856021 0.872704229 0.000000000 0.000000000 0.000000000 6.327111674 ATOMIC_POSITIONS (crystal) Mo 0.666666619 0.333333314 0.750000039 S 0.333333360 0.666666714 0.671806602 S 0.333333360 0.666666714 0.828193398 K_POINTS {automatic} 16 16 1 0 0 0 EOF cat > $Name.NSCF.in << EOF &CONTROL calculation = 'bands' restart_mode = 'from_scratch' prefix = '$Name' pseudo_dir = '(pseudopotential파일 디렉토리)' outdir = './tmp' disk_io = 'low' etot_conv_thr = 1.0D-8 forc_conv_thr = 1.0D-4 / &SYSTEM ibrav=0 A = 3.161 nat = 3 ntyp = 2 ecutwfc=80.0 nbnd = 60 / &ELECTRONS electron_maxstep = 100 conv_thr = 1.0e-10 mixing_beta = 0.3 / ATOMIC_SPECIES Mo 95.94 Mo_ONCV_PBE-1.2.upf S 32.065 S_ONCV_PBE-1.2.upf CELL_PARAMETERS (alat= 5.97342431) 1.007712043 0.000000000 0.000000000 -0.503856021 0.872704229 0.000000000 0.000000000 0.000000000 6.327111674 ATOMIC_POSITIONS (crystal) Mo 0.666666619 0.333333314 0.750000039 S 0.333333360 0.666666714 0.671806602 S 0.333333360 0.666666714 0.828193398 K_POINTS crystal_b 4 0.0000 0.0000 0.00 50 0.5000 0.0000 0.00 50 0.3333 0.3333 0.00 30 0.0 0.0 0.0 3 EOF cat > $Name.bands.in << EOF &bands prefix = '$Name' outdir = './tmp' filband = 'bands.dat' / EOF |
EOF 는 End of file 의 약자이다. 이것을 기준으로 파일들을 나누게 될 것이다.
이렇게 입력한 뒤에 저장하고, 터미널 창에 chmod +x Bands.sh 를 입력하여 shellscript 파일로 바꾼다. 그리고 ./Bands 를 입력해서 실행한다. 그러면 다음과 같은 input file들이 자동으로 생성될 것이다.
2) SCF
SCF란, Self Consistent Field 이다. http://www.chm.bris.ac.uk/webprojects2002/grant/webcomp/scf.html#:~:text=The%20self%2Dconsistent%20field%20method%20is%20an%20iterative%20method%20that,theses%20until%20the%20results%20converge.
이 파일은 다음과 같다.
&CONTROL calculation = 'scf' restart_mode = 'from_scratch' prefix = 'MoS2' pseudo_dir = '(Pseudopotential파일 디렉토리)' outdir = './tmp' disk_io = 'low' etot_conv_thr = 1.0D-8 forc_conv_thr = 1.0D-4 / &SYSTEM ibrav=0 A = 3.161 nat = 3 ntyp = 2 ecutwfc=80.0 nbnd = 60 / &ELECTRONS electron_maxstep = 100 conv_thr = 1.0e-10, mixing_beta = 0.3 / ATOMIC_SPECIES Mo 95.94 Mo_ONCV_PBE-1.2.upf S 32.065 S_ONCV_PBE-1.2.upf CELL_PARAMETERS (alat= 5.97342431) 1.007712043 0.000000000 0.000000000 -0.503856021 0.872704229 0.000000000 0.000000000 0.000000000 6.327111674 ATOMIC_POSITIONS (crystal) Mo 0.666666619 0.333333314 0.750000039 S 0.333333360 0.666666714 0.671806602 S 0.333333360 0.666666714 0.828193398 K_POINTS {automatic} 16 16 1 0 0 0 |
우선, calcuation의 방식을 scf 로 바꾸고, ibrav 는 0으로 둔다. 그리고 CELL_PARAMETER에 원자들의 좌표 정보를 넣는 것이다. (vasp 파일에서 가져온다.)
band 의 갯수를 60개로 하였다.
3) NSCF
Non Self Consistent Field 라는 의미이다. 여기서는 주어진 시스템에서의 Eigenvalue를 계산하여 SCF 계산으로부터 잘 정의된 k-point 격자를 만들어내는 것이 목표다.
&CONTROL calculation = 'bands' restart_mode = 'from_scratch' prefix = 'MoS2' pseudo_dir = 'Pseudopotential파일 디렉토리' outdir = './tmp' disk_io = 'low' etot_conv_thr = 1.0D-8 forc_conv_thr = 1.0D-4 / &SYSTEM ibrav=0 A = 3.161 nat = 3 ntyp = 2 ecutwfc=80.0 nbnd = 60 / &ELECTRONS electron_maxstep = 100 conv_thr = 1.0e-10, mixing_beta = 0.3 / ATOMIC_SPECIES Mo 95.94 Mo_ONCV_PBE-1.2.upf S 32.065 S_ONCV_PBE-1.2.upf CELL_PARAMETERS (alat= 5.97342431) 1.007712043 0.000000000 0.000000000 -0.503856021 0.872704229 0.000000000 0.000000000 0.000000000 6.327111674 ATOMIC_POSITIONS (crystal) Mo 0.666666619 0.333333314 0.750000039 S 0.333333360 0.666666714 0.671806602 S 0.333333360 0.666666714 0.828193398 K_POINTS crystal_b 4 0.0000 0.0000 0.00 50 0.5000 0.0000 0.00 50 0.3333 0.3333 0.00 30 0.0 0.0 0.0 3 |
4) Bands
&bands prefix = 'MoS2' outdir = './tmp' filband = 'bands.dat' / |
Bands 는 별로 코드가 길지 않다. 앞서 SCF, NSCF 에서 계산한 내용들이 대부분이기 때문.
‘band’계산에서는 이 시스템에서IBZ 영역에서 잘 정의된 k path를 따라 Eigenvalue를 계산하는 것이다.
SCF,NSCF의 경우는 input file 에 대해서 output file 만 하나씩 나오는데 반해, band 는 여러 개의 파일들이 동시에 생성된다.
bands 파일에서는 pw.x를 이용해서 실행하는 것이 아니라 bands.x를 이용한다.
mpirun -np 2 /bin/bands.x < MoS2.bands.in > MoS2.bands.out
다음 화면을 보자.
이처럼 bands.dat, bands.dat.gnu, bands.dat,rap 등의 여러 파일이 생성된다.
우선, SCF output file 을 열어서 highest occupied energy를 확인한다. 이것이 fermi energy이다.
이제 계산을 시작한다.
앞서 output을 계산할 때 사용했던 pw.x 가 있는 위치를 알고 있을 것이다. 터미널 창에 그 위치를 입력하고, 이번에는 앞에 ‘mpirun~’ 을 쓰지 않는다. 그리고 pw.x 대신에 plotband.x 파일을 사용한다. 그리고 뒤에는 ‘<’ 없이 bands.dat 라고 쓴 뒤 실행한다
터미널 창에 (Plotband 디렉토리)/plotband.x bands.dat 을 입력하면 다음과 같은 창을 볼 수 있다.
*변경 사항
2023 8월 기준으로 Quantum Espresso 7.4 에서는 plotband.x를 호출하면
Input file >
이라는 창이 나옵니다.
여기에 우리가 넣으려던 input file로 'bands.dat'을 쓰고 엔터를 누르면 됩니다.
그러면 이제 우리가 그릴 에너지의 범위를 물어본다. MoS2에서는 -61.8610~ 25.3210 eV를 제시한다. 이에 맞춰서 우리가 원하는 구간을 입력해 주면 된다. 하이라이트 된 부분이 우리가 입력해야 하는 것들이다.
그러면 high -symmetry point 들을 쭉 알려준다. 이 숫자들은 적어두는 것이 좋다.
이 high-symmetry point 가 4개가 나오는지 꼭 확인하여야 한다.
그 뒤에 output file을 gnuplot으로 저장할 것인지 xmgr 로 저장할 것인지를 묻는데, 확장자 .gnu 로 끝나는 이름으로 저장해 두자, linux에서 사용하는 프로그램 gv를 이용해 band 를 볼 수 있다.
그리고 ps 파일도 저장해 주고, Efermi 에는 앞서 알아둔 highest energy 를 입력하면 된다. deltaE에는 원하는 에너지 간격을 입력하고, reference E 에는 Efermi에 입력한 값과 똑같은 값을 넣으면 완성이다.
이제 bands.dat.gnu 파일을 열어보면 데이터들이 나와 있을 것이다. 이 데이터들이 band energy이다. 이제 그래프를 그리면 되는데, 본 매뉴얼에서는 파이썬 언어를 사용하고 컴파일러로는 Jupyter Notebook을 쓰겠다.
(데이터 파일을 저장할 때 주의할 점은 하이라이트 된 부분과 같은 기호가 나와 있어야만 한다는 것이다. 파일을 불러올 때 반드시 이렇게 되어 있어야 파일을 제대로 불러온다.
이 기호를 일일이 다 칠수는 없으니bands.dat.gnu파일에 있는 데이터들을 Linux에서 지원하는 LibreOffice Calc라는 어플리케이션에 복사해서 붙여넣었다가 다시 Jupyter Notebook의txt파일에 붙여 넣으면 이런 구분선이 자동으로 생성된다.)
그러면 다음과 같은 Energy Band 그림이 나온다.
K 축에서 극대와 극소가 같이 나오는, 이른바 direct band gap 이 나와야 정상이다.
이렇게 나오지 않았다면 Input file 에서 무언가 잘못된 것이다. 이 계산 결과는 인터넷에도 많이 나와 있으니 구글링을 통해서 자신이 그린 그래프와 인터넷(Materials project등의 사이트, 그 외에 다른 논문들)에 나오는 그래프가 잘 맞는지 한번 확인해 보는 것을 추천한다.
나머지 WSe2, WS2, MoSe2 등도 같은 과정을 거쳐서 완성한다.
이렇게 해서 Monolayer 밴드 에너지 계산이 완료되었다.
'DFT > Calculation' 카테고리의 다른 글
감사합니다. + 후기 (1) | 2020.09.16 |
---|---|
11. Energy band of Bilayer MoS2 (with supercomputer) (2023.8.3 수정) (0) | 2020.09.16 |
9. Relaxing (2023.08.03 오타 및 내용 수정 완료) (0) | 2020.09.11 |
8. 적절한 K-Point 찾기 (2023.08.03 오타 수정 완료 및 KPOINT-Total energy그래프 추가) (0) | 2020.09.10 |
7. Total Energy 그래프 그리기 (2023.08.03 보충 설명 추가) (1) | 2020.09.07 |