自旋螺旋初始化(Spin Spiral)
Group: Magnetism
Class: SpinSpiralCard
Source: src/NepTrainKit/ui/views/_card/spin_spiral_card.py
功能说明
对输入结构按一维相位场写入非共线 initial_magmoms,生成一批不同周期、不同起始相位、不同手性、不同 m_parallel 的 spin spiral / helix / conical spiral 初始构型。卡片支持两种等价的主控方式:直接扫周期 L_D,或直接扫每 Å 转角 angle gradient,二者只需要选一个。
它最适合的场景是:为层状或周期性磁结构生成自旋螺旋初始态。如果你更关心完整工作流而不是单个参数,请先看下面的“操作示例”。
关键公式 (Core equations)
设传播轴单位向量为 \(\hat{\mathbf{n}}\),其正交基为 \((\mathbf{e}_1,\mathbf{e}_2,\hat{\mathbf{n}})\),则代码中采用
并且
其中 \(u\) 是原子坐标在传播轴上的投影,\(L_D\) 对应 period_range,\(g\) 对应 angle_gradient_range,\(\phi_0\) 对应 phase_range。这里的 mz 是无量纲、单位化后的轴向分量,等于 m_parallel / |m|,因此物理取值范围是 [-1, 1]。当 mz=0 时,该构型退化为平面 helix;当 mz!=0 时为 conical spiral。
操作示例
场景:为层状或周期性磁结构生成自旋螺旋初始态
输入: 一个已知参考轴和磁矩幅值来源的磁性结构
目标: 扫描螺旋周期、相位和手性,构造更系统的非共线初始磁态
参数设置:
axis定义螺旋传播方向period_range或angle_gradient_range二选一作为主控参数phase_range先用小步长试跑,避免一次生成过多相位点
输出: 一批沿指定轴逐层旋转的螺旋磁矩结构
怎么验证结果合理:
检查相邻层相位递进是否符合设定
若启用整周期约束,确认输出周期数不是空集合
先保证输入已有可信磁矩幅值
适用场景与不适用场景
数据症状 (Dataset symptom): 已有数据只覆盖单一磁矩方向,模型对螺旋态、手性成对态或 conical spiral 初态不敏感。
目标任务 (Target objective): 在固定晶体结构上系统扫描 spiral 周期、每 Å 转角、
m_parallel锥角分量或 DMI 相关手性分支。建议添加条件 (Add-it trigger): 你已经知道几何结构不需要扩胞复制,只想在输入结构上生成一批非共线磁矩初态。
不建议添加条件 (Avoid trigger): 体系没有磁矩自由度,或任务本质上需要真实长周期超胞而不是仅改变初始自旋纹理。
物理提示 (Physics caution): 这组卡片主要写入初始磁矩,不自动保证磁序就是最低能态;后验能量和磁矩收敛仍需另行判断。
输入前提
输入结构应至少包含一类有意义的磁性元素。
若
magnitude_source选Existing initial magmoms,输入结构最好已经带有initial_magmoms。若
magnitude_source选Map/default magnitude,需要提供magmom_map或合理的default_moment。
参数说明(完整)
axis (Propagation Axis)
UI Label:
Propagation axis字段映射 (Field mapping): 序列化键
axis<-> 界面标签Propagation axis。控件标签 (Caption):
Propagation axis。控件解释 (Widget): 区间输入
SpinBoxUnitInputFrame(3 个输入框)。类型/范围 (Type/Range): list[3]
默认值 (Default):
[0.0, 0.0, 1.0]含义 (Meaning): 自旋螺旋相位的传播方向。
对输出规模/物理性的影响: 改变沿哪个方向计算相位投影,也就改变了同一结构上自旋旋转的空间分布。
物理直觉 / 典型值: 这类参数主要控制方向、分层或周期;先用最容易人工检查的简单方向和短范围做验证。
推荐范围 (Recommended range):
保守:
[0, 0, 1]平衡:
[1, 0, 0]、[0, 1, 0]、[0, 0, 1]探索:按研究问题扫描任意归一化方向,如
[1, 1, 0]
spiral_parameter_mode (Spiral Parameter)
UI Label:
Spiral parameter字段映射 (Field mapping): 序列化键
spiral_parameter_mode<-> 界面标签Spiral parameter。控件标签 (Caption):
Spiral parameter。控件解释 (Widget): 下拉选择
ComboBox。类型/范围 (Type/Range): string
默认值 (Default):
"Period (L_D)"含义 (Meaning): 选择用周期
L_D还是用每 Å 转角来定义 spiral。对输出规模/物理性的影响: 不改变结果数,但决定你在界面里操作的是哪一个等价参数。
怎么判断该开还是该关: 先用默认值跑小样本;只有当你能明确说明它会改变当前结果分布时,再主动偏离默认设置。
配置建议 (Practical note): 二选一即可,不需要同时把
period_range和angle_gradient_range都当主控量来调。
period_range (Period Range)
UI Label:
Period range字段映射 (Field mapping): 序列化键
period_range<-> 界面标签Period range。控件标签 (Caption):
Period range。控件解释 (Widget): 区间输入
SpinBoxUnitInputFrame(min/max/step三输入框)。类型/范围 (Type/Range): list[3]
默认值 (Default):
[20.0, 40.0, 10.0]含义 (Meaning): spiral 周期 \(L_D\) 的扫描区间,单位为 Å;仅在
spiral_parameter_mode="Period (L_D)"时生效。连续搜索说明 (Continuous search): 当
only_commensurate_periods=true时,这里的min/max会被当作连续搜索区间,软件会自动发现区间内相容的浮点周期,不要求它们正好落在step网格上,例如15.5 Å。对输出规模/物理性的影响: 周期越短,相邻位置的相位变化越快;同时也会线性增加输出数量。
物理直觉 / 典型值: 这类参数主要控制方向、分层或周期;先用最容易人工检查的简单方向和短范围做验证。
推荐范围 (Recommended range):
保守:
[20.0, 20.0, 5.0]平衡:
[10.0, 40.0, 10.0]探索:
[4.0, 80.0, 4.0]
angle_gradient_range (Angle Gradient Range)
UI Label:
Angle gradient range字段映射 (Field mapping): 序列化键
angle_gradient_range<-> 界面标签Angle gradient range。控件标签 (Caption):
Angle gradient range。控件解释 (Widget): 区间输入
SpinBoxUnitInputFrame(min/max/step三输入框)。类型/范围 (Type/Range): list[3]
默认值 (Default):
[18.0, 18.0, 1.0]含义 (Meaning): 每 Å 的转角梯度 \(g\),单位为 deg/Å;仅在
spiral_parameter_mode="Angle gradient (deg/A)"时生效。对输出规模/物理性的影响: 这是
period_range的等价写法,数值越大表示旋转越快,对应更短的周期。物理直觉 / 典型值: 它通常是控制变化幅度的主旋钮;先从能看清趋势的小幅度起步,再决定是否扩到探索档。
推荐范围 (Recommended range):
保守:
[9.0, 9.0, 1.0]平衡:
[9.0, 36.0, 9.0]探索:
[4.5, 90.0, 4.5]
phase_range (Phase Range)
UI Label:
Phase range字段映射 (Field mapping): 序列化键
phase_range<-> 界面标签Phase range。控件标签 (Caption):
Phase range。控件解释 (Widget): 区间输入
SpinBoxUnitInputFrame(min/max/step三输入框)。类型/范围 (Type/Range): list[3]
默认值 (Default):
[0.0, 0.0, 15.0]含义 (Meaning): 全局相位偏移 \(\phi_0\) 的扫描区间,单位为度。
对输出规模/物理性的影响: 不改变周期或转角梯度,只平移整条自旋纹理的起始角。
物理直觉 / 典型值: 这类参数主要控制方向、分层或周期;先用最容易人工检查的简单方向和短范围做验证。
推荐范围 (Recommended range):
保守:
[0.0, 0.0, 15.0]平衡:
[0.0, 90.0, 30.0]探索:
[-180.0, 180.0, 30.0]
mz (M Parallel Range)
UI Label:
m_parallel range字段映射 (Field mapping): 序列化键
mz<-> 界面标签m_parallel range。控件标签 (Caption):
m_parallel range。控件解释 (Widget): 区间输入
SpinBoxUnitInputFrame(min/max/step三输入框)。类型/范围 (Type/Range): list[3]
默认值 (Default):
[0.0, 0.0, 0.1]含义 (Meaning): 沿传播轴的单位化常数分量扫描区间,等于
m_parallel / |m|;它是无量纲参数,不是以mu_B计的绝对磁矩。0对应纯 helix,非零时为 conical spiral。合法范围 (Valid range):
[-1, 1];实际常用扫描通常在[0, 1]或[-1, 1]内取步长。对输出规模/物理性的影响:
|mz|越大,磁矩越靠近传播轴方向,平面内旋转分量越小;当区间跨越多个值时会直接增加输出数量。物理直觉 / 典型值: 先从小范围试跑并抽查输出,再决定是否扩大范围;范围越宽,覆盖越广,但极端构型风险也越高。
推荐范围 (Recommended range):
保守:
[0.0, 0.0, 0.1]平衡:
[0.0, 0.5, 0.1]探索:
[-0.9, 0.9, 0.1]
chirality (Chirality)
UI Label:
Chirality字段映射 (Field mapping): 序列化键
chirality<-> 界面标签Chirality。控件标签 (Caption):
Chirality。控件解释 (Widget): 下拉选择
ComboBox。类型/范围 (Type/Range): string
默认值 (Default):
"Both"含义 (Meaning): 选择顺时针、逆时针或同时输出成对手性构型。
对输出规模/物理性的影响: 选
Both会对同一组参数额外生成一对手性相反的结果。怎么判断该开还是该关: 先用默认值跑小样本;只有当你能明确说明它会改变当前结果分布时,再主动偏离默认设置。
配置建议 (Practical note):
Both适合直接构造成对数据;只想固定某个 DMI 手性分支时再改成单一方向。
phase_mode (Phase Mode)
UI Label:
Phase mode字段映射 (Field mapping): 序列化键
phase_mode<-> 界面标签Phase mode。控件标签 (Caption):
Phase mode。控件解释 (Widget): 下拉选择
ComboBox。类型/范围 (Type/Range): string
默认值 (Default):
"Continuous by position"含义 (Meaning): 选择每个原子按自身投影连续转动,或先按层分组后让整层原子共用同一个相位。
对输出规模/物理性的影响: 不改变输出数量,但会改变同一层内部是否允许因 rumpling/buckling 产生细微相位差;
Layer-locked更适合“整层刚性转动”的 SOC/supercell 初态。怎么判断该开还是该关: 先用默认值跑小样本;只有当你能明确说明它会改变当前结果分布时,再主动偏离默认设置。
配置建议 (Practical note):
Continuous by position保留标准连续 spiral;Layer-locked适合层状体系、希望同层原子一起转动时使用。
layer_tolerance (Layer Tolerance)
UI Label:
Layer tolerance字段映射 (Field mapping): 序列化键
layer_tolerance<-> 界面标签Layer tolerance。控件标签 (Caption):
Layer tolerance。控件解释 (Widget): 数值输入
SpinBoxUnitInputFrame。类型/范围 (Type/Range): float
默认值 (Default):
[0.05]含义 (Meaning): 仅在
phase_mode="Layer-locked"时生效;沿传播方向投影差小于等于该阈值的原子会被视作同一层,并共享一个层中心相位。对输出规模/物理性的影响: 容差越大,越容易把相邻原子并入同一层;容差过小则可能把本来应刚性转动的一层拆成多个相位不同的小层。
物理直觉 / 典型值: 阈值越保守,越能避免重叠或错配,但输出数量也往往更快下降。
推荐范围 (Recommended range):
保守:
[0.02]平衡:
[0.05]探索:
[0.1]到0.2
only_commensurate_periods (Period Filter)
UI Label:
Period filter字段映射 (Field mapping): 序列化键
only_commensurate_periods<-> 界面开关Only lattice-compatible periods。控件标签 (Caption):
Only lattice-compatible periods。控件解释 (Widget): 布尔开关
CheckBox。类型/范围 (Type/Range): bool
默认值 (Default):
false含义 (Meaning): 只保留与当前
cell + pbc + propagation axis相容的周期;判据是每个周期方向都满足q·T = 2πn。自动发现 (Auto discovery): 开启后会在所选区间内自动搜索相容周期,因此即使
period_range的步长是1 Å,也能找到像15.5 Å这样的相容值。对输出规模/物理性的影响: 开启后会过滤掉与当前周期性边界不相容的
period_range候选值,减少输出数量,但更适合普通 supercell + SOC 的 DFT 初态。怎么判断该开还是该关: 先用默认值跑小样本;只有当你能明确说明它会改变当前结果分布时,再主动偏离默认设置。
失败时提示 (Fallback hint): 如果范围内没有任何相容周期,卡片会给出一个建议的最小 supercell 倍数,帮助你决定扩胞方向。
配置建议 (Practical note): 开启:只保留与当前晶格周期边界相容的周期,适合普通 supercell + SOC 的 DFT 初态。关闭:保留范围内全部候选周期,适合做非严格初猜、扰动或纯数据增强。
magnitude_source (Magnitude Source)
UI Label:
Magnitude source字段映射 (Field mapping): 序列化键
magnitude_source<-> 界面标签Magnitude source。控件标签 (Caption):
Magnitude source。控件解释 (Widget): 下拉选择
ComboBox。类型/范围 (Type/Range): string
默认值 (Default):
"Existing initial magmoms"含义 (Meaning): 选择磁矩大小来自现有
initial_magmoms,还是来自下方的元素映射/默认值。对输出规模/物理性的影响: 不改变输出数量,但会决定写入的磁矩模长是否继承上游结构。
参数联动 / 生效条件: 它决定当前工作流走哪条主分支;先选模式,再填写与该模式对应的字段。
怎么判断该开还是该关: 先用默认值跑小样本;只有当你能明确说明它会改变当前结果分布时,再主动偏离默认设置。
配置建议 (Practical note): 上游已存在可信局域磁矩时优先用
Existing initial magmoms;否则用Map/default magnitude明确指定模长。
magmom_map (Magmom Map)
UI Label:
Magmom map字段映射 (Field mapping): 序列化键
magmom_map<-> 界面标签Magmom map。控件标签 (Caption):
Magmom map。控件解释 (Widget): 文本输入
LineEdit。类型/范围 (Type/Range): string
默认值 (Default):
""含义 (Meaning): 当
magnitude_source=Map/default magnitude时,用于指定元素到磁矩模长的映射。对输出规模/物理性的影响: 不改变输出数量,但直接决定每个元素写入的局域磁矩大小。
怎么判断该开还是该关: 只在你明确知道该字段会命中输入结构时填写;不确定时先用最小样本验证命中情况。
配置建议 (Practical note): 使用如
Fe:2.2,Co:1.7,Ni:0.6的简洁格式;未知元素会退回default_moment。
default_moment (Default Moment)
UI Label:
Default |m|字段映射 (Field mapping): 序列化键
default_moment<-> 界面标签Default |m|。控件标签 (Caption):
Default |m|。控件解释 (Widget): 数值输入
SpinBoxUnitInputFrame。类型/范围 (Type/Range): float
默认值 (Default):
[0.0]含义 (Meaning):
magmom_map未命中元素时使用的默认磁矩模长。对输出规模/物理性的影响: 可以作为保守回退值,防止遗漏元素直接变成无磁态或乱填模长。
物理直觉 / 典型值: 先从小范围试跑并抽查输出,再决定是否扩大范围;范围越宽,覆盖越广,但极端构型风险也越高。
推荐范围 (Recommended range):
保守:
0.0平衡:
0.5到2.5探索:
0.0到5.0
apply_elements (Apply Elements)
UI Label:
Apply elements字段映射 (Field mapping): 序列化键
apply_elements<-> 界面标签Apply elements。控件标签 (Caption):
Apply elements。控件解释 (Widget): 文本输入
LineEdit。类型/范围 (Type/Range): string
默认值 (Default):
""含义 (Meaning): 可选元素白名单;留空时对所有原子写入 spiral 磁矩。
对输出规模/物理性的影响: 不改变样本数,但可把自旋纹理限制到一部分元素上,其余元素磁矩会置零。
怎么判断该开还是该关: 只在你明确知道该字段会命中输入结构时填写;不确定时先用最小样本验证命中情况。
配置建议 (Practical note): 多子晶格体系中,如果只想在磁性子晶格上施加 spiral,可填写如
Fe,Co。
max_outputs (Max Outputs)
UI Label:
Max outputs字段映射 (Field mapping): 序列化键
max_outputs<-> 界面标签Max outputs。控件标签 (Caption):
Max outputs。控件解释 (Widget): 数值输入
SpinBoxUnitInputFrame。类型/范围 (Type/Range): int
默认值 (Default):
[100]含义 (Meaning): 当参数组合过多时,用于截断输出数量。
对输出规模/物理性的影响: 直接限制生成样本总数,避免一次扫描产生过大的数据集。
物理直觉 / 典型值: 它主要决定每帧会扩出多少个结构,直接影响后续计算预算与重复率。
推荐范围 (Recommended range):
保守:
16平衡:
50到200探索:
500以上,仅在批量筛选流程中使用
推荐预设(可直接复制 JSON)
保守(Safe)
{
"class": "SpinSpiralCard",
"check_state": true,
"axis": [0.0, 0.0, 1.0],
"spiral_parameter_mode": "Period (L_D)",
"period_range": [20.0, 20.0, 10.0],
"angle_gradient_range": [18.0, 18.0, 1.0],
"phase_range": [0.0, 0.0, 15.0],
"mz": [0.0, 0.0, 0.1],
"chirality": "Both",
"phase_mode": "Continuous by position",
"layer_tolerance": [0.05],
"only_commensurate_periods": false,
"magnitude_source": "Existing initial magmoms",
"magmom_map": "",
"default_moment": [0.0],
"apply_elements": "",
"max_outputs": [16]
}
平衡(Balanced)
{
"class": "SpinSpiralCard",
"check_state": true,
"axis": [0.0, 0.0, 1.0],
"spiral_parameter_mode": "Period (L_D)",
"period_range": [10.0, 40.0, 10.0],
"angle_gradient_range": [18.0, 18.0, 1.0],
"phase_range": [0.0, 90.0, 30.0],
"mz": [0.0, 0.3, 0.1],
"chirality": "Both",
"phase_mode": "Layer-locked",
"layer_tolerance": [0.05],
"only_commensurate_periods": false,
"magnitude_source": "Existing initial magmoms",
"magmom_map": "",
"default_moment": [0.0],
"apply_elements": "",
"max_outputs": [100]
}
激进/探索(Aggressive/Exploration)
{
"class": "SpinSpiralCard",
"check_state": true,
"axis": [0.0, 0.0, 1.0],
"spiral_parameter_mode": "Angle gradient (deg/A)",
"period_range": [20.0, 40.0, 10.0],
"angle_gradient_range": [4.5, 90.0, 4.5],
"phase_range": [-180.0, 180.0, 30.0],
"mz": [0.0, 0.8, 0.2],
"chirality": "Both",
"phase_mode": "Layer-locked",
"layer_tolerance": [0.08],
"only_commensurate_periods": true,
"magnitude_source": "Map/default magnitude",
"magmom_map": "Fe:2.2",
"default_moment": [0.0],
"apply_elements": "",
"max_outputs": [500]
}
推荐组合
Magnetic Order -> Spin Spiral: 先用Magnetic Order生成合理的局域磁矩模长,再用本卡片扫描 spiral 周期、转角梯度和mz。Group Label -> Magnetic Order -> Spin Spiral: 先对不同子晶格做标记和磁矩初始化,再只对目标磁性元素施加 spiral。磁矩写入类卡片应放在真正依赖
initial_magmoms的旋转、螺旋或 canting 卡片之前。
常见问题与排查
输出没有明显变化时,先检查输入是否已有初始磁矩,或当前是否真的开启了 FM/AFM/PM/旋转分支。
如果结果不合理,先看磁矩模长是否被意外改坏,再检查方向参数、group 标签或 k-vector 是否匹配结构。
这些卡片主要写入初始磁矩,不保证一定对应真实磁基态;是否物理合理仍需要结合后续计算结果判断。
输出标签 / 元数据变更
该卡片会通过
set_initial_magnetic_moments(...)写入三列向量型initial_magmoms。Config_type会追加:Helix(L=...,ph=...,mz=...,chi=...,ax=...)当mz=0Spiral(L=...,ph=...,mz=...,chi=...,ax=...)当mz!=0...,pm=layer,ltol=...仅在phase_mode="Layer-locked"时追加,用来标记整层刚性转动模式和层容差
可复现性说明
本卡片没有随机采样;相同输入结构与相同参数会得到完全相同的输出。
代码默认以传播轴最小投影位置作为相位原点,因此结构整体平移不会改变生成的 spiral 纹理。
若上游卡片已经随机化了结构或磁矩模长,本卡片会忠实继承那些上游差异。