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?
fonte
Respostas:
A equação que você está resolvendo não permite soluções corretas, portanto não existe uma condição de contorno refletida para essa equação. Se você considerar as características, perceberá que só pode impor uma condição de limite no limite certo. Você está tentando impor uma condição de limite Dirichlet homogênea no limite esquerdo, que é matematicamente inválido.
Ao contrário da equação, o seu esquema numérico não admitir soluções indo-direita. Os modos corretos são chamados de modos parasitários e envolvem frequências muito altas. Observe que a onda certa é um pacote de onda dente de serra, associado às frequências mais altas que podem ser representadas em sua grade. Essa onda é puramente um artefato numérico, criado por sua discretização.
Para enfatizar: você não anotou o problema completo do valor do limite inicial que está tentando resolver. Se o fizer, ficará claro que não é um problema matematicamente bem colocado.
Estou feliz que você postou isso aqui, no entanto, pois é uma bela ilustração do que pode acontecer quando você discretiza um problema que não está bem colocado e o fenômeno dos modos parasitários. Um grande +1 para sua pergunta de mim.
fonte
Eu aprendi muito com as respostas acima. Quero incluir esta resposta, porque acredito que ela oferece diferentes perspectivas para o problema.
Isso produz um pulso correndo para a direita até desaparecer na borda direita.
pressione aqui para animação no Dirichlet no limite esquerdo
Ainda recebo algum ruído que não consigo entender (alguém poderia ajudar aqui, por favor?)
A outra opção é impor condições de contorno periódicas. Em vez de impor a condição de limite de Dirichlet à esquerda, podemos impor o pacote de ondas que é consistente com o limite à esquerda. Isso é:
Este link mostra o que eu chamaria de condições de contorno periódicas.
Fiz as animações em python e o esquema é um esquema de Crank-Nicholson, conforme indicado na pergunta aqui.
Ainda estou lutando com o padrão de ruído depois que a onda atinge o primeiro limite (direito).
fonte