I'm doing some post-processing using the vibrational modes of a molecule to solve a linear system of equations, but I believe I need all the modes in order to have a single, well-determined solution. I'm doing this with Gaussian and their website lays out how they form these modes, but I have yet to find an option to actually print them and since they are doing it already internally and I'm reading the other modes from output files, I'd rather not repeat the process if I don't have to.

Is there a way to get Gaussian (or any electronic structure program) to print the coordinates of the translational/rotational modes to the log or some output file? Alternatively, can I easily generate translational/rotational modes given the vibrational modes?

  • 4
    $\begingroup$ They are removed by the Eckart condition. While I don't know if there is a way to say "no Eckart" in Gaussian, if you get the Hessian the eigenvalues which equals zero should be the translations and rotations $\endgroup$
    – Cody Aldaz
    May 6, 2020 at 22:59
  • 3
    $\begingroup$ Actually, I take that back they aren't 'removed'. They are simply just not reported with the Eckart condition. Would some python code to calculate normal modes from a Hessian be useful? $\endgroup$
    – Cody Aldaz
    May 6, 2020 at 23:25
  • 2
    $\begingroup$ @CodyAldaz If need be, I have the Hessian and could regenerate all the modes. I was just curious if Gaussian had a way to not remove the trans/rot modes since I'm already getting the vib modes from there. $\endgroup$
    – Tyberius
    May 6, 2020 at 23:37
  • 4
    $\begingroup$ All six rot/vib modes are such that they conserve pairwise distances. That and the fact that they all need to be orthogonal to the other vibrational modes might be enough to calculate them. I have a gut feeling that translation along and rotation around the principal axes of inertia are all that you need. Maybe Gram-Schmidt orthogonalizing these six from that initial guess? $\endgroup$ May 7, 2020 at 0:03
  • 3
    $\begingroup$ @FelipeS.S.Schneider Gram-Schmidt is probably the approach I will take assuming Gaussian makes it difficult to extract these other modes. $\endgroup$
    – Tyberius
    May 7, 2020 at 0:13

1 Answer 1


I've never done this myself, and there may be other approaches, but one possible detailed answer seems to be provided by the Gaussian webpage. For stability reasons, you can find this page via the Internet Archive (pdf).

In particular, you may want to jump to the sections "Determine the principal axes of inertia" and "Generate coordinates in the rotating and translating frame".

For convenience, let me copy the procedure here. In short, you want to:

  1. translate the center of mass to the origin (trivial)

  2. calculate the moments of inertia (the diagonal elements) and the products of inertia (off diagonal elements) of the moment of inertia tensor

  3. obtain the translational vectors by normalizing the corresponding coordinate axis with the factor $\sqrt{m_i}$

  4. obtain the (infinitesimal) rotational vectors by a slightly more convoluted formula:

\begin{align} D_{4,j,i} &= ((P_y)_i X_{j,3} - (P_z)_i X_{j,2})/\sqrt{m_i}\\ D_{5,j,i} &= ((P_z)_i X_{j,1} - (P_x)_i X_{j,3})/\sqrt{m_i}\\ D_{6,j,i} &= ((P_x)_i X_{j,2} - (P_y)_i X_{j,1})/\sqrt{m_i} \end{align}

where $j = x, y, z$; $i$ is over all atoms and $P$ is the dot product of $R$ (the coordinates of the atoms with respect to the center of mass) and the corresponding row of $X$, the matrix used to diagonalize the moment of inertia tensor $I$.

The next step is to normalize these vectors: the vector is normalized using the reciprocal square root of the scalar product.


You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .