TU BS logo

Technische Universität Carolo-Wilhelmina zu Braunschweig

Institut für Theoretische Physik

250 Jahre logo

Home -> People -> A. Honecker -> Teaching -> Monte-Carlo -> Perkolation -> Verbindungs-Perkolation
Letzte Aktualisierung: 1. Februar 2003 a.honecker@tu-bs.de

Implementierung von Verbindungs-Perkolation



Einleitung

Diese Seite erklärt die Verwendung eines Programms zur Simulation von Verbindungs-Perkolation auf dem Quadratgitter. Die erzeugten Cluster können auch auf einem X11 Bildschirm angezeigt werden.

Dieses Programm verwendet ein Feld anzugebender Größe. In der Mitte des Feldes wird ein nasser Punkt erzeugt, dann werden dessen (leere) Nachbarn mit Wahrscheinlichkeit p ebenfalls naß gemacht, dann die leeren Nachbarn der Nachbarn ebenso usw. bis der Prozeß abbricht. Da ein bestimmter Punkt in jedem so erzeugten Cluster enthalten ist, wird ein Cluster mit einer Wahrscheinlichkeit proportional zu seiner Größe s erzeugt. Man simuliert also s n(s) - nicht n(s).

Download und Compilieren

  1. Lade dieses Archiv mit den kompletten Quellcodes.
  2. Dekomprimiere es mit `gunzip' oder `gzip -d'.
  3. Packe es mit `tar xvf Dateiname' aus.
  4. Gebe `make' ein, um die Programme zu erzeugen.
Dann wird sowohl das eigentliche Simulationsprogramm `bperc' wie auch die Auswertungsprogramme `conv_plot' und `int_ns' erzeugt.

Anmerkungen zur Implementierung

  • Der Systemzustand wird in Wörtern mit 32 Bits gespeichert, so daß jedes Bit einen Gitterpunkt darstellt.
  • Das Programm verwendet den System-Zufallsgenerator random(), dessen Wertebereich durch RAND_MAX spezifiziert sein sollte. Bei Problemen ist evtl. die Definition von RAND_MAX anzupassen - ggfs. reicht das Einfügen einer Zeile `#define RAND_MAX 2147483647' nach den `#include's in der Datei bperc.c.
  • Der Zufallsgenerator wird unter Verwendung der Systemuhr bei jedem Prorgrammaufruf auf einen neuen Wert gesetzt.
  • Die Fill-Prozedur ist nicht wirklich optimal implementiert - sie verwendet einfach den Systemstack. Bei der Simulation von großen System mit p=>1/2 muß deswegen evtl. der System-Stack (d.h. stacksize) auf einen möglichst großen Wert gesetzt werden.

Verwendung

Das Programm wird mittels mehrer Optionen gesteuert. Die Liste aller Optionen kann z.B. durch Eingabe von `bperc -o' angezeigt werden. Die wichtigsten zur Anzeige von Clustern sind `-s' um überhaupt etwas anzuzeigen, `-p' um den Wert von p zu ändern und `-w' sowie `-h' zum Einstellen der Sytemgröße. Die letzten beiden sollten immer angegeben werden.
Für eine vollständige Liste der Optionen siehe unten.

Das Programm erzeugt und verwendet folgende Dateien:
status
Diese Datei enthält alle wichtigen Informationen über die bisher simulierten Cluster. Diese Datei wird gelesen, um eine unterbrochene Simulation mittels der Option `-d' wieder aufzunehmen. Man kann auch `bperc -e' verwenden, um mittels der Datei `status' einer laufenden Simulation die Dateien `cf_plotfile' und `ns_plotfile' zu erzeugen.

ns_plotfile
Die Cluster-Verteilung. Die erste Spalte enthält die Größe s, die zweite die zugehörigen Werte s n(s) (in der aktuellen Implementierung). Mit den Programmen `conv_plot' und `int_ns' können Sie aus der Datei `ns_plotfile' die Dateien `ns_plotfile1' bzw. `Ps_plotfile' erzeugen (für weitere Anmerkungen vgl. den Anfang der jeweiligen Quellcodes).

