分子動力学プログラミング

一日の楽しい時間は行商人と行商人です。 今日は、物理プロセスのプログラミングにおける私の試みを皆さんと共有したいと思います。 より具体的には、分子の割合を掘り下げる試み。 habrakatの下での会話のトピックは分子動力学です。



MDとは?



ウィキペディアが言うように、MDは相互作用する原子または粒子のシステムの時間的進化を、それらの運動方程式を統合することによって追跡する方法です。

さらに簡単な場合は、初期条件(速度、粒子の位置、粒子の種類)を設定し、相互作用の法則を知って、その結果を調べます。 古き良きライブゲームを思い出します。



数学



ここではすべてが非常に簡単です。 粒子(私の特定の場合、原子)間の相互作用は、古典的な物理学を使用して計算されます。



この一見紛らわしい式は、実際には学校F = maの完全な類似物です。

(実際、「混乱した」フォーミュラはより長く、見た目があまり美しくありません-消散成分を意図的に忘れていました)



数学的には、粒子シミュレーションは上記の方程式のコーシー問題の解決策です。

このすべてを計算するために、Verletアルゴリズムを委任しました。



私見、それは精度と速度が最適です。 一つのこと-彼は粒子の以前の2つの位置を知る必要があります! したがって、最初のステップはオイラーを不正確にするために残されています。



どこにもポテンシャルがない



上記の式の(r)は、ポテンシャルによって決定されます。 一般的に、ここでの可能性は王と神です。最も重要なのはまさに彼の影響です。 私は非常に人気のあるものを選びました-レナード・ジョーンズに会います:





そして、これは見た目です。ここでは原子間距離、 fは相互作用の力、 rは粒子間の距離です。



十分な数式



プログラミングに移りましょう。 これをすべてコードに記録すると、出力で加速度と座標の配列を取得します(ああ、はい、Verleは速度で動作しません。たとえば、中央の差を使用して速度を取得できます)。 このような詰め物の視覚化は、特に煩わしいことではなく、OpenGLに指示しました。



破片を見てみましょう(1083個の粒子、ストライカーがターゲットに「落ちる」)























それはまさにこの瞬間であり、おそらく最も楽しいものです-新鮮なモデルで遊ぶこと。 計算速度が低下しただけで、最適化の時が来ました。



スピードアップ



まず、物理学に戻らなければなりませんでした。 可能性を一度見ただけでそれが明らかになりました-半径が2aより大きい-数えられません。 つまり 最も簡単な方法は、各パーティクルが、想定するパーティクルの中心を持つ半径a2の球に落ちるパーティクルとの相互作用のみを考慮することです。 1つの条件は「if」であり、計算は数回加速されます(粒子と領域の数に応じて)。



私の病院で1つのコアの負荷をすべて見るのは退屈な作業です。 プロセスを並列化する時が来ました。 特にmdは完全に並列であるため。 それは単純に思えます-対応を設定します:粒子はプロセッサとカウントです。 実践が示しています-並列化する方が良いでしょう、スペースをグリッドに分割するのはそのためです。

セルサイズがaのグリッドを作成することで、1石で2羽の鳥を殺します-相互作用が考慮される計算領域の問題を解決し、プロセッサー間の交換をより透明でシンプルにします。 2つのプロセッサの例では、次のようになります。





ここでは、初期状態に応じて、どのモデルもさまざまな「ハッキング」によって「追跡」されることに言及する価値があります。 たとえば、無限(または巨大)なものをモデル化する必要があり、同時に1つまたは複数の方向で同じ構造を持つ場合、周期的な境界条件を適用できます。 これを使用して、2つの無限の表面の摩擦をシミュレートしました。

ここでのポイントは、その計算ドメインの周りに、粒子の実際の位置とともに「画像」が構築されるということです。 そして、「実」領域の粒子は、「画像」内の粒子と相互作用します。 そして、粒子が計算領域の境界を越えると、反対側に現れます(別名pacmanのトンネル)。 以下は、xとyの周期条件の例です。







しかし、摩擦をシミュレートするために、私は1つの軸だけで定期刊行物を使用しました。

















おわりに





かなり興味深く直感的なモデルであることが判明しました。実際の計算に使用したり試してみたりすることは非常に可能です(結果の信頼性は非常にまともです)。 適切なアプリケーションの場合、CudaまたはOpenCLの下でシャープにする価値があります。適切な並列化を使用してビデオカードのMDを計算する速度は、非常に高いです。 しかし、あなたの怠beに賭けて-すぐにこれは起こりそうにありません。



PS:ほとんどの場合、 粒子法と変形可能なソリッドケースの力学での使用という 1本だけに依存していました Krivtsov A.M.、Krivtsova N.V.



All Articles