VASP 固定晶胞方向不优化
# 需求
在优化表面,二维或一维体系时,必须固定某个或某几个晶胞方向不优化。VASP本身没有这个功能,但是提供了 constr_cell_relax.F
文件来设置。
# 修改方法
# 修改文件
修改源码中的 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
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
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
# 重新编译
修改完文件后,重新编译 vasp
生成可执行程序即可。
# 使用方法
# 根据需求创建配置文件
在 INCAR
文件同级目录下创建名为 OPTCELL
的文件,文件列表如下所示:
$ ls
INCAR OPTCELL
1
2
2
文件中只写3个数字即可,数字 1
表示优化,数字 0
表示不优化;三个数字依次对应于xyz方向。
完整组合如下:
文件内容 | x方向 | y方向 | z方向 |
---|---|---|---|
000 | x | x | x |
001 | x | x | √ |
010 | x | √ | x |
100 | √ | x | x |
101 | √ | x | √ |
110 | √ | √ | x |
111 | √ | √ | √ |
√ 表示该方向进行优化, x 表示该方向不优化
# 注意
1、无OPTCELL文件则完全是原版软件的功能
2、只适用与正交晶胞,所有角都是直角