Plotting Vibronic Wavefunctions Generated With Xsim
For interpretive purposes, one might want to look at the wavefunctions produced by the xsim package. If xsim is used for a single electronic state, these are vibrational wavefunctions; if it is used by more than one state, these are vibronic wavefunctions associated with a Born-Huang expansion. Before discussing what these "mean" and how to look at them, here are the nuts and bolts of generating them.
1. Obtain a vibronic wavefunction, either by doing a Davidson diagonalization or by appropriate linear combinations of Lanczos trial vectors (see below). If the wavefunction is generated by the Davidson procedure, it will be found in the file called GUESSVECTOR. Rename this file to plotfile.in, and go to (3) below.
2. It is often hard/impossible to converge excited state roots to get precise eigenvectors. However, there is a provision to generate (quite good) approximate wavefunctions by expanding the (near) eigenvector in the basis of the tridiagonal Lanczos representation. In order to do this:
a) You must store the Lanczos trial vectors and the eigenvectors of the ultimate tridiagonal matrix. To do this, simply add the keyword
to your xsim input file. However: BE CAREFUL. A typical xsim calculation for me will include perhaps 10,000,000 basis functions and 1,000 Lanczos iterations. Such a calculation would result in the storage of 1000 vectors, which are all 80 Mb in length, for a total of 80 Gb (the additional storage of the 1000 eigenvectors of the 1000x1000 tridiagonal matrix is a trivial addition here). Using Storevectors with a large basis set and many Lanczos iterations is perhaps a good way to get you on the wrong side of your friendly system manager. This information will be stored in the LEVECS file (the eigenvectors of the tridiagonal matrix and the associated eigenvalues) and LBASIS, which contains the Lanczos trial vectors. Now, the real eigenvectors of the Hamiltonian in the full direct-product Born-Huang basis are approximated by linear combinations of the Lanczos trial vectors, with the weights specified by the appropriate eigenvector.
b) The easiest way to construct the Lanczos approximation to the full eigenvectors is to add the
keyword to your xsim input file. This record will look something like this:
In general, roots that have vanishing (or nearly vanishing intensity) converge very slowly in the Lanczos algorithm. Constructing "wavefunctions" for such states by the method described here is not reliable and can, in fact, produce what might charitably be called "garbage". If you want to plot such a state, it is wise choose a Lanczos seed vector (through the Seed keyword in the xsim input file) which will have a significant project upon the state of interest.
c) With the Plotroots input shown above, the actual Lanczos approximations to the Hamiltonian eigenvectors are generated by
xvibplot < input
where input is the usual xsim input file that was used to generate the wavefunction. In order to make a plot, one additional keyword must be included:
After xvibplot runs, a number of files will be found. The files psia, psib, psic ... are the vibrational parts of the wavefunction associated with the first, second, third, etc. electronic state in the basis (which will, in general have different symmetries, as the overall symmetry of the vibronic wavefunction is the product of the vibrational symmetry and the electronic symmetries, all of which will be the same throughout the Born-Huang expansion). The file psisquared is exactly what is implied by the name; it is the probability density of the vibronic state in the nuclear coordinates.
All of these functions can be nicely plotted with gnuplot as follows: