资讯动态

LAMMPS SPIN 包详解:fix precession/spin 磁自旋进动 fix 的参数、公式与源码实现

发布时间:2026/10/16 7:24:27 来源:尧图企业网站定制
科研科学计算高性能计算【免费下载链接】lammpsPublic development project of the LAMMPS MD software package项目地址https://gitcode.com/gh_mirrors/la/lammps点击查看免费下载本文围绕 LAMMPS SPIN 包的fix precession/spin命令展开系统讲解其四种磁场样式zeeman / anisotropy / cubic / stt的命令语法、物理公式、能量与标量输出机制并结合src/SPIN/fix_precession_spin.cpp源码与examples/SPIN下的真实算例说明如何在铁磁材料如 hcp 钴、bcc 铁、fcc 镍的自旋-晶格耦合模拟中正确配置磁场、读取进动能量以及排查常见报错。读完本文你可以独立完成带外磁场、单轴/立方各向异性与自旋转移力矩的磁化动力学模拟并能从源码层面理解单位换算与力矩计算的细节。命令语法与参数fix precession/spin对组内每个磁性自旋施加一个进动扭矩precession torque。命令的基本形式为fix ID group precession/spin style argsID、group为通用 fix 参数ID 为 fix 标识符group 为作用原子组style取值zeeman或anisotropy或cubic或stt各样式的args如下样式参数含义zeemanH x y zH 外磁场强度单位 Teslax y z 磁场方向向量anisotropyK x y zK 磁各向异性强度单位 eVx y z 各向异性方向向量cubicK1 K2c n1x n1y n1z n2x n2y n2z n3x n3y n3zK1、K2c 立方各向异性强度单位 eVn1 至 n3 三个立方各向异性方向向量sttJ x y zJ 自旋转移力矩spin-transfer torque场强度x y z 场方向向量文档中给出的四个典型示例原文完整保留fix 1 all precession/spin zeeman 0.1 0.0 0.0 1.0 fix 1 3 precession/spin anisotropy 0.001 0.0 0.0 1.0 fix 1 iron precession/spin cubic 0.001 0.0005 1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 1.0 fix 1 all precession/spin zeeman 0.1 0.0 0.0 1.0 anisotropy 0.001 0.0 0.0 1.0注意两点多种样式可在同一条命令中组合如最后一个示例同时给出 zeeman 与 anisotropy。仓库测试用例 fix-timestep-precession_spin.yaml 中使用的fix test all precession/spin zeeman 10.0 0.0 0.0 1.0 anisotropy 0.001 0.0 1.0 0.0即为组合用法。所有向量必须非零。文档明确警告写成fix 1 all precession/spin zeeman 0.1 0.0 0.0 0.0零向量会报错。原因是向量分量被用于计算方向向量模长的倒数零向量会导致除零。从源码看这一校验逐一对每个启用的样式进行fix_precession_spin.cpp 中对每个方向向量计算norm2若norm2 0.0立即抛出Illegal precession/spin command错误否则归一化为单位向量。各样式的物理模型zeeman外磁场中的 Zeeman 能zeeman样式用于模拟组内磁自旋与外磁场的相互作用哈密顿量为H_zeeman -g * sum(i0..N) mu_i * (s_i · B_ext)其中B_ext为外磁场单位 Tg为 Landé 因子源码中硬编码为g 2.0s_i为描述自旋 i 取向的单位向量mu_i为自旋 i 的原子磁矩以玻尔磁子 mu_B 的倍数给出例如体心立方铁中mu_i ≈ 2.2。命令中以 Tesla 输入的场强会乘以旋磁比g * mu_B / hbar换算为进动频率rad·THz在 metal 单位制下文档取mu_B 5.788e-5 eV/T。对应到 fix_precession_spin.cpp 的init()const double hbar force-hplanck/MY_2PI; // eV/(rad.THz) const double mub 5.78901e-5; // in eV/T const double gyro 2.0*mub/hbar; // in rad.THz/T ... hfield H_field*gyro; Kah Ka/hbar; k1ch k1c/hbar; k2ch k2c/hbar;可见源码中 Landé 因子同样硬编码为2.0且采用的mu_B值为5.78901e-5 eV/T与文档给出的 5.788e-5 略有舍入差异。注释特别说明这些换算不能修改用户输入的原始参数因为init()在每次run时都会重新调用若对同一成员反复换算会造成叠加例如从 restart 继续运行时磁场会“漂移”。文档给出的验证图一个模长mu_i 1.0的单自旋受沿 z 轴、|B_ext| 10.0 T的外磁场作用上图是沿磁场方向的平均磁化强度、下图是 Zeeman 能量均随温度变化参考曲线为同参数 Langevin 函数温度效应通过给每个自旋连接热浴实现即配合 Langevin 自旋热机使用见 fix_langevin_spin.rst后者实现随机 Landau-LifshitzsLL方程对每个自旋施加随机扭矩与横向耗散。anisotropy单轴/单面各向异性anisotropy样式模拟易轴easy axis或易面easy planeH_aniso -sum(i1..N) K_an(r_i) * (s_i · n_i)^2其中n定义各向异性方向KeV定义强度。K 0 定义易轴K 0 定义易面。从源码看力矩项实现为先计算标量scalar nax*spi[0] nay*spi[1] naz*spi[2]即 s·n力为fmi scalar * (2*Kah*n)Kax/Kay/Kaz在 set_magneticprecession() 中初始化为2*Kah*n能量为K_a * (s·n)^2与哈密顿量一致。注意能量符号约定代码中epreci - compute_anisotropy_energy(spi)即把正的K(s·n)^2作为负贡献累加进总磁能。cubic立方各向异性cubic样式模拟具有三个可能易轴的立方各向异性H_cubic -sum(i1..N) K1 [ (s_i·n1)^2(s_i·n2)^2 (s_i·n2)^2(s_i·n3)^2 (s_i·n1)^2(s_i·n3)^2 ] K2c * (s_i·n1)^2 (s_i·n2)^2 (s_i·n3)^2其中K1与K2ceV为强度系数n1、n2、n3为命令中从n1x到n3z给出的三个各向异性方向。对于标准取向n1(1 0 0)、n2(0 1 0)、n3(0 0 1)K1 0定义铁型各向异性易轴沿 (0 0 1) 型立方棱边K1 0定义镍型各向异性易轴沿 (1 1 1) 型立方对角线K2c 0同样使易轴偏向 (1 1 1) 型立方对角线。立方各向异性的更多细节可参见 Skomski《Simple models of magnetism》第 2 章原文档引用。源码实现见 compute_cubic() 与 compute_cubic_energy()先投影出skx s·n1、sky s·n2、skz s·n3能量直接按上式计算k1c*(skx²sky² sky²skz² skx²skz²) k2c*skx²sky²skz²力则由四阶项k1ch加权的 four1/four2/four3与六阶项k2ch加权的 six1/six2/six3合成其中k1ch k1c/hbar、k2ch k2c/hbar单位换算与 zeeman 相同。stt自旋转移力矩stt样式模拟自旋与自旋转移力矩spin-transfer torque的相互作用具体实现项参见原文档引用的 Chirac 等Physical Review B 102, 134415, 2020的方程 (7)。从源码看STT 力矩就是 J·(s × n) 的叉积形式compute_stt()fmi[0] 1.0*stt_field*( sy*nsttz - sz*nstty); fmi[1] 1.0*stt_field*(-sx*nsttz sz*nsttx); fmi[2] 1.0*stt_field*( sx*nstty - sy*nsttx);且 compute_stt_energy() 返回 0 并注释 “Non-conservative force”说明 STT 项是不保守力不贡献势能只产生力矩。方向向量的约定所有样式中(x y z)只决定力的向量方向向量的长度被忽略输入向量会在内部归一化见构造函数中的归一化代码。因此anisotropy 0.001 0.0 0.0 1.0与anisotropy 0.001 0.0 0.0 5.0等价。此外需要说明当前源码中除文档所列四种样式外还实现了hexaniso六角各向异性compute_hexaniso()但fix precession/spin页面尚未收录该样式读者以实际安装的 LAMMPS 版本帮助页为准。从源码结构看init()与post_force()中保留有磁场随时间变化的框架magstr/magfieldstyle/varflag字段见 fix_precession_spin.h但当前版本参数解析中varflag恒为 CONSTANT即时间相关外场机制尚未对外暴露。能量、标量输出与 fix_modify标量输出该 fix 计算一个全局标量可被各种输出命令访问。该标量就是前述磁进动势能的总和能量单位是“广延量”extensive。从源码看每个自旋的磁能先按样式累加进emag[i]与局部和eprecpost_force()再由 compute_scalar() 通过MPI_Allreduce做一次全局求和后返回保证多进程下只汇总一次。fix_modify energy该 fix 支持fix_modify energy yes选项将自旋进动扭矩对应的能量加入系统总势能即thermo输出中的 pe。默认设置为fix_modify energy no。restart 文件二进制 restart 文件中不写入该 fix 的任何信息需要在 restart 后重新声明 fix 命令。实战算例与算例输入文件的对照SPIN 包的算例目录 examples/SPIN 提供了多组可直接运行的输入文件其中用到precession/spin的典型组合如下。hcp 钴单轴各向异性 Langevin 自旋热机in.spin.cobalt_hcpunits metal atom_style spin ... set group all spin/random 31 1.72 velocity all create 100 4928459 rot yes dist gaussian pair_style hybrid/overlay eam/alloy spin/exchange 4.0 pair_coeff * * eam/alloy Co_PurjaPun_2012.eam.alloy Co pair_coeff * * spin/exchange exchange 4.0 -0.3593 1.135028015e-05 1.0645 offset yes fix 1 all precession/spin anisotropy 0.01 0.0 0.0 1.0 fix_modify 1 energy yes fix 2 all langevin/spin 0.0 0.0 21 fix 3 all nve/spin lattice moving timestep 0.0001 compute out_mag all spin ... run 1000可以看到几个关键点atom_style spin声明带磁矩的原子set ... spin [random] momentum设定每个原子的初始自旋模长钴取 1.72 mu_B磁交换作用pair spin/exchange负责自旋间的相互作用而precession/spin只负责外场/各向异性/STT 场fix_modify 1 energy yes使各向异性能计入热力学输出compute spin输出总磁化强度、磁能与磁温。bcc 铁立方各向异性in.spin.iron_cubicfix 1 all precession/spin cubic 0.001 0.0005 1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 1.0 fix_modify 1 energy yes fix 2 all langevin/spin 0.0 0.0 21 fix 3 all nve/spin lattice moving timestep 0.0001这里K1 0.001 eV、K2c 0.0005 eV三个方向取标准立方轴对应铁型立方各向异性。fcc 镍zeeman 与 cubic 组合in.spin.nickel_cubicfix 1 all precession/spin cubic -0.0001 0.0 1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 1.0K1 取负值配合零外场模拟镍的自发磁化动力学。此外 gnedb/iron/in.gneb.iron 展示了zeeman anisotropy组合在自旋 NEB 计算中的用法fix 1 all precession/spin zeeman 0.1 0.0 0.0 1.0 anisotropy 0.0001 1.0 0.0 0.0fix 的声明顺序需要注意若同时使用langevin/spin热机则precession/spin等产生力的磁 fix 必须声明在langevin/spin之前而langevin/spin必须紧跟在nve/spin时间积分 fix之前见 fix_langevin_spin.rst 的顺序要求。数值实现与单元测试验证从源码结构看precession/spin的执行流程为在每一步力计算完成后post_force/ 最小化的min_post_force/ RESPA 的post_force_respa见 setmask()遍历本进程所有原子对属于目标组的自旋依次调用compute_zeeman、compute_stt、compute_anisotropy、compute_cubic把各样式力矩累加进原子磁力向量atom-fmfix_precession_spin.h 中注释为 “magnetic energies”同时把每自旋磁能存入emag[i]并累加eprec。其中 Zeeman 力实现为fmi sp[i][3] * hcompute_zeeman()sp[i][3]正是自旋模长即力正比于原子磁矩 mu_i与哈密顿量中的 mu_i 因子对应。仓库的单元测试 fix-timestep-precession_spin.yaml 为回归验证提供了基准54 原子 spin 体系、时间步 1e-4组合使用zeeman 10.0 0.0 0.0 1.0 anisotropy 0.001 0.0 1.0 0.0期望全局标量为0.007960739406967482epsilon 1e-12。若本地修改了磁能计算逻辑可对照该值检查标量输出是否一致。限制条件与相关命令precession/spin属于SPIN 包只有在构建 LAMMPS 时启用了该包且输入文件中声明了atom_style spin此 fix 才可用。SPIN 包的整体功能自旋定义、自旋-晶格耦合积分、磁对势、磁化输出等见 src/SPIN/README。单位制通常为metal能量 eV、磁场 Tesla、时间 fs进动频率 rad·THz与源码中hbar、mu_B的换算一致。相关命令atom_style spin见 atom_style.rst、fix langevin/spin、fix nve/spin、compute spin、pair spin/exchange系列。原文档参考文献Skomski, R. (2008).Simple models of magnetism. Oxford University Press立方各向异性理论Chirac, Theophile, et al. “Ultrafast antiferromagnetic switching in NiO induced by spin transfer torques.”Physical Review B102.13 (2020): 134415STT 实现项。赞分享科研科学计算高性能计算【免费下载链接】lammpsPublic development project of the LAMMPS MD software package项目地址https://gitcode.com/gh_mirrors/la/lammps点击查看免费下载相关推荐Himalaya 3.0 将 --json 输出键名统一为 camelCase变更方案、源码依据与迁移要点Himalaya 3.0 将 json 输出键名统一为 camelCase变更方案、源码依据与迁移要点 导读 本文围绕 himalaya 的 cairn 变更科研科学计算高性能计算MKS Monster8 8轴主板完整配置实战30分钟搞定接线、固件刷写与调优MKS Monster8 8轴主板完整配置实战30分钟搞定接线、固件刷写与调优 主板明明通了电电机却像没睡醒一样狂抖驱动也装好了屏幕上却永远显示高温警科研科学计算高性能计算LAMMPS 磁自旋动力学SPIN 包完整实战指南自旋-晶格耦合模拟、朗之万热浴与磁学量输出LAMMPS 磁自旋动力学SPIN 包完整实战指南自旋 晶格耦合模拟、朗之万热浴与磁学量输出 磁自旋动力学是 LAMMPS 中由 SPIN 包提供的一组经科研科学计算高性能计算上一篇HarfBuzz文本塑形引擎指南下一篇Azul桌面GUI框架实战指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