Table des matières

Problème FPU : récurrence du mode fondamental

1. Introduction

Le problème de Fermi-Pasta-Ulam [1] consiste à étudier la dynamique d'une chaîne d'oscillateurs couplés non linéaires. Le point k de la chaîne, de déplacement qk, est régi par l'équation différentielle :

d2qkdt2=-ω02(2qk-qk-1-qk+1)+b[(qk+1-qk)n-(qk-qk-1)n](1)

On considère ici le cas des conditions limites périodiques, qui permet d'obtenir des ondes quasi-progressives, plus simple à interpréter que les ondes stationnaires considérées en [1].

Les calculs sont fait avec le module Python présenté dans problème FPU : module python. Voir aussi problème FPU périodique : implémentation CUDA pour des détails sur la méthode de calcul et sur l'implémentation CUDA.

Pour la simulation ω0=1. On se place dans le cas d'une non linéarité quadratique n=2.

L'état initial de la chaîne est le mode fondamental du problème linéaire, qui est une onde progressive dont la longueur d'onde est la longueur de la chaîne, et de vitesse de phase v1=1 (lorsque N est grand). Dans le cas linéaire (b=0), la forme d'onde reste stationnaire si on rapporte les positions des points de la chaîne au repère mobile qui se déplace à la vitesse v1. Dans le problème non linéaire FPU, on représente les déplacements et les vitesses en fonction de la position dans le repère mobile.

2. Programme python

Ci-dessous le programme python utilisé pour les simuations :

import fpuchain.main
import numpy
from pylab import *
dir="../../../../figures/sciphys/meca/fpurec/"
nvar=128
f=fpuchain.main.FpuPerCuda(nvar)
f.init(1) # condition initiale : mode 1
b=0.1
n=2 # terme non lineaire quadratique
nm=10 # nombre de modes
h=0.1
n1=2000
n2=500
f.run(h,n1,n2,b,n,nm)
f.close()
figure(0)
for m in range(nm): 
    plot(f.emodemat[:,m])
axis([0,n2*1.5,0,numpy.max(f.emodemat[:,0])])
legend(("mode 1","mode 2","mode 3","mode4","mode 5","mode 6","mode 7","mode 8","mode 9","mode 10"),loc='upper right')
xlabel("t/(n1h)")
ylabel("Em")
savefig(dir+"fig1a.png",dpi=80,figsize=(10,7.5))
matshow(numpy.transpose(f.qstat))
xlabel("t/(n1h)")
ylabel("k")
title("q")
colorbar()
savefig(dir+"fig1b.png",dpi=80,figsize=(10,7.5))
matshow(numpy.transpose(f.pstat))
xlabel("t/(n1h)")
ylabel("k")
title("p")
colorbar() 
savefig(dir+"fig1c.png",dpi=80,figsize=(10,7.5))
show()


            

3. Retour du mode fondamental

Dans toutes les simulations, le pas de temps est h=0.1.

On commence par une simulation d'une chaîne de 128 points, avec une faible non linéarité b=0.1. Les nombres de pas sont n1=2000 et n2=500.

Au début du l'évolution, le mode 1 s'atténue au profit des modes 5,4,3,2 (dans cet ordre). Après le maximum du mode 2 (vers t/(n1h)=150), la chaîne semble revenir vers son mode initial, avec la succession dans l'ordre inverse 2,3,4,5. Enfin vers t/(n1h)=150, on observe le retour du mode fondamental. À cet instant, la chaîne est revenue dans un état très proche de l'état initial : mode fondamental, avec une petite quantité de mode 3. L'instant réel du retour du mode 1 est t=60000.

Ce résultat avait étonné Fermi, Pasta et Ulam, qui s'attendaient à observer un décroissance irréversible du mode fondamental, avec une équi-répartition de l'énergie sur tous les modes.

Voyons l'évolution d'une chaîne à 256 points, avec n1=4000 et n2=1000.

On observe le même phénomène, avec toutefois un plus grand nombre de modes apparaissant avant le retour du mode fondamental. Par exemple, le mode 7 passe par des maxima plus élevés. Le retour du mode fondamental se fait à l'instant t=340000, ce qui fait un facteur 5.7 par rapport à la chaîne deux fois plus petite. Le calcul dure 42 secondes, contre 10 seconde dans le premier cas.

Pour confirmer, cette évolution de la dynamique avec le nombre de points, voyons le cas d'une chaîne de 512 points, avec n1=20000.

Le retour du mode 1 se fait à t=2000000, soit un facteur 5.9 par rapport à la chaîne à 256 points. Le temps de calcul est de 231 secondes.

4. Récurrence du mode fondamental

La simulation est effectuée sur un temps très long, de manière à observer la récurrence du mode fondamental. La chaîne a 128 points et n1=40000.

Dans un premier temps, on observe une récurrence du mode 1, mais son amplitude est de plus en plus faible. Vers t/(n1h)=200, les maxima du mode 1 augmentent à nouveau pour aboutir à un état très proche de l'état initial. Ce phénomène est appelé super-récurrence du mode fondamental.

Pour confirmer ce résultat, on effectue le calcul sur une durée très longue (n1=40000 et n2=10000) puis un calcul avec n1=4000 de manière à observer sur une échelle de temps plus petite. Les figures suivantes représentent donc l'évolution de la chaîne après un temps t=4 107.

On constate qu'il y a toujours retour d'états où le mode fondamental est largement dominant.

Voyons le même calcul avec une chaîne de 256 points. Les figures suivantes représentent l'évolution de la chaîne après un temps t=4 107.

Références
[1]  Fermi E., Pasta J., Ulam S.,  Studies of nonlinear problems,  (Los Alamos report, LA-1940, 1955)
Creative Commons LicenseTextes et figures sont mis à disposition sous contrat Creative Commons.