专栏名称: Python开发者
人生苦短,我用 Python。伯乐在线旗下账号「Python开发者」分享 Python 相关的技术文章、工具资源、精选课程、热点资讯等。
目录
相关文章推荐
Python中文社区  ·  超爆回报2682%!轻松复制这个简单暴利的量 ... ·  昨天  
Python爱好者社区  ·  模仿一下领导说话的样子 ·  15 小时前  
python自留地  ·  Python语法基本单词 ·  昨天  
Python爱好者社区  ·  35个爬虫实例 ·  3 天前  
Python爱好者社区  ·  梁文锋导师项志宇引关注,个人主页满满都是对团 ... ·  3 天前  
51好读  ›  专栏  ›  Python开发者

使用 VASPy 快速处理 VASP 文件以及数据可视化

Python开发者  · 公众号  · Python  · 2017-06-05 21:05

正文

(点击 上方蓝字 ,快速关注我们)


来源: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的GitHub地址:https://github.com/PytLab/VASPy

  • VASPy的PyPI地址:https://pypi.python.org/pypi/vaspy/



使用说明


安装


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' )







请到「今天看啥」查看全文