Grupo2 - Ondas1: mudanças entre as edições
Linha 152: | Linha 152: | ||
== Programas == | == Programas == | ||
Ao implementarmos o método, surgem dois problemas: o problema não é auto-inicializável, pois para calcularmos o valor de <math>u_j^{1}</math>, necessitamos de <math>u_j^{-1}</math> (além de <math>u_j^{0}</math>). Entretanto, isto é rapidamente solucionado quando discretizamos a condição inicial de que <math> \frac{\partial u}{\partial t}(x, 0) = 0 </math>: | |||
<math>\frac{1}{2\Delta t} (u_j^{1} - u_j^{-1}) = 0 \Rightarrow u_j^{1} = u_j^{-1}</math>, | |||
ou seja, para o cálculo de <math>u_j^{1}</math>, utilizamos que <math> u_j^{1} = u_j^{-1} </math>. Para o método de Leapfrog, dessa forma conseguimos isolar <math>u_j^{1}</math>, não havendo nenhum outro termo no tempo <math>n=1</math>: | |||
<math> u_{j}^{-1} = 2u_{j}^{0} - u_{j}^{-1} + \frac{(\Delta t)^2}{(\Delta x)^2}(u_{j+1}^{0} - 2u_{j}^{0} + u_{j-1}^{0})</math>, | |||
<math> u_{j}^{-1} = u_{j}^{0} + \frac{(\Delta t)^2}{2(\Delta x)^2}(u_{j+1}^{0} - 2u_{j}^{0} + u_{j-1}^{0})</math>. | |||
Porém, isso não ocorre com os outros dois métodos, pois surgem termos em diferentes posições para o tempo <math>n=0</math> (de <math>u_{-2}^{0}</math>, <math>u_{-1}^{0}</math>, até <math>u_{2}^{0}</math>), sendo necessário resolvermos o sistema como um todo simultaneamente, ou seja, teríamos que inverter uma matriz. Por isso, foi utilizado o método de Leapfrog para o cálculo de <math>u_j^{-1}</math> em todos os métodos, devido a sua simplicidade. | |||
Além disso, são necessários valores de <math>u_{-1}^n</math> e de <math>u_{j_{max}+1}^n</math>, com <math>j_{max}</math> correspondendo a <math>x = L</math>, para calcularmos <math>u_1^{n}</math> e <math>u_{j_{max}}^{n}</math>, para qualquer tempo, utilizando os métodos de Lax-Wendroff de dois passos e Lax-Friedrichs. A solução a este problema foi utilizarmos | |||
<math>u_{-1}^n = -u_{1}^n </math> | |||
<math>u_{j_{max}+1}^n = -u_{j_{max}-1}^n </math>. | |||
Pensando na condição inicial <math> u(x,0) = \sin{\frac{\pi x}{L}} </math>, e estendendo para além da corda (pensando no seno de <math> -\infty<x<\infty </math>), observamos que ela respeita as equações acima. | |||
== Análise de erros == | == Análise de erros == |
Edição das 19h36min de 2 de novembro de 2017
Introdução
Integrantes do grupo: Rodrigo Zamin Ferreira (262692), Leonardo Xavier Rodrigues (262696), Maurício Gomes de Queiroz () e Rodrigo Lopes de Sousa Silva (262705)
A modelagem numérica vem se tornando cada vez mais uma ferramenta indispensável para um engenheiro. Tal modelagem pode trazer informações importantes para entender como melhor abordar o desenvolvimento de um projeto, neste caso, um que envolva ondas. Nós, como futuros engenheiros físicos, pensamos em trazer um problema mais "concreto", de engenharia costeira e portuária, que pode ou não surgir em nossas vidas profissionais mas cujo método de solução certamente estará presente. Aqui será apresentado um modelo baseado em uma condição inicial e um perfil topográfico do local estudado que descreve a evolução temporal de uma onda.
Para testarmos os diferentes métodos, utilizaremos a equação da onda em uma dimensão, que é uma equação diferencial parcial de segunda ordem, para modelarmos uma corda:
em que é o deslocamento vertical da corda e , com o comprimento da corda.
Admitindo ,
.
Uma vez que os métodos citados abaixo são para equações de primeira ordem, é necessário separarmos a equação em um sistema de equações, fazendo a substituição e :
As condições de contorno são (pontas fixas), e as condições iniciais são e
Algoritmos
Apresentaremos aqui três abordagens diferentes para a solução da equação diferencial parcial apresentada, e após, seus respectivos erros associados. A respeito das discretizações, corresponde à posição, e representa o tempo.
Método de Lax-Friedrichs -
Esse método consiste em inicialmente discretizar as equações no esquema FTCS (Forward Time Centered Space), ou seja, discretizando a derivada temporal utilizando os tempos n e n+1 e a derivada espacial através das posições j-1 e j+1:
,
.
Resultando em
,
.
Entretanto, ao se realizar uma análise de estabilidade de Von Neumann, conclui-se que esse método é instável[3] . Para torná-lo estável, é necessário trocarmos os termos e por suas médias espaciais, chegando, assim, na expressão do esquema de Lax-Friedrichs
,
.
Para obtermos o valor de , que é o nosso objetivo, discretizamos a equação
,
Embora as médias espaciais sejam necessárias para a estabilidade do método, elas introduzem um problema: surge um efeito chamado de dissipação numérica, ou seja, a amplitude da solução diminui com o tempo. Isso pode ser observado através da análise de Von Neumann ou de uma investigação da equação do esquema Lax-Friedrichs [3]. Por este método, observa-se que ao inserirmos as médias, mudamos a equação original do problema, pois agora há também um termo do tipo difusivo (uma derivada segunda).
Agora vamos unir todas as equações, utilizando, além da equação para obtida acima, as discretizações de e
,
.
Assim, obtemos
.
Método de Leapfrog -
Neste método utilizamos os pontos intermediários da discretização.
Para temos
,
Para temos
,
Para temos
,
Utilizando o fato de que
,
,
chegamos na equação para
,
o que é equivalente a discretizarmos a equação da onda diretamente, utilizando que, para uma função ,
,
sendo a discretização em .
Método de Lax-Wendroff de Dois Passos -
O primeiro passo consiste em calcular o valor de e utilizando o método de Lax-Friedrichs, para posterior cálculo de e :
,
,
,
,
Agora, no tempo :
,
,
Agrupando as equações,
,
,
E finalmente temos a equação unificada em u, utilizando a expressão para e as discretizações de e , como obtidas na seção sobre o Método de Lax-Friedrichs:
,
Programas
Ao implementarmos o método, surgem dois problemas: o problema não é auto-inicializável, pois para calcularmos o valor de , necessitamos de (além de ). Entretanto, isto é rapidamente solucionado quando discretizamos a condição inicial de que :
,
ou seja, para o cálculo de , utilizamos que . Para o método de Leapfrog, dessa forma conseguimos isolar , não havendo nenhum outro termo no tempo :
,
.
Porém, isso não ocorre com os outros dois métodos, pois surgem termos em diferentes posições para o tempo (de , , até ), sendo necessário resolvermos o sistema como um todo simultaneamente, ou seja, teríamos que inverter uma matriz. Por isso, foi utilizado o método de Leapfrog para o cálculo de em todos os métodos, devido a sua simplicidade.
Além disso, são necessários valores de e de , com correspondendo a , para calcularmos e , para qualquer tempo, utilizando os métodos de Lax-Wendroff de dois passos e Lax-Friedrichs. A solução a este problema foi utilizarmos
.
Pensando na condição inicial , e estendendo para além da corda (pensando no seno de ), observamos que ela respeita as equações acima.
Análise de erros
A análise de erros se torna mais evidente durante a escolha do parâmetro , onde . Valores grandes trazem pouca acurácia, e valores pequenos necessitam de muito poder de computação (tempo e dinheiro). Trazemos problemas mais simplificados como um "guia" de escolha do parâmetro.
A partir do cálulo da solução analítica da equação da onda, podemos calcular quanto o valor obtido pelos métodos difere da solução real, o que leva a uma visualização do erro corrente em cada método de integração. Nesse caso, a solução é .
Podemos observar a ordem com que os erros crescem à medida que o parâmetro k se torna maior. Lembrando que os valores da constante são determinados pela discretização do espaço e do tempo.
Aqui variamos o valor de , fixando
Observamos que se determinarmos a reta que melhor se ajusta às curvas dos métodos de Leapfrog e Lax-Wendroff, ela tem inclinação aproximadamente 1, já que a inclinação dá a ordem do erro global (já que fizemos o cálculo do erro após muitos passos transcorridos), que é sempre uma ordem menor do que o erro local (erro de um passo).
Simulação de Propagação de Onda 2D Dependente de Topografia
O modelo mais simples parte da equação da onda [1], acrescentando o termo .
,
Sendo uma representação da profundidade em águas calmas. Em uma situação real, pode-se obtê-la por mapeamento eletrônico do terreno por sistema de sonar.
Como primeira abordagem visando uma análise em 2D, a integração da equação em 1D (mesmo sendo uma situação muito idealizada) já traz resultados interessantes. Podemos observar, por exemplo, que a amplitude da onda cresce perto da costa. Esta informação por si só ajuda na construção de proteção contra quebra de ondas, pois é obtido o tamanho que as mesmas atingem.
É importante notar o quão poderosa é a integração de equações parciais na vida de um engenheiro.
A dependência em de permite um modelo no qual o terreno se modifica com o tempo. Isto é, pode-se observar o efeito que o deslocamento de placas tectônicas, deslizamentos, e até explosões provocam no comportamento das ondas na costa de um país e o reconhecimento de áreas críticas.
Estendendo o algoritmo do Leap-Frog à situação 2D, obtemos, para uma dada condição inicial e , onde é uma constante:
Podemos então, analisar como a mesma condição inicial se porta quando descreve uma gaussiana na origem:
Bibliografia
1"The Wave Equation in 1D and 2D," por Knut–Andreas Lie, Dept. of Informatics, University of Oslo; disponível em: [1]; Último acesso em 23/10/2017.
2"Digital terrain mapping of the underside of sea ice from a small AUV," por Wadhams, M. J. Doble; disponível em: DOI: 10.1029/2007GL031921 ; Último acesso em 23/10/2017.
3 Press, William H.; Teukolsky, Saul A.; Vetterling, William T.; Flannery, Brian P. (2007). Numerical Recipes: The Art of Scientific Computing (3rd ed.). New York: Cambridge University Press. ISBN 978-0-521-88068-8.
4 "Métodos Computacionais da Física C - Aula 2 - 2016/1" por Heitor C. M. Fernandes, Instituto de Física, UFRGS; Último acesso em 23/10/2017.