ABACUS 固定总磁矩实操
nupdown固定晶胞总磁矩;与初始mag、逐原子约束的区别及真实Fe2对照。
阅读本篇目录
下载完整输入、原生日志、自旋密度及绘图脚本,解压进入附件根目录。先看已有结果:
bash analyze.sh
这一步仅用一个CPU核心处理参考数据,生成CSV及四张图,不启动DFT。需要完整重算时:
sbatch submit.slurm
脚本申请一张P100,按顺序完成12个条件;每个条件1个MPI进程、1个CPU线程,保留Slurm分配的GPU。参考实算为ABACUS3.10.1、双精度GPU,GNU13.3、HPC-X2.50/OpenMPI5.0.10rc2、CUDA12.8、OpenBLAS0.3.30;模块abacus/3.10.1-p100。未提供本批8173M或V100性能数据。不要在登录节点执行DFT。所有模型固定结构,scf_thr=1e-6,采用3×3×3网格;这些数值用于操作演示,不作为磁相图或收敛材料参数。
1. 初始mag和固定nupdown不是同一件事#
STRU里的mag只帮助选择初始自旋态;nupdown指定N↑−N↓,从而固定全晶胞总自旋磁矩。它不分别锁定每个原子的磁矩,也不是SOC中的轨道磁矩。

本例同一个Fe双原子晶胞,先保留自由FM参照,再分别令总磁矩为2和4 μB/晶胞。图中3个条件只作离散对照,没有用三点拟合磁性相变。
2. 完整2μB输入#
展开完整 INPUT、STRU、KPT
INPUT#
INPUT_PARAMETERS
pseudo_dir ../../PP_ORB
orbital_dir ../../PP_ORB
suffix tutorial
calculation scf
ecutwfc 100
scf_thr 1e-6
scf_nmax 200
out_chg 1
smearing_method gaussian
smearing_sigma 0.015
mixing_type pulay
mixing_ndim 10
mixing_beta 0.1
ks_solver elpa
basis_type lcao
symmetry -1
nspin 2
out_mul true
device gpu
precision double
cal_force 0
cal_stress 0
nupdown 2
nbands 32
STRU#
ATOMIC_SPECIES
Fe 55.845 Fe_ONCV_PBE-1.0.upf
NUMERICAL_ORBITAL
Fe_gga_9au_100Ry_4s2p2d1f.orb
LATTICE_CONSTANT
1.889725989
LATTICE_VECTORS
2.8328152400000000 0.0000000000000000 0.0000000000000000
0.0000000000000000 2.8328152400000000 0.0000000000000000
0.0000000000000000 0.0000000000000000 2.8328152400000000
ATOMIC_POSITIONS
Direct
Fe
1.0
2
0.0 0.0 0.0 mag 2
0.5 0.5 0.5 mag 2
KPT#
K_POINTS
0
Gamma
3 3 3 0 0 0
关键行是nspin 2与nupdown 2。4 μB条件只把nupdown改成4。目标是整个含两个Fe的晶胞,不能理解为“每个Fe 2 μB”。保持赝势、晶胞、k点和展宽相同;用于能量扫描时还需逐项研究收敛。
3. 检查实际目标与输出#
grep 'nupdown' work/cases/fe-fixed2/INPUT
grep 'total magnetism' work/cases/fe-fixed2/OUT.tutorial/running_scf.log | tail -n 1
grep 'Total Magnetism on atom' work/cases/fe-fixed2/OUT.tutorial/mulliken.txt
| 条件 | 日志总磁矩,μB/晶胞 | 相对自由FM能量,eV/Fe |
|---|---|---|
| fe-fixed2 | 2.000000 | 0.323439 |
| fe-fixed4 | 4.000000 | 0.029698 |
| fe-fm | 4.406210 | 0.000000 |
自旋密度积分与日志目标在本例也一致,有限网格下约有10⁻⁴ μB量级差异。日志目标正确并不意味着该目标是材料无约束基态。
4. 逐原子约束的版本边界#
逐原子约束需要独立方法,不能用mag或全局nupdown代替。在当前3.10.1,设置sc_mag_switch 1会被该版本输入检查器主动停止,提示该功能尚不稳定;本教程没有可供直接使用的逐原子约束结果。当前需要固定总磁矩时用这里的nupdown;需要固定每个原子的大小/方向时,应先选择明确支持该功能的版本和方法。
这一限制见3.10.1原生输入检查,不要因为参数列表存在就假定可执行。普通非共线初始方向与真正方向约束也应区分。
读取所有本例总磁矩与能量:
python - <<'PY'
import csv
with open('reference/analysis/conditions.csv') as f:
for r in csv.DictReader(f):
if r['name'] in ['fe-fm','fe-fixed2','fe-fixed4']:
print(r['name'],r['Mz'],r['E_eV'])
PY
nupdown的定义见官方自旋指南。