chempeng

VASP 固定基矢优化结构

无缺 / 2018-03-19


一般对于三维材料的结构晶格参数优化有两种方法(教程参见 Learn VASP The Hard Way):

  1. Birch-Murnaghan 状态方程拟合
  2. VASP 计算中调节 ISIF 参数

而上述方法对于优化表面,二维或者一维体系不适用,优化此类材料时,必须固定一个或两个晶胞方向不优化。一般可通过晶格参数扫描再拟合函数实现,引侯柱峰老师对该类问题解答回帖。

如果二维参数里有一个参数(也就是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 轴的结构优化。

参考资料

  1. vasp里如何固定ab轴 只优化c轴?
  2. VASP并行可执行软件包,可对晶胞参数进行部分优化
  3. GASP-python
  4. VASP 5.4.1+VTST编译安装
  5. VASP Compilation