HILFE! Molekulardynamik-Programm!
-
Der Grund könnten deine nicht initialisierten Variable/Arrays sein.
Deine rx/ry/rz Arrays sehen mir da sehr verdächtig aus ...double rx[N] = {0}, ry[N] = {0}, rz[N] = {0}; // initialisiere Arrays mit 0 ...
-
Also p ist nicht deklariert, da es ein alter Code ist. Sorry! Ich hab es geändert. rx und co müssten alle initialisiert sein. Darauf habe ich auch mal alle Variablen getestet. Zu Beginn funktioniert auch alles, aber irgendwie spuckt mir das Programm viel zu riesige Werte aus, die gar nicht auftreten dürfen und der Abfall zur Null wie erwähnt darf auch nicht sein. Ich glaube, dass ich irgendeine Funktion falsch verwende. Eigentlich sollte an der Stelle der round()-Funktion die ANINT()-Funktion von Fortran. Ich hoffe beide Funktionen sind als gleichwertig anzusehen. Oder denke ich da falsch?
-
Jau jau, so wird das wohl sein - hilft jetzt auch nicht wirklich weiter, ne. :p
-
Vielleicht solltest du mal versuchen in worten zu erklären was der code tun soll. Einfach nur zwei seiten code und "es soll aber nicht 0 rauskommen" ist eine magere fehlerbeschreibung.
-
Also der Code simuliert 125 Teilchen in einem Box mit der Länge L. Die Wechselwirkung zwischen den Teilchen wird durch das Lennard-Jones-Potential beschrieben. Zu Beginn des Codes weise jedem Teilchen eine zufällige Geschwindigkeit und einen Ort zu. Dabei werden die Teilchen so verteilt, dass in jede Richtung den gleichen Abstand haben und zwar L/5. Die Box wird nicht ganz ausgefüllt, da auch in dem Programm virtuelle Teilchen simuliert werden, die um die Box liegen. Dafür ist auch die Zeile mit dem
ryijmin = fabs(ryij - L*lround(ryij/L));
nun startet das Programm die Wechselwirkung zwischen Teilchen i zu alle anderen berechnet. Nachdem dies erfolgt ist, werden alle Teilchen nach einem bestimmte Algorithmus (hier: leapfrog) bewegt. Danach fängt alles von vorne an und zwar t-mal.
-
ein oder anderen anzutreffen, der sich mit sowas schonmal auseinander gesetzt hat
Leider haben die wenigsten sich damit auseinandergesetzt, mich eingeschlossen.
-
knivil schrieb:
ein oder anderen anzutreffen, der sich mit sowas schonmal auseinander gesetzt hat
Leider haben die wenigsten sich damit auseinandergesetzt, mich eingeschlossen.
Ich schon, jedoch ist die Fehlerbeschreibung absolut ungenügend. Es ist nicht einmal ein compilierender Code da. Aber nachdem ich das dem Threadersteller gesagt habe und sich nichts geändert habe, werde ich ihm bestimmt nicht 5 Seiten lang alles was ich wissen muss einzeln aus der Nase ziehen. Ich denke, so geht es vielen Leuten.
-
Ich meinte eher, dass es sich wahrscheinlich um einen inhaltliche Fehler handelt. D.h. Leapfrog und Lennard-Jones sind den wenigsten ein Begriff.
-
Irgendwie fehlt mir was bei der Anpassung der Geschwindigkeit. Du machst das einmal für jedes i, aber nur für das Teilchen i, nicht für j. Das heißt, da dein i nur von 0 bis N-2 läuft, dass das letzte Teilchen nie seine Geschwindigkeit ändert. Ist das so richtig?
Hast du den Algorithmus mal irgendwo in Pseudocode oder einer anderen Sprache oder so zum Vergleich?
-
knivil schrieb:
Ich meinte eher, dass es sich wahrscheinlich um einen inhaltliche Fehler handelt. D.h. Leapfrog und Lennard-Jones sind den wenigsten ein Begriff.
Wieso? Hier sind schon einige Leute anwesend, die von numerischer Simulation eine Ahnung haben.
@OP: Dir kann man so nur den Allgemeinsten aller Ratschläge geben. Schnapp Dir einen Debugger, schau Dir an, was das Programm macht, und dann versuche zu verstehen, was schief läuft. Mach Dir Kommentare in den Code und versuche vor allem mal ein einfaches Beispiel mit ein paar Freiheitsgraden auf einem Zettel durchzurechnen. Das hilft ungemein beim debuggen und auch für zukünftige Aufgaben dieser Art. Wenn Du Hilfe benötigst, dann komme mit konkreteren Fragen. Du hälst ja auch sicher eher jemandem die Tür auf, als ihm die Wocheneinkäufe die Treppe hoch zu tragen, oder?
-
Hast Du mal getestet, ob das Verhalten von der Groesse Deiner Zeitschritte abhaengt?
EDIT: Wenn sich uges immer weiter dem Wert 0 annaehert, dann heisst das, dass Deine Teilchen immer weiter auseinanderlaufen und die "Rueckprojektion" in Deine Box irgendwie nicht klappt. Ueberpruef mal, wie sich Deine Abstandsquadrate rijsq ueber die Zeit entwickeln. Die sollten ja eigentlich im Grossen und Ganzen nicht wesentlich groesser werden.