2016-10-20 6 views
0

現在、私はMDシミュレーションを行っています。分子位置をベクトルに格納します。各時間ステップに対して、そのベクトルを位置ベクトルとして、分子計算のためのメモリ節約システム

std::vector<std::vector<molecule> > data; 

dataのサイズははsizeof(分子)(既に減少)さtime steps*<number of molecules>*sizeof(molecule)、ある3*sizeof(double)が得られ、第二のベクターにおける表示のために記憶されます。それでも私はより多くの量の時間ステップと分子数のために記憶上の問題を抱えています。

したがって、データ量を減らす可能性はありますか?私の現在のワークフローは、すべての分子を最初に計算して保存し、各ステップの各分子のデータを使ってレンダリングすることです。レンダリングはIrrlichtで行います。 (後でミキサーで)。

+0

本当にすべてのタイムステップを維持する必要がありますか? –

答えて

0

位置を倍精度ではなく単精度で保存することで、2倍の改善を得ることができます。レンダリングには、シミュレーション用ではない場合は十分です。

最終的に結果をファイルに保存し、オフラインでレンダリングする必要があります。

3

軌跡が滑らかである場合、N番目のステップごとにのみデータを保存し、補間によって中間位置を復元することでデータを圧縮することを検討できます。

時間ステップが小さい場合、線形補間が可能です。キュービックスプラインによって最高品質を提供できます。とにかく、スプライン係数の計算は、最終的にしか実行できない余分な記憶領域(!)を必要とする大域演算であり、4つの連続した位置から局所的に構築できるカーディナルスプラインを好むかもしれません。

enter image description here

関連する問題