Molekulardynamik-Programmierung

Gute Tageszeit Straßenverkäufer und Straßenverkäufer. Heute möchte ich Ihnen meine Versuche mitteilen, physikalische Prozesse zu programmieren. Genauer gesagt, ein Versuch, sich mit molekularen Proportionen auseinanderzusetzen. Das Gesprächsthema unter dem Habrakat ist Molekulardynamik.

Was ist MD?


Wie Wikipedia sagt , ist MD eine Methode, bei der die zeitliche Entwicklung eines Systems wechselwirkender Atome oder Teilchen durch Integration ihrer Bewegungsgleichungen verfolgt wird.
Wenn es noch einfacher ist, stellen wir die Anfangsbedingungen (Geschwindigkeiten, Positionen der Partikel, deren Typ) ein und kennen die Gesetze ihrer Wechselwirkung. Wir schauen, was daraus wird. Es erinnert mich an das gute alte Live-Spiel.

Mathe


Hier ist alles sehr einfach. Die Wechselwirkungen zwischen Teilchen (in meinem speziellen Fall Atome) werden mit der klassischen Physik betrachtet:

Diese scheinbar verwirrende Formel ist eigentlich ein komplettes Analogon der Schule F = ma.
(Tatsächlich ist die "verwickelte" Formel länger und sieht weniger ästhetisch aus - ich habe die dissipative Komponente bewusst vergessen.)

Mathematisch ist die Partikelsimulation eine Lösung für das Cauchy-Problem für die obigen Gleichungen.
Die Berechnung dieser ganzen Sache habe ich dem Verlet-Algorithmus anvertraut.

IMHO ist es in Genauigkeit und Geschwindigkeit optimal. Eine Sache - er muss die beiden vorherigen Positionen des Teilchens kennen! Daher bleibt der erste Schritt der Ungenauigkeit von Euler überlassen.

Nirgendwo Potenzial


Ф (r) in der obigen Formel wird durch das Potential bestimmt. Im Allgemeinen ist das Potenzial hier der König und Gott - es ist genau sein Einfluss, der am bedeutendsten ist. Ich entschied ich für einen ziemlich beliebt - kennen lernen, Lennard-Jones:


Und das ist , wie es hier aussieht wie es den Atomabstand ist, f - Kraft Interaktion, r - Abstand zwischen den Teilchen.

Genug Formeln


Fahren wir mit der Programmierung fort. Nachdem wir all dies in den Code eingekerbt haben, erhalten wir eine Reihe von Beschleunigungen und Koordinaten am Ausgang (oh ja, Verle arbeitet nicht mit Geschwindigkeiten, Geschwindigkeiten können zum Beispiel mit zentralen Differenzen erhalten werden). Die Visualisierung dieser ganzen Füllung, die ich nicht besonders störte, wies OpenGL an.

Schauen wir uns den Splitter an (1083 Partikel, der Schlagzeuger fällt auf das Ziel).











Dies ist genau der Moment, vielleicht der angenehmste - um mit einem frischen Modell zu spielen. Nur die niedrige Rechengeschwindigkeit gedrückt - die Zeit für Optimierungen ist gekommen.

Beschleunige


Zunächst musste ich zur Physik zurückkehren. Nur ein Blick auf das Potenzial machte deutlich - mit einem Radius größer als 2a - können wir nicht zählen. Das heißt Am einfachsten ist es, wenn jedes Partikel die Wechselwirkung nur mit Partikeln berücksichtigt, die in eine Kugel mit dem Radius a2 mit einem Zentrum im Partikel fallen, für das wir annehmen. Eine Bedingung ist „wenn“ und die Berechnung wird mehrmals beschleunigt (abhängig von der Anzahl der Partikel und der Region).

Die volle Ladung eines Kerns in meinem Krankenhaus zu beobachten, ist eine langweilige Aufgabe. Es ist Zeit, den Prozess zu parallelisieren. Zumal md vollkommen parallel ist. Es scheint einfach - stellen Sie die Entsprechung ein: Das Partikel ist der Prozessor und zählt. Die Praxis hat gezeigt, dass es besser ist, zu parallelisieren, den Raum in ein Raster zu unterteilen und deshalb
Indem wir ein Gitter mit einer Zellengröße von a erstellen, schlagen wir zwei Fliegen mit einer Klappe - wir lösen das Problem mit dem Berechnungsbereich, in dem die Wechselwirkung berücksichtigt wird, und wir machen den Austausch zwischen Prozessoren transparenter und einfacher. So sieht es am Beispiel zweier Prozessoren aus:


Hier ist zu erwähnen, dass jedes Modell abhängig von den Ausgangsbedingungen auch von verschiedenen "Hacks" "angetrieben" wird. Wenn wir zum Beispiel etwas Unendliches (oder Riesiges) modellieren müssen und gleichzeitig dieselbe Struktur in eine oder mehrere Richtungen haben, können wir periodische Randbedingungen anwenden. Ich habe dies verwendet, um die Reibung zweier unendlicher Oberflächen zu simulieren.
Der Punkt hier ist, dass um seinen Rechenbereich seine "Bilder" aufgebaut sind, mit der tatsächlichen Position der Partikel. Und die Partikel der "realen" Region interagieren mit den Partikeln im "Bild". Und wenn ein Teilchen die Grenze der Rechendomäne überschreitet, erscheint es auf der anderen Seite (auch Tunnel in Pacman genannt). Das Folgende ist ein Beispiel für periodische Bedingungen für x und y.



Aber um Reibung zu simulieren, habe ich Periodika nur auf einer Achse verwendet:








Fazit



Das Ergebnis war ein ziemlich interessantes und intuitives Modell, mit dem man gut spielen und versuchen kann, es für echte Berechnungen zu verwenden (die Zuverlässigkeit der Ergebnisse ist sehr anständig). Für eine gute Anwendung lohnt es sich, unter Cuda oder OpenCL zu schärfen - die Geschwindigkeit der Berechnung der MD auf Grafikkarten bei richtiger Parallelisierung ist einfach unerschwinglich! Wetten Sie jedoch auf Ihre Faulheit - bald ist es unwahrscheinlich, dass dies geschieht.

PS: Zum größten Teil habe ich mich auf nur ein Buch gestützt: Die Partikelmethode und ihre Verwendung in der Mechanik des verformbaren Festkörpers. Krivtsov A.M., Krivtsova N.V.

Jetzt auch beliebt: