TEA784 Fundamentos de Engenharia AmbientalAula 02 da disciplina TEA784 Fundamentos da Engenharia...

12
09/03/2016 TEA784_Conveccao_1D_ok http://localhost:8888/nbconvert/html/Dropbox/Ambiental/2016/2016Semestre1/TEA784%20%20Fundamentos%20de%20Engenharia%20Ambiental/Not… 1/12 TEA784 Fundamentos de Engenharia Ambiental Aula 02 da disciplina TEA784 Fundamentos da Engenharia Ambiental, ofertada ao curso de Pós Graduação em Engenharia Ambiental (PPGEA) da UFPR. Esta aula contém um estudo numérico da Convecção 1D. Recomendações gerais: (1) Baixar a distribuição de Python 3.5 Anaconda (Somente o Python 3.5 permite desenvolver Jupyter Notebooks) https://www.continuum.io/downloads (https://www.continuum.io/downloads) (2) Para os iniciantes em Python, existem aulas básicas no meu blog: http://www.lactea.ufpr.br/people/mercuri/blog (http://www.lactea.ufpr.br/people/mercuri/blog) Python Básico Numpy Básico Definindo Funções em Python Introdução à solução numérica de EDPs Nessa aula, iremos estudar Equações Diferenciais Parciais (EDPs), onde o desconhecido é uma função multivariada. O problema pode depender do tempo, , e de uma dimensão espacial (ou mais), o que significa que necessitamos criar uma discretização através de uma grade para cada variável independente. Iremos começar nossa discussão de análise numérica de EDPs com as equações: 1. Advecção 1D linear e não linear 2. Difusão 1D 3. Burgers 1D Espero que vocês gostem delas! :) Advecção 1D linear (Equação do Transporte)

