vasp计算时出现如下错误:
POSCAR, INCAR and KPOINTS ok, starting setup
FFT: planning ...
forrtl: severe (41): insufficient virtual memory
Image PC Routine Line Source
vasp_std 00000000014C002B Unknown Unknown Unknown
vasp_std 000000000055371A Unknown Unknown Unknown
vasp_std 00000000012EA471 Unknown Unknown Unknown
vasp_std 000000000040B09E Unknown Unknown Unknown
libc-2.17.so 00002B37AAB31555 __libc_start_main Unknown Unknown
vasp_std 000000000040AFA9 Unknown Unknown Unknown
这是由于内存不足导致,
首先看看vaspwiki上的解释:
Not enough memory – VASP Wiki
相应的解决办法:
1.增加NCORE的值:对于大型和多原子系统,建议将NCORE的值增加到更大的数值(例如4、8,甚至可能超过每个节点的核心数)。这有助于减少每个核心存储非局部投影器所需的内存量。此外,使用实空间投影(LREAL=A)也可以减少每个核心所需的内存。
2.调整KPAR参数:KPAR允许将k点分布到各个核心上。但需要注意的是,只有计算任务是分布的,而轨道的存储并没有在核心之间分布。这意味着使用KPAR=1会在每个核心上产生最小的内存占用(但计算速度会变慢,因为VASP需要依赖其他效率较低的并行化策略)。
3.关闭对称性优化(ISYM=0):电荷对称性优化在每个节点上本地进行,需要三个相当大的数组。从VASP.4.4.2版本开始(以及更新的版本),有一个开关可以运行更节省内存的对称性优化。从VASP.5开始,节省内存的版本ISYM=2成为默认设置。尽管结果可能与ISYM=1略有不同(通常差异约为1E-5 eV)。
4.使用scaLAPACK:如果系统变得很大,请确保使用scaLAPACK。如果scaLAPACK不可用,VASP需要在每个核心上存储一个NBANDS x NBANDS的矩阵,以便在已计算轨道的子空间中对角化哈密顿量。如果scaLAPACK被编译并使用,矩阵将被分布到所有共同处理一个k点的核心上。请注意,如果使用scaLAPACK,减少KPAR会降低这个矩阵的内存需求。
No Comments
Leave a comment Cancel