计算化学公社
标题: 编译带dftd4的vasp.6.2.1 [打印本页]
作者Author: lqid 时间: 2021-8-7 12:52
标题: 编译带dftd4的vasp.6.2.1
本帖最后由 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
作者Author: chrinide 时间: 2021-8-7 16:41
赞,可惜缺 瓦斯普621
作者Author: lqid 时间: 2021-8-7 22:24
我补充了一段在之前的版本用dftd4的方法,我发现好像其实从vasp.6.1.0中已经有关于dftd4的源代码了,简单对比了一下和6.2.1没区别,应该是可以直接用。再之前的版本可以根据https://github.com/dftd4/dftd4_vasp这个页面里的方法来修改源代码。
作者Author: Daniel_Arndt 时间: 2021-8-8 09:17
我很好奇“如果反过来均会报错导致编译失败,非常神奇但是不清楚为什么”具体是什么情况。
作者Author: lqid 时间: 2021-8-9 04:37
本帖最后由 lqid 于 2021-8-9 04:39 编辑
就是在intel 2020 update 1 (19.1.1.217)环境下,用
- FC=ifort meson setup _build
复制代码 的时候,C compiler会用默认的gcc 10.3.0,这个时候继续运行
- meson test -C _build --print-errorlogs
复制代码 会在这里报错- [126/133] Linking target test/api/api-tester
- FAILED: test/api/api-tester
复制代码 然而如果在intel 2019 update 1 (19.0.1.144)环境下用,来指定c compiler为icc的话- FC=ifort CC=icc CXX=icpc meson setup _build
复制代码 则会在运行- meson test -C _build --print-errorlogs
复制代码 一开始的时候报错
- [8/133] Compiling C object test/api/api-tester.p/example.c.o
- FAILED: test/api/api-tester.p/example.c.o
- icc -Itest/api/api-tester.p -Itest/api -I../test/api -Ilibdftd4.so.3.3.0.p -I../include -Isubprojects/mctc-lib/libmctc-lib.a.p -Isubprojects/multicharge/libmulticharge.a.p -D_FILE_OFFSET_BITS=64 -Wall -w3 -diag-disable:remark -g -traceback -O2 -g -qopenmp -MD -MQ test/api/api-tester.p/example.c.o -MF test/api/api-tester.p/example.c.o.d -o test/api/api-tester.p/example.c.o -c ../test/api/example.c
- In file included from /usr/include/bits/floatn.h(119),
- from /usr/include/stdlib.h(55),
- from ../test/api/example.c(18):
- /usr/include/bits/floatn-common.h(214): error: invalid combination of type specifiers
- typedef float _Float32;
- ^
- In file included from /usr/include/bits/floatn.h(119),
- from /usr/include/stdlib.h(55),
- from ../test/api/example.c(18):
- /usr/include/bits/floatn-common.h(251): error: invalid combination of type specifiers
- typedef double _Float64;
- ^
- In file included from /usr/include/bits/floatn.h(119),
- from /usr/include/stdlib.h(55),
- from ../test/api/example.c(18):
- /usr/include/bits/floatn-common.h(268): error: invalid combination of type specifiers
- typedef double _Float32x;
- ^
- In file included from /usr/include/bits/floatn.h(119),
- from /usr/include/stdlib.h(55),
- from ../test/api/example.c(18):
- /usr/include/bits/floatn-common.h(285): error: invalid combination of type specifiers
- typedef long double _Float64x;
- ^
- compilation aborted for ../test/api/example.c (code 2)
复制代码
作者Author: Daniel_Arndt 时间: 2021-8-10 11:58
原来是这样。这种玄学报错也挺让人头疼的。
作者Author: cokoy 时间: 2022-4-21 11:45
不知道是不是我编译的问题,dft-d4比d3慢了4倍。。。楼主有比较过吗
作者Author: Apostolus 时间: 2022-7-8 15:39
本帖最后由 Apostolus 于 2022-7-8 08:42 编辑
關於編譯DFT-D4,我分享一些自己的經驗:
1.
我在CentOS 7虛擬機上 (Intel® Parallel Studio XE 2019 update 1 (19.0.1.144)) 环境編譯DFT-D4 3.4.0時,和樓主恰恰相反,第一步只有加入 CC=icc CXX=icpc 命令,第二步才能正常編譯。不清楚為什麼。- FC=ifort CC=icc CXX=icpc meson setup _build
复制代码
2.
而在超算集群上編譯DFT-D4 3.4.0時,因為我調用的是Intel oneAPI 2021.1環境,直接用第一步的命令會導致報錯:
- meson/meson.build: ERROR: Fortran shared or static library 'mkl_intel_lp64' not found
复制代码 或者
- meson/meson.build: ERROR: Fortran shared or static library 'mkl_intel_thread' not found
复制代码 參考Github grimme-lab裡的issue,meson cannot find mkl_intel_thread #402,我在第一步加入了-Dfortran_link_args=-qopenmp,報錯消失,最後成功編譯。
- FC=ifort CC=icc CXX=icpc meson setup _build -Dfortran_link_args=-qopenmp
复制代码 順便提一句,如果超算集群上沒有 meson 和 ninja,你也沒有權限用系統命令直接安裝。這時可以試試python3,用 pip3 install meson 和 ninja。
作者Author: wzkchem5 时间: 2022-7-8 19:05
如果你的意思是色散校正部分慢4倍,而不是总时间慢4倍的话,是正常的,本来DFT-D4就比DFT-D3多算了很多东西,来提高结果精度
| 欢迎光临 计算化学公社 (http://bbs.keinsci.com/) |
Powered by Discuz! X3.3 |