Dfusão 1-D Nas últmas aulas estudamos a solução numérca e analítca (Método das Característcas) das equações de advecção lnear e não lnear usando o método das dferenças fntas e aprendemos sobre a condção CFL. Agora remos analsar a equação da dfusão 1D: sendo ν uma constante conhecda como coefcente dfusvo ou (de dfusão) u t A prmera cosa que você deve perceber é que essa equação apresenta um dervada de 2 ordem. Vamos aprender a ldar com sso. = ν 2 u x a Dscretzando dervadas de 2 ordem a A segunda dervada pode ser representada geometrcamente pela lnha tangente à curva da prmera dervada. Nós vamos dscretzar a dervada de segunda ordem com o esquema de dferenças centrada. Consdere a expansão em sére de Taylor de e em torno de : Se adconarmos essas duas séres, as dervadas de ordem ímpar vão se cancelar. Fazendo o truncamento (neglgencando) os termos de (Δ x 4 ) ou maores (e realmente, eles são muto pequenos), nós podemos rearranjar a soma das duas expansões e solar a dervada segunda: E fnalmente: u +1 u 1 u u u +1 = u + Δx + + + (Δ ) x Δx 2 2 u 2! x Δx 3 3 u 2 3! x 3 x 4 u u 1 = u Δx + + (Δ ) x Δx 2 2 u Δx 3 3 u 2! x 2 3! x 3 x 4 u +1 + u 1 = 2 u + Δ x 2 2 u + (Δ ) x 2 x 4 2 u u = +1 2 u + u 1 + (Δ x 2 ) x 2 Δx 2 A aproxmação de dferenças fntas central da 2 dervada é uma aproxmação de precsão com (Δ x 2 ). a http://localhost:8888/nbconvert/html/.pynb?download=false Págna 1 de 6
De volta à Dfusão Podemos escrever a versão dscretzada da equação da dfusão 1D: Isolando u n+1 : u n+1 u n+1 Δt u n = ν 2 + u n +1 u n u n 1 Δx 2 = u n νδt + ( 2 + ) Δx 2 un +1 u n u n 1 Essa equação dscreta nos permte escrever um programa que executa uma marcha no tempo, entretanto, precsamos de uma condção ncal. Vamos contnuar com a nossa C.I. favorta: a função t = 0 u = 2 0.5 x 1 u = 1 u(x, 0) = { 2 para 0, 5 x 1 1 x (0, 2) chapéu. Então, em, no ntervalo e em todo o resto do domíno (0,2). Establdade da equação da dfusão A equação da dfusão apresenta restrções de establdade. Exste um conjunto de parâmetros que vão fazer a solução numérca explodr. Usaremos a condção: Δt 1 ν Δx 2 2 Δx e Δt Vamos Resolver! Nas próxmas células vamos ncalzar o problema mportando as bblotecas necessáras e defnndo os parâmetros da solução e a condção ncal. Δt Dessa vez nós não remos dexar o usuáro defnr o, já percebemos que sso não é seguro: as pessoas gostam de explodr as cosas. Então, vamos calcular o Δt que va estar em um ntervalo estável de acordo com a nossa dscretzação escolhda. In [17]: mport numpy from matplotlb mport pyplot %matplotlb nlne from matplotlb mport rcparams rcparams['font.famly'] = 'serf' rcparams['font.sze'] = 16 http://localhost:8888/nbconvert/html/.pynb?download=false Págna 2 de 6
In [18]: nx = 41 dx = 2./(nx-1) nt = 20 nu = 0.3 #valor do coefcente de dfusão (m^2/s) sgma =.2 dt = sgma*dx**2/nu x = numpy.lnspace(0,2,nx) lmsup = numpy.where(x >= 0.5) lmnf = numpy.where(x <= 1) u = numpy.ones(nx) u[numpy.ntersect1d(lmnf, lmsup)] = 2 u0 = u.copy() un = numpy.ones(nx) In [19]: for n n range(nt): un = u.copy() u[1:-1] = un[1:-1] + nu*dt/dx**2*(un[2:] -2*un[1:-1] +un[0:-2]) pyplot.plot(x, u0, color='#87ceeb', ls='--', lw=3) pyplot.plot(x, u, color='#003366', ls='--', lw=3) pyplot.ylm(0,2.5); Anmações http://localhost:8888/nbconvert/html/.pynb?download=false Págna 3 de 6
Ver os gráfcos de antes e depos da solução numérca é útl, mas é muto mas emoconante ver as cosas mudando! HOWTO: Instalar o JSAnmaton para o IPython Notebook 1. Faça o download https://gthub.com/jakevdp/jsanmaton/archve/master.zp (https://gthub.com/jakevdp/jsanmaton/archve/master.zp) Descompacte o arquvo zpado. 1. Instale a bbloteca JSAnmaton python setup.py nstall --user 2. Faça os testes com os arquvos dentro da pasta que fo descompactada. Vamos mportar as bblotecas: In [24]: from JSAnmaton.IPython_dsplay mport dsplay_anmaton from matplotlb mport anmaton Agora precsamos rencar nossas condções ncas! In [25]: nt = 50 u = numpy.ones(nx) u[numpy.ntersect1d(lmnf, lmsup)] = 2 un = numpy.ones(nx) http://localhost:8888/nbconvert/html/.pynb?download=false Págna 4 de 6
Agora vamos crar uma anmação, precsamos segur alguns passos. Prmero nós precsamos crar a fgura e adconar exos. A fgura defne o gráfco que queremos anmar. Os exos permtem que cremos elementos gráfcos que mudam de forma nteratva. Depos nós cramos uma lnha "branca" que va ser atualzada em cada teração. Dessa forma: fg = pyplot.fgure(fgsze(11,8)) ax = pyplot.axes(xlm=(0,2),ylm=(1,3)) lne = ax.plot([], [], lw=2)[0] Nota: O [0] depos do comando ax.plot() é necessáro: ax.plot é um comando que pode retornar város valores, dessa forma nós garantmos que ele está apenas plotando uma lnha. Agora que a nossa fgura está confgurada, nós podemos defnr uma função para ser mostrada de forma nteratva. Essa função será a solução do nosso esquema numérco, que será atualzado a cada teração. def dffuson(): lne.set_data(x,u) un = u.copy() u[1:-1] = un[1:-1] + nu*dt/dx**2*\ (un[2:] - 2*un[1:-1] + un[0:-2]) Fnalmente, nós podemos ncar nossa anmação usando anmaton.funcanmaton(). Nós remos passar para essa função os seguntes argumentos: fg: o nome da fgura dffuson: o nome da função que resolve o esquema numérco frames: o número de frames a serem representados (que será gual a nt) nterval: o número de mlsegundos em que cada frame deve aparecer Vamos colocar tudo sso junto. É hora de anmação!! http://localhost:8888/nbconvert/html/.pynb?download=false Págna 5 de 6
In [26]: fg = pyplot.fgure(fgsze=(8,5)) ax = pyplot.axes(xlm=(0,2), ylm=(1,2.5)) lne = ax.plot([], [], color='#003366', ls='--', lw=3)[0] def dffuson(): lne.set_data(x,u) un = u.copy() u[1:-1] = un[1:-1] + nu*dt/dx**2*(un[2:] -2*un[1:-1] +un[0:-2]) anmaton.funcanmaton(fg, dffuson,frames=nt, nterval=100) Out[26]: + Once Loop Reflect In [ ]: http://localhost:8888/nbconvert/html/.pynb?download=false Págna 6 de 6