本帖最后由 lqid 于 2021-8-7 22:38 编辑
1. 安装dftd4 编译环境: 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。 - meson setup _build
- meson test -C _build --print-errorlogs
- meson configure _build --prefix=/path/to/install
- meson 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中遇到的问题不在本贴子的讨论范围内) 给出指南是这样的(应该适用于ver 2.x版本的dftd3 - CPP_OPTIONS += -DDFTD4
- LLIBS += -Lyour-libdftd4-build -ldftd4
- INCS += -Iyour-libdftd4-build/libdftd4.a.p
复制代码 笔者英语能力有限,实在是没理解your-libdftd4-build到底是指什么目录,并且ver 3.x 的dftd4似乎没有生成libdftd4.a.p 文件。我用以下路径能够得到编译成功并且可以使用dftd4的vasp二进制文件 - CPP_OPTIONS += -DDFTD4
- LLIBS += -L$HOME/bin/dftd4/lib64 -ldftd4
- INCS += -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
07/08/2021 15:00补充:
3.在vasp.6.2.0前的版本使用dftd4 我发现在vasp.6.1.0中已经有关于dftd4的源代码,主要是vdwforcefield.F和subdftd4.F这两个。简单对比了一下发现和6.2.0的没什么区别,应该是可以直接用。再之前的版本,根据dftd4的GitHub page上的一个subproject https://github.com/dftd4/dftd4_vasp,似乎可以通过修改和增加代码来用上dftd4,这里搬运一下。
首先修改src/vdwforcefield.F文件,在vdw_forces_main subroutine中加入 然后在 - !c D3(BJ-damping) by Jonas Moellman
- CASE(12)
- CALL vdw_forces_D3(IO,LATT_CUR,DYN,T_INFO,TSIF,TIFOR,TOTEN,ELEM,historycounter,4,IVDW)
复制代码
下方加入 - ! D4-ATM(EEQ) implemented by Eike Caldeweyher
- CASE(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=1
- ENDIF
复制代码把(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
|