call random_number(random)Dabei ist random ein Skalar oder Array vom Typ real, der nach dem Aufruf die Zufallszahl bzw. einen ganzen Satz von Zufallszahlen enthält. Wiederholte Aufrufe liefern aufeinanderfolgende Zufallszahlen aus der Sequenz des Generators. Der momentane Status des Generators ist in einem Vektor vom Typ integer gespeichert und kann mit
call random_seed(get=seed)abgefragt und mit
call random_seed(put=seed)gesetzt werden. Die (installationsabhänigige) Länge length des Vektors seed kann man mit
call random_seed(size=length)abfragen. Die Möglichkeit, den Status des Generators auszulesen bzw. zu setzen, ist wichtig, wenn man eine lange, zusammenhängende Simulation in kürzere Teilabschnitte zerlegen will: Man liest am Ende jeder Teilrechnung den Status des Generators aus und initialisiert ihn damit am Beginn der nächsten. Will man (für Testzwecke) mehrere Male exakt dieselbe Folge von Zufallszahlen bekommen, so muß man analog jeweils den Generator auf denselben Ausgangszustand setzen. In F von Imagine1 ist derzeit der "Minimalgenerator"
|
random=drand48();oder direkt an Stelle eines double- oder float-Werts in numerischen Ausdrücken verwendet werden. Der interne Status wird in einem 3-elementigen Vektor von vorzeichenlosen ganzen 16-Bit-Zahlen gespeichert und kann mit
unsigned short int seed[3],dummy[3];ausgelesen und mit
...
seed=seed48(dummy);
seed48(seed);gesetzt werden. dummy ist eine Hilfsvariable vom selben Typ wie der Statusvektor seed (genaugenommen setzt die Funktion seed48 einen neuen Statusvektor und gibt gleichzeitig den alten als Funktionswert zurück). Der verwendete Generator ist
|