编译 VASP 6.4

AMD EPYC 7542 上编译 VASP 6.4,最初想要加上 wannier90, vtst, libcx,以及 dftd4,由于 dftd4 不支持 2016 版的 intel 编译器,而机器上只有 2016 和 2021 两个版本,所以只能用 intel 2021 进行编译了。然而最终结果是前三个都装上了而 dftd4 还是没装成功。

一、VASP 基本配置

从 arch 里拷出 makefile.include.intel 文件并重命名为 makefile.include,编译选项通过修改该文件实现。几点关键处如下:
(1)编译选项要加上 -march=core-avx2
(2)fftw 相关设置处加上 intel 的 .a 静态库

OBJECTS     = fftmpiw.o fftmpi_map.o fftw3d.o fft3dlib.o \
             $(MKLROOT)/interfaces/fftw3xf/libfftw3xf_intel.a

(3)FFLAGS 中的 -xHOST 选项要去掉,否则 AMD CPU 上编译会出错。
(4)FCL += -qmkl=sequential 改为 FCL += -mkl=sequential 否则同样编译会出错,好像是和 scalapack 有关的错误。

二、Wannier90

Wannier90 好说,毕竟以前装过好多次了,先编译出 libwannier.a 库文件,然后在 makefile.include 中稍作修改即可。其实 vasp 6.4.0 的 makefile.include 文件底部已经有相关内容了,改以下两项即可

# For the VASP-2-Wannier90 interface (optional)
CPP_OPTIONS    += -DVASP2WANNIER90
#WANNIER90_ROOT ?= /path/to/your/wannier90/installation
#LLIBS          += -L$(WANNIER90_ROOT)/lib -lwannier
LLIBS       += /my/path/to/libwannier.a

三、 VTST

从官方下载最新的 vtstcode-197.tgz 程序包(注 vtstscripts.tgz 是命令行脚本,编译 vasp 时用不到):
https://theory.cm.utexas.edu/vtsttools/download.html
然后到 vasp 的 src 目录下,备份下 chain.F 和 main.F,然后把 vtstcode 解压后的 vtstcode6.4 目录中的所有文件拷到 src 下。再之后根据官网的说明进行几处修改 http://theory.cm.utexas.edu/vtsttools/installation.htmlmpiifort
(1)修改 main.F 文件

CALL CHAIN_FORCE(T_INFO%NIONS,DYN%POSION,TOTEN,TIFOR, &
     LATT_CUR%A,LATT_CUR%B,IO%IU6)

改为

CALL CHAIN_FORCE(T_INFO%NIONS,DYN%POSION,TOTEN,TIFOR, &
     TSIF, LATT_CUR%A,LATT_CUR%B,IO%IU6)

然后

IF (LCHAIN) CALL chain_init( T_INFO, IO)

去掉 IF (LCHAIN)
(2)修改 src/.objects 文件,在 chain.o 一行之前加入如下部分

bfgs.o dynmat.o instanton.o lbfgs.o sd.o cg.o dimer.o bbm.o \
fire.o lanczos.o neb.o qm.o \
pyamff_fortran/*.o ml_pyamff.o \
opt.o \

(3)修改 src/makefile,相关语句改成如下

LIB= lib parser pyamff_fortran
dependencies: sources libs

四、libxc

从 GitHub 上下载了最新的 6.1.0 版本,解压缩后一开始并没有 configure 文件,需要先运行 autoreconf -i 产生 configure 配置文件,然后进行配置

./configure --prefix=/path/to/install  CC=icpc FC=ifort CFLAGS=-march=core-avx2 FCFLAGS=-march=core-avx2

不过有意思的是,最初设的 CC=icc 但是编译出错,其出错的位置为 for(int i=1; i<=n; i++) 这样的语句,变量定义竟然放到 for 里面了,这应该在标准 C 语言中是不允许的,但是 C++ 允许,于是将编译器改成了C++ 编译器 CC=icpc 然后就可以编译了。安装好后设置 vasp 的 makefile.inlcude

# for libxc
CPP_OPTIONS +=  -DUSELIBXC
LIBXCPATH=/path/to/libxc/installation
INCS += -I$(LIBXCPATH)/include
LLIBS += $(LIBXCPATH)/lib/libxcf03.a  $(LIBXCPATH)/lib/libxc.a

其实最初上面的 libxcf03.a 用的是 libxcf90.a,但是编译完进行链接时说少了一大堆带 f03 的符号,于是将 libxcf90.a 换成 libxcf03.a 后那一大堆错误就没了,但仍有一个符号 libxc_free 未定义。奇怪的是 libxc 的源文件 src/util.c 中有该函数的定义,但是查看 nm -s util.o 时却只有 _Z10libxc_freePv 的定义而没有 libxc_free 的定义,且 libxc.a 中也是同样。不过看到 util.c 中关于 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 就正常了。

五、dftd4

从 GitHub 上下了最新的 3.5.0 版本,yum (系统是 CentOS 7.9)安装了 0.55 版的 meson,同时作为依赖也装了 1.10 版的 ninja-build。编译器和编译选项通过环境变量来设置。

export CC=icc CXX=icpc FC=ifort CFLAGS=-march=core-avx2 FCFLAGS=-march=core-avx2 CXXFLAGS=-march=core-avx2

然后运行 meson setup _build 进行配置,结果在这一步就出现了问题,一堆对输出的最后是如下部分

dftd4 3.5.0

  Subprojects
    json-fortran-8.2.5: NO must be str, not list
              mctc-lib: YES 1 warnings
                mstore: YES
           multicharge: YES 1 warnings

Found ninja-1.10.2 at /usr/bin/ninja

那个 json-fortran-8.2.5: NO 似乎表明该包有问题,但什么原因不清楚。如果直接执行下一步的命令 meson test -C _build --print-errorlogs 则更是会出一大堆错误,也看不懂。于是尝试使用 GitHub 上给出的已编译好的版本,不过那个应该是 intel 2018 编译器编译出的,设置号路径后修改 vasp 的 makefile.include 如下

CPP_OPTIONS += -DDFTD4
#LLIBS += $(shell pkg-config --libs dftd4)
#INCS  += $(shell pkg-config --cflags dftd4)
LLIBS += /path/to/dftd4/lib/libdftd4.a
INCS  += -I/path/to/dftd4/include -I/path/to/dftd4/include/dftd4/intel-18.0.2  

结果编译时说找不到 .mod 文件,可是路径明明已经设对了,估计是编译版本不同, 2021 版的不认 2018 版编译出的文件吧。没有使用建议的 pkg-config 那两行是因为这里不是自己从源码编译的,得到的路径自然不对,所以自己指定的路径。但最终还是失败的,没有成功安装 dftd4。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,657评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,662评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,143评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,732评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,837评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,036评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,126评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,868评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,315评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,641评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,773评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,859评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,584评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,676评论 2 351

推荐阅读更多精彩内容