|
Implementierung von Verbindungs-Perkolation
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).
- Lade dieses Archiv mit den kompletten
Quellcodes.
- Dekomprimiere es mit `gunzip' oder `gzip -d'.
- Packe es mit `tar xvf Dateiname' aus.
- 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.
-
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.
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.
-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.
|
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.
Ä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:
- 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.
- 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 ?).
- Die Routine `fill_perc' kann entfernt und direkt durch einen
Aufruf der Routine `fill_and_save' ersetzt werden.
- 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).
- pc=0.592746 für Platz-Perkolation auf dem
Quadratgitter [6].
|
|