Hello, I have a very old python script that reads through a frequency calculation output file (from earlier versions of Psi4 like 1.1) and returns the normal modes. I needed to use it again so I was updating it for the newer output format (particularly the Psi4 1.5 output format). I believe 1.1 was printing out the unnormalized Cartesian eigenvectors of the Hessian, and I can see from psi4.driver.qcdb.vib.print_vibs that Psi4 1.5 prints the normalized Cartesian eigenvectors. What I can’t figure out is why the sign of some of the eigenvectors is the same from both codes, but the sign is flipped for other eigenvectors. I show output files from both Psi4 1.1 and Psi4 1.5 below for the same molecule/geometry. The sign is the same for eigenvectors (listed in printed order) 1, 3, 4, 5, 7, 9, 10, 13 and 15, while it is flipped for 2, 6, 8, 11, 12 and 14. My thought was that the sign convention should be either flipped or remain the same for all eigenvectors, but my knowledge of normal modes is pretty rudimentary. Is there something obvious I’m missing?

The sign of the normal modes isn’t well-defined and doesn’t mean much of anything.

Mathematically, we know that if v is an eigenvector of A, then -v is an eigenvector with the same eigenvalue. Without more information, there’s no way to say one is more natural than the other. So if v and w are both eigenvectors, so are -v and w. One is sign-flipped compared to our starting point and the other isn’t, but both are still eigenvectors. As normal modes are just eigenvectors of the hessian (after appropriate mass-weighting of coordinates), you’re just seeing this principle in action.

Physically, let’s start with a diatomic. The sign of the normal mode tells you whether the vibration is going to start with a stretching or a compression. Of course, the vibration is going to have stretches followed by compresions followed by stretches ad infinitum. If you start with one versus the other, you’re just moving half the vibrational period along. So which is the real starting point? We have no way of knowing such a thing.

Now let’s graduate to a triatomic. We can have our symmetric stretch mode and our bending mode. We may decide to write our symmetric stretch with the stretch before the compression or vice versa, and we may decide to have our bending mode squeeze before it expands. The choices are completely independent (remember, we’re modelling vibrations as independent harmonic oscillators), and there’s no way to say which one a molecule “will do first.”