使用VASPy快速處理VASP文件以及數據可視化
前言
本文為作者對其開源項目VASPy的簡單介紹。VASPy是一個純Python編寫的處理VASP文件數據以及進行數據快速可視化的庫,基於OOP的思想提供了操作VASP文件的友好的介面,可以幫助使用者快速編寫處理VASP相關文件的腳本,以提升效率。VASPy的項目仍處於起步階段,希望大家可以都貢獻出自己的力量使其壯大起來。
VASP簡介
對於廣大做計算化學或者材料模擬的同學肯定聽說過VASP的大名或者其科學研究與其息息相關。
VASP的全稱是Vienna Ab-initio Simulation Package,是維也納大學Hafner課題組開發的進行電子結構計算和量子力學-分子動力學模擬的軟體包,目前是材料模擬和計算物質科學研究中最流行的商業軟體之一。關於VASP的詳細介紹可以參見其官方主頁(The VASP site)
VASPy項目簡介
VASPy的思想是將VASP相關的文件都視為可操作的對象,通過友好的介面對一個或者多個VASP對象進行快速的操作以提升工作效率。目前已兼容 Python2 和 Python3。
- VASPy的GitHub地址:PytLab/VASPy
- VASPy的PyPI地址:Python Package Index
使用說明
安裝
VASPy庫已上傳至PyPI可以通過pip來進行安裝:
$ pip install vaspy
從源碼安裝:
$ git clone git@github.com:PytLab/VASPy.git$ cd vaspy$ python setup.py install
VASPy包的文件結構
VASPy/├── LICENSE├── MANIFEST├── MANIFEST.in├── README.rst├── requirements.txt├── scripts│ ├── change_incar_parameters.py│ ├── create_inputs.py│ └── ...├── setup.cfg├── setup.py├── tests│ ├── incar_test.py│ ├── __init__.py│ ├── oszicar_test.py│ ├── outcar_test.py│ ├── testdata│ │ ├── CONTCAR│ │ ├── DOS_SUM│ │ ├── ELFCAR│ │ └── ...│ └── ...└── vaspy ├── __init__.py ├── iter.py ├── matstudio.py └── ...
文件操作舉例
目前VASPy提供了操作INCAR、POSCAR、OUTCAR、XDATCAR、ELFCAR等的介面,這裡對其中的部分進行簡要的舉例介紹。
操作INCAR文件
INCAR是VASP做電子結構計算的參數設置文件,VASPy提供了InCar類可以方便獲取INCAR文件的信息以及進行自定義的修改並生成新的INCAR文件。
In [1]: from vaspy.incar import InCarIn [2]: incar = InCar("INCAR") # 創建InCar對象In [3]: incar.IBRION # 讀取參數信息Out[3]: "1"In [4]: incar.ISIFOut[4]: "2"In [5]: incar.ISIF = 3 # 修改參數In [6]: incar.tofile("INCAR_new") # 生成新的INCAR文件
通過此類操作便可以快速寫出批量修改INCAR文件的腳本,附上代碼鏈接(https://github.com/PytLab/VASPy/blob/master/scripts/change_incar_parameters.py)
操作POSCAR/CONTCAR/XDATCAR等含有結構坐標的文件
操作結構文件可以獲取相應結構的信息,例如晶胞參數、晶胞體積等。
In [7]: from vaspy.atomco import PosCarIn [8]: poscar = PosCar("POSCAR")In [9]: poscar.basesOut[9]: array([[ 7.29321435, -4.21073927, 0. ], [ 0. , 8.42147853, 0. ], [ -0. , 0. , 16.87610843]])In [10]: poscar.get_volume()Out[10]: 1036.5246404472209In [11]: poscar.dataOut[11]: array([[ 0.24466667, 0.224 , 0.13581544], [ 0.02244444, 0.11288889, 0.27163089], [ 0.13355555, 0.00177777, 0. ], ... ])
同時結構坐標類中還提供了三維空間坐標轉換介面,例如Cartisan坐標與Direct坐標的相互轉換。
In [14]: poscar.cart2dir(self.bases, self.data)Out[14]: ...In [15]: poscar.dir2cart(self.bases, self.data)Out[15]: ...
從XDATCAR中獲取迭代的結構信息。
from vaspy.atomco import XdatCar>>> xdatcar = XdatCar("XDATCAR")>>> for step, data in xdatcar:>>> print(step)>>> print(xdatcar.dir2cart(xdatcar.bases, data))
操作OUTCAR文件
OUTCAR是VASP最重要的輸出文件,我們可以從中獲取計算過程中基本上所有的信息。
獲取迭代過程中原子的受力信息:
In [4]: from vaspy.iter import OutCarIn [5]: outcar = OutCar("OUTCAR_freq", poscar="POSCAR_freq")In [9]: outcar.forces() # 最近一次迭代中結構中原子在各個方向上的受力Out[9]: ([[2.79563, 0.85618, 1.19698], [4.47844, 0.86375, 4.78817], [2.37243, -0.5474, 3.59093], [3.91022, -0.54961, 7.26487], ... ])
如果要獲取所以迭代步中的受力信息,需要使用OutCar提供的受力信息迭代器:
for forces in outcar.force_iterator: # Do something with forces tuple. ...
OutCar類對於含有頻率計算的信息的文件會做頻率收取操作,可以方便獲取頻率相關數據:
In [16]: outcar.freq_infoOut[16]: ("index", "freq_type", "THz", "2PiTHz", "cm-1", "meV", "coordinates", "deltas")In [17]: outcar.freq_typesOut[17]: [["f", "f", "f"], ["f", "f", "f/i"]]In [19]: outcar.zpeOut[19]: 0.1117761635In [20]: for freq_info in outcar.freq_iterator: ...: # Do something with frequency data ...: ...
對於其他文件的操作這裡就不進行一一介紹了。
VASP數據可視化
可視化分割後的DOS(態密度)數據
可視化的過程中可以選擇進行d-band center的計算並顯示。
In [1]: from vaspy.electro import DosXIn [2]: dos = DosX("DOS_SUM")In [3]: dos.plotsum(0, (5, 10))
效果圖:
ELFCAR/CHGCAR數據的可視化
電荷數據主要是通過對三維矩陣進行處理後進行繪製,可以選擇surface以及二維map和標量場的顯示模式。
In [1]: from vaspy.electro import ElfCarIn [2]: elfcar = ElfCar("ELFCAR")In [3]: elfcar.plot_contour()
3D 等值線圖, 這需要安裝Mayavi模塊來進行繪製。
In [4]: elfcar.plot_contour3d()
繪製標量場,同樣需要Mayavi的支持。
In [5]: elfcar.plot_field()
CHGCAR也是Fortran順序的三維矩陣,繪製道理相同,因此可以用繼承自ElfCar的ChgCar類來進行CHGCAR相關的繪製,例如差分電荷圖。
In [4]: from vaspy.electro import ChgCarIn [5]: chgcar = ChgCar("CHGCAR_diff")In [6]: chgcar.plot_contour()
操作MaterialStudio中的xsd以及xtd等文件的介面
VASPy還提供了一個方便將Material Studio中的xsd文件與VASP文件互通的介面,通過VASPy中的XsdFile和XtdFile類可以抽取文件中的晶格結構信息並結合VASP相關的類進行VASP文件的創建,同樣可以方便的講VASP的文件生成相應的用Material Studio可以顯示的文件包括講XDATCAR生成相應的*.arc和*.xtd來顯示動畫效果。
附上腳本的鏈接,此腳本就是利用VASPy的介面將Material Studio文件和VASP的文件進行相互轉換。
由MaterialStudio的xsd文件生成VASP輸入文件的腳本由VASP的輸出文件生成相應的MaterialStudio可以顯示的xsd文件的腳本由MaterialStudio的軌跡文件生成VASP進行NEB搜索過渡態的輸入文件的腳本由VASP結果生成MaterialStudio的軌跡文件的動畫效果圖(知乎不支持動圖,可到github查看:PytLab/VASPy):
結語
VASPy最初的想法是通過Python優雅簡潔的特點將VASP的文件處理進行模塊化,從而省去了重複寫腳本的所花費的精力,使操作VASP文件像操作變數一樣簡單有效。
目前本項目都是在作者工作需要的基礎上不斷對其功能和介面進行完善,但仍只是冰山一角,希望做計算模擬使用VASP的Pythoner們能不斷參與進來,使其更加出色和高效。推薦閱讀:
※和 C++ 相比,用 Fortran 編程是怎樣的體驗?
※Fortran 目前仍然是科學計算領域使用的主要語言嗎?
※寫kinetic Monte Carlo模擬程序用什麼語言合適?