¿Cómo se depura el código numérico? ¿Cuál podría ser la fuente de este error oscilatorio?


16

En silencio se puede obtener mucha información de la experiencia, me preguntaba si alguien ha visto algo similar a esto antes. El gráfico muestra la condición inicial (verde) para la ecuación de advección-difusión, luego la solución en la iteración 200 (azul) y luego nuevamente en la iteración 400 (rojo).

Error oscilatorio

La solución de la ecuación de advección-difusión explota después de algunas iteraciones. El número de Péclet , y la condición CFL se cumple, , por lo que las ecuaciones deben ser estables. Anticipo que tengo un error en el código numérico.μ0,07C0.0015

Antecedentes. La discretización es la diferencia central para los términos de advección y difusión. Creo que este es el primer orden de advección y el segundo orden de difusión. He implementado esto utilizando un enfoque de volumen finito (por primera vez) en el que los valores de los coeficientes (velocidad y coeficiente de difusión) en las caras de la celda se encuentran por interpolación lineal de los promedios de la celda. Aplico la condición de límite de Robin en las superficies izquierda y derecha y establezco el flujo en los límites a cero.

¿Cómo depuras tu código numérico? ¿Alguien ha hecho una escena como esta antes, dónde sería un buen lugar para comenzar a buscar?

Actualizar

Actualizar

¡La solución no podría ser más simple! Acabo de hacer un error de señal en el término de difusión. Es extraño, estoy seguro de que no había publicado esto, ¡no habría encontrado el error! Si alguien quiere compartir consejos sobre cómo depurar su código numérico, todavía estoy interesado. No tengo un método, es un poco impredecible, sigo intentando cosas para obtener pistas, pero este proceso puede llevar semanas (a veces).

La prueba funciona ( tenga en cuenta que con el método de volumen finito todo lo que necesita hacer para calcular el área es una suma de ancho altura para todas las celdas, si utiliza un método de integración como numpy.trapz sus resultados incluyen el numérico error del método del trapecio). ¿Que está sucediendo aquí? Hay una velocidad constante y coeficientes de difusión pero con condiciones límite cerradas . Por lo tanto, en el límite vemos el equilibrio entre el campo de velocidad empujando hacia la derecha y el empuje de difusión hacia la izquierda.×

Ecuación de advección-difusión con condiciones de límite cerrado mediante el método de volumen finito.


2
¿Qué tipo de discretización estás usando? ¿Qué método de pedido? ¿Cuáles son sus condiciones límite?
Geoff Oxberry

Gracias @GeoffOxberry, he actualizado con más detalles. Aunque para comprender realmente lo que he hecho, puede leer las notas de mi libro de laboratorio en el enlace de github anterior.
boyfarrell

2
Admiro su enfoque concienzudo a este problema. ¿Son estas gráficas de las ecuaciones dependientes del tiempo? En caso afirmativo, ¿qué observas para ? θ=0 0,0,5,1
Jan

1
Lo intenté, da en general lo mismo. Pero ahora me siento estúpida, que estaba probando para un error de señal ... establecer y hace que funcione (en el límite de la difusión, la difusión sí negativa hace que funcione!). Entonces, para referencia futura, lo anterior podría ser consistente con un error de signo. Todavía no se ha probado por completo, ¡así que informaré pronto! PD. gracias por el cumplido :)d < 0un=0 0re<0 0
boyfarrell

Respuestas:


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.