CP2K专题

CP2K液体扩散实操:MSD拟合与统计

从四条完整氩轨迹解缠坐标、多起点平均MSD,比较两个拟合窗口,报告真实扩散值与样本标准差。

更新于 2026-11-08约 4 分钟阅读按任务与环境选择适用配置
阅读本篇目录

完成预平衡与生产轨迹后,本篇说明怎样从自己的CP2K输出得到扩散参考值,以及哪些误差仍需继续检查。

1. 先复算参考曲线#

下载四条液体轨迹完整数值与分析包:

python3 -m zipfile -e cp2k-Ar108-liquid-diffusion-wave307-*.zip .
cd cp2k-Ar108-liquid-diffusion-wave307
bash run.sh
cat results/DATA.json
head results/seed1-MSD.csv

全部分析以实际1201帧108原子坐标和完整能量表为输入。bash run.sh不重新运行MD,也不从图片上手工取点。

2. 读取自己的CP2K轨迹#

若已用上一篇脚本在work/完成四组计算:

module purge
module load pymatgen/2026.9.24
python read_cp2k_liquid.py work --output my-raw
python analyze.py --data my-raw --output my-results
python plot.py --data my-results --output my-plots
cat my-results/DATA.json

读取器读取seedN-prod-pos-1.xyz、seedN-prod-1.ener以及预平衡能量表。当前分析器对应108个Ar、18 Å盒、2 fs步长、每20 fs输出和24 ps生产;换体系时同步修改这些范围、原子选择与拟合窗口,不将其他长度轨迹硬改成相同形状。

3. 周期坐标先解缠#

粒子穿过周期边界时,如果直接用包裹坐标相减,MSD会出现虚假的大跳跃。本例利用相邻20 fs帧的最小镜像位移累加得到连续坐标,再逐帧扣除整个体系的质心平移。

delta = positions[1:] - positions[:-1]
delta -= box_length * np.rint(delta / box_length)
unwrapped = np.concatenate([
    positions[:1],
    positions[:1] + np.cumsum(delta, axis=0)
])
relative = unwrapped - unwrapped.mean(axis=1)[:, None, :]

本例是固定正交盒,box_length=18.0 Å;倾斜盒、NPT变胞或刚体整体移动要采用相应处理,不能直接逐笛卡尔分量套用。保存坐标过稀会使相邻帧移动超过半盒长,从而无法唯一恢复跨越次数。

4. 用多个时间起点求MSD#

对每个时间间隔τ,对所有能组成该间隔的时间起点和全部108个原子平均:

MSD(τ) = < |r_i(t+τ) − r_i(t)|² >_(i,t)
D = (MSD对时间的线性斜率) / 6

分母6对应三维各向同性扩散,二维通常为4,不能直接照抄。短时间弹道区也不适合用同一线性扩散公式。本例主拟合2–6 ps,另用1–4 ps检查窗口依赖,拟合保留自由截距,不强迫直线过原点。

全部四条MSD与两个拟合窗口的实际扩散值

5. 本次实际数值#

初速度样本 生产平均温度 / K D,2–6 ps / Ų·ps⁻¹ D,1–4 ps / Ų·ps⁻¹
1 124.2129 0.522918 0.512977
2 122.1886 0.448230 0.455608
3 123.3966 0.591913 0.573710
4 122.9525 0.437628 0.438566

四个主窗口结果的平均值为0.500172 Ų/ps,即5.00172×10⁻⁹ m²/s;样本标准差为0.071980 Ų/ps,四样本平均值的标准误为0.035990 Ų/ps。标准差与标准误描述不同量,不要都标成同一种“误差”。

1 Ų/ps = 10⁻⁸ m²/s

本组四个样本的相对标准差约14.4%。换拟合窗口所得变化与独立样本差异都应保留,不挑其中一个值当成所有液体的精确答案。MSD时间起点互相重叠,因此不能把所有起点视为独立重复样本,再据此声称误差极小。

6. RDF怎样帮助判断结构#

cat results/seed1-RDF.csv | head
ls plots/Ar108-liquid-structure-RDF.png

RDF用生产后半段12 ps的实际原子对最小镜像距离统计。附件采用有限N的N(N−1)归一,不包含原子与自己的配对;若与采用N²归一的工具比较,应先统一约定。RDF的宽峰和MSD的扩散区间应结合起来看,不能只因某一条曲线有峰就宣布液体已充分平衡。

7. 怎样把这个流程用于自己的体系#

  1. 选择适合材料与相态的势、密度、温度和边界条件,先得到合理预平衡状态。
  2. 保存足够密的轨迹,并在生产阶段检查能量及温度趋势。
  3. 先画MSD,再选择扩散线性区;比较多个窗口和不同起始速度。
  4. 增加生产时长、独立样本和体系尺寸,观察D及误差是否稳定。
  5. 含固体基底、固定原子或多组分时,分别选择真正移动的物种,并按所需物理方向计算。

本次没有做体系尺寸外推、黏度相关有限尺寸修正或充分长时间极限收敛,也没有把LJ模型的结果标成第一性原理或实验氩扩散系数。需要晶体振动、短轨迹与续算的入门对照,可回看续算、RDF与MSD。

需要根据你的体系选择资源?联系讨论计算需求。实际可用软件与权限,以当前账户和运行环境为准。

查看配图

放大后可滚动查看细节,按 Esc 关闭。

100%查看原图 ↗