Equação de Kuramoto–Sivashinsky: mudanças entre as edições

De Física Computacional
Ir para navegação Ir para pesquisar
Linha 50: Linha 50:
<center>
<center>
{|
{|
|[[Arquivo:fft1.gif|thumb|upright=0.0|center|Solução espectral de condição inicial <math>\sin{\left( \frac{2\pi}{3} x \right) }^2</math>|300px]]
|[[Arquivo:fft1.gif|thumb|upright=0.0|center|Solução espectral de condição inicial <math>\sin{\left( \frac{2\pi}{3} x \right) }^2</math>|318px]]
|[[Arquivo:mapa_temporal1.png|thumb|upright=0.0|center|Mapa temporal de condição inicial <math>\sin{\left( \frac{2\pi}{3} x \right) }^2</math>|324px]]
|[[Arquivo:mapa_temporal1.png|thumb|upright=0.0|center|Mapa temporal de condição inicial <math>\sin{\left( \frac{2\pi}{3} x \right) }^2</math>|324px]]
|}
|}
Linha 73: Linha 73:
<center>
<center>
{|
{|
|[[Arquivo:fft2.gif|thumb|upright=0.0|center|Solução espectral para <math>L=1</math>|300px]]
|[[Arquivo:fft2.gif|thumb|upright=0.0|center|Solução espectral para <math>L=1</math>|334px]]
|[[Arquivo:mapa_temporal2.png|thumb|upright=0.0|center|Mapa temporal para <math>L=1</math>|324px]]
|[[Arquivo:mapa_temporal2.png|thumb|upright=0.0|center|Mapa temporal para <math>L=1</math>|324px]]
|}
|}

Edição das 12h59min de 19 de dezembro de 2023

Nesta página apresentamos uma simulação de Dinâmica Molecular utilizando o potencial de Lennard-Jones como potencial de interação entre as partículas.

Equação

A equação de Kuramoto-Sivashinsky (KS) foi inicialmente proposta por Yoshiki Kuramoto e Gregory Sivashinsky para a modelagem das instabilidades da frente de uma chama laminar.

No entanto, a forma diferencial da equação foi descoberta independentemente na área de dinâmica de fluidos, onde ficou mais conhecida para a modelagem de filmes finos.

A equação apresenta comportamentos caóticos ao ser estudada em geometrias anelares, ou seja, condições de contorno periódicas; por isso esse será o caso estudado aqui.

Métodos de Solução

Diferenças Finitas (FTCS)

O método mais simples foi aplicado a fim de entender o comportamento da equação. Tentativas de linearização resultaram em uma equação de comportamento muito distinto do descrito na literatura; e portanto, não é de nosso interesse estudá-la. É importante relembrar que a aplicação do método FTCS não é recomendado no caso de não linearidades pois o método tem baixa precisão e pode acumular erros.

Como esperado, a solução numérica teve sua estabilidade atrelada à suas condições iniciais; ou seja, a solução é instável (exceto em casos bem específicos, onde ela se comporta de forma análoga à equação da difusão).

Solução FTCS de condição inicial
Solução FTCS de condição inicial


Método Espectral (FFT)

Utilizando o método fft em conjunto com as propriedades da transformada de fourier, pode-se resolver a EDP utilizando a forma de derivada espectral. Esse método possui alta precisão e é capaz de incorporar o comportamento ondulatório de soluções, algo característico da equação de Kuramoto-Sivashinsky.

A derivada espectral é caracterizada pela transformada de fourier de uma derivada, o que facilita a resolução de equações diferenciais parciais:

.

Essa propriedade permite que a resolução da parte espacial da equação de Kuramoto-Sivashinsky diferencial seja dada por

,

onde . A parte temporal também pode ser resolvida da mesma forma, mas o método de Runge-Kutta (RK45) foi aplicado em seu lugar por sua maior simplicidade e velocidade de processamento.


Soluções

Através do método espectral foi possível estudar o comportamento da Equação de Kuramoto-Sivashinsky em sua forma diferencial. Para uma melhor interpretação das soluções, os dados são dispostos em dois modelos de gráfico: um gif em que a passagem de tempo é representada pela mudança de frames, e um gráfico com escala de cores; onde os eixos representam o tempo e o espaço.

