Comparando dos versiones del mismo código hidrodinámico y su error

Tengo dos versiones de un código hidrodinámico que tiene la misma física subyacente; llamémoslos código A y B. Sin embargo, el código B está más optimizado y más orientado a objetos que el A. Estaba tratando de comparar los resultados numéricos de ambos códigos y ver si parecen compatibles. La forma en que estoy haciendo esto es ejecutando ambos códigos con los mismos parámetros iniciales y calculando un valor hidrodinámico X particular, que está en el orden de magnitud de 10 6 . Para comparar ambos códigos, esencialmente estoy haciendo

X(A)−X(B)=ϵ donde ϵ es algún error. la prueba esta dando ϵ = 10 2 , lo que significaría que ambos códigos escupen la misma X para los primeros 8 dígitos.

¿Qué tan significativo es este error? Estoy usando doble precisión para números no enteros, ¿tal magnitud simplemente implicaría un error de redondeo acumulativo para los miles de cálculos involucrados en un código hidrográfico? ¿O una diferencia fundamental que me estoy perdiendo?

Antes que nada, hagamos un par de preguntas tontas. (A) ¿Son estos códigos deterministas o Monte Carlo? (B) Si es Montecarlo, ¿hacen un conjunto idéntico de llamadas al PRNG y, de ser así, al menos está usando la misma semilla para ambas ejecuciones? (C) ¿Ambos códigos tienen suites de prueba para las operaciones principales? ¿Ambos pasan? (D) ¿Están ambos compilados con las mismas opciones matemáticas y niveles de optimización?
Son códigos deterministas. Uno de los códigos se probó con los resultados de un código fortran anterior, por lo que el menos optimizado es más "confiable" porque se probó con un código más antiguo. Ambos están compilados en java y los valores son de doble precisión.
Estoy en mi teléfono en este momento, así que no puedo escribir una respuesta completa, pero voy a decir que probablemente estés bien. Si no recibe una respuesta mejor de mí en el día siguiente, envíeme un ping y escribiré algo.
Algunas pruebas estándar, como el tubo de choque Sod, tienen soluciones analíticas conocidas con las que puede comparar. Luego puede calcular el error real en lugar de comparar código-código.

Respuestas (1)

La mejor manera de ver la precisión de un código de hidrodinámica es probarlo con soluciones analíticas. Como mencionó Winther en los comentarios, el tubo de choque Sod es una de las pruebas más comunes para 1D hydro (el análogo magnetohidrodinámico (MHD) de esto se llama tubo de choque Brio-Wu )

Para otras pruebas (de cualquier dimensión, pero sin la solución analítica), lo que está haciendo está bien (y a menudo se realiza en códigos académicos profesionales, por ejemplo, este conjunto de pruebas de Athena menciona el uso del conjunto para sus propias comparaciones).

Dependiendo de L pag norma que está utilizando allí (parece ser L 1 ), creo que la diferencia es aceptable. Es probable que el origen de la diferencia se deba a un indicador de optimización o a través de una diferencia algorítmica en el código 'más OOP', pero sin más pruebas que comparen los dos, uno no podría decir cuánto va a diferir esto en otras pruebas o en los 'miles de cálculos involucrados' en sus simulaciones.

PD: Lo siento mucho por la demora megalarga en responder esto. Parece que tanto tpg2114 como lo olvidé.