symfc 求解器与紧凑力常数
实际比较dense与梯度求解,并讲清完整/紧凑张量和原子映射。
阅读本篇目录
常规小数据集可先用dense求解;较大数据集可评估梯度路线。求解方法与输出采用完整还是紧凑张量,是两类不同的选择。
下载完整Si实例包,解压到自己的工作目录。包内保留123个真实静态力条件、独立训练/验证/测试划分、14个拟合条件、原生导出文件与绘图脚本。
1. 比较两种求解方式#
已有 labels/ 后:
bash fit.sh Si16-fc2-c5p0
bash fit.sh Si16-fc2-gradient-c5p0
梯度例子的API为:
model.run(
orders=[2],
is_compact_fc=False,
batch_size=16,
use_gradient_solver=True,
)
数据与截断相同。dense确定性解和梯度迭代的系数可能有小差异;梯度过程的随机批次与停止条件也会影响结果。应比较目标函数和独立测试误差,不应把两次独立迭代的所有系数要求为逐位相同。

这组小例子中两种方法的测试误差接近。配套脚本用“训练、验证、测试RMSE相对dense差异小于1%”作为该例的比较目标;这不是材料精度标准或所有体系的默认收敛容差。
2. 完整与紧凑形式#
完整FC2:Nsuper × Nsuper × 3 × 3
紧凑FC2:Nprimitive × Nsuper × 3 × 3
本例Si原胞2原子,所以Si16的紧凑FC2第一维为2,不是16。第一维对应哪些超胞原子,需要 p2s_map,不能只删去“看起来重复”的前几行。
对同一套确定性模型,可复用已建立的基组进行紧凑求解:
model.solve(orders=[2, 3], is_compact_fc=True, batch_size=16)
compact_fc2 = model.force_constants[2]
实例脚本对确定性条件实际检查紧凑结果与完整张量 full_fc2[p2s_map] 的对应关系。梯度例子只拟合一次完整模型,避免把两次不同的随机迭代误当成同一份系数的格式转换。
3. 文件导出还要看原子顺序#
ASE构造的超胞与Phonopy构造的超胞可以描述相同周期结构,但原子排列不同。脚本按周期分数坐标寻找一一映射,并重排力常数的每一个原子索引轴。
cat fits/Si16-fc23-c4p2/ATOM-MAPPING.json
不能只重排FC2第一维,也不能把FC3直接套用一维排列;笛卡尔分量轴不参与原子重排。
4. 线程环境#
export OMP_NUM_THREADS=1
export OPENBLAS_NUM_THREADS=1
export MKL_NUM_THREADS=1
export RAYON_NUM_THREADS=1
这些是本实例采用的受控线程设置,用于可复现数值比较。正式任务按所申请资源选择线程;本例没有给出多核性能排名。
需要根据你的体系选择资源?联系讨论计算需求。实际可用软件与权限,以当前账户和运行环境为准。