(点击
上方蓝字
,快速关注我们)
来源:iPytLab
http://python.jobbole.com/87722/
如有好文章投稿,请点击 → 这里了解详情
前言
本文为作者对其开源项目VASPy的说明文章。VASPy是一个纯Python编写的处理VASP文件数据以及进行数据快速可视化的库,基于OOP的思想提供了操作VASP文件的友好的接口,可以帮助使用者快速编写处理VASP相关文件的脚本,以提升效率。VASPy的项目仍处于起步阶段,希望大家可以都贡献出自己的力量使其壮大起来。
VASP简介
对于广大做计算化学或者材料模拟的同学肯定听说过VASP的大名或者其科学研究与其息息相关。
VASP的全称是Vienna Ab-initio Simulation Package,是维也纳大学Hafner课题组开发的进行电子结构计算和量子力学-分子动力学模拟的软件包,目前是材料模拟和计算物质科学研究中最流行的商业软件之一。关于VASP的详细介绍可以参见其官方主页(http://www.vasp.at/)
VASPy项目简介
VASPy的思想是将VASP相关的文件都视为可操作的对象,通过友好的接口对一个或者多个VASP对象进行快速的操作以提升工作效率。目前已兼容Python2 和 Python3。
使用说明
安装
VASPy库已上传至PyPI可以通过pip来进行安装:
pip install vaspy
从源码安装:
git
clone
git
@
github
.com
:
PytLab
/
VASPy
.git
cd
vaspy
python
setup
.py
install
VASPy同时内部也使用了Mayavi进行可视化,如果需要使用mayavi推荐直接安装canopy集成环境,我不觉得会有很多人喜欢手动在各种平台上安装mayavi的那种酸爽是无与伦比的。
下载好canopy后,可以在配置文件中设置别名方便调用canopy中的python,jupyter等等
alias
canopy
=
'/Users/
/Library/Enthought/Canopy/edm/envs/User/bin/python'
alias
canopy
-
pip
=
'/Users/
/Library/Enthought/Canopy/edm/envs/User/bin/pip'
alias
canopy
-
ipython
=
'/Users/
/Library/Enthought/Canopy/edm/envs/User/bin/ipython'
alias
canopy
-
jupyter
=
'/Users/
/Library/Enthought/Canopy/edm/envs/User/bin/jupyter'
然后便可以将VASPy安装到canopy中
canopy-pip install vaspy
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
InCar
In
[
2
]
:
incar
=
InCar
(
"INCAR"
)
# 创建InCar对象
In
[
3
]
:
incar
.
IBRION
# 读取参数信息
Out
[
3
]
:
'1'
In
[
4
]
:
incar
.
ISIF
Out
[
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
PosCar
In
[
8
]
:
poscar
=
PosCar
(
"POSCAR"
)
In
[
9
]
:
poscar
.
bases
Out
[
9
]
:
array
([[
7.29321435
,
-
4.21073927
,
0.
],
[
0.
,
8.42147853
,
0.
],
[
-
0.
,
0.
,
16.87610843
]])
In
[
10
]
:
poscar
.
get_volume
()
Out
[
10
]
:
1036.5246404472209
In
[
11
]
:
poscar
.
data
Out
[
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
OutCar
In
[
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_info
Out
[
16
]
:
(
'index'
,
'freq_type'
,
'THz'
,
'2PiTHz'
,
'cm-1'
,
'meV'
,
'coordinates'
,
'deltas'
)