前期笔者已有一篇涉及libxc+vasp编译的介绍
但在实际测试中仍存在一些问题,本篇基于前期内容进行修正并附加测试。
按照前文提到的编译方法,在更改泛函后进行VASP计算时会出现保存提示 Libxc was not compiled with the option --disable-fhc
查询VASP wiki后可知,VASP官网推荐的使用libxc.5.2.0以后的版本,并在编译过程中使用 --disable-fhc选项。
链接:
https://www.vasp.at/wiki/index.php/Makefile.include#Libxc_(optional)
同时必须使用VASP.6.3.0或更高版本的VASP程序。
https://www.vasp.at/wiki/index.php/GGA
本文使用前提:已用于完整Intel编译器并可正常编译VASP程序(版本大于6.3.0)。
基于libxc 6.1.0版本,编译过程为
下载后进行解压和生成configure文件
tar zxvf libxc-6.1.0.tar.gz
cd libxc-6.1.0
autoreconf -i
随后生成makefile文件,指定好安装目录
./configure --prefix=PATH/TO/LIBXC --disable-fhc
make
make check
check无问题后进行安装(可能存在FLASE 1,不影响继续安装)
make install
在VASP的编译文件makefile.include中加入
# for libxc
CPP_OPTIONS += -DUSELIBXC
LIBXCPATH=/path/to/libxc/installation
INCS += -I$(LIBXCPATH)/include
LLIBS += $(LIBXCPATH)/lib/libxcf03.a $(LIBXCPATH)/lib/libxc.a
随后正常编译即可
make all
如出现报错libxc_free
未定义。
则手动编写一个文件 myfree.c
void libxc_free(void *ptr)
{
free(ptr);
}
然后
icc -c myfree.c
生成 myfree.o,再用
nm -s myfree.o
查看符号则有了 libxc_free
。
最后,用命令
ar r libxc.a myfree.o
将该定义加到 libxc.a 库中,这样就有了 libxc_free
的定义了,
于是再编译 VASP 就正常了。
在INCAR中插入
#METAGGA = LIBXC (PBEsol exchange-correlation)
GGA = LIBXC
LIBXC1 = MGGA_X_R2SCAN
LIBXC2 = MGGA_C_R2SCAN
参数含义可从VASP wiki中查看
https://www.vasp.at/wiki/index.php/GGA
https://www.vasp.at/wiki/index.php/LIBXC1
https://www.vasp.at/wiki/index.php/LIBXC2
即可使用R2SCAN泛函进行计算。计算过程中会提示
附GGA可用泛函和杂化泛函列表
https://www.vasp.at/wiki/index.php/GGA
https://www.vasp.at/wiki/index.php/List_of_hybrid_functionals