VASP 固定基矢优化结构
无缺 / 2018-03-19
一般对于三维材料的结构晶格参数优化有两种方法(教程参见 Learn VASP The Hard Way):
而上述方法对于优化表面,二维或者一维体系不适用,优化此类材料时,必须固定一个或两个晶胞方向不优化。一般可通过晶格参数扫描再拟合函数实现,引侯柱峰老师对该类问题解答回帖。
如果二维参数里有一个参数(也就是a,b相等),那通过固定 c,改 a 或 b 的值,对每一个 a 值下的结构进行 ISIF=2 的计算,得到总能,然后根据一系列的 总能-晶格常数 a 的值进行一元二次函数的拟合,得到最小值的位置。 如果是含两个常数(即 a,b 不等),通过地,固定 c,改变a和b地值,对每一组 a 和 b 值下的结构进行 ISIF=2 的计算,得到总能,然后根据一系列的 总能-晶格常数 a 和 b 的值,进行二元二次函数的拟合得到最小值的位置。
这样的方法普适性很高,但却是繁琐。于是有了在特定条件下,重新编译 vasp 使得该优化简化的方法,即当材料为正交晶系或单斜晶系时,可通过修改 constr_cell_relax.F
编译软件实现固定基矢进行结构优化。
对于 VASP 5.4.1 之后的版本,软件的编译已经方便了很多,本文以 intel 编译器 + mkl + impi 编译 VASP 5.4.1 为例进行介绍。VASP 的安装编译无需 root 权限,普通用户在家目录即可安装。
1. 查看编译器,mkl 等安装及环境变量设置正确
export LD_LIBRARY_PATH=/share/intel/composer_xe_2015.6.233/mkl/lib/intel64/:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/share/intel/composer_xe_2015.6.233/compiler/lib/intel64:$LD_LIBRARY_PATH
export PATH=/share/intel/composer_xe_2015.6.233/bin/intel64:$PATH
export PATH=/share/intel/impi/5.0.3.049/intel64/bin:$PATH
2. 修改 constr_cell_relax.F
以固定 c 方向为例,constr_cell_relax.F
(src 目录下)修改后如下
!-----------------------------------------------------------------------
!
! At present, VASP does not allow to relax the cellshape selectively
! i.e. for instance only cell relaxation in x direction.
! To be more precisse, this behaviour can not be achived via the INCAR
! or POSCAR file.
! However, it is possible to set selected components of the stress tensor
! to zero.
! The most conveninent position to do this is the routines
! CONSTR_CELL_RELAX (constraint cell relaxation).
! FCELL contains the forces on the basis vectors.
! These forces are used to modify the basis vectors according
! to the following equations:
!
! A_OLD(1:3,1:3)=A(1:3,1:3) ! F90 style
! DO J=1,3
! DO I=1,3
! DO K=1,3
! A(I,J)=A(I,J) + FCELL(I,K)*A_OLD(K,J)*STEP_SIZE
! ENDDO
! ENDDO
! ENDDO
! where A holds the basis vectors (in cartesian coordinates).
!
!-----------------------------------------------------------------------
SUBROUTINE CONSTR_CELL_RELAX(FCELL)
USE prec
REAL(q) FCELL(3,3)
DO I=1,3
FCELL(3,I)=0
FCELL(I,3)=0
ENDDO
! just one simple example
! relaxation in x directions only
! SAVE=FCELL(1,1)
! FCELL=0 ! F90 style: set the whole array to zero
! FCELL(1,1)=SAVE
! relaxation in z direction only
! SAVE=FCELL(3,3)
! FCELL=0 ! F90 style: set the whole array to zero
! FCELL(3,3)=SAVE
RETURN
END SUBROUTINE
对于其他方向晶格基矢的修改同理:对于a方向基矢,将 FCELL(3,I) 和 FCELL(I,3) 分别改为 FCELL(1,I) 和 FCELL(I,1) ;对于b方向基矢,则分别改为 FCELL(2,I) 和 FCELL(I,2) ;固定两个基矢则应该同时将两个方向对应的矩阵元设置为0。或参考 VASP并行可执行软件包,可对晶胞参数进行部分优化 可实现添加参数文件实现不同基矢方向固定。(未做测试)
3. 编译
建议重新解压源码编译软件
[yourname@localhost ~]$ tar -zxvf vasp.5.4.1.05Feb16.tar.gz
[yourname@localhost ~]$ tar -zxvf vasp.5.lib_.tar_2.gz
[yourname@localhost ~]$ cd vasp.5.4.1
[yourname@localhost ~]$ cp arch/makefile.include.linux_intel makefile.include
[yourname@localhost ~]$ make std
普通用户在家目录安装编译前在 makefile.include
文件中添加 $MKLROOT
,位置如下
MKLROOT =/share/intel/composer_xe_2015.6.233/mkl
MKL_PATH = $(MKLROOT)/lib/intel64
编译结束后,进入 bin
目录,可将 vasp_std
重命名为 vasp_fixZ
,将软件移入系统 bin
目录下或将该目录添加至环境变量。
[yourname@localhost ~]$ echo 'export PATH=/home/yourname/vasp.5.4.1/bin:$PATH' >> ~/.bashrc
[yourname@localhost ~]$ source ~/.bashrc
完成编译后,在 INCAR 文件中设置 ISIF=3,便可实现固定 Z 轴的结构优化。
参考资料