Vergleich zweier Versionen desselben hydrodynamischen Codes und ihres Fehlers

Ich habe zwei Versionen eines hydrodynamischen Codes, der die gleiche zugrunde liegende Physik hat; Nennen wir sie Code A und B. Code B ist jedoch optimierter und objektorientierter als A. Ich habe versucht, die numerischen Ergebnisse beider Codes zu vergleichen und zu sehen, ob sie kompatibel erscheinen. Ich mache das so, dass ich beide Codes mit denselben Anfangsparametern laufen lasse und einen bestimmten hydrodynamischen Wert X berechne, der in der Größenordnung von liegt 10 6 . Um beide Codes zu vergleichen, mache ich im Wesentlichen

X(A)−X(B)=ϵ wobei ϵ ein Fehler ist. Der Test gibt ϵ = 10 2 , was bedeuten würde, dass beide Codes für die ersten 8 Ziffern das gleiche X ausspucken.

Wie signifikant ist dieser Fehler? Ich verwende doppelte Genauigkeit für Nicht-Ganzzahlen. Würde eine solche Größe einfach einen kumulativen Rundungsfehler für die Tausenden von Berechnungen bedeuten, die an einem Hydrocode beteiligt sind? Oder ein grundlegender Unterschied, den ich übersehe?

Lassen Sie uns vor allem anderen ein paar dumme Fragen stellen. (A) Sind diese Codes deterministisch oder Monte Carlo? (B) Wenn Monte Carlo, rufen sie den PRNG identisch auf, und wenn ja, verwenden Sie zumindest denselben Seed für beide Läufe? (C) Haben beide Codes Testsuiten für die Kernoperationen? Passen beide? (D) Sind beide mit denselben mathematischen Optionen und Optimierungsstufen kompiliert?
Sie sind deterministische Codes. Einer der Codes wurde gegen die Ergebnisse eines früheren Fortran-Codes getestet, sodass der weniger optimierte Code „vertrauenswürdiger“ ist, da er mit einem älteren Code getestet wurde. Beide sind in Java kompiliert und die Werte sind doppelt genau.
Ich bin gerade am Telefon, also kann ich keine vollständige Antwort schreiben, aber ich werde sagen, dass es dir wahrscheinlich gut geht. Wenn Sie am nächsten Tag oder so keine bessere Antwort von mir erhalten, pingen Sie mich an und ich tippe etwas ein
Einige Standardtests wie das Sod-Stoßdämpferrohr haben bekannte analytische Lösungen, mit denen Sie vergleichen können. Dann können Sie den tatsächlichen Fehler berechnen, anstatt Code-Code zu vergleichen.

Antworten (1)

Der beste Weg, um die Genauigkeit eines Hydrodynamikcodes zu sehen, besteht darin, ihn mit analytischen Lösungen zu testen. Wie von Winther in den Kommentaren erwähnt, ist das Sod-Stoßdämpferrohr einer der häufigsten Tests für 1D-Hydro (das magnetohydrodynamische (MHD) Analogon davon wird als Brio-Wu-Stoßdämpferrohr bezeichnet ) .

Für andere Tests (jeder Dimension, aber ohne die analytische Lösung) ist das, was Sie tun, in Ordnung (und wird häufig in professionellen, akademischen Codes durchgeführt, z. B. erwähnt diese Testsuite von Athena die Verwendung der Suite für Ihre eigenen Vergleiche).

Abhängig von L P Norm , die Sie dort verwenden (scheint zu sein L 1 ), ich würde den Unterschied für akzeptabel halten. Der Ursprung des Unterschieds liegt wahrscheinlich entweder in einem Optimierungs-Flag oder in einem algorithmischen Unterschied im „mehr OOP“-Code, aber ohne weitere Tests, die die beiden vergleichen, kann man nicht sagen, wie sehr sich dies in anderen Tests unterscheiden wird oder in den 'Tausenden von Berechnungen' in Ihren Simulationen.

PS: Super sorry für die mega lange Verzögerung bei der Beantwortung. Scheint sowohl tpg2114 als auch ich es vergessen zu haben