链接由链接器变量指定,然后链接器被调用为:
$(FCL) -o vasp ..all-objects.. $(LLIBS)
必须将 VASP 链接到用于快速傅立叶变换 (FFT) 的库、lib 库、解析器库和线性代数库 BLAS、LAPACK 和 scaLAPACK,以及 OpenACC GPU 端口 NVIDIA HPC- SDK (≧21.2)。其他库,例如 HDF5 库和 Wannier90,是可选的。
内容
· 1个链接器变量
· 1.1FCL
· 1.2LLIBS
· 2个线性代数库(强制)
· 3个fftw 库(强制)
· 3.1OBJECTS
· 3.2INCS
· 3.3FFT 相关对象优化级别的特殊规则
· 4个lib库(必选)
· 4.1CPP_LIB
· 4.2FC_LIB
· 4.3FFLAGS_LIB
· 4.4FREE_LIB
· 4.5CC_LIB
· 4.6CFLAGS_LIB
· 4.7OBJECTS_LIB
· 5个解析器库(强制)
· 5.1CXX_PARS
· 6个量子库
· 7可选库
· 7.1相关文章
链接器变量
fcl
调用链接器的命令。在多数情况下:
FCL=$(FC) [+ 一些选项]
· 使用英特尔 Composer 套jian(Fortran 编译器 + MKL 库),通常:
FCL=$(FC) -mkl=顺序
LLIBS
以通常的方式指定要链接的库和/或对象:
LLIBS=[-L/path/to/installation/lib -llibrary] [/path/to/file/library.a] [/path/to/file/object.o]
必须指定几个数值库(BLAS、LAPACK 或 scaLAPACK 等)。
例如,使用 Intel Composer 套jian(并使用 编译CPP_OPTIONS= .. -DscaLAPACK ..)会产生:
MKL_PATH = $(MKLROOT)/lib/intel64
BLACS = -lmkl_blacs_intelmpi_lp64
SCALAPACK = $(MKL_PATH)/libmkl_scalapack_lp64.a $(BLACS)
LLIBS += $(SCALAPACK)
编译 VASP 所需的默认对象列表由文件SOURCE中的变量给出/path/to/vasp.X.X.X/src/.objects。mak-e-file.include可以通过以下方式 指定要添加到此列表中的对象:
OBJECTS= .. 你的对象列表 ..
实际上,必须以这种方式添加多个对象,例如FFT 库。
线性代数库(强制)
要构建 VASP,您需要链接到 BLAS、LAPACK 和 scaLAPACK。一些编译器套jian,例如 Intel Composer 套jian,预先打包了这些库,因此无需自行下载和构建它们。
· 使用英特尔 Composer 套jian,链接到作为 MKL 一部分的 BLAS、LAPACK 和 scaLAPACK 库,操作如下:
FCL = mpiifort -mkl = 顺序
MKL_PATH = $(MKLROOT)/lib/intel64
BLAS =
LAPACK =
BLACS = -lmkl_blacs_intelmpi_lp64
SCALAPACK = $(MKL_PATH)/libmkl_scalapack_lp64.a $(BLACS)
LLIBS += $(SCALAPACK) $(LAPACK) $(BLAS)
如果您使用 Intel 的编译器和 OpenMPI 而不是 Intel-MPI,请将BLACS上面的行替换为:
BLACS = -lmkl_blacs_openmpi_lp64
· 对于NVIDIA HPC-SDK (>=21.2) 即:
BLAS = -lblas
LAPACK = -llapack
SCALAPACK = -Mscalapack
LLIBS += $(SCALAPACK) $(LAPACK) $(BLAS)
· 当您自己构建 BLAS、LAPACK 和 scaLAPACK 时,您应该链接到相应的共享对象 ( lib*.so),如下所示:
LIBDIR = /path/to/my/libs/
BLAS = -L$(LIBDIR) -lrefblas
LAPACK = -L$(LIBDIR) -ltmglib -llapack
SCALAPACK = -L$(LIBDIR) -lscalapack
LLIBS += $(SCALAPACK) $(拉帕克) $(BLAS)
要链接静态库对象 ( *.a),例如 scaLAPACK,请将SCALAPACK上面的行替换为:
SCALAPACK = $(LIBDIR)/libscalapack.a
fftw 库(强制)
该库提供执行快速傅立叶变换 (FFT) 的例程。
对象
添加提供 FFT 的要编译(或链接)的对象(可能包括对象的静态库*.a)。
很可能您正在构建并希望使用来自某个fftw-DMPI库(推荐)的 FFT 。在这种情况下:
对象 = fftmpiw.o fftmpi_map.o fftw3d.o fft3dlib.o
INCS
对于fftw库,即
对象= .. fftw3d.o fftmpiw.o ..
该变量INCS必须设置为包含包含以下内容的目录fftw3.f:
INCS+=-I/路径/to/fftw/安装
这是必需的,因为fftw3d.F包括.fftmpiw.Ffftw3.f
注意: 如果未设置fftwINCS库必须存在于. fftw3.f/path/to/vasp.X.X.X/src |
常见的选择是:
· 使用英特尔 Composer 套jian
构建时,最好链接到英特尔 FFT 的MKL fftw包装器:
FCL = $(FC) -mkl=顺序
对象 = fftmpiw.o fftmpi_map.o fftw3d.o fft3dlib.o
INCS += -I$(MKLROOT)/include/fftw
· 要显式链接fftw库(在本例中为fftw-3.3.4):
OBJECTS = fftmpiw.o fftmpi_map.o fftw3d.o fft3dlib.o
FFTW ?= /path/to/your/fftw-3.3.4
LLIBS += -L$(FFTW)/lib -lfftw3
INCS += -I$(FFTW )/包括
· 对于其他配置,请参考/path/to/vasp.xxx/archmak-e-file.include.your_choice中的文件或查看mak-e-file.include。
FFT 相关对象优化级别的特殊规则
根据过去的经验,明确设置了 FFT 相关对象编译的优化级别。这是按如下方式完成的:
OBJECTS_O1 += fft3dfurth.o fftw3d.o fftmpi.o fftmpiw.o
OBJECTS_O2 += fft3dlib.o
lib库(必选)
该库的源代码包含在 VASP 发行版中。以下变量与其配置相关:
CPP_LIB
调用预编译器的命令。在大多数情况下,它被设置为:
CPP_LIB=$(CPP)
FC_LIB
调用 Fortran 编译器的命令。通常,设置为:
FC_LIB=$(FC)
注意: 库可以在没有 MPI 支持的情况下编译,即,当FC=mpif90,FC_LIB 可以指定一个没有 MPI 支持的 Fortran 编译器,例如,FC_LIB=ifort。 |
FFLAGS_LIB
Fortran 编译器标志,包括优化级别的规范。在多数情况下:
FFLAGS_LIB=-O1
FREE_LIB
指定 Fortran 编译器接受自由格式源布局所需的选项,没有行长度限制。在大多数情况下,设置就足够了:
FREE_LIB=$(免费)
CC_LIB
调用 C 编译器的命令,例如 gcc、icc 等。
注意: lib库可以在没有 MPI 支持的情况下编译。 |
CFLAGS_LIB
C 编译器标志,包括优化级别的规范。在多数情况下:
CFLAGS_LIB=-O
OBJECTS_LIB
要添加到库中的“非标准”对象列表。在多数情况下:
OBJECTS_LIB= linpack_double.o
使用-Duse_shmem编译 VASP 时,还必须添加getshmem.o,即添加以下行:
OBJECTS_LIB+= getshmem.o
解析器库(强制)
该库的源代码包含在 VASP 发行版中。以下变量与其配置相关:
CXX_PARS
调用 C++ 编译器的命令,例如 g++、icpc 等。
解析器需要链接到C++ 标准库。如果这还不是定义的一部分,则可以将其添加到编译器选项中。使用英特尔 Composer 套jian时,这相当于: FCL LLIBS
LLIBS += -lstdc++
量子库
QD库包含在NVIDIA HPC SDK ≧21.2中,支持四倍精度运算。将以下行添加到您的mak-ef-ile.include:
NVROOT ?= /path/to/nvidia/hpc_sdk/Linux_x86_64/version
QD ?= $(NVROOT)/compilers/extras/qd
LLIBS += -L$(QD)/lib -lqdmod -lqd
INCS += -I$( QD)/包含/qd
提示:以下行可能有助于找到 NVIDIA 根目录: |
NVROOT =$(shell which nvfortran | awk -F /compilers/bin/nvfortran '{ print $$1 }')
重要提示:自NVIDIA HPC SDK = 21.2起,需要在系统环境中手动添加QD库的库路径: |
导出 LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$(NVROOT)/compilers/extras/qd/lib



























