Oscilação estranha ao resolver a equação de advecção por diferença finita com condições de contorno de Neumann totalmente fechadas (reflexão nos limites)


33

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!) Propagação de um pulso gaussiano

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,

ut=vux

onde é a velocidade de propagação.v

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).u(x)

A discretização que apliquei é,

ϕjn+1ϕjnΔt=v[1β2Δx(ϕj+1nϕj1n)+β2Δx(ϕj+1n+1ϕj1n+1)]

Colocar as incógnitas no lado direito permite que isso seja escrito na forma linear,

βrϕj1n+1+ϕjn+1βrϕj+1n+1=(1β)rϕj1n+ϕjn+(1β)rϕj+1n

onde (para calcular a média de tempo ponderada igualmente entre o ponto presente e o futuro) .r = v Δ tβ=0.5r=vΔt2Δx

Esse conjunto de equações tem a forma matricial , onde,Aun+1=Mun

A=(1βr0βr1βrβr1βr0βr1)

M=(1(1β)r0(1β)r1(1β)r(1β)r1(1β)r0(1β)r1)

Os vetores e são conhecidos e desconhecidos da quantidade que queremos resolver.unun+1

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,ux=0

A=(100βr1βrβr1βr001)

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:

  • v = 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?D=1

Difusão e advecção


o que você levou para ? v
Chris #

nessas simulações. Vou atualizar com a configuração de simulação. Boa ideia. v=2
precisa saber é o seguinte

Então eu esperaria que a condição inicial fosse promovida para a direita e desaparecesse pelo limite certo. Tudo o que vem à mente é que o esquema central pode fornecer oscilações espúrias, a menos que aplicado à equação de advecção-difusão com número de Peclet da célula abaixo de 2. Talvez tente o esquema contra o vento?
chris

Você acha que pode haver erro de sinal com a equação. Na verdade, meu objetivo final é aplicar isso com a equação de advecção-difusão. Atualmente, estou testando diferentes casos limitantes. No exemplo acima, o coeficiente de difusão foi definido como zero. Eu incluí uma nova animação acima. Não entendo por que o pico não reflete quando o coeficiente de difusão é diferente de zero? Faz exatamente como você mencionou (além da direção).
precisa saber é o seguinte

Eu estava pensando em , então o sinal está ok. O segundo enredo parece bom para mim. Por que você esperaria que algo refletisse? Isso só poderia acontecer se as alterações v assinarem de alguma forma. Tente com o esquema a favor do vento para advecção, em vez do esquema central, e verá algo semelhante para D = 0 . tu+vxu=0vD=0
Chris #

Respostas:


28

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.

xνt=CC

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.


obrigado pela discussão e correções. Eu não tinha percebido que a matriz não terá as mesmas propriedades que a equação diferencial. Mais comentários a seguir ...
boyfarrell ''

Sim, agora vejo como essas são realmente as condições de contorno de Dirichlet. Fiz uma anotação acima para a correção. Esta é a primeira vez que tentei (em essência) realmente entender o processo de solução dessas equações, continuo batendo solavancos na estrada. Fico feliz em publicar meu progresso!
boyfarrell

@ David Ketcheson: Estou enfrentando o mesmo problema e postei meu problema no seguinte link scicomp.stackexchange.com/questions/30329/… Você pode me explicar por que você diz que o problema não é "matematicamente bem-posado" ? Obrigado.
Herman Jaramillo

@HermanJaramillo Você está tentando impor um valor de solução no limite esquerdo, onde já é determinado pelo PDE. Qualquer livro que inclua uma discussão sobre a advecção também indicará quais são as condições de limite válidas e por quê. Eu adicionei um segundo parágrafo com explicações adicionais; espero que ajude.
David Ketcheson

11
@HermanJaramillo: não "matematicamente bem posado" basicamente significa que você tem duas equações para um valor de função no limite, a condição do limite e o próprio PDE. Em geral, essas duas equações se contradizem. De maneira mais geral, pode-se considerar isso como um problema de otimização, no qual ambos os objetivos devem ser atendidos da melhor maneira possível.
Davidhigh 17/10/19

0

Eu aprendi muito com as respostas acima. Quero incluir esta resposta, porque acredito que ela oferece diferentes perspectivas para o problema.

vocêxx+1 1cvocêtt=0
c

você(x,t)=f(x-ct)

você(x,t0 0)=p(x)x(-,)p[x-c(t-t0 0)]

x[uma,b]umab

t0 0

u(a,t0)=0,u(b,t0)=p[bc(tt0)].

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 é:

u(a,t0)=p[ac(tt0)],u(b,t0)=p[bc(tt0)].

ac(tt0)<at>t0c>0[a,b]baac(tt0)+ba=a+b(tt0)u(a,t0)=p[bc(tt0]

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).


11
Não consegui ver a animação no meu celular, mas acredito que seu padrão de ruído seja causado pela falta de precisão numérica. A absorção só funciona porque você impõe a solução exata no limite. Por esta solução exata, a solução numérica que chega ao limite direito difere ligeiramente em frequência e fase. Isso novamente leva à reflexão e, portanto, à interferência.
Davidhigh 17/10/19

@ Davididhigh: Obrigado pela sua informação. Vou verificar isso. Lamento que a animação não funcionou no seu telefone. Também não funcionou no meu telefone (Samsung). Pode haver algum software ausente nos telefones. Deve funcionar em um computador. Obrigado novamente.
Herman Jaramillo

De nada. A animação em si não é tão importante, eu só queria ver o tamanho dos erros. Btw, ao impor a solução exata no limite, você evita a "má postura" por design. Ou seja, você ainda tem duas equações para um valor no limite, mas, usando o resultado exato, você as força a serem consistentes. Mas isso funciona apenas aproximadamente, pois o resultado numérico não é completamente exato.
Davidhigh 18/10/19

E outro comentário: a solução analítica geral para a equação de onda é uma superposição de um pulso que se move para a esquerda e um que se move para a direita. No seu caso, você considera apenas o pulso que se move à direita e já aplicou condições iniciais - em contraste com o que afirma no texto.
Davidhigh 18/10/19

@ DavidDigh: Eu estive pensando um pouco sobre suas idéias sobre o ruído depois que o pulso atinge o limite. Acredito que você esteja certo e há uma diferença entre a solução analítica exata e o pulso numérico propagado. No limite, essa pequena diferença gera o pequeno padrão de ruído visto ali. O sistema de advecção de CN mostrado nesta discussão é dispersivo e acredito que, embora a dispersão não seja notada antes que o pulso atinja o limite, ele pode desencadear apenas a pequena perturbação (diferença entre soluções analíticas e numéricas) no limite. Obrigado novamente.
Herman Jaramillo
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.