如何计算Grgr使用细胞法算法时

计算科学 计算物理学 分子动力学
2021-12-20 16:19:18

我有一个用 C++ 自己编写的 MD 代码。我正在使用朗之万动力学模型模拟原子。我使用链接单元方法来加快模拟速度;结果,原子相互作用只发生在最近的相邻原子之间。这意味着,在计算原子与系统其余部分之间的距离时,仅考虑相邻单元格内的那些原子。这自然会影响径向分布函数的计算。例如,对于某个截止距离 r_c 是唯一的由于缺乏交互)。这不好,因为您想一直模拟到更大的距离以确保igr(r)gr(r>rc)=0rcgr1

有没有办法使用单元方法并正确计算如果不是,我是否坚持使用传统的算法进行此计算,其中考虑了所有原子相互作用?(我模拟了大约 1000 个原子)。gr(r)O(N2)

2个回答

我相信你可以做一个小的改进,但不是一个戏剧性的改进。假设你的力环由一个外环组成,一个外环覆盖细胞,一个内环覆盖最近邻细胞(然后,更多的环覆盖这些细胞内的原子)。对于配对分布函数计算,相对于外循环中考虑的单元,内循环不仅可以遍历最近邻单元,还可以遍历覆盖大致球形区域到所需距离的所有单元。您可以在程序开始时构建这些单元格的列表(带有相对于中心单元格的索引)。正如您在之前的问题中提到的,您如何执行此操作取决于您如何处理单元格索引

如果感兴趣的最大距离没有盒子长度的一半那么大,那么与所有对方法相比,这可以合理地节省时间。然而,如果你想计算出一半的盒子长度,最大的节省是你正在查看的球形体积的比率,与体积你会看到所有对:大约 50%。本质上,您只是避免查看围绕给定单元格的周期框的“角落”。对于大小为的系统,我认为这不值得,您最好坚持使用所有对(丢弃任何分离大于的)。L43π(L/2)3L3N=1000L/2

这里的一线希望是计算的统计数据随着完成的额外工作而提高。从某种意义上说,你得到了你所付出的:你看更多的对,对于更高的值,所以成本上升,但是对于大的 ,计算的精度更好。如果您愿意,您可以通过减少计算频率来抵消这一点(当然不是每一步!)。rr

的远程部分,但同样,如果您有更大的系统,它可能才值得这样做。您可以从配置的快照创建粒子密度的 3D 直方图,方法是计算立方网格中的原子,但长度比例比力计算要小。通常,单元尺寸应该是颗粒直径的一小部分。然后使用 FFT 算法执行 3D 离散傅里叶变换,给出瞬时并取平方模。波向量函数g(r)ρ(r)ρ^(k)|ρ^(k)|2可以对间隔拍摄的快照进行平均,并最终给出结构因子逆傅立叶变换这会给你原子来说太麻烦了。S(k)g(r)N=1000

这不是它应该如何工作的。使用链表单元(和/或 Verlet 列表)或计算的模拟应该(必须!)给出完全相同的结果。唯一的副作用应该是加速。您需要解耦操作,使用链表单元来评估力和循环来计算径向分布函数。这不应过多地减慢模拟速度,因为您实际上并不需要在每个时间步根据系统的不同,每甚至的质量恶化太多。O(N2)O(N2)g(r)103104g(r)