分子动力学中的能量漂移

计算科学 分子动力学
2021-12-05 16:55:10

我希望以下问题不会被认为是含糊的。我试图直接问这个问题,而不涉及太多关于我的代码的信息。作为我博士论文的一部分,我目前正在为自定义应用程序开发分子动力学代码。通过直接比较来自 lammps 的数值,我一遍又一遍地检查了力子程序(非键合和键合)的有效性。集成例程与我之前用于重现 LJ 状态数据方程的程序相同,因此我假设它们是 verlet 算法的正确形式。然而,我仍然有一个偷偷摸摸的怀疑,我正在经历比我应该的更多的能量漂移。例如,我最近进行的一项测试是 92.1*92.1*92.1 埃盒子中的 1 个甘氨酸分子。我正在使用带有狼求和的 OPLS 力场来进行静电。我将漂移定义为

漂移=(总势+动-总初始能量)/总初始能量

经过 50,000 步(1.0 fs 时间步,没有抖动,只是蛮力 MD),漂移值超过 0.07 (7%)。为了测试我关于积分器正确的假设是否正确,我运行了 100k 次迭代的模拟,时间步长为 0.5 fs,一次为 1.0 fs。我提供了能量漂移图。对于这些模拟,优化标志设置为 -O0。通过将 dthalf 乘以 0.0004184,力在内部从 kcal/mol/A 转换为 amu*A/fs^2。 在此处输入图像描述 在此处输入图像描述

鉴于我以全双精度运行,

1)如何确定代码库中可能的能量漂移源?例如,如果我将相同的模拟与灯和我自己的运行进行比较,发现我的漂移更大,我该如何机械地确定这个错误的可能来源在我的代码行中?我应该进行哪些测试?

2) 可接受的能量漂移的经验法则是什么?例如,我如何量化模拟是遵循“良好”的能量漂移还是“差”的能量漂移。这个公制大小是否取决于?

1个回答

您已经测量了与初始能量的相对偏差,而 MD 中的“能量漂移”仅作为绝对偏差率有用地测量,并且仅在系统达到平衡后才有效。(您的模拟看起来都没有足够长的时间来测量已经发生的平衡,例如通过测量能量分布窗口的统计特性。)

回答您的问题

1)您可以系统地改变程序中的参数,观察对漂移的影响并推断出实现的数值属性。(这是您已经对时间步长所做的事情。)其他感兴趣的参数是原子排序(例如,在水箱中,如果您在任何 OH 力作用于 O 原子之前累积所有 O 原子上的 OO 力O 原子,那么您将观察到与逐个分子累积不同的数值特性),模拟单元大小(您可以计算 (10,10,10) 周围的两个原子之间距离的数值精度比您低可以计算 (1,1,1)) 周围的两个原子和原子质量。

2) 如上所述,这些指标取决于尺寸,并且通常按原子或自由度报告漂移。漂移是否重要取决于您所观察的内容。通常,您正在观察一些可观察的统计属性,如果这些属性与正确的无法区分,那么您的工作就完成了。在这里可以看到一个有用的方法https://scholar.google.com/scholar?oi=bibs&cluster=1069342445614725659&btnI=1&hl=en大多数人谈论漂移是因为它易于测量并且具有明确的预期特性,但如果它像鸭子一样走路和说话,除非你打算使用羽绒,否则它是否有跳蚤并不重要。