cf_plotfile
Die Korrelationsfunktion g(r). Die erste Spalte enthält die Abstände r, die zweite die zugehörigen Werte von g.
Warnung: In der aktuellen Implementierung werden große Cluster häufiger erzeugt. Damit enthält `cf_plotfile' nicht wirklich g(r). Zu einem Korrekturvorschlag vergleiche den Übungsvorschlag unten.
Man beachte, daß das Programm einige Informationen auf der Konsole ausgibt, bevor es anfängt, Cluster zu erzeugen.

Starten Sie das Programm mit der Option `-s' um Cluster auf dem Bildschirm anzuzeigen. Einzelne Cluster werden in einem Fenster schwarz auf weißem Hintergrund angezeigt. In diesem Fenster können die folgenden Tasten gedrückt werden:
S    Erzeuge einen einzelnen Cluster, zeige diesen an und warte dann auf einen Tastendruck.
R    Erzeuge Cluster und zeige diese an, ohne auf Tastendrücke zu warten. Druck auf S schaltet wieder in den Einzelschritt-Modus zurück.
Achtung: Im Freilauf-Modus kann es zu Verzögerungen bei der Reaktion auf Tasten kommen.
X    Beende das Programm.

Man beachte, daß sich das Programm nach Start mit X11-Anzeige in einem Modus befindet, wo es nach jedem Cluster auf einen Tastendruck wartet. Es ist also z.B. die Taste S zu drücken, um einen neuen Cluster zu erzeugen, oder die Taste R, um das Programm einfach frei laufen zu lassen.

Optionen:

-w# Setzt die Breite des Sytems auf # Plätze. # muß eine durch 32 teilbare ganze positive Zahl sein.
-h# Setzt die Höhe des Sytems auf # Plätze. Hier tut es jede ganze positive Zahl.
-p# Setzt p auf #. # sollte eine Fließkommazahl zwischen 0 und 1 sein.
-c# Setzt die Zahl der zu erzeugenden Cluster auf #.
-d Setzt die Simulation an der in der Datei `status' gespeicherten Stelle fort.
-e Wertet die Datei `status' aus, d.h. erzeugt die Ergebnis-Dateien, die andernfalls erst am Ende der Simulation erzeugt würden.
-s Zeigt die Cluster in einem Fenster auf einem X11 Display an.

Beispiel:

Wir wollen einen Programmlauf ausführen, aus dem das obige Bild stammen könnte. Ein geeigentes Kommando ist:
  bperc -w512 -h512 -p0.5 -s
Die Optionen `-w' und `-h' setzen die Systemgröße auf 512x512. Mit `-p0.5' wird p auf den kritischen Wert pc=1/2 gesetzt. Die Option `-s' weist das Programm an, alle erzeugten Cluster in einem X11 Fenster anzuzeigen. Ohne letztere Option würde man nichts sehen.

Zur Erinnerung: Nach Programmstart muß (in dem Programmfenster) jeweils auf S getippt werden, um einen Cluster nach dem anderen anzuzeigen. Tippen auf R läßt ohne Verzögerung einen Cluster nach dem anderen durchlaufen. Die Taste X beendet das Programm.

Man beachte, daß während und am Ende des Programmlaufs Dateien geschrieben werden. Das Programm muß also in einem Verzeichnis mit Schreibberechtigung gestartet werden.

Übungsvorschlag:

Ändern Sie das Programm zu folgender Implementierung von Platz-Perkolation:
Erzeugen Sie ein System, bei dem Plätze mit Wahrscheinlichkeit p besetzt sind. Bestimmen Sie dann für alle Cluster im System deren Größe sowie ihren Beitrag zur Korrelationsfunktion g(r). Überzeugen Sie sich dann, daß die Korrelationsfunktion bei pc einem Potenzgesetz g(r) = konst. r-eta mit eta=5/24 genügt.

Hinweise:
  1. Die beiden Zeilen zur Erzeugung eines leeren Systems in der Routine `get_cf_con' müssen durch Erzeugung leitfähiger Plätze mit Wahrscheinlichkeit `p_val' ersetzt werden. Damit die Routine `fill_and_save' weitgehend unverändert übernommen werden kann, empfiehlt es sich, leitfähige Plätze durch Bit `0' darzustellen.
  2. In der Routine `get_cf_con' müssen ferner die 6 Zeilen, die die Bildmitte ansteuern, durch eine Schleife über alle Plätze des Systems ersetzt werden (warum ?).
  3. Die Routine `fill_perc' kann entfernt und direkt durch einen Aufruf der Routine `fill_and_save' ersetzt werden.
  4. Nach diesen Änderung erzeugt das Programm in `cf_plotfile' Werte von g(r) (sowie in `ns_plotfile' Werte von n(s) statt Werte von s n(s) wie ohne Änderung).
  5. pc=0.592746 für Platz-Perkolation auf dem Quadratgitter [6].


Home | People | Research | Reach us | Education | Service | Vacancies

contact Webmaster