5 问题与解决方案¶
5.1 为什么单进程可正常运行,但多进程并行运算会报错?¶
程序并非所有模块都支持并行运算,目前支持并行的模块(由Model设置项决定)主要是“ Model atomic_effective_H
”(蒙特卡洛模拟和分子动力学模拟,分别参见2.2.3节和2.2.4节)和“ Model Spin_lattice_interaction
”(简单磁性体系的蒙特卡洛模拟,参见2.1.3节)。而其他模块因相对耗时较短,暂未支持并行运算。
在使用MC(蒙特卡洛模拟)的PTMC(并行退火蒙特卡洛模拟)功能时,须注意设置项“ PT.M
”必须是总进程数的整数倍,否则无法正常运行。
在使用MD(分子动力学模拟)功能时,需注意设置项“ block SupellCell
”的扩胞倍数必须是总进程数的整数倍,否则无法正常运行。
以上提到的总进程数与运行命令中“ mpirun -np ”后面的数字是一致的。
5.2 超胞与原胞的相容性检查¶
在PASP的大多数模块中,都会检查超胞与原胞的相容性(总是假定超胞由3.1.3节信息确定,常用文件名 cell.str 或 POSCAR ;原胞由3.1.4节信息确定,常用文件名 unit_cell.str 或 POSCAR_UC ),以确保超胞数据与原胞数据是匹配的。这项检查是非常必要的,因为实际使用过程中很容易出现超胞、原胞数据有错误的情形,如果不作该检查,那么在后续计算中很容易导致意外报错终止或计算结果错误。建议用户务必熟悉相容性检查的几类报错,以便在遇到相应报错时迅速锁定问题原因。
第一类报错 “The number of atoms and the volume of supercell are not compatible!” :该报错表示超胞晶格体积与原胞晶格体积之比(四舍五入取整),不等于超胞原子数与原胞原子数之比。常见的原因有:(1) 超胞晶格数据误用成原胞晶格数据;(2) 超胞很大而晶格常数精度太低。
第二类报错 “The input supercell lattice is not compatible with the primitive lattice!” :该报错表示超胞晶格基矢不能用原胞晶格基矢的整数倍线性组合表示。最常见的原因是:超胞和原胞没有采用同一套笛卡尔坐标系,这导致同一原子在两套坐标系下给出了不同的笛卡尔坐标。特别是当原胞的第一个基矢与晶胞a轴(即 cell.str 的第一个基矢)方向不一致时,很容易分别以原胞第一个基矢、晶胞第一个基矢为x轴各自建立笛卡尔坐标系,而这样是会导致相容性检查不通过的!
第三类报错 “The input supercell structure is not compatible with the primitive structure!” :该报错对应两种情形,第一种是超胞中某个原子的坐标无法精确匹配到原胞中的原子坐标(此时会在报错信息中指出无法匹配的超胞原子编号、坐标及其建议坐标值,最可能对应的原胞中原子编号、坐标。这里坐标单位默认为埃,下同。另外对于最可能的匹配方式,会输出笛卡尔坐标下的坐标误差值,单位埃;和基于原胞基矢的分数坐标下的坐标误差值),第二种是匹配后发现元素信息不一致(此时会在报错信息中提供相应的超胞中原子编号及元素序号,及其对应的原胞中原子编号及元素序号)。常见的错因有:(1) 部分原子坐标有过改动,而超胞原胞的坐标信息没有同步改动;(2) 晶胞和原胞的原点选取不一致。
第四类报错 “These two atom coordinates overlap: 编号1 编号2. Please check your input file (cell.str or unit_cell.str)!” :其中“编号1 编号2”是两个具体的整数,给出坐标重叠(或根据周期性边界条件位置等价)的两个原子编号。注意这个报错信息中的编号既可能是原胞中的原子编号,也可能是超胞中的原子编号(报错格式一样),二者都需要检查核对。
最后注意一点,无论遇到上述哪种错误,只要遇到任意一种错误,都会立即报错终止。因此只会报出检查发现的第一处错误,而不会报出所有错误。当用户遇到这类报错时,建议根据错误原因,仔细校对修正后再重新尝试运行。