Estoy tratando de resolver la ecuación de advección, pero aparece una extraña oscilación en la solución cuando la onda se refleja desde los límites. ¡Si alguien ha visto este artefacto antes, me interesaría saber la causa y cómo evitarlo!
Este es un gif animado, se abre en una ventana separada para ver la animación (¡solo se reproducirá una vez o no una vez que se haya almacenado en caché!)
Observe que la propagación parece altamente estable hasta que la onda comienza a reflejarse desde el primer límite. ¿Qué crees que podría estar pasando aquí? He pasado unos días revisando mi código y no puedo encontrar ningún error. Es extraño porque parece haber dos soluciones de propagación: una positiva y otra negativa; después de la reflexión desde el primer límite. Las soluciones parecen estar viajando a lo largo de puntos de malla adyacentes.
Los detalles de implementación siguen.
La ecuación de advección,
donde es la velocidad de propagación.
Crank-Nicolson es una discretización estable incondicional (enlace pdf) para la ecuación de advección, siempre que varíe lentamente en el espacio (solo contiene componentes de bajas frecuencias cuando Fourier se transforma).
La discretización que he aplicado es,
Poner las incógnitas en el lado derecho permite que esto se escriba en forma lineal,
donde (para tomar el tiempo promedio ponderado de manera uniforme entre el punto presente y futuro) y .r = v Δ t
Este conjunto de ecuaciones tiene la forma de matriz , donde,
Los vectores y son los conocidos y desconocidos de la cantidad que queremos resolver.
Luego aplico condiciones de contorno de Neumann cerradas en los límites izquierdo y derecho. Por límites cerrados quiero decir en ambas interfaces. Para los límites cerrados resulta que (no mostraré mi trabajo aquí) solo necesitamos resolver la ecuación matricial anterior. Como señaló @DavidKetcheson, las ecuaciones matriciales anteriores en realidad describen las condiciones de contorno de Dirichlet . Para las condiciones de contorno de Neumann,
Actualizar
El comportamiento parece bastante independiente de la elección de las constantes que uso, pero estos son los valores para la gráfica que ves arriba:
- = 2
- dx = 0.2
- dt = 0.005
- = 2 (gaussiano hwhm)
- = 0.5
Actualización II
Una simulación con un coeficiente de difusión distinto de cero, (ver comentarios más abajo), la oscilación desaparece, pero la onda ya no se refleja. No entiendo porque
fuente
Respuestas:
La ecuación que está resolviendo no permite soluciones correctas, por lo que no existe tal cosa como un condición límite que refleje esta ecuación. Si considera las características, se dará cuenta de que solo puede imponer una condición de límite en el límite correcto. Está tratando de imponer una condición de límite de Dirichlet homogénea en el límite izquierdo, que es matemáticamente inválido.
A diferencia de la ecuación, su esquema numérico no admite soluciones que van derecho. Los modos de marcha a la derecha se denominan modos parásitos e implican frecuencias muy altas. Observe que la onda que va hacia la derecha es un paquete de ondas de diente de sierra, asociado con las frecuencias más altas que se pueden representar en su cuadrícula. Esa ola es puramente un artefacto numérico, creado por su discretización.
Para enfatizar: no ha escrito el problema completo del valor del límite inicial que está tratando de resolver. Si lo hace, quedará claro que no es un problema matemáticamente bien planteado.
Sin embargo, me alegro de que haya publicado esto aquí, ya que es una hermosa ilustración de lo que puede suceder cuando discrepa un problema que no está bien planteado, y del fenómeno de los modos parasitarios. Un gran +1 para tu pregunta de mí.
fuente
Aprendí mucho de las respuestas anteriores. Quiero incluir esta respuesta porque creo que ofrece diferentes puntos de vista sobre el problema.
Esto produce un pulso que corre hacia la derecha hasta que desaparece en el borde derecho.
presione aquí para animación en Dirichlet en el límite izquierdo
Todavía recibo algo de ruido que no puedo entender (¿alguien podría ayudarme aquí, por favor?)
La otra opción es imponer condiciones de contorno periódicas. Es decir, en lugar de imponer la condición de límite de Dirichlet a la izquierda, podemos imponer el paquete de ondas que es consistente con el límite a la izquierda. Es decir:
Este enlace muestra lo que yo llamaría condiciones de contorno periódicas.
Hice las animaciones en Python y el esquema es un esquema de Crank-Nicholson como se indica en la pregunta aquí.
Todavía estoy luchando con el patrón de ruido después de que la ola golpea el primer límite (derecho).
fuente