我目前正在做一个MD模拟。它将分子的位置存储在一个矢量中。对于每个时间步,该向量被存储以在第二个向量中显示,从而导致
std::vector<std::vector<molecule> > data;data的大小是time steps*<number of molecules>*sizeof(molecule),其中sizeof(分子)是(已经减少的) 3*sizeof(double),作为位置向量。尽管如此,对于更多的时间步长和分子数量,我仍然会遇到记忆问题。
因此,是否存在减少数据量的额外可能性?我目前的工作流程是,我首先计算所有分子,存储它们,然后使用每一步每个分子的数据来渲染它们,渲染是用Irrlicht完成的。(也许稍后再使用搅拌器)。
发布于 2016-10-20 16:47:11
如果轨迹是平滑的,您可以考虑通过每N步只存储一次并通过插值恢复中间位置来压缩数据。
如果时间步长很小,则可以使用线性插值。三次样条可以提供最好的质量。无论如何,样条系数的计算是一个全局操作,您只能在最后执行该操作,并且需要额外的存储空间(!),并且您可能更喜欢基数样条,它可以从四个连续的位置在本地构建。

发布于 2016-10-20 16:37:32
通过以单精度而不是双精度存储位置,您可以获得2倍的性能提升-如果不是用于模拟,它将足以用于渲染。
但最终,您需要将结果存储在文件中并离线渲染。
https://stackoverflow.com/questions/40149260
复制相似问题