基于VASP的Periodic NBO编译和简单测试

本文章为原创,版权归作者刘锦程所有,文章转载请先取得作者的同意,非常欢迎转发文章链接!严禁以任何方式挪用本文内容,用于以盈利为目的各种活动。

相关内容基于VASP的SSAdNDP编译和简单测试

参考文献:Dunnington, B. D.; Schmidt, J. R. J. Chem. Theory Comput., 2012, 8, 1902–1911.

下载网站:

https://schmidt.chem.wisc.edu/nbosoftware

先下载:

periodic_nbo_v.1.1.tgz

对于VASP用户还需要下载:

projection_v.1.1.2.tgz

对于Crystal用户还需要下载:

CRYSTAL_interface.tgz

注:对于crystal用户可以参考

http://bbs.keinsci.com/thread-12111-1-1.html

帖子中的编译方法。

编译之前的准备文件:

  • VASP程序包,从vasp.at网站下载,目前的ssNBO和ssAdNDP仅完美支持vasp.5.4.1.24Jun15之前的版本,对于vasp.5.4.1.05Feb16和5.4.4版经测试发现在patch补丁的时候报错,估计对补丁文件稍作修改亦可使用,暂时我还没有做测试。5.4和5.3的编译方法有很大的不同,建议使用5.4.1.15年版,编译方便非常多。
  • periodic_nbo_v.1.1.tgz
  • projection_v.1.1.2.tgz
  • intel2013或之前版本的intel mkl编译器。由于程序最终更新是在2015年,且程序作者的mkl版本太老,如果不用老的编译器,很多代码要做修改,参考(http://bbs.keinsci.com/thread-12111-1-1.html)

我编译使用的是:

composer_xe_2013_sp1.2.144,

vasp.5.4.1.24Jun15

第一步:重新编译VASP

首先要重新编译VASP,编译VASP的方法参考:

自己的电脑上编译:

http://bbs.keinsci.com/thread-11812-1-1.html

https://www.bilibili.com/video/av39616222

服务器上编译:

http://bbs.keinsci.com/thread-11111-1-1.html

https://www.bilibili.com/video/av33956717

编译之前需要多一步:

把projection_v.1.1.2.tgz解压得到的,proj_VASP_5.4.patch和projection_output.F文件copy到vasp的src/目录下:

patch < proj_VASP_5.4.patch

注:

对于VASP5.3还需要在~/src/.objects文件的SOURCE里添加projection_output.o,VASP5.4不需要添加。

第二步:编译projection.exe

这里我是用的intel2013编译器,测试发现intel2015以后的编译器都无法成功。

Makefile文件不需要做修改,直接make,可以得projection.exe

第三步:编译nbo.exe
编译之前需要修改Makefile.template文件
由于作者使用的intel编译器较老,下面这个默认的路径在intel2013里没有:
MODULE_PATH=/opt/intel/mkl/10.0.3.020/lib/em64t
需要替换成MODULE_PATH=/opt/intel/composer_xe_2013_sp1.2.144/mkl/include/intel64/lp64/
另外LDFLAGS= 参数也需要做相应修改,最终我编译成功的

Makefile.template文件:

1
2
3
4
5
6
7
MODULE_PATH=/opt/intel/composer_xe_2013_sp1.2.144/mkl/include/intel64/lp64/
MKL_LIB=/opt/intel/composer_xe_2013_sp1.2.144/mkl/lib/intel64
FC=ifort
LD=ifort
#FFLAGS=-check all -check noarg_temp_created -g -traceback -warn unused -I $(MODULE_PATH)
FFLAGS= -vec-report0 -openmp -I $(MODULE_PATH)
LDFLAGS=-L${MKL_LIB} -lmkl_core -lmkl_intel_lp64 -lmkl_sequential ${MKL_LIB}/libmkl_blas95_lp64.a ${MKL_LIB}/libmkl_lapack95_lp64.a -openmp

第四步:测试Silicon的例子

INCAR输入文件里添加LNBO = True,如果VASP的用于投影波函数文件编译成功,计算完成会产生一个wavefunction.dat文件。然后准备高斯基组文件(Gaussian94 format)basis.inp,可以从ESML网站上生成:https://bse.pnl.gov/bse/portal,这里作者使用的是3-21G(d) basis set。运行./projection.exe basis.inp wavefunction.dat NBO.out,将平面波基组投影到高斯基组,会生成NBO.out,NBO_mat.out,band_spillover.out,spillover.out文件。运行./nbo.exe NBO.out,NBO计算结果打印到屏幕上。

可以添加nbo.config文件,控制判断孤对电子和键的阈值,默认是LP 1.60,BD 1.85。并且还可以进一步输出格点文件。

1
2
3
4
5
6
7
8
9
10
#####NBO search parameters####
1.60 #Occupancy cutoff for one-center NBOs
1.85 #Occupancy cutoff for two-center NBOs
#####Visualization output control parameters####
F #Control over printing of .cube files for visualization.
F #density - Whether density (T) or wavefunctions (F) are visualized.
0 -1 #vis_start vis_end - Start and end of NBOs to print .cube files for
0 0 0 #mesh - Number of points along each lattice vectors to use in .cube files
1 1 1 #box_int - Number of unit cell to use for .cube file. See READ_ME.txt for guidance
0.00 #origin_fact - Shift of the origin for .cube file. See READ_ME.txt for guidance

最终输出的信息比NBO6.0少一些:由于硅1s轨道在赝势里,且价层电子全部成键,所以没有看到NBO输出LP的信息,只有BD和RYD信息。

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


------

**** NATURAL BOND ORBITALS ****

------

BD* Si 1 Si 2
Occ: 5.0691199E-02 Polarization: 50.00000 % 50.00000 %
Hybrid 1: s% 25.000001907 p% 74.601173401 d% 0.398826480 f% 0.000000000
-0.00000 0.00057 0.00110 0.00110 0.00110 -0.00358 0.00147 0.00147 0.00147 -0.49999 -0.49867 -0.49867 -0.49867 -0.03646 -0.03646 -0.03646 0.00000 -0.00000
Hybrid 2: s% 24.999996185 p% 74.601173401 d% 0.398826689 f% 0.000000000
0.00000 -0.00057 0.00110 0.00110 0.00110 0.00358 0.00147 0.00147 0.00147 0.49999 -0.49867 -0.49867 -0.49867 0.03646 0.03646 0.03646 0.00000 -0.00000

BD Si 1 Si 2
Occ: 1.938513 Polarization: 50.00000 % 50.00000 %
Hybrid 1: s% 25.000001907 p% 74.601173401 d% 0.398826480 f% 0.000000000
0.00000 -0.00057 -0.00110 -0.00110 -0.00110 0.00358 -0.00147 -0.00147 -0.00147 0.49999 0.49867 0.49867 0.49867 0.03646 0.03646 0.03646 -0.00000 0.00000
Hybrid 2: s% 24.999996185 p% 74.601173401 d% 0.398826689 f% 0.000000000
0.00000 -0.00057 0.00110 0.00110 0.00110 0.00358 0.00147 0.00147 0.00147 0.49999 -0.49867 -0.49867 -0.49867 0.03646 0.03646 0.03646 0.00000 -0.00000

...
...

------

**** NATURAL RYDBERG STATES ****

------

RYD Si 1
Occ: 1.5159165E-03
Hybridization s% 0.000000000 p% 0.000000000 d% 100.000000000 f% 0.000000000
0.00000 -0.00000 -0.00000 0.00000 -0.00000 -0.00000 0.00000 -0.00000 0.00000 -0.00000 -0.00000 0.00000 0.00000 0.00000 0.00000 -0.00000 -0.17421 0.98471

RYD Si 1
Occ: 1.5159191E-03
Hybridization s% 0.000000001 p% 0.000000000 d% 100.000000000 f% 0.000000000
0.00000 0.00000 -0.00000 0.00000 -0.00000 0.00000 0.00000 0.00000 -0.00000 -0.00000 -0.00000 -0.00000 0.00000 0.00000 0.00000 -0.00000 0.98471 0.17421

在确定NBO计算结果没问题以后,可以进一步输出我们感兴趣的轨道。nbo.config里有六个参数控制作图,不能搞错顺序,就在作者提供的文件基础上修改就可以了。

1
2
3
4
5
6
T   #Control over printing of .cube files for visualization.
F #density - Whether density (T) or wavefunctions (F) are visualized
21 22 #vis_start vis_end - Start and end of NBOs to print .cube files for
48 48 48 #mesh - Number of points along each lattice vectors to use in .cube files
2 2 2 #box_int - Number of unit cell to use for .cube file.
-0.5 #origin_fact - Shift of the origin for .cube file.

例如,我们要观察第4和第8个Si原子之间的共价键:

先确定这两个原子之间的BD和BD*编号分别是21 22:

1
2
BD* Si           4 Si           8
BD Si 4 Si 8

然后按照上述方法编辑nbo.config文件,重新运行./nbo.exe NBO.out :

会输出nbo_21.cube,和nbo_22.cube文件,拖到VESTA里作图即可:

unfold band
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。