Non-Hermitian Wave Packet - Saddle Point
By Tian-Hua Yang [yangth@princeton.edu]
This is a Python & Mathematica package to numerically perform time evolution of wave packets governed by non-Hermitian lattice Hamiltonians, and theoretically calculate the saddle points that would govern the long-time behavior of such evolutions.
See our paper T.-H. Yang and Chen Fang, Real-Time Edge Dynamics of Non-Hermitian Lattices, Phys. Rev. Lett. 135, 186401 (or on arxiv: arXiv:2503.11505). Please kindly cite it if you find this package helpful in your research.
-
numpy, scipy, matplotlib
-
(Optional) Wolfram Mathematica in the command line. Needed if you want to incorporate saddle point calculations. Either install "wolframscript" or "math". Remember to set the
MMA_CL_NAMEandMMA_CL_INDEXarguments inConfig.json. -
(Optional) cupy. Needed if you want to use GPU to accelerate time evolution computations. With cupy installed, enable GPU acceleration by setting
USE_GPUtotrueinConfig.json. -
(Optional) ffmpeg. Needed if you want to animate wave function profiles. After installing, set the
FFMPEG_PATHargument inConfig.jsonto the absolute path of the executableffmpegfile.
I run the codes by writing the function I want to run in a separate file (e.g. some file in the examples folder), import this file into main.py, and then running main.py. In main.py I do a chdir before running the script, to generate the plots in a directory separate from the codes.
examples/compare_sp.py contains function that generate various time-evolution plots presented in the paper.
examples/saddlepoints.nb contains function that illustrate how to use the Mathematica scripts provided in LV1.wl and LVn.wl to calculate saddle points of a Hamiltonian.