Ich habe ein Problem mit etwas, dass eigentlich ganz leicht sein soll. Ich habe zwei Module, particles.py und sampler.py. particles.py enthält einige Funktionen, die das "hard-spheres-collision" model implementieren, sampler.py stellt eine Klasse zur Verfügung, die zur Speicherung der Koordinaten während der Simulation genutzt wird und anschliessend eine kleine Datenbearbeitung durchführt (Verteilung der Partikel über die Simulation berechnen, u.ä.).
Code: Alles auswählen
class Sampler:
def __init__(self):
"""Initialize variables
"""
self.count = 0
self.data = []
#Distributions
self.partdist = []
self.partdisteq = []
def sampleData(self, X, Y):
"""Sampling the positions of the particles.
X and Y are lists.
self.data[step][coordinate][particle_id]
"""
self.data.append([X, Y])
self.count += 1
def getData(self):
return self.data
Code: Alles auswählen
sampler = Sample()
def simulateNSteps(xpos, ypos, xvel, yvel):
print 'Simulation'
#loop over steps.
for s in range(nstep):
[loop over all particles]
#Updating positions
xpos[i] += xvel[i]
ypos[i] += yvel[i]
sampler.sampleData(xpos, ypos)
Das Problem ist folgendes: wenn ich am Ende der Simulation die Liste (von X-Y-Listen) ausgebe, die die Koordinaten der Teilchen während der Simulation enthalten soll, so stehen an jeder Stelle die Koordinaten, die die Teilchen im allerletzten Schritt hatten. Auch die früheren Koordinaten werden durch diese letzten Koordinaten ersetzt/ überschrieben.
Das kann ich mir beim besten Willen nicht erklären, weil ich ja nur an die Liste anhänge und sonst nichts damit geschieht. Wieso werden dann die ursprünglichen Werte überschrieben??
Der komplette Code ist hier:
particles.py
http://paste.pocoo.org/show/207443/
sampler.py (genannt th3.py)
http://paste.pocoo.org/show/207444/