我用 C++ 编写了一个基本的 2D Langevin 动力学模拟器,用于潜在的粒子,求解方程:
这依赖于随机数的来源,并且我一直在使用std::random
(特别是 Mersenne Twister RNG)。
我目前的方法是在模拟开始时一次性生成随机数,而不是在每个时间步,因为它(至少对我而言)更快。这对于运行到时间步长,但最终我用完了 RAM 来存储随机数。
我想至少有能力运行更长的模拟(我正在研究粒子在简单势中的扩散行为),并且想知道什么时候需要注意哪些潜在的陷阱
- 将模拟分成多个部分,或
- 将随机数的计算分解成更小的块(比如做一个数字块脚步。
我注意到的一件事是重复序列的风险 - 请参阅“关于 Langevin 和 Andersen Dynamics 的流行分子动力学软件包中的漏洞”