{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"%## Vibrational frequencies and normal modes\n",
"(sec:vib-analysis)=\n",
"# Vibrational analysis\n",
"\n",
"The following steps are carried out mostly by the geomeTRIC module {cite}`Wang2016`,\n",
"hence they are described in less detail.\n",
"For more details on the topic, the reader is referred to _Molecular Vibrations_\n",
"by Wilson, Decius and Cross {cite}`Wilson1980`.\n",
"\n",
"\n",
"## Cartesian and mass-weighted Hessian\n",
"\n",
"The starting point for the vibrational analysis of molecules\n",
"is the Hessian matrix in Cartesian coordinates, $\\mathbf{H}^{\\text{Cart}}$,\n",
"calculated either numerically or analytically as described above.\n",
"Generally, the elements of $\\mathbf{H}^{\\text{Cart}}$ are given by second derivatives of the energy $E$\n",
"with respect to nuclear displacement,\n",
"(eq:Hessian_matrix_elements)=\n",
"```{math}\n",
"%:label: eq:Hessian_matrix_elements\n",
" H_{ij}^{\\text{Cart}} = \\bigg( \\frac{\\mathrm{d}^2 E}{\\mathrm{d} \\xi_i \\mathrm{d} \\xi_j} \\bigg)_0 \\, .\n",
"```\n",
"Hence, $\\mathbf{H}^{\\text{Cart}}$ is a $3N \\times 3N$ matrix (where $N$ is the number of atoms),\n",
"and $\\xi_1, \\xi_2, \\ldots, \\xi_{3N}$ is used for the displacements\n",
"of the Cartesian coordiates, $\\Delta x_1, \\Delta y_1, \\Delta z_1, \\ldots, \\Delta z_N$.\n",
"The '$0$' subscript of the parentheses refers to the equilibrium geometry of the atoms at which the derivatives are taken,\n",
"and that the first derivatives vanish.\n",
"\n",
"As a first step, the Hessian is converted to _mass-weighted_ Cartesian coordinates (MWC),\n",
"$q_1 = \\sqrt{m_1} \\xi_1 = \\sqrt{m_1} \\Delta x_1$, $q_2 = \\sqrt{m_1} \\xi_2 = \\sqrt{m_1} \\Delta y_1$,\n",
"$\\ldots$, $q_{3N} = \\sqrt{m_N} \\xi_{3N} = \\sqrt{m_N} \\Delta z_{N}$, where $m_i$ is the mass of atom $i$,\n",
"such that $\\mathbf{H}^{\\text{MWC}}$ is given by\n",
"(eq:Hessian_mwc)=\n",
"```{math}\n",
"%:label: eq:Hessian_mwc\n",
" H_{ij}^{\\text{MWC}} = \\frac{H_{ij}^{\\text{Cart}}}{\\sqrt{m_i m_j}} = \\bigg( \\frac{\\mathrm{d}^2 E}{\\mathrm{d} q_i \\mathrm{d} q_j} \\bigg)_0 \\, .\n",
"```\n",
"Diagonalizing this Hessian gives $3N$ eigenvalues are the fundamental frequencies of the molecule,\n",
"which still include the translation and rotational modes. However, these should be close to zero.\n",
"\n",
"\n",
"## Translating and rotating frame\n",
"\n",
"In order to remove translational and rotational degrees of freedom,\n",
"one first determines the center of mass (COM) $\\mathbf{R}^{\\text{COM}}$ in the usual way,\n",
"```{math}\n",
"%:label: eq:center_of_mass\n",
" \\mathbf{R}^{\\text{COM}} = \\frac{\\sum_{K} m_{K} \\mathbf{R}_K}{\\sum_{K} \\mathbf{R}_K} \\, ,\n",
"```\n",
"where the sum runs over all atoms $K$, and the origin is then shifted to the COM,\n",
"$\\mathbf{R}_{K}^{\\text{COM}} = \\mathbf{R}_K - \\mathbf{R}^{\\text{COM}}$.\n",
"Subsequently, one determines the inertia tensor and diagonalizes it\n",
"to obtain principal moments and axes of inertia.\n",
"Next, one needs to find the transformation\n",
"from mass-weighted Cartesian coordinates to a set of $3N$ coordinates,\n",
"where the molecule's translation and rotation are separated out,\n",
"leaving $3N - 6$ (or $3N-5$ for linear molecules) vibrational modes.\n",
"\n",
"This is achieved by applying the so-called Eckart conditions {cite}`Eckart1934`.\n",
"While the three vectors of length $3N$ corresponding to translation are simply given by $\\sqrt{m_i}$\n",
"times the coordinate axis, the vectors corresponding to rotational motion of the atoms\n",
"are obtained from the coordinates of the atoms with respect to the COM\n",
"and the corresponding row of the matrix used to diagonalize the moment of inertia tensor.\n",
"In the next step, these vectors are normalized and a Gram--Schmidt orthogonalization\n",
"is carried out to create $N_\\text{vib} = 3N-6$ (or $3N-5$) remaining vectors,\n",
"which are orthogonal to the five or six translational and rotational vectors.\n",
"Thus, one obtains a transformation matrix $\\mathbf{D}$ which allows for the transformation\n",
"of the mass-weighted Cartesian coordinates $\\mathbf{q}$ to internal coordinates\n",
"$\\mathbf{S} = \\mathbf{Dq}$, where translation and rotation have been projected out.\n",
"%Thus, one obtains a basis in which translation and rotation\n",
"%is projected out of the (mass-weighted) Cartesian coordinates.\n",
"\n",
"\n",
"## Hessian in internal coordinates and harmonic frequencies\n",
"\n",
"Now the Hessian $\\mathbf{H}^\\text{MWC}$, which is still given in mass-weighted Cartesian coordinates,\n",
"is transformed the the internal coordinate system,\n",
"(eq:Hessian_to_internal)=\n",
"```{math}\n",
"%:label: eq:Hessian_to_internal\n",
" \\mathbf{H}^{\\text{Int}} = \\mathbf{D}^\\dagger \\mathbf{H}^\\text{MWC} \\mathbf{D} \\, ,\n",
"```\n",
"yielding a representation in $N_\\text{vib}$ internal coordinates from the full $3N$ Cartesian coordinates.\n",
"The Hessian in internal coordinates $\\mathbf{H}^{\\text{Int}}$ is successively diagonalized,\n",
"(eq:Hessian_internal_diagonalized)=\n",
"```{math}\n",
"%:label: eq:Hessian_internal_diagonalized\n",
" \\mathbf{L}^\\dagger \\mathbf{H}^{\\text{Int}} \\mathbf{L} = \\mathbf{\\Lambda} \\, ,\n",
"```\n",
"where $\\mathbf{\\Lambda}$ is the diagonal matrix of $N_{\\text{vib}}$ eigenvalues $\\lambda_i$\n",
"which are related to the harmonic vibrational frequencies $\\nu_i$\n",
"and $\\mathbf{L}$ is the transformation matrix composed of the eigenvectors.\n",
"\n",
"Finally, the eigenvalues $\\lambda_i = 4 \\pi^2 \\nu_i^2$ can be converted from frequencies $\\nu_i$\n",
"to wavenumbers $\\tilde{\\nu}_i$ in reciprocal centimeters by using the relationship\n",
"$\\nu_i = c \\tilde{\\nu}_i$, where $c$ is the speed of light.\n",
"The wavenumbers are thus obtained from\n",
"```{math}\n",
"%:label: eq:vibrations_wavenumbers\n",
" \\tilde{\\nu}_i = \\sqrt{\\frac{\\lambda_i}{4\\pi^2 c^2}} \\, ,\n",
"```\n",
"and successively appropriate conversion factors are applied to obtain the wavenumbers in inverse centimeters (cm$^{-\\text{1}}$).\n",
"\n",
"\n",
"(sec:cartesian_displacements_red_mass)=\n",
"## Cartesian displacements, reduced masses, and force constants\n",
"\n",
"The Cartesian normal modes $\\mathbf{l}^{\\text{Cart}}$ are obtained by combining [this](eq:Hessian_to_internal)\n",
"and [this](eq:Hessian_internal_diagonalized) equation together with a diagonal matrix $\\mathbf{M}$\n",
"defined by $M_{ii} = \\frac{1}{\\sqrt{m_i}}$ to undo the mass-weighting,\n",
"$\\mathbf{l}^{\\text{Cart}} = \\mathbf{M D L}$, with the individual elements of this matrix being given by\n",
"```{math}\n",
" l_{ij}^{\\text{Cart}} = \\sum_{k=1}^{3N} \\frac{D_{ik} L_{kj}}{\\sqrt{m_i}} \\, .\n",
"```\n",
"The (normalized) column vectors of $\\mathbf{l}^{\\text{Cart}}$ correspond to the normal-mode displacements in Cartesian coordinates,\n",
"which are used together with property gradients for the calculation of spectral intensities as described [here](sec:property-gradients).\n",
"\n",
"From the Cartesian normal modes $\\mathbf{l}^{\\text{Cart}}$, the reduced mass $\\mu_i$ of vibration $i$\n",
"can be calculated as\n",
"```{math}\n",
"%:label: eq:reduced_masses\n",
" \\mu_i = \\frac{1}{\\sum_{k=1}^{3N} \\big( l_{ki}^{\\text{Cart}} \\big)^2} \\, ,\n",
"```\n",
"and from those the corresponding force constants $k_i$ are calculated as\n",
"```{math}\n",
"%:label: eq:force_constants\n",
" k_i = 4 \\pi^2 \\tilde{\\nu}_i^2 \\mu_i \\, ,\n",
"```\n",
"since $\\tilde{\\nu}_i = \\frac{1}{2 \\pi} \\sqrt{\\frac{k_i}{\\mu_i}}$.\n",
"The force constants are then converted from atomic units to milli-dyne per ångström.\n",
"\n",
"The spectral intensities are calculated from the [dipole moment gradient](dipole_mom_gradient:label) (IR spectroscopy), or the [polarizability gradient](polarizability_gradient:label) (Raman spectroscopy)."
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.10"
}
},
"nbformat": 4,
"nbformat_minor": 4
}