Transcript of TEA784 Fundamentos de Engenharia AmbientalAula 02 da disciplina TEA784 Fundamentos da Engenharia...

  • 09/03/2016 TEA784_Conveccao_1D_ok

    http://localhost:8888/nbconvert/html/Dropbox/Ambiental/2016/2016Semestre1/TEA784%20%20Fundamentos%20de%20Engenharia%20Ambiental/Not… 1/12

    TEA784  Fundamentos de EngenhariaAmbientalAula 02 da disciplina TEA784 Fundamentos da Engenharia Ambiental, ofertada ao curso de PósGraduação em Engenharia Ambiental (PPGEA) da UFPR. Esta aula contém um estudo numéricoda Convecção 1D.

    Recomendações gerais:

    (1) Baixar a distribuição de Python 3.5 Anaconda (Somente o Python 3.5 permite desenvolverJupyter Notebooks)

    https://www.continuum.io/downloads (https://www.continuum.io/downloads)

    (2) Para os iniciantes em Python, existem aulas básicas no meu blog:http://www.lactea.ufpr.br/people/mercuri/blog (http://www.lactea.ufpr.br/people/mercuri/blog)

    Python BásicoNumpy BásicoDefinindo Funções em Python

    Introdução à solução numérica de EDPs

    Nessa aula, iremos estudar Equações Diferenciais Parciais (EDPs), onde o desconhecido é umafunção multivariada. O problema pode depender do tempo,  , e de uma dimensão espacial   (oumais), o que significa que necessitamos criar uma discretização através de uma grade para cadavariável independente.

    Iremos começar nossa discussão de análise numérica de EDPs com as equações:

    1. Advecção 1D linear e não linear2. Difusão 1D3. Burgers 1D

    Espero que vocês gostem delas! :)

    Advecção 1D linear (Equação do Transporte)

    t x

    https://www.continuum.io/downloadshttp://www.lactea.ufpr.br/people/mercuri/blog

  • 09/03/2016 TEA784_Conveccao_1D_ok

    http://localhost:8888/nbconvert/html/Dropbox/Ambiental/2016/2016Semestre1/TEA784%20%20Fundamentos%20de%20Engenharia%20Ambiental/Not… 2/12

    A Equação da convecção (ou advecção) linear unidimensional é o modelo mais simples que podeser usado para aprendermos alguma coisa a respeido da solução numérica de EDPs. Ésurpreendente como essa pequena equação podem nos ensinar tanto! Aqui vai ela:

    A equação representa uma onda se propagando com uma velocidade   na direção  , semmudança de forma. A variável   pode representar tanto a altura da onda quanto uma concentraçãode um poluente ou composto químico. Ela também é conhecida como equação da advecção ouequação do transporte.

    Com a condição inicial  , a equação tem uma solução exata data por:

    Vamos lá: verifique isso! Faça as derivadas temporais e temporais e coloque na equação para verse é realmente a solução.

    Observe a solução exata por um momento ... nós sabemos duas coisas sobre ela:

    1. o seu formato não muda, sendo sempre o mesmo que a onda inicial,  , apenas sedesloca na direção  .

    2. é constante ao longo das curvas características,  constante. Isso significa quepara qualquer ponto no espaço e tempo, você pode voltar ao longo das curvascaracterísticas até   para encontrar o valor da solução.

    Porque nós as chamamos de equações lineares? EDPs podem ser lineares ou não lineares. Numaequação linear, a função incógnita   e suas derivadas aparecem apenas em termos lineares, emoutras palavras: não existem produtos, potências ou funções transcedentais aplicadas nelas.

    Formas Gerais das EDPs de 1  ordem:

    (As EDPs semi e quaselineares são casos particulares das EDPs não lineares.)

    Qual a propriedade mais importante das equações lineares? Você se lembra? No caso de teresquecido: soluções podem ser superpostas para gerar novas soluções que ainda satisfazem aequação original. Isso é super útil!

    Diferenças Finitas

    + c = 0∂u∂t

    ∂u∂x

    c x

    u

    u(x, 0) = (x)u0u(x, t) = (x − ct)u0

    u0x

    x − ct =

    t = 0

    u

    a

    a(x, y) + b(x, y) + c(x, y)u = f(x, y) EDP linearux uya(x, y) + b(x, y) + c(x, y)u = f(x, y, u) EDP semi-linearux uy

    a(x, y, u) + b(x, y, u) + c(x, y)u = f(x, y, u) EDP quase-linearux uy

  • 09/03/2016 TEA784_Conveccao_1D_ok

    http://localhost:8888/nbconvert/html/Dropbox/Ambiental/2016/2016Semestre1/TEA784%20%20Fundamentos%20de%20Engenharia%20Ambiental/Not… 3/12

    O método das Diferenças Finitas é um método numérico onde o domínio do problema (que podeser contínuo) é aproximado como um domínio discreto. No caso da Equação da Advecção iremosdiscretizar o tempo e o espaço.

    Imagine o gráfico espaçotempo, onde as coordenadas verticais (ordenadas) representam oavanço no tempo, por exemplo de   para    e as coordenadas horizontais (abscissas)representam o avanço no espaço: pontos consecutivos são  ,  , e  . Assim, criase umagrade (ou malha) onde cada ponto tem tanto um índice temporal quanto espacial. Veja umarepresentação gráfica:

    Para a solução numérica de  , nós iremos utilizar subscritos para denotar a posição espacial,como  , e sobrescritos para denotar um instante temporal, como  . Por exemplo, no caso dasolução do ponto superior central na grade acima usaremos:  .

    Cada nó da malha abaixo tem um índice  , correspondente à posição espacial que aumenta para adireita, e um índice  , correspondente ao instante temporal que aumenta para cima. Uma pequenaparte desta malha pode ser vista abaixo:

    Outra forma de explicar a nossa discretização da malha é dizer que ela foi construída com passosde tempo e espaço constantes,   e  :

    Discretizando a equação do nosso modelo

    tn tn+1

    xi−1 xi xi+1

    tn+1

    tn→→

    ∙∙

    xi−1

    ∙∙xi

    ∙∙

    xi+1

    u(x, t)ui u

    n

    un+1i

    i

    n

    un+1i−1

    ∙uni−1

    ∙un−1i−1

    un+1i

    ∙uni

    ∙un−1i

    un+1i+1

    ∙uni+1

    ∙un−1i+1

    Δt Δxxiuni

    ==

    i Δx e = n Δttn

    u(i Δx, n Δt)

  • 09/03/2016 TEA784_Conveccao_1D_ok

    http://localhost:8888/nbconvert/html/Dropbox/Ambiental/2016/2016Semestre1/TEA784%20%20Fundamentos%20de%20Engenharia%20Ambiental/Not… 4/12

    Vamos descobrir como discretizar a equação da convecção linear 1D no espaço e no tempo. Pordefinição, a derivada parcial com respeito ao tempo varia apenas com o tempo e não variaespacialmente; consequentemente a sua forma discretizada varia apenas os índices  . Demaneira similar, a derivada parcial em relação a   varia no espaço e não no tempo, e apenas oíndice   é afetado.

    Nós iremos discretizar a coordenada espacial   em pontos indexados a partir de de   até  ,e o passo de tempo terá o tamanho  .

    Da definição da derivada (apenas removendo o limite), nós sabemos que para um suficientemente pequeno:

    Essa fórmula pode ser aplicada a qualquer ponto  . Porém, note que essa não é a única maneirade estimar a derivada. A interpretação geométrica da primeira derivada   em qualquer pontoé que ela representa a inclinação da tangente à curva  . No esboço abaixo, é ilustrada a linhade inclinação da função   no ponto   (derivada exata). Se a fórmula acima for aplicada à  , elairá aproximar a derivada usando o ponto seguinte na grade espacial: ela é conhecida comofórmula das diferenças progressivas.

    Entretanto, como é mostrado no desenho abaixo, nós poderíamos também ter estimado a derivadaespacial usando o ponto anterior a  . Nesse caso a aproximação é conhecida como fórmula dasdiferenças regressivas. Nós podemos inclusive utilizar os dois pontos, um em cada lado de  , eobter a fórmula das diferenças centradas (mas nesse caso o denominador deve ser  ).

    n

    x

    i

    x i = 0 NΔt

    Δx

    ≈∂u∂x

    u(x + Δx) − u(x)Δx

    xi∂u/∂x

    u(x)u xi xi

    xixi

    2Δx

  • 09/03/2016 TEA784_Conveccao_1D_ok

    http://localhost:8888/nbconvert/html/Dropbox/Ambiental/2016/2016Semestre1/TEA784%20%20Fundamentos%20de%20Engenharia%20Ambiental/Not… 5/12

    Temos três maneiras possíveis para representar a forma discreta de  :

    Diferenças progressivas: usa   e  ,Diferenças regressivas: usa   e  ,Diferenças centradas: usa dois pontos um em cada lado de  .

    O desenho acima também sugere que algumas fórmulas de diferenças finitas podem ser melhoresque outras: aparentemente a aproximação dada pela fórmula de diferenças centradas é maispróxima da inclinação da derivada "exata". Você está curioso(a) se isso é apenas um efeito danossa figura exagerada? Nós iremos mostrar mais tarde como realizar essa observação de formamais rigorosa!

    As três fórmulas são:

    O método de Euler é equivalente a usar um esquema de diferenças finitas progressivas naderivada temporal. Vamos repetir a estratégia do método de Euler e escolher inicialmente oesquema de diferenças finitas regressivas para a derivada espacial. Nossa equação na formadiscretizada é:

    sendo que   e   representam dois passos consecutivos no tempo, e   e   são doispontos vizinhos da coordenada   discretizada. Dadas as condições iniciais, a única incógnita nessadiscretização é  . Nós isolamos essa incógnita na equação para resolver o problema seguindouma marcha no tempo:

    Então vamos calcular!

    Ok. Vamos utilizar um pouco de Python nessa nossa caminhada. Primeiro: devemos carregarnossos bibliotecas para lidar com vetores (arrays) e gráficos (plots).

    Eis um truque elegante para configurar parâmetros de plotagem globais como módulo rcParams.

    ∂u/∂x

    xi + Δxxixi − Δxxi

    xi

    ∂u∂x∂u∂x∂u∂x

    Diferenças progressivasu( ) − u( )xi+1 xi

    Δx

    Diferenças regressivasu( ) − u( )xi xi−1

    Δx

    Diferenças centradasu( ) − u( )xi+1 xi−1

    2Δx

    + c = 0,−un+1i u

    ni

    Δt

    −uni uni−1

    Δx

    n n + 1 i − 1 ix

    un+1i

    = − c ( − )un+1i uni

    ΔtΔx

    uni uni−1

  • 09/03/2016 TEA784_Conveccao_1D_ok

    http://localhost:8888/nbconvert/html/Dropbox/Ambiental/2016/2016Semestre1/TEA784%20%20Fundamentos%20de%20Engenharia%20Ambiental/Not… 6/12

    In [4]:

    import numpy                        from matplotlib import pyplot                 %matplotlib inline from matplotlib import rcParams rcParams['font.family'] = 'serif' rcParams['font.size'] = 16 

    Como um primeiro exercício, nós vamos resolver a equação da advecção linear 1D com umacondição inicial de onda quadrada, definida da seguinte maneira:

    Nós também precisamos de uma condição de contorno em  :   em  . Nossodomínio espacial para a solução numérica irá ser:  .

    Agora iremos definir algumas variáveis; nós queremos fazer uma malha de pontos uniformementeespaçados no domínio espacial. No código abaixo, nós definimos uma variável chamada nx querepresentará o número de nós (ou pontos) na grade espacial, e a variável dx que representará adistância entre cada par de pontos adjacentes. Nós também podemos definir um passo de tempo dt, o número de passos de tempo, nt, e o valor da velocidade da onda: iremos manter as coisassimples e fazer  .

    In [5]:

    nx = 41  # tente mudar este número de 41 para 81 e rodar tudo novamente ... o que acontece? dx = 2/(nx‐1) nt = 25     dt = .02   c = 1      #suponha velocidade da onda c = 1 x = numpy.linspace(0,2,nx) 

    Nós também precisamos declarar nossas condições iniciais. Aqui, iremos utilizar a função doNumPy ones(), que define um array com nx e todos os valores iguais a  . Quão útil! Nós entãoalteramos um pedaço do array para o valor  , para obter uma onda quadrad, e então nósplotamos (fazemos o gráfico) do nosso array inicial apenas para admirálo. Mas quais valores nósdevemos alterar? O problema definiu que nós precisamos mudar os índices de u de forma que aonda quadrada comece em   e acabe em  .

    Nós podemos usar a função numpy.where para retornar a lista de índices para os quais o vetor satisfaz (ou não satisfaz) alguma condição.

    u(x, 0) = { 21

    para 0.5 ≤ x ≤ 1,∀ x em (0, 2)

    x u = 1 x = 0, ∀ tx ∈ (0, 2)

    c = 1

    1u = 2

    x = 0.5 x = 1

    x

  • 09/03/2016 TEA784_Conveccao_1D_ok

    http://localhost:8888/nbconvert/html/Dropbox/Ambiental/2016/2016Semestre1/TEA784%20%20Fundamentos%20de%20Engenharia%20Ambiental/Not… 7/12

    In [6]:

    u = numpy.ones(nx)      #função numpy ones() limsup = numpy.where(x >= 0.5) liminf = numpy.where(x = 0.5), numpy.where(x 

  • 09/03/2016 TEA784_Conveccao_1D_ok

    http://localhost:8888/nbconvert/html/Dropbox/Ambiental/2016/2016Semestre1/TEA784%20%20Fundamentos%20de%20Engenharia%20Ambiental/Not… 8/12

    In [8]:

    pyplot.plot(x, u, color='#003366', ls='‐‐', lw=3) pyplot.ylim(0,2.5); 

    Isso era o que esperávamos? Parece que os lados dessa onda quadrada não estão perfeitamentena vertical. Isso está correto? Pense um pouco.

    Agora é hora de escrever o código para a forma discreta da nossa equação da advecção usando oesquema de diferenças finitas escolhido.

    Para cada elemento do nosso vetor u, nós precisamos realizar a operação:

    Nós iremos guardar os resultados em um vetor novo (temporário) un, o qual irá armazenar asolução   do passo de tempo sequente. Nós iremos repetir essa operação para quantos passos detempo quisermos e então iremos ver o quão longe a nossa onda terá viajado.

    Temos duas operações iterativas: uma no espaço e outra no tempo. Começamos aninhando o loopespacial dentro do loop de tempo, como mostrado abaixo.

    O vetor un armazena uma cópia da nossa função   no tempo  , utilizando a função Numpy copy().

    O código do esquema de diferenças finitas é escrito em seguida:

    = − c ( − )un+1i uni

    ΔtΔx

    uni uni−1

    u

    u n

  • 09/03/2016 TEA784_Conveccao_1D_ok

    http://localhost:8888/nbconvert/html/Dropbox/Ambiental/2016/2016Semestre1/TEA784%20%20Fundamentos%20de%20Engenharia%20Ambiental/Not… 9/12

    In [9]:

    for n in range(1,nt):       un = u.copy()      for i in range(1,nx):               u[i] = un[i]‐c*dt/dx*(un[i]‐un[i‐1]) 

    NotaA forma como o código foi escrito é relativamente ineficiente, existem melhores maneiras deescrevêlo, no estilo Python, mas por enquanto seguiremos assim.

    Vamos inspecionar o vetor solução após o avanço no tempo com um line plot.

    In [10]:

    pyplot.plot(x, u, color='#003366', ls='‐‐', lw=3) pyplot.ylim(0,2.5); 

    Que engraçado. Nossa onda quadrada se moveu para a direita, mas não é mais uma onda com oformato de um chapéu. O que está acontecendo?

    Investigando mais detalhes:

    A solução difere da onda quadrada que era esperada pois a equação discretizada é umaaproximação da equação diferencial contínua que nós queremos resolver. Existem erros: nóssabemos disso. Mas o formato modificado da onda inicial é algo curioso. Talvez ele pode sermelhorado fazendo a grade mais fina. Porque você não tenta isso? Isso ajuda?

    Erro do truncamento na derivada espacial

  • 09/03/2016 TEA784_Conveccao_1D_ok

    http://localhost:8888/nbconvert/html/Dropbox/Ambiental/2016/2016Semestre1/TEA784%20%20Fundamentos%20de%20Engenharia%20Ambiental/No… 10/12

    Relembrando a aproximação de diferença finita que foi utilizada para a derivada espacial:

    Nós obtivemos isso usando a definição da derivada no ponto, e simplesmente removendo o limite,assumindo que o   é muito pequeno. Entretanto, isso gerou um erro de truncamento.

    Usando a expansão em série de Taylor para os termos espaciais, nós observamos que o esquemada diferenças regressivo produziu um método de primeira ordem.

    O termo que foi negligenciado na aproximação de diferenças finitas é da ordem de grandeza de ,  . Nós também observamos que a aproximação converge para a derivada exata na

    medida que  . Isso é uma ótima notícia!

    Em resumo, o esquema de diferenças finitas escolhido "progressivotempo/regressivoespaço" éum método de primeira ordem no tempo e no espaço: os erros de truncamento são  .Nós iremos voltar a esse resultado em breve.

    Advecção não linear

    Vamos analisar agora a equação da advecção não linear, utilizando os mesmos métodosanteriores. A EDP é:

    A única diferença com o caso linear é que foi trocada a velocidade da onda contante   por umavelocidade variável  . A equação é não linear pois agora temos um produto da solução com umadas suas derivadas: o produto  . Isso muda tudo!

    Nós iremos utilizar a mesma discretização que foi desenvolvida para a advecção linear: diferençasprogressivas no tempo e diferenças regressivas no espaço. Eis a equação discretizada:

    Isolando a única incógnita,  , obtemos a equação que pode ser usada na marcha do tempo:

    Existe pouca coisa que precisamos mudar no código que foi escrito até agora. Inclusive, iremosutilizar a mesma condição inicial de onda quadrada. Lembrese de reinicializar a variável u com osvalores iniciais, e reescrever os parâmetros numéricos aqui (não precisamos mais da constante ).

    ≈∂u∂x

    u(x + Δx) − u(x)Δx

    Δx

    ( ) = + ( ) − ( ) + ⋯∂u∂x

    xiu( ) − u( )xi xi−1

    ΔxΔx2

    u∂ 2

    ∂x2xi

    Δx2

    6u∂ 3

    ∂x3xi

    Δx O(Δx)Δx → 0

    O(Δt, Δx)

    + u = 0∂u∂t

    ∂u∂x

    c

    u

    u ∂u/∂x

    + = 0−un+1i u

    ni

    Δtuni

    −uni uni−1

    Δx

    un+1i

    = − ( − )un+1i uni u

    ni

    ΔtΔx

    uni uni−1

    c

  • 09/03/2016 TEA784_Conveccao_1D_ok

    http://localhost:8888/nbconvert/html/Dropbox/Ambiental/2016/2016Semestre1/TEA784%20%20Fundamentos%20de%20Engenharia%20Ambiental/No… 11/12

    In [12]:

    ##parametros do problema nx = 41 dx = 2/(nx‐1) nt = 10     dt = .02   

    ##condicoes iniciais u = numpy.ones(nx)       u[numpy.intersect1d(liminf, limsup)]=2   

    Como ficou a condição inicial? Vamos dar uma olhada?

    In [13]:

    pyplot.plot(x, u, color='#003366', ls='‐‐', lw=3) pyplot.ylim(0,2.5); 

    Se mudarmos apenas uma linha de código na solução da advecção (ou convecção) linear, nósseremos capazes de obter a solução não linear: a linha corresponde à equação discretizada queagora contém un[i] no lugar onde antes era c. Poderíamos escrever algo como:

    for n in range(1,nt):     un = u.copy()    for i in range(1,nx):      u[i] = un[i]‐un[i]*dt/dx*(un[i]‐un[i‐1]) 

    Nós iremos fazer algo mais esperto que isso e utilizaremos o Numpy para atualizar todos osvalores da nossa grade espacial de uma vez apenas! Estude o código abaixo, e compare com ocódigo de cima.

  • 09/03/2016 TEA784_Conveccao_1D_ok

    http://localhost:8888/nbconvert/html/Dropbox/Ambiental/2016/2016Semestre1/TEA784%20%20Fundamentos%20de%20Engenharia%20Ambiental/No… 12/12

    In [14]:

    for n in range(1, nt):       un = u.copy()      u[1:] = un[1:]‐un[1:]*dt/dx*(un[1:]‐un[0:‐1])      u[0] = 1.0 

    In [15]:

    pyplot.plot(x, u, color='#003366', ls='‐‐', lw=3) pyplot.ylim(0,2.5); 

    Hmm. Isso é interessante: como no caso linear, observamos que nós perdemos os ladosortogonais na nossa onda inicial, mas tem mais!! Agora, a onda também perdeu a simetria! Pareceque a parte trazeira está sofrendo um relaxamento, enquanto a parte da frente está com umacurvatura mais acentuada. Isso é mais um erro numérico? Não!! É Física!!!

    Investigue mais

    Pense sobre o efeito de que substituimos a velocidade da onda constante   por uma variável develocidade dada pela solução  . Isso significa que diferentes partes da onda movemse comvelocidades diferentes. Faça um esboço da onda inicial e pense onde a velocidade é mais alta eonde a velocidade é menor...

    In [ ]:

      

    In [ ]:

      

    c

    u