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