VSASP 출력 파일 DOSCAR에서 LDOS 및 PDOS 스크립트 정리

전주


수고하셨습니다.교본입니다.
VAPP는 LDOS 및 PDOS를 출력할 수 있습니다.
LDOS(Local Density Of States)는 원자가 속한 전자의 상태 밀도를, PDOS는 각 궤도에 속한 전자의 상태 밀도를 뜻한다.즉, LDOS의 합은 PDOS입니다.VAPP의 결과 출력 파일인 DOSCAR에는 전원자의 DOS와 PDOS가 적혀 있습니다.
상태밀도를 알면 전자가 에너지의 어느 구간에서 얼마나 차지하는지 알 수 있기 때문에 전도에 기여하는 전자의 양과 비열 등 물리량을 계산할 수도 있고, 화학적으로 결합하는 상황 등도 알 수 있다.
이렇게 물리량이 상당히 중요하기 때문에 나는 스스로 파이톤 스크립트를 만들어서 파일을 해석하는 동시에 결과를 정리했다.

전제


수동으로 결과 내용을 정리하는 데 관심이 없는 사람, 예를 들어pymatgen'https://pymatgen.org/과 p4vasp'http://www.p4vasp.at/#/를 사용하면 블랙박스에서 DOS 내용을 출력할 수 있다.
pymatgen에 대해서는 공식 참조 및 RKS WEBSITE "http://ryokbys.web.nitech.ac.jp/pymatgen.html"기사를 참조하십시오.
VAP 공식 홈페이지'https://www.vasp.at/wiki/index.php/CO_partial_DOS'에 방법을 기재했다.
그럼에도 불구하고 사용이 편리하다면 솔직히 미묘하다.이 기사의 목표는 "그렇게 어려운 포맷이 아니기 때문에python으로 DOSCAR을 추출하여 이해하기 쉬운 형식으로 만들자"는 것이다.

1. DOSCAR 획득


LDOS가 포함된 DOSCAR을 받으려면 2회 계산(또는 3회)이 필요합니다.

Step1.퍼스트 컴퓨팅


계산에 필요한 파일을 준비하다.
・“POSCAR”:
구조가 최적화된 후 혹은 계산하고 싶은 구조를 만드는 등 구조가 있는 파일을 준비한다.
・“KPOINTS”:
계산 정밀도를 수렴하기 위해 충분한 수량의 k점 파일을 준비하세요.
・“POTCAR”:
모든 전자를 계산하기 위해 PAW(Projector Augmented Wave)법의 파일을 준비합니다.
・“INCAR”:
설정 파일 INCAR에 사용되는 각 레이블의 의미를 계산하려면 "https://qiita.com/youkihashimoto3110/items/de92172e0b5e9f3872d3"을 참조하십시오.
첫 번째 계산은 새로운 전하 최적화(Electronic Relaxation) 계산이다.구조 최적화 매개변수의 모든 주석 출력입니다.
ISTART  =   0
PREC    =   Accurate
EDIFF   =   1E-5
LREAL   =   Auto
ALGO    =   VeryFast
네.또한 금속의 경우
ISMEAR  =   1 #または2,-5 
SIGMA   =   0.5 
절연체, 반도체의 경우
ISMEAR  =   0 #または-5
SIGMA   =   0.01 
SIGMA 값을 조정하여 outcar의 엔트로피 항목이 원자당 1meV보다 작게 만듭니다.
절연체·반도체의 경우 사용하지 마세요ISMEAR>0!
ISMEAR=-5(4각사슬법)을 사용하면 정밀도가 높아지지만 대부분 구조가 맞지 않는다.(???)
또'수렴하지 않을 때의 효과적인 조치'를 적절히 사용한다.
설정이 완료되면 첫 번째 계산을 실행합니다.

step2. 2차 계산


계산이 끝난 후 두 번째 계산에 들어가다.두 번째 계산에서 전하 최적화를 지속하기 때문에 INCAR 파일만 덮어씁니다.
첫 번째 계산 파일의 수정점은
ISTART  =   1
ISYM    =   0
LORBIT  =   11
네.다른 것은 같은 방법으로 다시 계산합시다.
또한, DOS의 에너지 스텝을 상세히 가늘어지게 하려는 경우
EMIN = -10.0;EMAX = 17.0;NEDOS = 1001
탭각자의 뜻은 템플릿에 기재되어 있다.
자기와 무관한 초기 전하 배치ICHARG=11를 하는 것도 유효하다.

