Classical dynamics of the kicked rotor

Numerical experiments » Kicked rotor » Classical dynamics of the kicked rotor

The classical dynamics of the kicked rotor is described by the standard map which maps the position theta and the momentum p (traditionnaly written I) at kick n to position and momentum at kick n+1.

 

 

 

In order to visualize the classical dynamics, one can perform a stroboscopic analysis (also known as Poincare surface of section) by plotting each (theta_n,I_n) point as a dot in a plane, for successive n. This is performed by the script:

kicked_rotor_classical_trajectories.py K number_of_trajectories number_of_points [theta_min theta_max I_min I_max]

K: kick strength
number_of_trajectories: number of initial conditions (=1 to plot a single trajectory).
number_of_points: number of iterates of the initial condition to be plotted.theta_min theta_max I_min I_max: optional arguments describing the rectangle to be plotted in the (theta,I) plane. Default values are [0,2*pi,0,2*pi].

This script computes several "trajectories" of the standard map. Initial conditions are generated randomly in the [0,2*pi] x [0,2*pi] square.  It prints the points in the (theta,I) plane (modulo 2*pi). Matplotlib is used to visualize the plots. In addition, the points are printed in the "classical_trajectories.dat" file. Consecutive trajectories are separated by an empty line
Only points in a restricted area are actually printed. This makes it possible to zoom in a limited region of phase space.

In order to have a good general view of the dynamics, you may use number_of_trajectories=100, number_of_points=1000. This will create a Poincare surface of section with 100 000 points in an insignificant amount of time. When the total number of points is larger than few millions, you may have to wait...

  1. K=0. Observe that the dynamics is trivial.
  2. K=0.1, then K=0.5. Observe that the dynamics is regular with each trajectory lying on its individual "invariant curve".
  3. K=1.0. Observe that some regions of phase space are less regular. By running a single trajectory with more points (say 100000), check that it can fill a finite area in phase space. These are chaotic trajectories.
  4. K=2.0, 5.0, 8.0. Observe that chaos progressively invades phase space. For K>7.0, alomst all phase space is chaotic.

You may also have a look at secondary islands or ternary islands. For K=1.0, you may use:

  1. theta_min=1.7, theta_max=4.6, I_min=2.5, I_max=3.8
  2. theta_min=4.05, theta_max=4.35, I_min=3.6, I_max=3.75

 

kicked_rotor_classical_momentum_distribution.py K final_time number_of_trajectories number_of_bins

K: kick strength
final_time: <p**2(t)> is computed for each (integer) time up to final_time
number_of_trajectories: number of initial conditions
number_of_bins: number of bins for the histogram of the momentum distribution

This script computes the distribution of final momenta for a set of trajectories of the kicked rotor. Initial conditions are generated randomly in the [-pi,pi]x[-pi,pi] square. The script displays the histogram of the distribution of final momentum with a Gaussian fit. It also prints in "final_phase_space_position.dat"  individual final positions and momenta. This makes is possible to visualize diffusion is momentum space and complete delocalization in configuration space.

10000 or 100000 trajectories are enough to generate a good histogram with little noise. Use around 100 bins in order to see the details of the distribution. You may use final_time=100.

I suggest that you use the script as follows:

  1. K=0.5 (or any value below 1). Even at long time, the momentum is bounded because of classical trapping by the regular curves in the Poincare surface of section.
  2. K=2.0. Observe that the distribution seems bimodal at long times. Explain why.
  3. K=4.0, 5.0, 6.0. Observe that the central peak seems to slowly disappear...
  4. K=8.0. Show that the momentum distribution is almost a perfect Gaussian, a characteristic feature of chaotic diffusion. What happens for larger K values?
  5. Slightly decrease K to K=7.0. How does the distribution look like? How does it evlove at longer time?

kicked_rotor_p2_vs_time.py K final_time number_of_trajectories

K: kick strength
final_time: <p**2(t)> is computed for each (integer) time up to final_time
number_of_trajectories: number of initial conditions

This script computes the average value of <p**2(t)> as a function of time for the kicked rotor, printed in the file "p2_vs_time_classical_kicked_rotor.dat". Initial conditions are generated randomly in the [-pi,pi] x [-pi, pi] rectangle.

First, use the script with a single trajectory. Observe that there are huge fluctuations as time grows, and also huge fluctuations between different trajectories.

Show that, averaging over 10 trajectories is enough to see (e.g. for K=8) an emerging diffusive behavior.

With 1000 or 10000 trajectories, observe that you have an almost perfect diffusion.

For K=0.5, observe the classical trapping.

For K>1.5, observe that the dynamics is (almost) always diffusive.

For K=8.0, estimate the diffusion coefficient. How does it compare with the simple estimate derived in the lectures.

Plot on the same figures the results for K=8,9,10,11,12. What do you observe?

Use K=80,90,100,110,120. What do you observe?

______________________________________________________________________________________________

Warning: For some stupid reason, the CMS of this Web site refuses files with the .py extension. Thus, you have to manually rename the file, changing the final _py to .py