介绍
感谢您的辛勤工作。这是桥本
VASP可以输出LDOS和PDOS。
LDOS(状态局部密度)是属于某个原子的电子的状态密度,而PDOS是属于每个Rails的电子的状态密度。即,LDOS的总和为PDOS。 VASP结果输出文件" DOSCAR"包含全原子DOS和PDOS。
如果您知道状态的密度,则可以知道能量的哪个部分以及电子的占有量,因此您可以计算出有助于导电的电子数量,比热等物理量,并知道状态化学键的作用。
如您所见,这是相当重要的物理量,因此我编写了自己的Python脚本来组织结果,同时读取文件。
0.前提
如果您对手动组织结果的内容不感兴趣,请使用pymatgen" https://pymatgen.org/"或p4vasp" http://www.p4vasp.at/#/"。然后,您可以将DOS的内容输出到黑框中。
对于
pymatgen,官方参考和RKS WEBSITE的文章" http://ryokbys.web.nitech.ac.jp/pymatgen.html"将很有帮助。
在VASP官方网站" https://www.vasp.at/wiki/index.php/CO_partial_DOS"中介绍了p4vasp的方法。
老实说,即使它是
,当被问到它是否易于使用时,它还是微妙的。本文的目标是"因为格式不是那么困难,所以请使用python提取DOSCAR并使其易于理解。"
1.获取DOSCAR
要获得包含LDOS的DOSCAR,您需要运行两次(或三次)计算。
Step1.1首次计算
准备计算所需的文件。
?" POSCAR":
优化结构或创建要计算的结构后,请准备具有固定结构的文件。
?" KPOINTS":
准备一个具有足够k点的文件,以使计算的准确性收敛。
?" POTCAR":
准备一个PAW(投影机增强波)方法文件以计算所有电子。
?" INCAR":
请参阅" https://qiita.com/youkihashimoto3110/items/de92172e0b5e9f3872d3",了解计算设置文件INCAR中使用的每个标签的含义。
第一个计算是电荷优化(电子弛豫)计算的新计算。注释掉所有结构优化参数。
必需标签为
1 2 3 4 5 | ISTART = 0 PREC = Accurate EDIFF = 1E-5 LREAL = Auto ALGO = VeryFast |
它是
。对于金属,
1 2 | ISMEAR = 1 #または2,-5 SIGMA = 0.5 |
绝缘子?
用于半导体
1 2 | ISMEAR = 0 #または-5 SIGMA = 0.01 |
使用
调整SIGMA值,以使外向熵项小于每个原子1 meV。
请勿将
同样,使用
另外,请适当使用"不收敛时的有效措施"。
设置完成后,将执行第一个计算。
step2。第二计算
计算完成后,我们将开始第二次计算。在第二次计算中,电荷优化是由连续作业执行的,因此仅" INCAR"文件被重写。
第一个计算文件中的更改为
1 2 3 | ISTART = 1 ISYM = 0 LORBIT = 11 |
它是
。让我们以相同的方式重新计算其他值。
另外,如果要使DOS能量步长更小,
1 | EMIN = -10.0;EMAX = 17.0;NEDOS = 1001 |
使用
。每个含义在模板中进行了描述。
2.阅读DOSCAR
使用任何文本编辑器在第二个计算中打开" DOSCAR"输出。
DOSCAR的内容如下图所示。
对不起,很难看到。 (换行符是由于ruby字符引起的,但在真实事物中没有换行符。)
VASP官方" https://www.vasp.at/wiki/index.php/DOSCAR"和东北大学宫本教授" http://www.aki.che.tohoku.ac.jp/~taiko/vasp.html"请访问该网站以获取信息。
同样,上面显示的示例在计算中未考虑旋转。在考虑自旋的计算情况下,也会为每个自旋输出。
3.用python输出结果
即
"有6个固定字符串,首先是DOS。与第5行有相同的字符串,第一个原子的LPDOS与第5行有相同的字符串,第二个是...."
您可以看到它的结构。此外,没有空白行换行符,您需要跳过空格。
如果基于这些进行编程,将如下所示。
Extract_dos.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | 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: 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]) |
这是一个糟糕的程序,但我认为它很难阅读。
如果在
另外,在组织VASP输出文件时,删除空格并存储在数组中的"从#DOSCAR中存储在列表中"的方法有效。
显示在
上使用DOS时指定
仅此一项,您就可以预测该物质具有的结构和性质。 ^^;