2. DOSCAR 해독


임의의 텍스트 편집기에서 두 번째 계산 출력의 DOSCAR를 엽니다.
DOSCAR의 내용은 다음 그림과 같습니다.

죄송합니다. 보기 힘들어요.(가명을 붙여 다른 줄을 만들었지만 실제로는 줄을 바꾸지 않았다.)
VSASP 공식 홈페이지'https://www.vasp.at/wiki/index.php/DOSCAR와 동북대학교 궁본선생님'http://www.aki.che.tohoku.ac.jp/~taiko/vasp.html의 홈페이지에도 정보가 있으니 참고하시기 바랍니다.
또한 위에서 보여준 예는 계산에서 자전을 고려하지 않았다.수치 조절을 고려한 계산에서 매 수치 조절도 출력된다.

3. python으로 결과 출력



"고정 문자열은 6줄로 모든 DOS를 시작합니다. 다섯 번째 줄과 같은 문자열이 있고, 첫 번째 원자인 LPDOS는 다섯 번째 줄과 같은 문자열, 두 번째..."
을 구성합니다.또한 빈 줄로 줄을 바꿀 필요가 없고 공백을 뛰어넘어야 한다.
이를 바탕으로 프로그래밍을 할 때 다음과 같다.
Extract_dos.py
import csv

atom_index = [1,2,3]          #LPDOSを出力したい原子の番号(POSCARから何番目か)
doscar_name = "DOSCAR"        #読み込むDOSCARの名前
save_csv_name = "doscar.csv"  #DOSCARをcsvとして保存する名前
save_dos = "dos.csv"          #全DOSの保存名

#DOSCARからリストに格納
with open(doscar_name, newline='') as doscar:
    dos_read = csv.reader(doscar, delimiter=' ', skipinitialspace=True)
    dos_list = [i for i in dos_read]

#DOSCARをCSVで出力
with open(save_csv_name, mode='w', newline='') as doscar_csv:
    dos_write = csv.writer(doscar_csv)
    dos_write.writerows(dos_list)

#DOSCARから全dosを抽出
i = 5 #読み込み開始インデックス
dos = []
count = 0
dos.append(dos_list[i])
while True:
    i = i + 1
    count = count + 1
    dos.append(dos_list[i])
    if dos[0] == dos_list[i+1]:
        break

with open(save_dos, mode="w", newline='') as dos_csv:
    dos_write = csv.writer(dos_csv)
    dos_write.writerows(dos)

#DOSCARから指定したlpdosを抽出してそれぞれCSVに保存
lpdos_all = []
while True:
    i = i + 1
    pdos = []
    count = 0
    pdos.append(dos_list[i])
    while True:
        i = i + 1
        count = count + 1
        pdos.append(dos_list[i])
        if len(dos_list)==i+1:
            lpdos_all.append(pdos)
            break
        if len(pdos[count]) != len(dos_list[i+1]):
            lpdos_all.append(pdos)
            break
    if len(dos_list)==i+1:
        break
#lpdosを保存
for j in atom_index:
    save_lpdos = "lpdos"+str(j)+".csv"
    with open(save_lpdos, mode="w", newline='') as lpdos_csv:
        lpdos_write = csv.writer(lpdos_csv)
        lpdos_write.writerows(lpdos_all[j-1])
너무한 프로그램이지만 어렵지 않다고 생각해요.atom_index=[]POSCAR의 순서에 따라 원자의 번호를 지정하면 그 번호의 LPDOS는'lpdos 번호.csv'로 출력됩니다.그런 다음 Excel 등으로 그림을 그리면 각각의 원자 궤도에 DOS를 그릴 수 있다.
또한 정렬에 저장된 "#DOSCAR에서 목록에 저장"을 공백으로 두는 방법은 VAP의 출력 파일을 정리하는 데 효과적입니다.
위의 DOS를 사용하여 atom_index=[100,160,200]를 지정한 결과를 나타냅니다.



이것만으로도 어떤 구조, 어떤 특성의 물질이 있는지 예측할 수 있습니다^^;

좋은 웹페이지 즐겨찾기