ABACUS二维体系原子与面内晶胞优化
MoS2单层分别优化原子和面内晶胞,保持真空方向固定并核对力、应力与最终结构。
阅读本篇目录
下载完整输入、实际结果、赝势与五张高清图。解压后在已分配P100资源中执行 bash run.sh,也可用 sbatch submit.slurm提交一张GPU。新结果在 work/cases,表格在 work/analysis,结构在 work/converted,图片在 work/figures。
1 先选清楚要优化什么#
二维体系有两种常见任务:
- 只优化原子位置:保持面内晶格与真空盒不变,用
calculation relax。 - 同时优化原子和面内晶胞:用
calculation cell-relax并设置fixed_axes c,保留真空方向的c晶格矢量。
本例使用MoS₂单层原胞,3个原子,c=23.13Å。原始层厚3.13Å,两侧总真空间隔20Å。固定原子优化从a=3.18Å开始;面内晶胞优化从压缩的a=3.10Å开始。

图中的3×3重复仅用于看清结构,实际DFT输入仍为3原子原胞。
2 准备三个文件与赝势#
module load abacus/3.10.1-p100
cat inputs/mos2-relax/INPUT
cat inputs/mos2-relax/STRU
cat inputs/mos2-relax/KPT
程序为ABACUS3.10.1 P100版,GNU13.3、HPC-X2.50、CUDA12.8。平面波基组不需要LCAO数值轨道,但仍需要Mo/S赝势。
只优化原子的完整INPUT:
INPUT_PARAMETERS
suffix tutorial
calculation relax
basis_type pw
ecutwfc 60
scf_thr 1e-8
scf_nmax 150
ks_solver cg
device gpu
precision double
cal_force 1
cal_stress 1
pseudo_dir ../PP
symmetry 0
smearing_method fixed
mixing_beta 0.3
relax_nmax 80
force_thr_ev 0.02
relax_method cg
out_stru 1
展开原子优化起点STRU与KPT
ATOMIC_SPECIES
Mo 95.95 Mo_ONCV_PBE-1.0.upf
S 32.06 S_ONCV_PBE-1.0.upf
LATTICE_CONSTANT
1.8897261246257702
LATTICE_VECTORS
3.180000000000 0.000000000000 0.000000000000
-1.590000000000 2.753960784035 0.000000000000
0.000000000000 -0.000000000000 23.130000000000
ATOMIC_POSITIONS
Direct
Mo
0.0
1
0.000000000000 0.000000000000 0.500000000000 1 1 1
S
0.0
2
0.666666666667 0.333333333333 0.567661046260 1 1 1
0.666666666667 0.333333333333 0.432338953740 1 1 1
K_POINTS
0
Gamma
3 3 1 0 0 0
cal_force 1输出力;cal_stress 1输出应力,但单纯输出应力不会自动优化晶胞。是否改变晶胞由 calculation和约束设置决定。
3 允许面内变化,固定c方向#
完整晶胞优化INPUT如下:
INPUT_PARAMETERS
suffix tutorial
calculation cell-relax
basis_type pw
ecutwfc 60
scf_thr 1e-8
scf_nmax 150
ks_solver cg
device gpu
precision double
cal_force 1
cal_stress 1
pseudo_dir ../PP
symmetry 0
smearing_method fixed
mixing_beta 0.3
fixed_axes c
stress_thr 1
relax_nmax 80
force_thr_ev 0.02
relax_method cg
out_stru 1
它使用 fixed_axes c固定c矢量,a、b和原子位置可以优化。不是把所有原子的z坐标固定,也不是把水平方向的原子移动全部锁住。STRU中的移动标志仍决定各原子哪些方向可动。
cat inputs/mos2-cell/STRU
sbatch submit.slurm
本例用60Ry、3×3×1、电子密度残差1E−8、力0.02eV/Å、应力1kbar。它们用于实操参考,实际性质计算仍应检查基组、k点和真空间隔收敛。
4 运行后分开检查力与应力#
grep 'charge density convergence is achieved' work/cases/mos2-cell/OUT.tutorial/running_cell-relax.log
grep 'Largest gradient' work/cases/mos2-cell/OUT.tutorial/running_cell-relax.log
grep 'Relaxation is converged' work/cases/mos2-cell/OUT.tutorial/running_cell-relax.log
grep 'FINAL_ETOT' work/cases/mos2-cell/OUT.tutorial/running_cell-relax.log
cat work/cases/mos2-cell/OUT.tutorial/STRU_ION_D
running_relax.log对应原子优化;running_cell-relax.log对应晶胞优化,不要只按一个固定文件名寻找结果。
| 工作流 | 最终面内a/Å | c/Å | 最终最大力分量/eV·Å⁻¹ |
|---|---|---|---|
| 只优化原子 | 3.180000 | 23.130000 | 0.009199 |
| 原子+面内晶胞 | 3.193171 | 23.130000 | 0.005049 |
晶胞优化最终最大应力分量约0.378758kbar,达到本例1kbar设置。二维体系输出的三维应力包含真空盒体积影响;不能把含真空盒的kbar数值不换算就当作二维面应力。

两条曲线初始晶格不同,分别减去各自最终能量,不能把曲线高度当成同一个起点的优化效率比较。
5 取出最终结构并画图#
module load ase/3.29.0
ase convert work/cases/mos2-cell/OUT.tutorial/STRU_NOW.cif mos2-final.extxyz
python -B work/convert_structures.py
python -B work/analyze.py
python -B work/plot_results.py
原子优化后a、b、c均保持原值;面内晶胞优化后a、b改变、c保持原值。自己换材料时,应实际读取最终晶格矢量确认约束生效,不能只看到 fixed_axes c就省略结果检查。
较厚薄层、表面吸附和带电体系还需考虑偶极、电荷、真空及边界处理;本例为中性、镜面对称的单层MoS₂。