Magnetisches Pendel - Beispielapplikation

Bedienung der Software

Eine in C++ geschriebene Beispielimplementierung des Magnetischen Pendels kann auf GitHub herunter geladen werden.

C++ Version herunterladen

Die Anwendung benötige die Laufzeitumgebung von Visual Studio 2013 um zu starten. Die Benutzeroberfläche zu erklären ist einfach, denn es gibt (fast) keine. Alle Simulationsparameter werden aus einem Konfigurationsfile eingelesen, das als Parameter beim Start übergeben werden muß. Das Programm besteht aus einem einzigen Fenster, die Berechnung startet sofort. Da das Warten auf ein Ergebnis recht langweilig sein kann habe ich ein wenig Interaktivität eingebaut. Wannimmer die Maus bewegt wird berechnet das Programm die zur Mausposition gehörende Pendelspur. Das ist zwar nur spielerei, kann aber auch ganz hilfreich sein, um manuell bestimmte Gebiete der Simulation abzutesten. Hier kommen wir auch gleich wieder auf den Schmetterlingseffekt zurück, denn es ist schon interessant zu sehen, wie stark sich die Spuren von benachbarten Startpositionen unterscheiden können.

Durch drücken der rechten Maustaste kann angezeigt werden, welche Pendelspur gerade berechnet wird. Nochmaliges drücken deaktiviert diese Anzeige wieder.

Application window Die Simulation in Aktion.

Die Anwendung nutzt die Vorteile von Mehrkernsystemen durch verteilen der Rechenaufgaben auf die einzelnen Kerne der CPU.

Format der Konfigurationsdatei

Das Format der Konfigurationsdatei entspricht dem einer einer Windows INI-Datei. Es können folgende Parameter verwendet werden:

Sektion Schlüssel Beschreibung
[FIELD] COLS Anzahl der Spalten des Simulationsgebietes. Dieser Parameter definiert die räumliche Diskretisierung in X-Richtung.
HEIGHT Anzahl der Reihen des Simulationsgebietes. Dieser Parameter definiert die räumliche Diskretisierung Y-Richtung.
SIM_WIDTH
(optional)
Breite der Simulationsdomain in metern. Wird auf COLS gesetzt, wenn unspezifiziert.
SIM_HEIGHT Länge der Simulationsdomain in Metern. Wird auf ROWS gesetzt, wenn unspezifiziert.
WIN_WIDTH
(optional)
Breite des Ausgabefensters in Pixel. Benutze diesen Parameter um das Ausgabefenster zu verkleinern, wenn die Simulationsgröße über die Bildschirmgröße heraus geht. Ist der Wert ungesetzt, so wird er mit dem Wert von COLS belegt.
WIN_HEIGHT
(optional)
Die Höhe des Ausgabefensters in Pixeln. Dieser Parameter kann verwendet werden, um die Höhe des Ausgabefensters anzupassen, wenn Bilder berechnet werden, die Größer als der Bildschirm sind. Wird der Parameter weggelassen, do wird er mit dem Wert von ROWS belegt.
[SIMULATION] THREADS
(optional)
Legt die Anzahl der Threads fest, die von der Simulation erzeugt werden fest. Wenn der Parameter ausgelassen wird, dann wird automatisch die Anzahl der Kerne verwendet. Jeder Thread läuft auf einem eigenen Kern. Dadurch kann die Geschwindigkeit auf Mehrkernsystemem deutlich erhöht werden. (ca. 40% mit einem Dual-Core Rechner).
FRICTION Der Reibungskoeffizient. Die Reibungskraft ist direkt proportional zur Geschwindigkeit des Pendels wobei dieser Wert als Proportionalitäskonstante dient.
PEND_HEIGHT Die Höhe des Pendels über der Ebene in der die Magnete angeordnet sind.
DELTA_T Die Integrationsschrittweite. Eine kleinere Schrittweite bedeutet eine genauere Simulation. Dieser Parameter entspricht dem Parameter h in der Beeman-Integrationsformel.
MIN_STEPS Minimale Anzahl an Schritten, die eine Pendelspur haben muß bevor die Abbruchbedingungen überprüft werden.
MAX_STEPS Maximale Anzahl an Schritten, die eine Pendelspur haben darf. Wird diese Anzahl erreicht bricht die Berechnung ab, auch wenn das Pendel noch nicht über einem Magneten zur Ruhe gekommen ist.
ABORT_VEL Wenn die Pendelgeschwindigkeit unter diesen Wert fällt wird die Verfolgung der Spur beendet und die Berechnung des nächsten Pixels wird gestartet.
COLOR_SCHEME Eine Gleichung die verwendet werden soll um die Farbe eines Pixels in Abhängigkeit der Gesamtspurlänlge zu berechnen. Die Farbe eines Pixels wird durch die Länge der gerade berechneten Spur und die Länge der Längsten Spur bestimmt. Es muß sich bei diesem Parameter um eine Funktion handeln, der die Variablen len und max_len (siehe Bild 2) enthält.
zum Beispiel: 1/(exp(0.000001*(len*len)))
BATCH_MODE
(optional)
Dieses Flag aktiviert den Batch-Modus. Im Batch-Modus beendet sich die Simulation selbstständig nach einer Berechnung. Dieses Flag kann benutzt werden um mittels Shell-Skripten Animationen zu erstellen.
[SOURCE ...]
... steht für einen Index
TYPE Gibt die Art der Quelle an. Erlaubt sind folgende Schlüsselwörter: INV_SQR oder LINEAR. Die von der Quelle ausgehende Kraft ist entweder proportional zur Entfernung des Pendels oder proportional zum inversen Quadrat der Pendelentfernung. Der erste Fall beschreibt ein Verhalten ähnlich dem Hookesches Gesetz, der zweite Fall beschreibt eine Quelle ähnlich dem Coulombschen Gesetz (Rein physikalisch gesehen haben wir es hier allerdings mit Magneten zu tun, nicht mit elektrischen Ladungen also ist das Coulombsche Gesetz hier nur Beispielhaft zu verstehen).
COLOR Die Farbe der Quelle. Kommt das Pendel über der Quelle zu stehen, dann wird seine Startposition mit dieser Farbe eingefärbt.
RAD Die Positionen der Quellen werden in Polarkoordinaten angegeben. Dies ist der Abstand der Quelle vom Simulationszentrum aus gesehen.
THETA Die Positionen der Quellen werden in Polarkoordinaten angegeben. Dies ist der Winkel, den die Quelle vom Simulationszentrum aus gesehen einnimmt.
MULT Multiplikator für die Stärke der Kraft. Je größer dieser Wert ist, umso stärker wirkt die Kraft auf das Pendel.
SIZE Größe der Quelle. Die Abbruchbedingungen werden nur überprüft, wenn das Pendel sich näher als so viele Pixel an der Quelle befindet.

Beispielekonfigurationsdateien befinden sich im data Unterverzeichnis. Wenn du eine eigene Konfiguration erstellen möchtest, dann fange am besten mit einer bestehenden Datei an und modifiziere diese.