
VASP是备受专业技术人员认可的DFT计算软件,每年发表论文超过1万篇,至2022年底,文章总量已超过11万篇。其计算结果不仅可以验证实验,更能够预测实验结果,指导实验路线。

本文为华算科技朱老师技术团队的Cilver老师和Ravi老师制作的《VASP官方入门手册》第三章:2.预编译器标志概述,并行版本和仅Gamma点版本。本教程将详细介绍VASP软件及其计算方法,帮助大家快速入门VASP计算,搞定顶刊技能!
3.5 预编译器标志概述,并行版本和仅Gamma点版本
为了支持不同的机器和不同的VASP版本,VASP 在很大程度上依赖于 C 预编译器 (cpp)。cpp 用于从 *.F 文件创建 *.f 文件。可以传递多个标志给cpp以生成不同版本的*.f文件:目前支持以下标志:
single_BLAS |
single precision BLAS/LAPACK calls |
vector |
compile vector version |
essl |
use ESSL call sequence for DSYGV |
NGXhalf |
charge density reduced in X direction |
NGZhalf |
charge density reduced in Z direction |
wNGXhalf |
gamma point only reduced in X direction |
wNGZhalf |
gamma point only reduced in Z direction |
NOZTRMM |
do not use ZTRMM |
REAL_to_DBLE:
仅VASP.4 版本: | change REAL(X) to DBLE(X) |
debug | gives more information during run |
noSTOPCAR | do not re-read STOPCAR file |
F90_T3D | compile for T3D |
scaLAPACK | use scaLAPACK (parallel version only) |
T3D_SMA | use shmem communication on T3D instead of MPI |
MY_TINY | required accuracy in symmetry package |
USE_ERF | use intrinsic error function of cray mathlib |
CACHE_SIZE | cache size used to optimise FFT’s |
MPI | compile parallel version |
MPI_CHAIN | serial version with nudged chain support (not supported) |
pro_loop | uses DO loops instead of DGEMV |
use_collective | use collective MPI calls (VASP.4.5) |
MPI_BLOCK | block the MPI calls (VASP.4.5) |
WAVECAR_double | use double precision WAVECAR files (VASP.4.5) |
这些标志通常在 makefile 的 cpp 行中使用:大部分这些标志在与平台相关的makefile中已经正确设置了,因此大多数用户无需修改。但要生成并行版本,则需要修改 makefile。多数 makefile 都有以如下开头的部分:#———————————————————————-#MPI VERSION#———————————————————————–如果从以下行中移除注释符号’#’,就会生成 vasp 的并行版本。请注意,如果要编译并行版本,要么从头开始(从 tar 文件中解压 VASP),要么键入:最后,有两个标志对所有用户都很重要。如果在 makefile 中设置了 wNGXhalf,编译出的 VASP 版本只能在Γ点 有效。该版本比标准版本快 30-50%。要编译只在Γ点运行的并行版本,必须设置 wNGZhalf 而不是 wNGXhalf 标志。必须再次强调的是,如果在 makefile 中设置了这些标志之一,则必须重新编译所有 Fortran 文件。这可以通过解压缩 tar 文件或键入:3.5.1 单精度 BLAS(single_BLAS)如果代码是为单精度机器编译的,则需要此标志。在这种情况下,将使用单精度版本的 BLAS/LAPACK 调用。仅在 CRAY 矢量计算机上使用此标记。如果使用矢量机,则应设置此标志。在这种情况下,将避免某些无法向量化的结构,从而使代码在矢量机上的运行速度更快。只有在链接 LAPACK 之前链接 ESSL 时才使用此标志。ESSL 使用与 LAPACK 不同的 DSYGV 调用序列。(目前 RS 6000 的 makefile 是先链接 LAPACK 后链接 ESSL,因此不需要此标志)。如果 LAPACK 没有得到很好的优化,则应避免调用 ZTRMM,而代之以 ZGEMM。这可以通过在 makefile 中设置 NOZTRMM 来实现。3.5.5 将 REAL 改为 DBLE(REAL_to_DBLE,仅限 VASP.3.X)标记会将所有 REAL(X) 调用改为 DBLE(X) 调用,仅在 SGI 机器上需要使用。在 SGI 机器上,如果使用自动加倍编译器标志 (-r8),REAL 调用不会自动增强为 DBLE 调用。在 VASP.4 中不再需要该标志。对于电荷密度和电势,使用其中一个标志可以节省一半的存储空间,因为:要使用实数到复数的快速傅里叶变换(FFT),必须在串行版本中指定 -DNGXhalf,在并行版本中指定 -DNGZhalf。如果在串行版本指定了 -DNGXhalf 标志,则实数到复数的 FFT 将通过复数到复数的 FFT 来 “模拟”。注意:如果在 makefile 中更改了该标记,则需要重新编译所有 *.F 文件。可以通过键入以下内容完成操作:在 Γ 点,如果使用其中一个标志,可以节省一半的波函数存储空间,因为要使用从实数到复数的 FFT,串行版本必须指定 -DwNGXhalf,并行版本必须指定 -DwNGZhalf。如果为串行版本指定了 -DwNGXhalf,实数到复数的 FFT 将通过复数到复数的 FFT 来 “模拟”。注意:如果在 makefile 中更改了该标志,则需要重新编译所有 *.F 文件。编译方法如下最好将只编译 Γ点的版本放在一个单独的目录下(例如 vasp_gamma)。将所有文件从 vasp 复制到 vasp_gamma,将 makefile.machine 复制到 makefile,然后编辑 makefile。在 cpp 行添加 wNGXhalf(或 wNGZhalf)标志。CPP = … cpp … -DNGXhalf -DwNGXhalf …定义 debug 可在运行过程中提供更多信息。附加信息会写入 stderr,可能有助于找出程序崩溃的原因。请注意,使用调试通常能更快地发现错误,但在某些并行计算机上,调试并不完全受支持。指定此标志可避免每次电子步迭代时都读取 STOPCAR 文件。在 IO 子系统速度较慢的高速机器上(如 T3D、T3E 或富士通 VPP),这一步骤的资源耗费太高。注意,仍支持 LSTOP = .TRUE.(即可以在电子步最小化后中断)。针对 T3D 进行编译,这只会产生微小的影响,例如某些编译器指令,如将需要使用第一个指令在Cray矢量机上正确向量化,但在T3D上则会产生警告。此外,在 T3D 上每次迭代都不会读取 STOPCAR 文件(见上一小节),因为在 T3D 上重新读取 STOPCAR 文件的代价太高(0.5-1 秒)。如果在 T3D 上使用 scaLAPACK 标志,还必须指定 F90_T3D 标志,因为 T3D 要求某些数组以特殊方式分配(shmem-allocation)。在 VASP 中,对称性由 POSCAR 文件决定。在VASP.4.4中,位置的正确指定精度可以通过编译时使用变量MY_TINY进行定制化。默认情况下,MY_TINY 为 10-6,这意味着位置必须精确到约 7 位数以内。如果输入的位置精度不符合要求,VASP 将无法确定基组的对称性群。如果在 makefile 中设置了-Davoidalloc,某些对性能敏感的区域避免使用ALLOCATE和DEALLOCATE序列。特别是在 LINUX 系统下,ALLOCATE 和 DEALLOCATE 的速度很慢,因此避免使用它可以使某些例程的性能提高大约 10%。如果在 makefile 中设置了 -Dpro_loop,一些 DGEMV 和 DGEMM 调用将被 DO 循环所取代。这会提高SGI上非局部投影函数的性能。其他机器则无法受益。如果在 makefile 中设置了 -DWAVECAR_double,WAVECAR 文件将以双精度写入,与 VASP.4.4 完全兼容。VASP.4.5 的默认设置是单精度。如果设置此标志,则生成并行版本。需要重新编译所有文件(touch *.F)。并行化需要在机器上安装 MPI,并且必须在 makefile 中指定库的路径。有一个小的 “技术 “问题:MPI 需要一个包含文件 mpif.h,而该文件有时不符合 F90 自由格式(CRAY 是一个例外)。因此,必须将包含文件 mpif.h 复制到 VASP.4 目录,并转换为 F90 格式,命名为 mpif.h。使用以下代码完成操作:> cp …mpi…/include/mpif.h mpif.h转换实用程序可将 F77 fortran 文件转换为 F90 自由格式文件,该程序位于 VASP.4 目录中。(在大多数 Cray T3E 上,这不是必需的,mpif.h 可以在默认包含路径中找到)。使用此标记可编译出支持NEB(微动弹性带)方法的版本。mpif.h 文件必须以上述相同方式创建。大多数文件的编译方式与串行版本相同(例如不需要并行 FFT 支持)。在这种情况下,每帧图像必须且只能在一个节点上运行,标签 IMAGES 必须设置为节点数:该版本与串行版本一样快(因此通常比完整的 MPI 版本更快),可以在工作站集群上非常高效地运行。VASP.4.4 和 VASP.4.5 目前不支持此标记。在 VASP.4.5 中,VASP 的 MPI 版本避免了集合通信,因为在开源的 MPI 包(如 LAM 或 MPICH)中,集合通信的实现非常不理想。另一方面,在 SGI Origins 和 T3E 上,集合 MPI 例程得到了高度优化。因此,在这些平台上应该指定”use_collective”,并在集合MPI例程针对特定架构进行了优化的情况下使用。目前,VASP 会将使用大数据块的 MPI 发送(MPI_isend)和 MPI 接收(MPI_irecv)调用拆分成较小的数据块。我们发现,在使用100 Mbit和/或Gbit以太网连接的LINUX集群上,较大的数据块会导致带宽显著降低(所有内核,包括2.6.X Linux内核的所有mpi版本,lam.7.1.1)。MPI_BLOCK 决定块的大小。如果使用use_collective,MPI_BLOCK 仅用于快速全局求和例程(在 mpi.F 中查找 M_sumf_d)。尽管 VASP.4 最初针对 T3D(和 T3E)进行了优化,但目前对 shmem 通信的支持还很低级,甚至可能无法运行。要使用高效的 T3D(T3E)mem 通信方案,请在 makefile 中指定 T3D_SMA。这可能会将通信加速最多两倍。但请注意,如果在数据流中使用 VASP,这也会在 T3E 上造成问题:export SCACHE_D_STREAMS=1因此,默认的T3E makefile不使用优化的通信例程,因为数据流带来的性能提升通常比优化通信更重要(因此,可以在T3E上打开数据流,例如键入. export SCACHE_D_STREAMS=1).如果指定,VASP 将使用 scaLAPACK 代替 LAPACK 对子空间矩阵(Nbands ×Nbands)进行 LU 分解(时序 ORTHCH)和对角化(时序 SUBROT)。该操作在串行版本中速度非常快(2%),但在大规模并行机上却拖慢了多电子体系的计算。如果 scaLAPACK 安装在大型并行计算机(T3E、SGI、IBM SPX)上,请使用此开关。在T3E上,可以从编程环境3.0.1.0开始使用scaLAPACK。(例如,3.0.0.0版本不提供所需的例程)。在T3D上(但不适用于T3E),必须指定附加开关-DT3D_SCA至少对于我们测试过的scaLAPACK版本来说(T3D scaLAPACK与标准scaLAPACK例程不兼容)。在速度较慢的网络和 PC 集群(100 Mbit 以太网甚至 1 Gbit 以太网)上,不建议使用 scaLAPACK。性能提升很小, scaLAPACK 甚至比 LAPACK 更慢。如果您仍然想尝试,请从 www.netlib.org/SCALAPACK 下载所需的源文件。编译相当简单,但需要熟悉 MPI、Fortran、C 和 UNIX makefile(始终确保底层 BLACS 例程工作正常!)。可以在运行时关闭ScaLAPACK。遇到ScaLAPACK问题时,请使用此功能作为备选方案。此外,在某些情况下,基于ScaLAPACK的LU分解(时序ORTCH)比串行LU分解更慢。因此,也可以通过在INCAR文件中指定LSCALU = .FALSE.来关闭并行LU分解(在这种情况下,子空间旋转仍然使用ScaLAPACK)。我们在 CRAY J90 上使用 VASP.4.X 的 MPI 版本时遇到了几个问题。首先,MPI_double_precision(MPI_double_complex)必须改为 MPI_real(MPI_complex)。其次,INCAR 文件的读取必须序列化(即一次只能有一个节点进行读取)。在 makefile 中定义 CRAY_MPP 可以解决这些问题。但我们还不确定是否所有 CRAY_MPP 机器都需要这个标志。如果能提供相关信息,我们将不胜感激。编译VASP.4.X并不总是简单的,因为f90编译器通常不是非常可靠。请注意,在编译并行版本时,必须以 f90 样式提供包含文件 mpif.h(参见第 3.5.15 节)。以下是编译器和平台以及我们检测到的问题类型列表,在某些情况下,可以在相关的 makefile 中找到更多信息:没有问题,但编译(尤其是 main.F)需要很长时间。如果有时间限制,f90编译器在编译过程中可能会被终止。在这种情况下,损坏的 .o 文件会保留下来,该文件必须手工删除。如果最后编译的文件是 nonl.F,用户必须注销,再次登录并输入 rm nonl.o从 3.2.5.0 开始的所有编译器版本都能正常工作(包括 xlf90 4.X.X)。编译器版本 3.2.0.0 无法正确编译并行版本,但串行版本应该没问题。一位用户报告说,如果使用选项 -qddim,3.2.3.0 版本可以正确编译并行版本。在某些系统中,mpif.h 文件位于默认的包含搜索路径中。将 mpif.h 文件复制到本地目录并转换为 f90 样式不起作用(因为系统范围内的 mpif.h 文件总是包含在内)。解决办法之一是将 mpif.h 文件重命名为 mpif90.h。如果使用新的mpi例程(parallel_new.tar)(使用 lslpp -L – grep xlf 查找当前编译器版本)在某些 SGI 上,必须将 VASP.4.X 和 VASP.lib 的 makefile 中的 -64 选项改为 -n32(例如 O2)。Fortran 90、7.2 在 irix 6.2 上运行正常。旧版本在编译 main.F 时往往会崩溃,特别是编译器版本为 Fortran 90、6.3 和 7.1 的程序无法运行。(使用版本 – grep f90 查找当前编译器版本)编译器版本 DIGITAL Fortran 90 V5.0-492 和 V5.2 可以正确编译 VASP.4.X。较旧的编译器版本和 V5.1 版本不能编译 VASP,需要修复或升级编译器。没有问题,但编译(尤其是 main.F)需要很长时间。如果有时间限制,f90 编译器可能会在编译过程中被终止。在这种情况下,损坏的 .o 文件会保留下来,该文件必须手动删除。如果最后编译的文件是 nonl.F,用户必须注销,再次登录并输入 rm nonl.o然后再次输入 make。在开始编译前,不要忘记上传所有需要的模块。通常在配置文件中完成,在英国 T3D 上,必须初始化以下模块:if [ -f /opt/modules/modules/init/ksh ] ; then. /opt/modules/modules/init/ksh module load modules PrgEnvVASP 仅支持 T3D 上最新的 “alpha “scaLAPACK 版本(T3E 上必须安装 PrgEnv 3.0.1.0),而且,VASP无法正常使用libsci.a库中提供的scaLAPACK版本(libsci.a只包含一个降级版本的scaLAPACK,支持的功能非常有限)如果无法获得该 alpha 版本,则必须关闭 scaLAPACK(参见第 3.5.20 节)。编译器版本 3.0.1.0(及更高版本)应能正确地编译代码。可能需要对 makefile 稍作修改:在 IDRIS-T3E 上,cpp(C 预处理器)位于 /usr/lib/make/ 目录下,在其他 T3E 机器上可能需要更改该位置(makefile 中的 CPP 行)。为了获得最佳性能,在运行代码之前,还应该允许T3E上的硬件数据流动,可以通过设置export SCACHE_D_STREAMS=1来实现。性能提升可达 30%。但我们必须指出,如果在 makefile 中指定开关 T3D_SMA,代码就会时不时崩溃。因此,在默认的 makefile 中,目前没有指定 T3D_SMA(并且没有使用经过优化的 T3D/T3E 通信例程)。如果通信性能非常重要,可以在 makefile 中指定 T3D_SMA,但可能需要通过键入以下内容确定打开数据流:export SCACHE_D_STREAMS=0据报道,NAG 编译器 NAGWare f90 2.2(260) 版可以编译代码。由于我们无法访问该版本,所以在 LINUX 下使用 NAG 编译器遇到问题,我们无能为力。在尝试编译之前,请检查 makefile。目前,我们支持 Portland Group F90/HPF (PGI)。对 Absoft f90 编译器的测试表明,PGI 编译器生成的代码速度要快 10-30%。PGI f90 编译器的 makefile 扩展名为 linux pg。目前已对 1.7 版和 3.0.1 版进行了测试,两个版本生成的代码速度相同。详情请查看 makefile。“实验+计算”的模式已成为顶刊标配!还在苦于看不懂论文的计算部分?不会分析相关结果?不会回复审稿意见?错失顶刊?
朱老师带你零基础轻松入门DFT计算,提升论文档次,发顶刊快人一步!
学员已发表Nature、Nature Energy、Nature Materials、Angew..、JACS、AM、AEM等期刊。
声明:如需转载请注明出处(华算科技旗下资讯学习网站-学术资讯),并附有原文链接,谢谢!