User Tools

Site Tools


crawdad:programming:project2

Programming Project #2: Harmonic Vibrational Analysis

The purpose of this project is to extend your fundamental C-language programming techniques through a normal coordinate/harmonic vibrational frequency calculation. The theoretical background and a concise set of instructions for this project may be found here.

We thank Dr. Yukio Yamaguchi of the University of Georgia for the original version of this project.

Step 1: Read the Coordinate Data

The coordinate data are given in a format identical to that for Project #1. The test case for the remainder of this project is the water molecule, optimized at the SCF/DZP level of theory. You may download the coordinates (in bohr) from here.

Step 2: Read the Cartesian Hessian Data

The primary input data for the harmonic vibrational calculation is the Hessian matrix, which consists of second derivatives of the energy with respect to atomic positions:


F_{ij} = \frac{\partial^2 V}{\partial q_i \partial q_j},

The Hessian matrix (in units of Eh/a02) can be downloaded here for the H2O test case. The first integer in the file is the number of atoms (which you should compare to the corresponding value from the geometry file as a test of consistency), while the remaining values have the following format:


\begin{array}{ccc}
F_{x_1,x_1} & F_{x_1,y_1} & F_{x_1,z_1} \\
F_{x_1,x_2} & F_{x_1,y_2} & F_{x_1,z_2} \\
 & \\
\ldots  & \ldots & \dots \\
 & \\
F_{x_2,x_1} & F_{x_2,y_1} & F_{x_2,z_1} \\
 & \\
\ldots & \ldots & \ldots \\
\end{array}

Step 3: Mass-Weight the Hessian Matrix

Divide each element of the Hessian matrix by the product of square-roots of the masses of the atoms associated with the given coordinates:


F^M_{ij} = \frac{F_{ij}}{\sqrt{m_i m_j}}

where mi represents the mass of the atom corresponding to atom i. Use atomic mass units (amu) for the masses, just as for Project #1.

Step 4: Diagonalize the Mass-Weighted Hessian Matrix

Compute the eigenvalues of the mass-weighted Hessian:


\mathbf{F}^M \mathbf{L} = \mathbf{L} \Lambda

You should consider using the same “canned” diagonalization function you used in Project #1 to diagonalize the moment of inertia tensor.

Step 5: Compute the Harmonic Vibrational Frequencies

The vibrational frequencies are proportional to the square root of the eigenvalues of the mass-weighted Hessian:


\omega_i = {\rm constant} \times \sqrt{\lambda_i}.

The most common units to use for vibrational frequencies is cm-1.

Reference

E.B. Wilson, J.C. Decius, and P.C. Cross, Molecular Vibrations, McGraw-Hill, 1955.

Test Cases

crawdad/programming/project2.txt · Last modified: 2014/05/28 21:23 by crawdad