Qprop 3.1 has the same features as Qprop 3.0 but with the possibility to initialize excited states (such as 2s, 3s, ... or 3p, for example) for the real-time propagation directly through the "initial.param" parameter file. Previously, one could do this only by modifying the imaginary-time propagation loop in the "imag_prop.cc" source file (i.e., adding Gram-Schmidt orthonormalization by hand).
Moreover, there are additional Python scripts provided that may ease the plotting of results.
Suggestion how to try the new features
Go to folder "/src/excited/" (or any other), set "initial-nr" (radial quantum number, i.e., the number of nodes of the radial wavefunction) in the "initial.param" file and launch the "do_all.sh" script. The "excited" example will take about two minutes. Plot the photoelectron spectrum (PES) with "plot_pes.py" and the initial state probability density with "plot_wf_snapshot.py", both in the "src/plots/" folder.
One can also plot a wavefunction saved during real-time propagation. To store a wavefunction at certain timesteps, set the parameter "wf-saving-interval" in the "propagate.param" file to the desired value. Data is then stored to the "wf" folder of the current example directory. The GIF below is the animation of the probability density from the "vortex" example. There the laser acts for the first 16fs, followed by laser-free propagation (according to the "additional-time" parameter in the "propagate.param" parameter file).
- Initial states of hydrogen normalized to max=1
- PES from those states for laser parameters as used in the "excited" folder
- Time evolution of the probability density in the "vortex" example (animated GIF, 11.5Mb)
Some technical details
To obtain the n_r-th excited state for a given l and m orbital momentum quantum number, imaginary time propagation is performed n_r+1 times. After the imaginary-time propagation of the first wavefunction, a second wavefunction object is created and propagated in imaginary time with the previous state projected out each time step using Gram-Schmidt orthogonalization. The procedure is then repeated for a third wavefunction (unless n_r < 2, in which case we are already finished) with wavefunctions 1 and 2 projected out, and so on.
To facilitate the Gram-Schmidt orthogonalization, the functions
- void subtract(grid g, wavefunction &wf2) (to project-out the wavefunction "wf2")
- void extract_ell(grid g, long ell, long m0) (to extract the l-component of a wavefunction)
- void extract_ell_m(grid g, long ell, long m0) (to extract the l-m-component of a wavefunction)
have been added to "src/base/wavefunction.cc" and "src/base/wavefunction.h".
qprop_v1.92_slim (The slim version is of slightly reduced functionality but runs without lblas, lapack, and f2c.)