Skip to content

Exercise 9

Part of the course Computational Chemistry.

Hessian information helps understand both vibrational motions as well as transition state behaviour. Here we obtain the normal modes of a molecule manually.

Note: these settings are not reliable and are only used for demonstration purposes. Please do not use them in actual research unless you know what you are doing.

Task 9.1: Get up

Write a function get_rhf_hessian(mol) which runs a restricted Hartree-Fock calculation on a molecule built using pyscf.gto using the cc-pVDZ basis set. Hint: dir(calc) shows all methods and properties of a given python object, (here: a calculator) and might give you some ideas. Run the function for either carbon monoxide or the nitrogen dimer and document in which coordinate order the Hessian is returned.

Task 9.2: Good vibrations

For normal modes, the mass-weighted Hessian \(\mathbf{F}\) needs to be obtained from the Hessian \(\mathbf{H}\) using the atomic masses \(M_i\):

\[\mathbf{F}_{ij} = \mathbf{H}_{ij}\sqrt{M_iM_j} \]

The eigenvalues of \(\mathbf{F}\) are the squared vibrational frequencies while the eigenvectors are the normal modes, i.e. the motion belonging to the vibration in question. Write a function get_normal_modes(mol) which returns frequencies and eigenvectors. What do you notice if you apply this to carbon monoxide? How many vibrational modes do you expect?

Task 9.3: Like to move it

Apply get_normal_modes to water and convert the frequencies from atomic units to wavenumbers. Can you interpret the corresponding motion of the atoms? What features do you expect for the experimental vibrational spectrum?

You may use this geometry:

O 0.0 0.0 0.0
H -0.77 -0.573 0.0
H 0.775 -0.566 0.0