Solução espectral de condição inicial
Mapa temporal de condição inicial

Ao partir de uma condição inicial senoidal, a equação se mantém estável por longos períodos de tempo, o que atrasa a chegada de seu comportamento mais característico: a formação de faixas. Esse comportamento é mais perceptível ao se analisar o mapa temporal da solução, deixando clara a tendência da equação de concentrar mínimos e máximos próximos, gerando picos e vales que se relacionam de forma complexa. No entanto, é fácil perceber que o comportamento simulado não é caótico e sim quase periódico. Isso está atrelado a um fator muito importante para o estudo da equação, o tamanho da periodicidade simulada, ou seja, seu domínio (L).


Caos gerado pelo Domínio (L)

É esperado que a solução para a equação dependa das condições iniciais escolhidas, mas uma relação entre a solução e o tamanho do domínio estudado é algo bem mais surpreendente. A equação KS apresenta esse comportamento inesperado e por isso é objeto de estudo até mesmo em teorias de caos. Sua forma simples apresenta três elementos importantes:

Um termo crescente, com funcionamento inverso à equação do calor: ;

um termo dissipador, responsável pelo amortecimento de picos e vales estreitos: ;

e um termo não linear, provavelmente responsável pelo comportamento ondulatório da equação, transferindo energia entre os estados crescentes e amortecidos: .

A soma desses comportamentos faz com que em domínios periódicos pequenos, a equação consiga se manter estável, atingindo resultados constantes ou ondas planas. Isso pode ser identificado nas soluções abaixo, que apesar de possuírem a mesma condição inicial ( ), são mapeadas em domínios de tamanhos diferentes.

Solução espectral para
Mapa temporal para




Implementação do Código em Python

#Importação de bibliotecas
from scipy.fft import fft, ifft, fftshift
from scipy import integrate
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image
import glob

#Parâmetros Gerais
L = 3
N = L*100
t_max = 60000

dx = L/N

X = np.arange(0,L,dx)
K = 4*np.pi/L * np.arange(-L/2,L/2,dx)
K = fftshift(K)

#Forma diferencial da Equação KS
def KS(t,F,K=K):
  fourier = fft(F)
  return ifft(K**2 * fourier) - ifft(K**4 * fourier) - F/2 * ifft(K * 1j* fourier)

#Forma integral da Equação KS
def IKS(t,F,K=K):
  fourier = fft(F)
  return ifft(K**2 * fourier) - ifft(K**4 * fourier) - (ifft(K * 1j* fourier))**2

#Declaração das condições iniciais
F0 = np.sin(2*np.pi*X/L)**2 + 0j
t = 0
tempo = 0
plot = 1

V = []
T = []


#Solução por RK45
sol=integrate.RK45(KS,0,F0,t_max)


while t < t_max:
  passo = sol.step_size
  if passo == None:
    passo = 0
  tempo += passo
  T.append(tempo)
  V.append(sol.y)

  if t%1000==0:
    fig = plt.figure(figsize=(5,5))
    plt.plot(X,sol.y.real,label='tempo:%.2f'% (tempo))
    plt.xlabel('X')
    plt.ylabel('v(x,t)')
    plt.legend(loc='upper right')
    plt.ylim(-5,5)
    fig.savefig('./grafs/%c.PNG'% (plot))
    plt.close()
    plot+=1

  sol.step()
  t +=1


# Criação do GIF
frames = (Image.open(f) for f in sorted(glob.glob("./grafs/*.PNG")))
frame_one = next(frames)
frame_one.save("animado.gif", format="GIF", append_images=frames, save_all=True, duration=150, loop=0)


#Criação mapa de cores real
fig = plt.figure(figsize=(5,5))
graf = plt.pcolormesh(X,T,np.array(V).real,cmap="inferno",vmin=-5,vmax=5)
plt.xlabel('x')
plt.ylabel('t')
cbar = fig.colorbar(graf)
cbar.ax.set_title('v(x,t)')
fig.savefig("mapa_temporal.png")
plt.close()