VASP是备受专业技术人员认可的DFT计算软件,每年发表论文超过1万篇,至2022年底,文章总量已超过11万篇。其计算结果不仅可以验证实验,更能够预测实验结果,指导实验路线。
VASP 被广泛重写以利用 Fortran 90 的强大功能性和灵活性。在重组过程中,性能并不是重中之重(尽管 VASP.4.x 的性能通常优于 VASP.3.2)
主要的目标是提高代码的可维护性。过去,VASP.3.2 中的子程序调用有几行调用序列:
CALL EDDIAG(IFLAG,NBANDS,NKPTS,NPLWV,MPLWV,NRPLWV,
& NINDPW,NPLWKP,WTKPT,SV,CPTWFP,NTYP,NITYP,
& NBLK,CBLOCK,A,B,ANORM,BNORM,CELEN,NGPTAR,
& LOVERL,LREAL,CPROJ,CDIJ,
& CQIJ,IRMAX,NLI,NLIMAX,QPROJ,CQFAK,RPROJ,CRREXP,CREXP,
& DATAKE,CPRTMP,CWORK3,CWORK4,CWORK5,
& FERWE,NIOND,NIONS,LMDIM,LMMAX,
& NPLINI,CHAM,COVL,CWORK2,R,DWORK1,NWRK1,CPROTM,NWORK1,mcpu)
这是不使用任何VASP.3.2 中 COMMON 块的结果。由于引入了派生类型(或结构),同一调用现在只需要两行代码:
CALL EDDIAG(GRID,LATT_CUR,NONLR_S,NONL_S,WUP,WDES, &
LMDIM,CDIJ,CQIJ, IFLAG,INFO%LOVERL,INFO%LREAL,NBLK,SV)
这大大提高了代码的可读性和结构性。现在,在 VASP 中引入和支持新功能要容易得多。我们估计,引入 F90 后,VASP 并行化所需的时间从大约 4 个月减少到 2 个月。
在 VASP.3.2 中,工作数组是以静态方式分配的,并且存在多个EQUIVALENCE语句来节省内存。引入需要工作数组的新子程序总是非常繁琐。在 VASP.4.x 中,所有工作空间都是通过 ALLOCATE 和 DEALLOCATE 即时分配的。这使得代码更小,程序更安全。
最后,VASP.4.x 尽可能使用 MODULES。因此,在编译时会对虚拟参数进行检查,从而使进一步的代码开发更容易、更安全。
VASP 的层次结构相对较为扁平,也就是说,代码的模块化程度并不高。但是,如果要提高模块化程度,就需要进行大量的代码重组和人力投入(目前的代码量约为 50 000 行,完全重写几乎是不可能的)。
VASP.4 中的每个结构都在一个包含文件中定义:
base.inc lattice.inc nonl.inc pseudo.inc broyden.inc mgrid.inc nonlr.inc setexm.inc constant.inc mkpoints.inc symbol.inc mpimy.inc poscar.inc wave.inc
引入 F90 后,VASP 的并行化就容易多了。VASP 的核心结构之一是网格结构(描述三维网格需要网格结构)。下面是在 mgrid.inc 文件中找到的结构的略微简化的版本:
! mapping for parallel version
TYPE(grid_map) :: RC_IN ! recip -> intermeadiate comm.
TYPE(grid_map) :: IN_RL ! intermeadiate -> real space comm. TYPE(communic), POINTER :: COMM ! opaque communicator
NGX、NGY、NGZ 表示 x、y、z 方向的网格点数,NPLWV 表示网格点总数(即 NGX*NGY*NGZ)。大多数量(如电荷密度)都是在这些三维网格上定义的。在顺序版本中,NGX、NGY 和 NGZ 足以对这些网格上定义的量进行三维 FFT。在并行版本中,还必须知道处理器之间的数据分布。这可以通过 RL 和 RC 结构来实现,它们描述了数据在实空间和倒空间中如何在处理器之间分配。在 VASP 中,数据按列分布在节点上,在倒空间中,快速索引是第一个索引(或 x 索引),列可以用一对索引(y,z)来表示。在实空间中,快速索引是 z 索引,列则由一对(z,y)索引。此外,FFT 程序(执行大量通信)将所有需要的设置数据存储在两个名为 RC IN 和 IN RL 的映射结构中。
使用结构而非普通区块的最大优势在于,它可以轻松实现多个网格。例如,VASP 使用一个粗网格来表示超软波函数,另一个更细的网格来表示增量电荷。因此,VASP 中定义了两个网格,一个称为 GRID(用于波函数),另一个称为 GRIDC(用于增量电荷)。实际上还存在第三个网格,它在实空间的分布与 GRID 相似,在倒空间的分布与 GRIDC 相似。这第三个网格(GRID SOFT)用于将软赝电荷密度放到更细的网格 GRIDC 上。
VASP 目前提供能带并行化和平面波系数并行化。为了获得最佳效率,强烈建议同时使用这两种方法。在 vasp.5.2 中,大多数算法都支持按能带分布并行化。
同时对能带和平面波系数进行并行处理可显著减少通信支出。为了实现这一目标,VASP 采用了 2 维 Cartesian 通信拓扑结构:
能带在一组节点之间以循环方式分配,为带内的通信(带内通信 COMM_INB)和带间通信(带间通信 COMM_INTER)设立单独的通信区域。一个带内通信组(如 0-1-2-3)内的通信不会干扰另一个组(如 4-5-6-7)内的通信。这可以通过 MPI 轻松实现,但我们也使用 T3D shmem 通信实现了所需的通信例程。
总之,我们发现逐带 RMM-DIIS 算法具有非常好的负载平衡和极佳的扩展性。在不时需要进行的重新正交化和子空间旋转中,波函数将从各能带重新分配为平面波系数分布。这部分的通信量与 FFT 所需的通信量相比非常小。尽管如此,目前在大规模并行计算机上进行子空间旋转仍是个问题,主要原因是 NBANDS×NBANDS 子空间矩阵的对角化速度极慢。
有几点需要注意:平面波并行化意味着非局部投影算子必须存储在每个带内处理器组上(即 0-1-2-3 节点必须存储所有实空间投影算子)。这意味着内存成本相对较高,因此不应过度进行带内并行化。例如,在 64 个节点的情况下,我们发现最好生成一个 8 乘 8 的笛卡尔通信器。另外要注意的是,即使选择了带间并行化,硬增量电荷也总是分布在所有节点上。这是通过前面提到的第三个网格 GRID_SOFT 来实现,即通过第三个辅助网格,可以将增强和超软部分的表示分离开来。
并行版和串行版的文件完全兼容,可以自由交换。值得注意的是,即使并行版本的节点数发生变化,也可以从现有的 WAVECAR 和/或 CHGCAR 文件重新启动。
但也要注意,WAVECAR 文件是二进制文件,因此只能在具有类似二进制浮点格式(例如 IEEE 标准格式)的机器之间传输。
4.5 VASP.4.X 版本中的限制与并行化带来的限制
在大多数情况下,VASP.4.X 的运行方式应与 VASP.3.2 相同。然而,在 VASP.4.4 中,IALGO=48 进行了重新设计,以在有问题的情况下更可靠地工作。因此,迭代历史可能无法直接比较。VASP.4.X 还会在每次迭代中减去原子能量,而 VASP.3.2 则不会。这再次意味着在每个电子步骤中写入的能量不具有可比性。
并行版本(即使用 MPI 标志编译 VASP 时)还有一些限制,其中一些可能会在将来被解除:
以下是在并行计算机上运行的 VASP.4.4 不支持的功能列表:
-
VASP.4.4(VASP.4.5 无此限制):最严格的限制是不能在重新启动现有 WAVECAR 文件时更改截断值或晶胞大小/形状。这意味着如果晶胞大小/形状和截断值已更改,则应在开始下一次计算之前删除 WAVECAR(实际上,VASP 会意识到截断值或晶胞形状是否已更改,并将自动按照 WAVECAR 文件不存在的情况继续进行)。该限制的原因是在更改截断球体时需要进行复杂的数据重新分配(即平面波系数的重新填充),而目前尚未实现所需的通信程序。
事实上,即使节点数发生变化,也可以使用现有的 WAVECAR 文件重新启动。唯一需要注意的是,改变 NPAR 参数也可能影响能带数(NBANDS)。只有当文件和当前运行的能带数严格保持一致时,才能读取 WAVECAR 文件。在某些情况下,可能需要在 INCAR 文件中通过指定 NBANDS 参数来明确设置能带数。
-
并行版本完全支持对称性,但我们使用了比较直接的方法来实现对称性。首先从所有节点合并电荷密度,然后进行局部对称,最后将结果重新分配到各节点。这意味着电荷密度的对称将非常缓慢,会严重影响总体性能。
在 VASP.4.4.3(及更高版本)中,可以通过设置 ISYM=2 取代ISYM=1 来减少这一问题。在这种情况下,只有软电荷密度和增量占位被对称化,结果与 ISYM=1 完全相同,但所需内存更少。ISYM=2 是 PAW 方法的默认值。
-
部分局域 DOS 只支持平面波系数的并行化,而不支持能带的并行化。原因是某些文件(如 PROCAR)的逐能带布局相当复杂,如果要模仿这种布局并将数据分布到各个能带上会很复杂。
“实验+计算”的模式已成为顶刊标配!还在苦于看不懂论文的计算部分?不会分析相关结果?不会回复审稿意见?错失顶刊?
朱老师带你零基础轻松入门DFT计算,提升论文档次,发顶刊快人一步!
学员已发表Nature、Nature Energy、Nature Materials、Angew..、JACS、AM、AEM等期刊。
声明:如需转载请注明出处(华算科技旗下资讯学习网站-学术资讯),并附有原文链接,谢谢!