Problema de Fermi-Pasta-Ulam

De Física Computacional
Ir para navegação Ir para pesquisar

Grupo: Augusto M Giani e Henrique Padovani

O objetivo deste trabalho é replicar os resultados do problema proposto por Fermi-Pasta-Ulam em 1953 [1] sobre sistemas dinâmicos não lineares. As análises serão sobre a solução dos modos de vibração comparados à solução analítica para poucas massas e também sobre a energia do sistema para os modos de oscilação, enquanto o sistema evolui no tempo.

O Problema

O Problema proposto constitui-se de simulações em uma rede de partículas ligadas entre si através de molas que obedecem a Lei de Hooke com uma correção não-linear quadrática ou cúbica [2]

  • Figura 1. Problema de Fermi-Pasta-Ulam, molas acopladas[2].

A lei de forças que rege o comportamento deste sistema é:

.

Onde e a deformação a cada 2 massas acopladas (), é a constante elástica da mola (aqui considerado, é um parâmetro de deformação arbitrário que controla a correção não linear quadrática e é o parâmetro que controla a correção cúbica. Importante ressaltar que se assumir um valor não nulo, real, é igual a zero no nosso sistema, ou vice-versa. Não estamos analisando correções quadráticas somadas com correções cúbicas neste trabalho.

Motivação

O paradoxo Enrico Fermi, John R. Pasta, Stanislaw M. Ulam e Mary Tsingou[3]

A premissa inicial do paradoxo de FPUT consiste no Teorema da Equipartição de Energia. O sistema consistia em uma corrente de partículas, com as extremidades fixas, que interagiam entre seus vizinhos somente com forças elásticas (as forças teriam um termo linear como a Força de Hooke e mais um termo não-linear, podendo ser quadrático ou cúbico). Era esperado que a energia total fosse distribuída igualmente entre as partículas. No caso em questão, a distribuição de energia entre as partículas pode ser descrita através dos seus modos normais de vibração.

A análise do problema gerou um paradoxo que começaria a ser respondido somente 10 anos depois, o que ajudou no desenvolvimento das teorias de sólitons e do caos. Pretendia-se observar a distribuição uniforme de energia entre os diversos modos normais de vibração com o passar do tempo (ao longo das iterações da simulação computacional). Isso significaria que o sistema alcançou um equilíbrio térmico e seria uma exemplificação computacional do Teorema de Equipartição de Energia. Caso as forças entre as partículas fossem estritamente lineares, isso não ocorreria, pois a energia alocada em cada modo não conseguiria acessar outros modos. Imaginava-se que uma componente não-linear na força tornaria acessível qualquer modo de vibração, porém não foi o observado.

A princípio, foi observada a tendência do sistema de distribuir a energia. O primeiro modo de vibração antes estimulado, perdeu energia ao longo do tempo, a qual começou a se alocar nos modos de energia mais baixos. Entretanto, por um descuido, deixaram a simulação decorrer por um tempo maior do que era planejado. Ao retornar ao laboratório para corrigir tal erro, se depararam com um resultado inesperado. A energia, que supostamente deveria estar igualmente partilhada entre os modos de vibração, estava quase completamente alocada no primeiro modo de vibração. De fato, somente 3% da energia não estava presente no primeiro modo. Devido a esta observação, deixaram a simulação correr por ainda mais tempo. Notaram, então, que existia um ciclo, no qual a energia saía do primeiro modo de vibração, começava a se distribuir nos modos mais baixos, para, por fim, voltar quase que inteiramente para o primeiro modo de vibração. Contudo, em 2015, relatou-se que o sistema FPUT poderia atingir equipartição de energia pelo menos entre modos normais livres (interação entre três fônons).

Discretização

A discretização deste problema gira em torno de abrir a equação das forças, e com o termo de aceleração, iterar o movimento das partículas a partir disso [4]. Partimos do problema com correção quadrática, ou seja, . Partindo de:

,

substituímos pelas variáveis discretas:

,

Sendo que as partículas de índice zero e N estão fixas, Chegamos em:

,

Em que é a aceleração da j-ésima partícula, com ela conseguimos integrar o movimento das partículas.

A Energia do sistema é calculada para cada ciclo de oscilação, porém para obtermos os resultados dos modos de oscilação e compararmos com os estudos atuais e o original de de FPUT, calculamos a energia dos primeiros modos de vibração da corda para demonstrar o comportamento visivelmente periódico destas energias. É possível calcular a energia dos modos de vibração através da equação:

Eq1.PNG

em que é o vetor das posições projetado num vetor de um seno com a frequência do modo que queremos plotar:

Eq2.PNG

e:

Eq3.PNG

é o número de partículas e

Resultados

O sistema foi iniciado com o modo normal de oscilação 1 (seno com frequência ), com velocidades iniciais igual a zero de cada partícula. O movimento começa apenas pelas forças já presentes entre cada partículas, pelas equações apresentadas acima.

legenda.

Segue abaixo a evolução do sistema ao longo do tempo, apenas para gerar o .gif considerando:

Simulação FPU para o problema proposto.

Já os resultados das energias, consideramos todas constantes iguais à 1, mais de 100 partículas e o número de iterações está em cada imagem. Procedemos de duas formas: calculamos a porcentagem de cada modo normal de oscilação pela Transformada de Fourier (para selecionar as frequências que estavam presentes na oscilação, sem calcular as energias), o que apresentou um comportamento muito similar às energias calculadas pela soma de energias cinética e potencial:

Porcentagem de cada modo vibracional ao longo do tempo. A escala do tempo foi reduzida em 20 vezes para melhor apresentação do gráfico.

E também calculamos pela equação de energia citada acima, obtivemos os seguintes comportamentos:

  • Energias por modo de oscilação. A escala do tempo está aumentada em 2 vezes.
  • Energias por modo de oscilação com fft. A escala do tempo está aumentada em 5 vezes.

A expressão utilizada para calcular estas energias foi a memsa citada anteriormente:

Eq1.PNG

Discussões

Como o intuito era replicar os resultados e o comportamento das energias através da simulação com dinâmica molecular, obtivemos resultados muito parecidos comparando estudos já realizados sobre este problema [3].

A questão de simular a energia usando a porcentagens dos senos também faz sentido pensando quanta contribuição o modo normal de oscilação tem no movimento atual, como pudemos ver que o comportamento foi bem similar ao das energias calculadas.

Implementação

Implementamos a iteração do movimento das partículas por Velocity-Verlet.

A questão de variar os parâmetros do problema, como já mencionado previamente nesta wiki, e também apresentado nos gráficos e no gif, vimos que não interferia muito no caráter dos resultados (e o quanto isso poderia influenciar no paradoxo de equipartição de energia), porém o fizemos para gerar imagens melhores e o gif com menos de 2 MB.

### Exemplo da iteração do movimento utilizando forcacom correção quadrática ###
### código em python

def aceleracao(pos,alpha,k,massa):
    size = len(pos)
    acel = [0.0 for i in range(size)]
    for i in range(1,size-1):
        acel[i] = (k/massa) * ((pos[i+1] + pos[i-1] - 2*pos[i]) * ( 1.0 + alpha*(pos[i+1]-pos[i-1]) ) )
    return acel

def velocidade(velo, acel, dt):
    size = len(velo)
    new_velo = [0.0 for i in range(size)]
    for i in range(size):
        new_velo[i] = velo[i] + 0.5*acel[i]*dt
    return new_velo

def posicao(pos, velo, dt):
    size = len(pos)
    new_posY = [0.0 for i in range(size)]
    for i in range(size):
        new_pos[i] = pos[i] + new_velo[i]*dt
    return new_pos

N = número de partículas
dt = 0.2
x = np.linspace(0, x_final, dt)
pos = np.sin( 2*x*pi / (N*dt))

while t < tmax: # Loop temporal
     
    plt.scatter(x,pos) # plotagem dos gráficos
    acel = aceleracao(pos_old,alpha,k,massa)
    velo = velocidade(veloY, new_aceY,dt)
    pos  = posicao(posY_old, veloY, dt)
    calcula_energias(pos)
  
  pos_old = pos.copy()  #sem ".copy()" o python usa o mesmo endereço de memória para 2 variáveis
  t = t + td

gera_gif()

Link para Códigos

Fizemos no ambiente Colab em .ipynb, segue link do github:[1]

Referências

  1. ANDRADE, D. X.; ANJOS, P. H. R.; ASSIS, P. E. G.. Sobre a conexão entre alguns modelos físicos não-lineares. Rev. Bras. Ensino Fís., São Paulo , v. 39, n. 1, e1307, 2017 . Disponível em <http://www.scielo.br/scielo.php?script=sci_arttext&pid=S1806-11172017000100407&lng=pt&nrm=iso>. http://dx.doi.org/10.1590/1806-9126-rbef-2016-0083.
  2. 2,0 2,1 http://www.physics.utah.edu/~detar/phys6720/handouts/fpu/FermiCollectedPapers1965.pdf - Fermi, Pasta, Ulam, Studies of non linear problems Erro de citação: Etiqueta inválida <ref>; Nome "FPU" definido várias vezes com conteúdo diferente
  3. 3,0 3,1 https://www.scielo.br/j/rbef/a/SkRCy5fdnGbhfxNjpx5BkRD/?format=pdf&lang=pt - O problema Fermi-Pasta-Ulam-Tsingou: Equiparticão de energia vista através de simulações computacionais
  4. https://en.wikipedia.org/wiki/Fermi%E2%80%93Pasta%E2%80%93Ulam%E2%80%93Tsingou_problem