在优化表面,二维或一维体系时,必须固定某个或某几个晶胞方向不优化。VASP本身没有这个功能,但是提供了 constr_cell_relax.F 文件来设置。根据文件中的提示,添加几行代码后,就可以任意固定晶胞方向了。

使用方法:在目录下建立文件 OPTCELL ,第一行输入三个数字(比如 110 ),数字 1 表示优化,数字 0 表示不优化;三个数字依次对应于xyz方向。比如 110 表示z轴不优化;001 表示x和y轴都不优化。

注1. 无OPTCELL文件则完全是原版软件的功能; 注2. 只适用与正交晶胞,所有角都是直角。

附:修改后的 constr_cell_relax.F 文件

      SUBROUTINE CONSTR_CELL_RELAX(FCELL)
      USE PREC
      REAL(Q) FCELL(3,3), SAVE(3)
      LOGICAL FILFLG
      INTEGER ICELL(3)

      INQUIRE(FILE='OPTCELL',EXIST=FILFLG)
      IF (FILFLG) THEN
        OPEN(67,FILE='OPTCELL',FORM='FORMATTED',STATUS='OLD')
          READ(67,"(3I1)") (ICELL(I),I=1,3)
        CLOSE(67)
        DO I=1,3
          SAVE(I)=FCELL(I,I)
        ENDDO
        FCELL=0.0d0
        DO I=1,3
          IF (ICELL(I)==1) FCELL(I,I)=SAVE(I)
        ENDDO
      ENDIF

!     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

      RETURN
      END SUBROUTINE