Ich hab mal ein http://en.wikipedia.org/wiki/Ising_model zusammengebastelt. Das läuft eigentlich recht ok, jetzt dachte ich mir, evtl. kann man da ja etwas Interaktion einbauen. Also, ich stells mal etwas vor.
Die Klasse 'Lattice' stellt das ganze System dar. Davon kann ich ein Objekt erstellen und dann darauf die 'run()' Method aufrufen. Das kann man entweder über einen 'if __name__ == '__main__':..' machen, worin das Objekt erstellt wird und das ganze dann startet, oder interaktiv in der Pythonshell. Die Simulation dauert ja schon eine Weile (je nach dem wie gross die Schrittweite bei der Temperatur gewählt wird).
Code: Alles auswählen
if __name__ == '__main__':
J = -1.0; S = 1.0; L = 20
nsteps=40000
heat = []
magn = []
susz = []
tempRange = arange(0.9, 1.0)
for t in tempRange:
print "*"*50, t
lat = Lattice(J, S, L, t)
lat.calculateInitialTotalEnergy()
for step in range(nsteps):
lat.run(step)
heat.append(lat.heat(nsteps))
magn.append(sum(lat.magnet(nsteps)))
susz.append(lat.susz(nsteps))
Wegen der Berechnung, es läuft ein Metropolis Monte Carlo Algorithmus mit dem versucht wird einen Phasenraum aus zwei-wertigen Spins für eine gegebene Temperatur nach Minima abzusuchen.
Also die Frage ist, wie kann ich mit dem Objekt interagieren, während darauf die 'run()' Methode läuft? Weil, wenn ich einfach die 'print' Statements rausnehme, dann startet es zwar, aber dann kommt der Pythonprompt dafür für eine Weile nicht zurück.. also nicht gerade was ich wollte.
Besten Dank für Hinweise.
