Problema de Fermi-Pasta-Ulam: mudanças entre as edições

De Física Computacional
Ir para navegação Ir para pesquisar
Sem resumo de edição
Sem resumo de edição
 
(7 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 16: Linha 16:
<math> F_{i} = -k \Delta x - \alpha k \Delta x^2 - \beta k \Delta x^3 </math>.
<math> F_{i} = -k \Delta x - \alpha k \Delta x^2 - \beta k \Delta x^3 </math>.


Onde <math> \Delta x </math> e a deformação a cada 2 massas acopladas (<math> x_{i+1} - x_i </math>), <math> k </math> é a constante elástica da mola (aqui considerado, <math> \alpha </math> é um parâmetro de deformação arbitrário que controla a correção não linear quadrática e <math> \beta </math> é o parâmetro que controla a correção cúbica. Importante ressaltar que se <math> \alpha </math> é possuir assumir um valor não nulo, real, <math> \beta </math> é 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.
Onde <math> \Delta x </math> e a deformação a cada 2 massas acopladas (<math> x_{i+1} - x_i </math>), <math> k </math> é a constante elástica da mola (aqui considerado, <math> \alpha </math> é um parâmetro de deformação arbitrário que controla a correção não linear quadrática e <math> \beta </math> é o parâmetro que controla a correção cúbica. Importante ressaltar que se <math> \alpha </math> assumir um valor não nulo, real, <math> \beta </math> é 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 ===
=== Motivação ===
Linha 34: Linha 34:
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 <ref name=wiki>https://en.wikipedia.org/wiki/Fermi%E2%80%93Pasta%E2%80%93Ulam%E2%80%93Tsingou_problem</ref>. Partimos do problema com correção quadrática, ou seja, <math> \beta = 0 </math>. Partindo de:
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 <ref name=wiki>https://en.wikipedia.org/wiki/Fermi%E2%80%93Pasta%E2%80%93Ulam%E2%80%93Tsingou_problem</ref>. Partimos do problema com correção quadrática, ou seja, <math> \beta = 0 </math>. Partindo de:


<math> F = -k \Delta x - \alpha k \Delta x^2 </math>,  
<math> F_{i} = -k \Delta x - \alpha k \Delta x^2 </math>,  


substituímos pelas variáveis discretas:
substituímos pelas variáveis discretas:


<math> m \ddot{x_j} = -k \left( (x_{j+1} - x_j) - (x_j - x_{j-1}) \right)  - \alpha k \left( (x_{j+1} - x_j) - (x_j - x_{j-1}) \right) </math>,  
<math> m \ddot{x_j} = -k \left( (x_{j+1} - x_j) - (x_j - x_{j-1}) \right)  - \alpha k \left( (x_{j+1} - x_j)^2 - (x_j - x_{j-1})^2 \right) </math>,  


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


<math> m \ddot{x_j} = k \left( x_{j+1} - 2x_{j} + x_{j-1} \right) \left[ 1 + \alpha \left( x_{j+1} - x_{j-1} \right) \right]  </math>,
<math> m \ddot{x_j} = k \left( x_{j+1} - 2x_{j} + x_{j-1} \right) \left[ 1 + \alpha \left( x_{j+1} - x_{j-1} \right) \right]  </math>,
Linha 48: Linha 48:
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:
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:


<math> E_{total} = \sum_{i=2}^{N} \frac{\omega_{i}^{2}A_{i}^{2} + \dot{A_{i}^{2}}}{2} </math>,
[[Arquivo:Eq1.PNG|350px]]


onde <math> A_i </math> corresponde à:
em que <math> a</math> é o vetor das posições projetado num vetor de um seno com a frequência do modo que queremos plotar:


<math> A_{i} = C\sin{\left( i\theta \right )} </math>
[[Arquivo:Eq2.PNG|120px]]


Conseguimos resolver <math>C</math> com a equação geral de <math>x(t)</math>:
e:


<math> x_{i}(t) = \sum_{m=1}^{N} C_m \sin{\left (\frac{im\pi}{N+1}  \right )}\cos{\left (wmt  \right )} </math>,
[[Arquivo:Eq3.PNG|150px]]


e as freqûencias <math> \omega_i </math> são dadas por: <math> \omega_m = 2\omega_0 \sin\left (\frac{m\pi}{2(N + 1)}\right ) </math>.
<math>N</math> é o número de partículas e <math>\omega_i = \sqrt{\frac{k}{m}} </math>
 
<math>N</math> é o número de partículas e <math>\omega_0 = \frac{k}{massa} </math>


== Resultados ==
== Resultados ==


O sistema foi iniciado com o modo normal de oscilação 1 (nenhum nodo), 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.  
O sistema foi iniciado com o modo normal de oscilação 1 (seno com frequência <math>\omega = \sqrt{\frac{k}{m}}</math>), 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.  


[[Arquivo:Estado inicial das particulas.png|center|thumb|500px|legenda.]]
[[Arquivo:Estado inicial das particulas.png|center|thumb|500px|legenda.]]
Linha 84: Linha 82:
[[Arquivo:Corda final.gif|center|thumb|500px|Simulação FPU para o problema proposto.]]
[[Arquivo:Corda final.gif|center|thumb|500px|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 fft, o que representa um comportamento muito similar às energias por modo:
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:


[[Arquivo:Energias fft.jpeg|thumb|700px|center|Porcentagem de cada modo vibracional ao longo do tempo. A escala do tempo está reduzida em 20 vezes.]]
[[Arquivo:Energias fft.jpeg|thumb|700px|center|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:  
E também calculamos pela equação de energia citada acima, obtivemos os seguintes comportamentos:  
Linha 94: Linha 92:
<li style="display: inline-block;"> [[Arquivo:Energias certo2.jpg|520px|thumb|Energias por modo de oscilação com fft. A escala do tempo está aumentada em 5 vezes.]]</li>
<li style="display: inline-block;"> [[Arquivo:Energias certo2.jpg|520px|thumb|Energias por modo de oscilação com fft. A escala do tempo está aumentada em 5 vezes.]]</li>
</ul></div></center>
</ul></div></center>
A expressão utilizada para calcular estas energias foi a memsa citada anteriormente:
[[Arquivo:Eq1.PNG|center|350px]]


== Discussões ==
== Discussões ==
Linha 102: Linha 104:


== Implementação ==
== 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.
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.
Linha 124: Linha 128:


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


N = número de partículas
N = número de partículas

Edição atual tal como às 23h27min de 28 de maio de 2021

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