Estou tentando resolver a equação de advecção, mas tenho uma estranha oscilação aparecendo na solução quando a onda reflete nos limites. Se alguém já viu esse artefato antes, eu estaria interessado em saber a causa e como evitá-la!
Este é um gif animado, aberto em uma janela separada para visualizar a animação (ela será reproduzida apenas uma vez ou não uma vez que foi armazenada em cache!)
Observe que a propagação parece altamente estável até que a onda comece a refletir desde o primeiro limite. O que você acha que poderia estar acontecendo aqui? Passei alguns dias verificando meu código duas vezes e não consigo encontrar nenhum erro. É estranho porque parece haver duas soluções de propagação: uma positiva e outra negativa; após a reflexão do primeiro limite. As soluções parecem estar viajando ao longo de pontos de malha adjacentes.
Os detalhes da implementação seguem.
A equação de advecção,
onde é a velocidade de propagação.
O Crank-Nicolson é uma discretização incondicionalmente estável (link em pdf) para a equação de advecção, desde que varie lentamente no espaço (contém apenas componentes de baixa frequência quando transformada por Fourier).
A discretização que apliquei é,
Colocar as incógnitas no lado direito permite que isso seja escrito na forma linear,
onde (para calcular a média de tempo ponderada igualmente entre o ponto presente e o futuro) .r = v Δ t
Esse conjunto de equações tem a forma matricial , onde,
Os vetores e são conhecidos e desconhecidos da quantidade que queremos resolver.
Aplico então as condições de limite fechado de Neumann nos limites esquerdo e direito. Por limites fechados, quero dizer em ambas as interfaces. Para limites fechados, acontece que (não mostrarei meu trabalho aqui), apenas precisamos resolver a equação da matriz acima. Conforme apontado por @DavidKetcheson, as equações da matriz acima descrevem realmente as condições de contorno de Dirichlet . Para condições de contorno de Neumann,
Atualizar
O comportamento parece bastante independente da escolha de constantes que eu uso, mas esses são os valores para o gráfico que você vê acima:
- = 2
- dx = 0,2
- dt = 0,005
- = 2 (hwhm gaussiano)
- = 0,5
Atualização II
Uma simulação com coeficiente de difusão diferente de zero, (veja os comentários abaixo), a oscilação desaparece, mas a onda não reflete mais !? Eu não entendo porque?