龙空技术网

编译带dftd4的vasp.6.2.1

学术之友 167

前言:

而今大家对“centos6安装vasp”都比较关注,咱们都需要剖析一些“centos6安装vasp”的相关资讯。那么小编同时在网摘上网罗了一些对于“centos6安装vasp””的相关文章,希望同学们能喜欢,姐妹们快快来学习一下吧!

注:本文来源于计算化学公社lqid的原创教程。

VASP从6.2.0开始支持DFT-D4 方法(),但是需要作为外部包在编译的时候额外编译进去()。实际操作的时候,笔者发现其实想要用上带DFT-D4的vasp没那么简单,本贴子记录了一下本人在学校的hpc集群上安装Grimme的dftd4程序和编译带dftd4的vasp.6.2.1时的过程,希望对有兴趣和需求的人有启发和帮助。

1. 安装dftd4在社长的博文()中有对DFT-D4方法的介绍,而且提供了2种编译方法——简单粗暴的方法和基于meson+ninja的编译方法。当时的dftd4是ver 2.0,目前最新的dftd4已经到了ver 3.3.0,程序已经被重写了一遍。但是非常蛋疼的是,vasp的代码中用的api是基于2.x版本的,如果编译的dftd4是3.2.0及之前的3.x版本,vasp编译会出错,好在3.3版中重新增加了vasp用的2.x api。(, )

编译环境:GCCcore-10.3.0, CentOS Linux release 8.4.2105, meson-0.58.0, ninja-1.10.2, python-3.9.5 笔者分别在Intel® Parallel Studio XE 2020 Update 1 (19.1.1.217)和Intel® Parallel Studio XE 2019 Update 1 (19.0.1.144)环境下尝试编译dftd4。

根据dftd4的github上的指南(),用以下4条指令编译dftd4

meson setup _buildmeson test -C _build --print-errorlogsmeson configure _build --prefix=/path/to/installmeson install -C _build
但是笔者发现均无法正常编译,并且没有产生ver 3.3.0新加的给vasp使用的旧api。

首先编译问题可以在第一条命令中,添加通过指定编译器的环境变量解决。如果是Intel® Parallel Studio XE 2020 update 1 (19.1.1.217)环境,则用

FC=ifort CC=icc CXX=icpc meson setup _build
如果是Intel® Parallel Studio XE 2019 update 1 (19.0.1.144)环境,则用
FC=ifort meson setup _build
(在笔者的测试中,如果反过来均会报错导致编译失败,非常神奇但是不清楚为什么)

然后在第三条指令中,加入-Dapi_v2=True 变成

meson configure _build --prefix=/path/to/install -Dapi_v2=True
来生成vasp可用的api。

最后在.bashrc 中加入并且source ~/.bashrc

export LD_LIBRARY_PATH=$HOME/bin/dftd4/lib64:$LD_LIBRARY_PATH
(编译dftd4时--prefix=$HOME/bin/dftd4)

2. 编译vasp(关于编译vasp中遇到的问题不在本贴子的讨论范围内)Vasp wiki中()给出指南是这样的(应该适用于ver 2.x版本的dftd3

CPP_OPTIONS += -DDFTD4LLIBS += -Lyour-libdftd4-build -ldftd4INCS += -Iyour-libdftd4-build/libdftd4.a.p
笔者英语能力有限,实在是没理解your-libdftd4-build到底是指什么目录,并且ver 3.x 的dftd4似乎没有生成libdftd4.a.p 文件。我用以下路径能够得到编译成功并且可以使用dftd4的vasp二进制文件
CPP_OPTIONS += -DDFTD4LLIBS += -L$HOME/bin/dftd4/lib64 -ldftd4INCS += -I$HOME/bin/dftd4/include/dftd4/intel-xx.x.x.xxx
(若编译dftd4时--prefix=$HOME/bin/dftd4)其中intel-xx.x.x.xxx中的数字为编译时使用的intel编译器版本号

p.s.其实在写本贴的时候dftd4还在3.2版,但是支持vasp的源代码compat.f90已经在github page上了,原本是想介绍一下怎么用compat.f90微微魔改一下dftd4的代码,提前体验这个新功能的,结果计划赶不上变化hhhhhhh

3. 在vasp.6.2.0前的版本使用dftd4我发现在vasp.6.1.0中已经有关于dftd4的源代码,主要是vdwforcefield.F和subdftd4.F这两个。简单对比了一下发现和6.2.0的没什么区别,应该是可以直接用。再之前的版本,根据dftd4的GitHub page上的一个subproject ,似乎可以通过修改和增加代码来用上dftd4,这里搬运一下。

首先修改src/vdwforcefield.F文件,在vdw_forces_main subroutine中加入

USE vdwD4
然后在
!c D3(BJ-damping) by Jonas MoellmanCASE(12)  CALL vdw_forces_D3(IO,LATT_CUR,DYN,T_INFO,TSIF,TIFOR,TOTEN,ELEM,historycounter,4,IVDW)

下方加入

! D4-ATM(EEQ) implemented by Eike CaldeweyherCASE(13) CALL vdw_forces_D4(IO,LATT_CUR,DYN,T_INFO,TSIF,TIFOR,TOTEN,ELEM,IVDW)
然后找到vdw_read subroutine中读取INCAR中IVDW flag的值的这段代码
IF (IVDW==1 .OR. IVDW==2 .OR. IVDW==3 .OR. IVDW==4 .OR. (IVDW>=10 .AND. IVDW<=12) .OR. && IVDW==101 .OR. (IVDW>=20 .AND. IVDW<=22) .OR. IVDW==26 .OR. IVDW==202 && .OR. IVDW==212 .OR. IVDW==263 .OR. IVDW==612 ) THEN LVDW=.TRUE.ELSE LVDW=.FALSE. CALL PROCESS_INCAR(LOPEN, IO%IU0, IO%IU5, 'LVDW', LVDW, IERR, WRITEXMLINCAR) IF (LVDW) IVDW=1ENDIF

把(IVDW>=10 .AND. IVDW<=12)改成(IVDW>=10 .AND. IVDW<=13)

然后把subdftd4.F放到src文件夹下。如果是vasp5的话,需要把subdftd4.F中所有关于vtutor的代码注释掉,vtutor module是vasp6新加的。

最后修改/src/.object,找到subdftd3.o\,在它下面一行加上subdftd4.o\。

然后就可以修改makeflie.include进行编译了。不过注意这里CCP_OPTIONS里是-DWITH_DFTD4不是-DDFTD4

本文原始链接:

标签: #centos6安装vasp