如何显示振动模?学习这篇文章就够了
天玑算-科研服务
2021年06月23日 14:28
收录于文集
共2篇

引言

今天我们将更新一篇用VESTA, VMD, v_sim画振动模的文章。首先我们会介绍如何让振动模在VESTA中显示,并让它在VMD中动起来。这里将用到一个脚本,用于提取DFPT计算得到的Gamma点振动模。

最后我们会介绍如何让整个布里渊区中任意k点的振动模显示出来,并且也让它动起来(在VMD或v_sim中)。

显示振动模

步入正题,我们需要准备四个文件,POSCAR,OUTCAR,poscar.vesta,还有就是本文提到的脚本modes_to_vesta.py。

该脚本来自于github:

https://github.com/Stanford-MCTG/VASP-plot-modes

POSCAR :用于计算的VASP结构文件。

OUTCAR:用IBRION=7,8计算得到的DFPT OUTCAR文件。这里注意计算是还需要加入参数 NWRITE=3,用于写出“Eigenvectors after division by SQRT(mass)”。

poscar.vesta,是通过vesta打开POSCAR,另存为.vesta格式得到的文件。它是作为后面写出振动模的模板。

脚本安装和运行:

 运行脚本

原理:

以MoS2最高振动模为例,vasp计算OUTCAR中的本征矢和本征值如下:

程序中取了每个原子的dx,dy和dz,然后乘以scaling_factor作为VESTA中该原子的矢量。

所以,458.10 cm-1 振动模给出的矢量就是:

   1 -0.00000 -0.00000 -2.58452

   2 -0.00004 -0.00004  3.85304

   3  0.00004  0.00004  3.88144

注意:程序中给出的scaling_factor是40,可以修改。

振动模动起来

振动模动起来主要是用freqmov.py这个脚本。

freqmov.py:该脚本主要用于把频率计算的结果转化为动画。

该脚本来自于github:

https://github.com/Angel-Jia/VASP-script

用法:

(freqmov.py 按照上一节方法,给执行权限,放到bin文件夹下,另外需要拷贝VASP.py到bin文件夹下,在freqmov.py 和VASP.py 中加入# coding=utf-8,可以让python 读取中文不报错)

首先要制作freqfile文件,其格式为(这里只显6行):

其中:1、2行必须有,之后是每个原子的坐标及其振动方向,原子的数量必须与本体系原子数量一致。例如30个原子的体系,就必须有32行数据,至于是不是虚频则无所谓。

其中,

30是动画的帧数,数字越大动画越细腻,30足够了;

0.6是系数,用于调节振幅。OUTCAR中给出的振幅很大,需要适当缩减,0.6即可;OUTCAR可以采用IBRION = 5, 6 或IBRION = 7, 8计算得到。

最后会产生一个freqfile.xyz文件,用VMD打开即可播放。 

freqfile文件怎么得到呢?freqfile文件可用下列方法提取:

"30 f/i"  为字符串30 f/i,有时候可能是"30 f",依据不同振动模而定,具体见OUTCAR。

-A 5表示输出grep查找字符串所在行信息(这里是“30 f/i”)以及其后5行。也可以自己打开OUTCAR,找到所需信息直接存为文本格式。

最后下载VMD导入xyz文件即可看到振动模了。

VMD => Graphics => Representations => Drawing Method => CPK

任意k点的振动模

这里,我们将介绍两种方法,来实现任意k点下振动模动起来的目标。

1. 老方法

首先是我们之前讲到的,绘制振动模实际上是把本征矢量乘以一个系数得到的一个矢量。那么我们想绘制哪个点,只要知道他的本征矢量就可以。

在phonopy中我们可以通过BAND选项来设置任意k点,然后通过EIGENVECTORS=TRUE.这个参数来实现显示这些点的本征矢量。这样我们就可以按照之前的方法来绘制振动模了。

具体设置位置可以放在band.conf文件中。

具体本征矢的位置在band.yaml里,格式为:

第一行为q点,

第二行是距离第一个点的距离,用于绘制能带时的横轴,

第三行,band标志,

第四行1,代表第一个能带,

第五行为该能带的频率值,

第六行为本征矢名称,

第七行表示第一个原子,

第八行到第十行是本征矢的矩阵。这里写的是实部加虚部的形式。一般只需要实部部分就好。

根据这些信息自己写一个之前给的freqmov.py 的输入文件,即可让振动模动起来了。也可以直接写一个OUTCAR类似的输出文件。让modes_to_vesta.py来读取。代码能力强的话可以直接写一个导出VESTA格式的脚本出来,就能用VESTA打开了。

2. 新方法

phonopy里有这样一个参数ANIME,它可以用于写出动画格式文件。(在band.conf加入该参数)

ANIME = 0.5 0.5 0

让ANIME等于某个q点,就会写出这个q点下所有振动模的信息。写出的文件为anime.ascii。

我们只要安装一个可视化软件就可以了。phonopy推荐的可视化软件为v_sim。

这里用的是ubuntu的虚拟机。一条命令就可以安装。

sudo apt install v-sim

下载安装包自己编译可以访问如下教程:

https://blog.csdn.net/CSDN296218029/article/details/101851656

结果:运行命令

选择如下窗口:

选择振动模,然后点击右下角绿色三角形:

动图如下:

v_sim 是一个强大的软件,大家研究研究还能玩出新花样。快快跟着教程练习吧。

天玑算科技成都天玑算科技有限公司致力于打造最专业的化学、物理、生物领域理论计算模拟团队,结合高性能计算技术,让科研实验、企业生产更加精准便捷。我们可以提供测试表征、模拟计算、科研绘图、论文润色以及数据分析等一站式科研服务。 

另外,对于科研来说,充分的讨论和学习是必不可少的。有时候一些问题在我们这里是hard模式,在大神那里就是easy模式。

http://www.phadcalc.com/service.html