资讯详情

资讯详情

LAMMPS pair_style spin/magelec 完全指南:磁电耦合自旋相互作用原理、参数配置与源码实现

科研科学计算高性能计算【免费下载链接】lammpsPublic development project of the LAMMPS MD software package项目地址https://gitcode.com/gh_mirrors/la/lammps点击查看免费下载本篇技术指南围绕 LAMMPS SPIN 包中的pair_style spin/magelec展开系统讲解磁电magneto-electric耦合相互作用的理论模型、命令语法、pair_coeff参数语义、与fix nve/spin的自旋-晶格耦合机制并结合仓库源码src/SPIN/pair_spin_magelec.cpp、src/SPIN/pair_spin_magelec.h与单元测试unittest/force-styles/tests/spin-pair-magelec.yaml深入剖析其底层实现。读完本文你将能够独立配置并运行包含磁电耦合项的经典自旋动力学模拟并理解其与交换、DMI 等自旋相互作用的组合用法。背景SPIN 包与磁电相互作用LAMMPS 的 SPIN 包以经典方式建模原子磁自旋并将其与常规分子动力学中的原子运动耦合起来用于模拟磁弹耦合现象、缺陷对材料磁性能的影响等见 Howto_spins 与 Packages_details。在该框架下自旋被表示为每个原子的单位向量 :math:\vec{s}_i自旋之间以及自旋与晶格之间通过 pair 相互作用发生耦合。spin/magelec也可写作spin/me正是 SPIN 包中负责磁电相互作用的 pair 样式它在两个磁性自旋之间引入一种与电极化矢量 :math:\vec{E}相关的耦合既对自旋施加磁力矩又对原子施加力学力从而支撑自旋-晶格耦合计算。SPIN 包由 Julien TranchidaSandia开发其核心算法大规模并行辛算法耦合自旋动力学与分子动力学见文献Tranchida, Plimpton, Thibaudeau, and Thompson, Journal of Computational Physics, 372, 406-425 (2018)这也是本文涉及的磁电相互作用推导的参考来源。命令语法与示例pair_style spin/magelec的完整语法如下pair_style spin/magelec cutoff其中cutoff是全局截断距离以 metal 单位制的距离为单位。例如pair_style spin/magelec 4.5 pair_coeff * * magelec 4.5 0.00109 1.0 1.0 1.0从仓库源码看src/SPIN/pair_spin_magelec.cpp#L61-L79 的settings()解析全局截断并存入cut_spin_magelec_global而pair_coeff中还可以为每个原子类型对单独覆盖截断值。注意示例文档中给出的0.00109与示例输入文件中实际使用的0.000109存在数量级差异后者examples/SPIN/bfo/in.spin.bfo更接近真实物理量级实际建模时应以拟合得到的参数为准。前置条件pair_style spin/magelec属于 SPIN 包其使用有严格要求LAMMPS 必须以 SPIN 包编译必须声明atom_style spin见 atom_style由于所有自旋 pair 样式要求 metal 单位制units metal是必需的——src/SPIN/pair_spin.cpp#L64-L67 中会直接报错Spin pair styles require metal units需要开启 newton pair源码 src/SPIN/pair_spin.cpp#L87-L88 要求newton_pair为 on否则报错Pair style spin requires newton pair on还需要通过atom_modify map array或 hash建立原子映射因为 fix_nve_spin 要求 atom map 存在。如何启用 SPIN 包SPIN 是 LAMMPS 的标准包之一cmake/CMakeLists.txt#L406。构建时启用方式依据 Build_packageCMake 构建配置时加-D PKG_SPINon传统 make 构建进入src目录后执行make yes-spin随后重新编译如make mpi。如果运行时报错 unknown pair style 或提示某个命令属于未包含的包通常就是 SPIN 包未启用用lmp -h可查看当前可执行文件中启用的全部命令与包。pair_coeff 参数详解pair_coeff命令用于为每一对原子类型定义磁电相互作用系数源码 src/SPIN/pair_spin_magelec.cpp#L85-L126 的coeff()负责解析pair_coeff * * magelec 4.5 0.000109 1.0 1.0 1.0参数按顺序依次为参数含义备注* *原子类型对范围支持通配符与类型范围写法语义同 pair_coeffmagelec样式关键字必须与此 pair 样式名匹配否则报错4.5该类型对的截断距离 :math:R_cmetal 单位Å可覆盖全局 cutoff0.000109磁电耦合强度单位 eV源码中存入ME[i][j]/ME_mech[i][j]1.0 1.0 1.0电极化矢量 :math:\vec{E}的 x/y/z 分量决定耦合的方向源码中会对其做归一化从 src/SPIN/pair_spin_magelec.cpp#L100-L109 可以看到几个关键实现细节强度参数在存入ME[i][j]时除以hbarME[i][j] magelec/hbar即磁力矩公式中出现的 :math:1/\hbar已在参数存储阶段消化ME_mech[i][j]则保留原始值用于力学力计算。电极化矢量三分量被归一化除以自身模长平方1/(mex²mey²mez²)因此只有方向被保留其模长信息由magelec强度参数携带。参数个数必须严格为 8narg ! 8报错类型对没有匹配到时也会报错Incorrect args in pair_style command。init_one()src/SPIN/pair_spin_magelec.cpp#L132-L146会把所有系数对称地拷贝到[j][i]条目若某类型对的系数未设置会直接报错All pair coeffs are not set。注意pair_coeff中给出的截断是每个类型对各自的截断允许不同原子类型对使用不同的截断与强度从而支持多组分磁性材料的建模。物理模型磁电相互作用的理论推导根据 pair_spin_magelec 文档参考文献(Katsura) H. Katsura, N. Nagaosa, A.V. Balatsky, Phys. Rev. Lett., 95(5), 057205 (2005)磁电相互作用对每个自旋 :math:i产生的磁力矩与对原子施加的力定义为.. math::\vec{\omega}i -\frac{1}{\hbar} \sum{j}^{Neighb} \vec{s}{j}\times\vec{D}(r{ij}).. math::\vec{F}i -\sum{j}^{Neighb} \frac{\partial D(r_{ij})}{\partial r_{ij}} \left(\vec{s}{i}\times \vec{s}{j} \right) \cdot \vec{r}_{ij}其中 :math:\vec{s}_i、:math:\vec{s}_j是相邻粒子的磁性自旋:math:\vec{D}(r_{ij})是依赖于原子间距的磁电耦合项。从这一相互作用出发每个自旋 :math:i会受到磁力矩 :math:\omega其关联原子则可能在自旋-晶格计算fix nve/spin中受到力 :math:F具体形式为.. math::\vec{F}^{i} -\sum_{j}^{Neighbor} \left( \vec{s}{i}\times \vec{s}{j} \right) \times \vec{E}.. math::\vec{\omega}^{i} -\frac{1}{\hbar} \sum_{j}^{Neighbor} \vec{s}j \times \left(\vec{E}\times r{ij} \right)其中 :math:\hbar是普朗克常数metal 单位:math:\vec{E}是电极化矢量。:math:\vec{E}的模长与方向分别刻画了被屏蔽的介电原子极化的强度与方向单位 eV。关于这些力矩/力推导的更多细节见(Tranchida) Tranchida, Plimpton, Thibaudeau, and Thompson, Journal of Computational Physics, 372, 406-425 (2018)。从源码 src/SPIN/pair_spin_magelec.cpp#L361-L415 可以看到公式的代码级实现compute_magelec()先用单位方向矢量eij与归一化电极化矢量v_me做叉积mei v × eij乘以ME[i][j]即 :math:D(r_{ij})/\hbar后再与邻居自旋spj叉积累加到磁力矩fmi上compute_magelec_mech()计算 :math:\vec{s}_i \times \vec{s}_j代码中的mei各分量即叉积分量乘以ME_mech[i][j]后再与电极化矢量v_me叉积、乘以 0.5得到力学力fi。两个函数中的叉积链完全对应文档公式中 :math:\vec{s}_j \times (\vec{E} \times r_{ij})与 :math:(\vec{s}_i\times\vec{s}_j)\times\vec{E}的结构。与 fix nve/spin 的自旋-晶格耦合机制spin/magelec的关键设计之一是支持自旋-晶格spin-lattice耦合自旋受到磁力矩的同时原子还可能受到力学力。这个开关由fix nve/spin的lattice选项控制fix 3 all nve/spin lattice frozen # 只积分自旋晶格冻结lattice_flag 0 fix 3 all nve/spin lattice moving # 自旋与原子运动联合积分lattice_flag 1源码中fix_nve_spin.cpp#L99-L109 将lattice no/off/false/frozen解析为lattice_flag 0将lattice yes/on/true/moving解析为lattice_flag 1而 pair_spin.cpp#L94-L98 在init_style()中通过 dynamic_cast 从FixNVESpin读取该标志并存入lattice_flag。对应地在 pair_spin_magelec.cpp#L242-L267 的compute()中compute_magelec()磁力矩总是执行compute_magelec_mech()力学力仅在lattice_flag为真时执行。因此若只需纯自旋动力学可用lattice frozen关闭力学力以节省计算若需研究磁弹耦合、磁致伸缩等现象则用lattice moving让原子随自旋构型运动。fix nve/spin本身实现自旋与原子运动的辛积分Initial_Integrate/Final_Integrate见 fix_nve_spin.cpp#L142-L149是 SPIN 包自旋动力学的主积分器。此外PairSpin::init_style()还要求使用自旋 pair 样式时至少存在一个nve/spin或neb/spinfix否则给出警告且需要 full 邻居列表src/SPIN/pair_spin.cpp#L92 通过neighbor-add_request(..., REQ_FULL)请求。能量计算与磁能输出在compute()中当eflag开启时磁电相互作用的能量被计算为src/SPIN/pair_spin_magelec.cpp#L248-L252evdwl -(spi·fmi) * 0.5 * hbar即能量为 :math:-\tfrac{1}{2}\hbar\,(\vec{s}_i \cdot \vec{\omega}_i^{\text{ME}})形式累加到每个原子的emag[i]列表该列表在 pair_spin.h 中定义用于存储磁能。这意味着该相互作用对compute pe有贡献可以通过compute spin输出系统磁能典型用法见 compute_spincompute out_mag all spin variable emag equal c_out_mag[5] # 第 5 个量为磁能eV variable magz equal c_out_mag[3] # 第 3 个量为总磁化强度 z 分量 variable magnorm equal c_out_mag[4] # 第 4 个量为总磁化强度模 thermo_style custom step time v_magnorm pe v_emag temp etotalexamples/SPIN/bfo/in.spin.bfo 正是这样做的——它通过compute out_mag all spin与compute out_pe all pe监测磁化强度、磁能与势能并将自旋分量spx spy spz及磁力fmx fmy fmz输出到 dump 文件。实战示例与交换、DMI 相互作用组合使用磁电耦合在实际建模中几乎总是与交换相互作用spin/exchange和 Dzyaloshinskii–Moriya 相互作用spin/dmi组合使用构成多铁材料如 BiFeO₃BFO的自旋哈密顿量。仓库自带的 examples/SPIN/bfo/in.spin.bfo 是完整可运行的范例BFO 铁原子层核心片段units metal atom_style spin atom_modify map array lattice sc 3.96 region box block 0.0 34.0 0.0 34.0 0.0 5.0 create_box 1 box create_atoms 1 box mass 1 1.0 set group all spin/random 11 2.50 pair_style hybrid/overlay spin/exchange 6.0 spin/magelec 4.5 spin/dmi 4.5 pair_coeff * * spin/exchange exchange 6.0 -0.01575 0.0 1.965 pair_coeff * * spin/magelec magelec 4.5 0.000109 1.0 1.0 1.0 pair_coeff * * spin/dmi dmi 4.5 0.00005 1.0 1.0 1.0 neighbor 0.1 bin neigh_modify every 10 check yes delay 20 fix 1 all precession/spin zeeman 0.0 0.0 0.0 1.0 anisotropy 0.00033 0.0 0.0 1.0 fix 2 all langevin/spin 0.0 0.1 21 fix 3 all nve/spin lattice frozen timestep 0.0002 compute out_mag all spin compute out_pe all pe compute out_ke all ke compute out_temp all temp thermo_style custom step time v_magnorm pe v_emag temp etotal thermo 50 run 500要点解读hybrid/overlay磁电、交换、DMI 三种自旋相互作用叠加在同一对原子之间各自的截断可以不同如 exchange 6.0、magelec 4.5、dmi 4.5lattice frozen该示例只做纯自旋动力学退火/演化自旋构型不移动原子若想研究磁弹耦合可改为lattice movingset group all spin/random 11 2.50为所有自旋随机初始化磁矩模长 2.50对应 BFO 中 Fe³⁺ 的有效磁矩自旋动力学对初值敏感fix langevin/spin给自旋施加 Langevin 热浴/阻尼与原子热浴fix langevin配合可实现恒温自旋-晶格系统见 Howto_spinsfix precession/spin施加 Zeeman 外场与单轴各向异性。源码级实现要点最后从实现角度总结spin/magelec的关键设计src/SPIN/pair_spin_magelec.cpp数据结构pair_spin_magelec.h#L51-L58每个类型对维护五个矩阵——ME磁耦合强度已除以 :math:\hbar、ME_mech力学耦合强度原始 eV 值、v_mex/y/z归一化电极化矢量三分量、cut_spin_magelec类型对截断。compute()中还会按nlocal动态增长emag能量列表。邻居遍历src/SPIN/pair_spin_magelec.cpp#L200-L270对每个 i 原子遍历其 full 邻居列表计算单位方向矢量eij当rsq ≤ cut²时调用两个核函数newton_pair为 on 时对 j 原子按f[j] - fi累积力学力磁力矩则累加到原子的fm数组。restart 支持src/SPIN/pair_spin_magelec.cpp#L444-L521write_restart/read_restart会持久化每个类型对的ME、电极化矢量、截断等系数read_restart通过 MPI_Bcast 广播到所有进程支持从read_restart文件恢复磁电参数。回归测试unittest/force-styles/tests/spin-pair-magelec.yaml 提供了spin/magelec 4.0配pair_coeff * * magelec 4.0 0.000109 1.0 1.0 1.0的 54 原子系统基准值初态/终态的init_vdwl、init_forces、init_mag_forces等可作为实现正确性的验证参考。限制与关联命令所有pair/spin样式均属于 SPIN 包必须在启用该包且声明atom_style spin的前提下使用见 Build package。spin/magelec的默认设置为 none无特殊默认项且不允许省略任何系数。关联命令见 pair_spin_magelec.rstatom_style spin声明自旋原子样式pair_coeff定义类型对系数pair_style spin/exchange交换相互作用通常与磁电项组合pair_eam可作为自旋-晶格模拟中的晶格势场与自旋相互作用叠加。完整的 SPIN 包命令族还包括 pair_style spin/dmi、fix nve/spin、fix langevin/spin、fix precession/spin、compute spin 与 min_spin见 Packages_details它们共同构成完整的经典自旋动力学与自旋-晶格耦合模拟工具链。赞分享科研科学计算高性能计算【免费下载链接】lammpsPublic development project of the LAMMPS MD software package项目地址https://gitcode.com/gh_mirrors/la/lammps点击查看免费下载相关推荐LAMMPS SPIN 包详解fix precession/spin 磁自旋进动 fix 的参数、公式与源码实现LAMMPS SPIN 包详解fix precession/spin 磁自旋进动 fix 的参数、公式与源码实现 本文围绕 LAMMPS SPIN 包的 fi科研科学计算高性能计算LAMMPS pair_style colloid 胶体相互作用势语法、参数与源码实现详解LAMMPS pair_style colloid 胶体相互作用势语法、参数与源码实现详解 导读 本文围绕 LAMMPS 的 pair_style collo科研科学计算高性能计算LAMMPS SPIN 包自旋能量最小化实战指南min_style spin / spin/cg / spin/lbfgs 原理与配置LAMMPS SPIN 包自旋能量最小化实战指南min_style spin / spin/cg / spin/lbfgs 原理与配置 本篇技术指南围绕 LA科研科学计算高性能计算上一篇Qoa零依赖打造丝滑CLI交互体验7大场景全解析下一篇如何快速上手 MOROS开源 Rust 操作系统完整指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →