Skip to content
/ KH Public

Kramers-Henneberger reductions of Hamiltonian dynamics

License

Notifications You must be signed in to change notification settings

cchandre/KH

Repository files navigation

Bogolyubov’s averaging applied to the Kramers-Henneberger Hamiltonian

  • KHBogolyubov.mlx: Matlab livescript for the manuscript Bogolyubov’s averaging theorem applied to the Kramers-Henneberger Hamiltonian by E. Floriani, J. Dubois, C. Chandre

Reference: E. Floriani, J. Dubois, C. Chandre, Bogolyubov's averaging theorem applied to the Kramers-Henneberger Hamiltonian, Physica D 431, 133124 (2022); arxiv:2107.01946

@article{floriani2021,
         title = {Bogolyubov's averaging theorem applied to the Kramers-Henneberger Hamiltonian}, 
         author = {Floriani, E. and Dubois, J. and Chandre, C.},
         journal = {Physica D},
         volume = {431},
         pages = {133124},
         year = {2022},
         doi = {10.1016/j.physd.2021.133124},
         URL = {https://doi.org/10.1016/j.physd.2021.133124}
}

Time-dependent Schrödinger equation in the dipole approximation (TDSE)

  • TDSE_dict.py: to be edited to change the parameters of the TDSE computation (see below for a dictionary of parameters)

  • TDSE_classes.py: contains the TDSE class and main functions

  • TDSE.py: contains the methods to execute TDSE

Once TDSE_dict.py has been edited with the relevant parameters, run the file as

python3 TDSE.py

or

nohup python3 -u TDSE.py &>TDSE.out < /dev/null &

The list of Python packages and their version are specified in requirements.txt

Parameter dictionary

  • Method: string; 'wavefunction', 'ionization', 'HHG', 'plot_potentials, 'plot_eigenstates'; choice of method
    • 'wavefunction': displays the wavefunction as a function of time
    • 'ionization': computes the ionization probability as well as displaying the wavefunction as a function of time
    • 'plot_potentials': plots V(x) and VKH,2(x) and VKH,3(x) as a function of x in the range specified in L
    • 'plot_eigenstates': plot the first k eigenstates and eigenvalues of the potential specified in InitialState[1], where k is equal to InitialState[0]+1

  • laser_intensity: float or array floats; intensity of the laser field in W cm-2
  • laser_wavelength: float or array of floats; wavelength of the laser field in nm
  • laser_envelope: string; 'trapez', 'sinus', 'const'; envelope of the laser field during ramp-up and ramp-down
  • laser_field: lambda function returning an array of n floats; n components (where n is the dimension of configuration space) of the electric field (dipole approximation); NB: even in dim=1, include brackets[]
  • te: array of 3 floats; duration of the ramp-up, plateau and ramp-down in laser cycles
  • V: lambda function; ionic potential
  • InitialState: integer or array [integer or tuple of integers, string]; integer = index of the initial eigenstate (0 corresponds to the ground state, 1 is the first excited state...); string = potential with which the initial state is computed ('V', 'VKH2' or 'VKH3'); in case a tuple of integers is entered, the initial state is a linear combination of the various states in the tuple
  • DisplayCoord: string; 'lab', 'KH2' or 'KH3'; if KH, the wave function is moved to the KH frame (for display and for saving) of order 2 or 3

  • L: array of n floats; size of the box in each direction
  • N: array of n integers; number of points in each direction
  • delta: float or array of n floats; size of the absorbing boundary in each direction (if float, the size is taken equal in all dimensions)
  • Lg: float or array of n floats; size of the box for the initial computation of the initial state along each dimension; if float, [-Lg, Lg] in each dimension
  • nsteps_per_period: integer; number of steps per laser period for the integration; the time-step is then defined as 2π /ω / nsteps_per_period
  • scale: string; 'linear' or 'log'; the axis scale type to apply for the representation of the wavefunction (if Method='wavefunction')
  • SaveWaveFunction: boolean; if True, saves the animation of the wavefunction as an animated .gif image
  • PlotData: boolean; if True, displays the wavefunction on the screen as time increases (only for 1D and 2D)
  • SaveData: boolean; if True, the time evolution of the wave function are saved in a .mat file
  • Parallelization: int or string; int is the number of cores to be used, 'all' for all of the cores
  • dpi: integer; number of dots per inch for the movie frames (if SaveWaveFunction is True)
  • refresh: integer; the wavefunction is displayed every refresh time steps
  • darkmode: boolean; if True, plots are done in dark mode

The following options may be changed from default values in TDSE_dict.py:

  • tol: relative accuracy for eigenvalues (stopping criterion) (default=10-10, 0 implies machine precision); see eigsh
  • maxiter: maximum number of Arnoldi update iterations allowed (default=1000); see eigsh
  • ncv: number of Lanczos vectors generated (default=100); see eigsh
  • Nphi_KH: integer; number of points in one period to compute the Kramers-Henneberger potentiel VKH(x) (default=212)
  • ode_solver: string; choice of splitting symplectic integrator; for a list see pyHamSys (default='BM4')

Reference: E. Floriani, J. Dubois, C. Chandre, Scars of Kramers-Henneberger atoms, arxiv:2407.18575

@misc{floriani2024,
      title={Scars of Kramers-Henneberger atoms}, 
      author={Elena Floriani and Jonathan Dubois and Cristel Chandre},
      year={2024},
      eprint={2407.18575},
      archivePrefix={arXiv},
      primaryClass={nlin.CD},
      url={https://arxiv.org/abs/2407.18575}, 
}

For more information: cristel.chandre@cnrs.fr

Releases

No releases published

Packages

No packages published

Languages