Vibrational Modes
Please Log In for full access to the web site.
Note that this link will take you to an external site (https://shimmer.mit.edu) to authenticate, and then you will be redirected back to this page.
This note puts everything we have learned about group representations together to solve a classic physics + group theory task: determining the symmetries of vibrational modes of molecules. Vibrational mode analysis is used extensively in spectroscopy (IR and Raman) to investigate and understand physical systems. We then extend these ideas to symmetry-breaking distortions — how a system can transition from a high-symmetry phase to a lower-symmetry one, and how group theory predicts the allowed distortion pathways.
Try the code examples in the companion notebook: Open Notes Companion in Colab
1) Recap
From the previous note on decomposition and products:
- The decomposition formula a_j = \frac{1}{h} \sum_k N_k \left[\chi^{(\Gamma_j)}(C_k)\right]^* \chi(C_k) lets us determine the irrep content of any representation from its character.
- The tensor product of two representations of the same group \Gamma_i \otimes \Gamma_j is generally reducible and can be decomposed back into irreps (the Clebsch–Gordan problem).
- Direct products of commuting groups yield representations whose irreps factor into irreps of each subgroup.
Today's goal: Use all of these tools — characters, decomposition, tensor products — to analyze a real physical problem. We will determine the vibrational modes of a molecule, classify which are detectable by different types of spectroscopy, and then study how symmetry-breaking distortions connect high-symmetry and low-symmetry phases.
2) Why Use Symmetry?
While you need physics (e.g. quantum mechanics) to calculate the energies of vibrational modes of atomic systems — which to this day can still be computationally expensive for certain systems — you only need symmetry to identify:
- How many vibrational modes there are
- How they are organized (which modes will have equivalent energy)
- Which modes are detectable by which types of spectroscopy (e.g. IR and Raman)
3) What Is a Vibrational Mode?
A vibrational mode is an internal degree of freedom of a physical object.
Examples:
- Bridges and buildings: Certain resonant frequencies can cause catastrophic distortion.
- Crystals: Collective vibrations of atoms in a lattice are called phonons. These come in two flavors:
- Acoustic modes: Neighboring atoms move in unison — these determine the speed of sound in a material.
- Optical modes: Neighboring atoms move against each other — these are detectable by spectroscopy.
- Molecules: Internal vibrations of bonded atoms. These are analogous to optical modes in crystals — all vibrational modes of an isolated molecule involve atoms moving relative to each other. This is our focus.
Note: The acoustic/optical distinction arises in crystals because the lattice has translational symmetry, giving rise to phonon bands parameterized by wavevector \mathbf{k}. Acoustic modes have \omega \to 0 as \mathbf{k} \to 0 (all atoms moving together), while optical modes have \omega \neq 0 at \mathbf{k} = 0 (atoms within a unit cell moving against each other). Analyzing crystal phonons requires group representations of the translation group T(n), which is infinite and non-compact (irreps labeled by continuous \mathbf{k}). We won't go into these details here and will stick with finite, molecule-like objects, where all vibrational modes are internal.
3.1) Spectroscopy: IR and Raman
Two types of spectroscopy are relevant to vibrational mode analysis:
Infrared (IR) spectroscopy: Detects changes in dipole moment/polarization due to incoming light.
- If starting from the ground state (A_1), we can detect vibrational modes that transform like 3D vectors (x, y, z).
Raman spectroscopy: Detects changes in polarizability, which is a symmetric rank-2 matrix:
- If starting from the ground state (A_1), the mode transforms like d-orbitals: (xy, yz, zx, 2z^2 - x^2 - y^2, x^2 - y^2).
Warning: This is a gross oversimplification of IR and Raman spectroscopy. Many of the measured modes are interactions of probe and excited states (rather than the A_1 ground state). The actual selection rule is:
which must contain the trivial representation A_1 in order for the transition to be measurable.
4) Masses and Springs
Recall from introductory mechanics (8.01) that the energy of two masses connected by a spring has two parts: the kinetic energy, which depends on the velocity (the time derivative of position), and the potential energy, which depends on how much the spring is stretched from its rest length:
where m_1, m_2 are the masses, \dot{x}_1, \dot{x}_2 are their velocities, k is the spring constant, and d_0 is the equilibrium (rest) length of the spring.
For a more general system of N masses connected by springs, the energy is:
where \mathbf{m} = [m_0, m_1, \ldots, m_N] are the masses, \mathbf{x} = [x_0, x_1, \ldots, x_N] are the positions, and the two terms are the kinetic and potential energy, respectively. The potential V(\mathbf{x}) depends on which springs connect which masses and their respective spring constants.
4.1) Harmonic Approximation
For small displacements of \mathbf{x} around equilibrium \mathbf{x}_0 (a local energy minimum), we can Taylor expand the potential:
- The constant V(\mathbf{x}_0) is an overall energy shift we don't care about.
- The linear term vanishes because forces are zero at equilibrium.
- Keeping only the quadratic (harmonic) term and writing displacements relative to equilibrium as \boldsymbol{\xi} = \mathbf{x} - \mathbf{x}_0:
In matrix form:
where K is the stiffness matrix (Hessian of the potential) and M is the mass matrix. In 3D, these are 3N \times 3N matrices. We index them with a composite label (a, i) where a = 1, \ldots, N labels the atom and i \in \{x, y, z\} labels the spatial component:
That is, M is diagonal with each atomic mass m_a repeated three times (once per spatial direction).
4.2) The Secular Equation
Setting up the equations of motion by taking the time derivative (energy conservation, \frac{\partial}{\partial t} H = 0):
Important: The stiffness matrix K is not diagonal in general! The Hessian K_{ij} = \frac{\partial^2 V}{\partial \xi_i \partial \xi_j} has off-diagonal entries whenever displacing atom i creates a force on atom j — which is the case for any bonded or interacting pair. In general, K is a full-rank 3N \times 3N matrix.
Now, we look for oscillatory solutions by assuming \boldsymbol{\xi}(t) takes the form \boldsymbol{\xi}(t) = \mathbf{a} \, e^{i\omega t}, where \mathbf{a} is a fixed displacement pattern and \omega is its oscillation frequency. Then:
Substituting into the equation of motion:
Dividing through by e^{i\omega t}, we get the secular equation:
Since M is diagonal and positive-definite (all masses are positive), we can multiply both sides by M^{-1} to get a standard eigenvalue problem:
Because M is diagonal, multiplying by M^{-1} simply rescales the rows of K:
Each row (a, i) of K is divided by the mass of atom a. This does not make K diagonal; it merely rescales its entries. The secular equation therefore defines a generalized eigenvalue problem K \mathbf{a} = \omega^2 M \mathbf{a} rather than an ordinary one.
To convert this into a symmetric eigenproblem, we introduce mass-weighted coordinates q = M^{1/2}\mathbf{a}. In these coordinates the equation becomes
and it is this mass-weighted Hessian that is diagonalized to obtain the normal modes.
This is the key result: the eigenvalues \omega^2 give the squared vibrational frequencies, and the corresponding eigenvectors determine the displacement patterns (mode shapes). The secular equation is only satisfied for specific (\omega^2, \mathbf{a}) pairs — these are the eigenmodes of the system. Each eigenmode oscillates independently at its own frequency.
Note: In the examples for today, we assume all masses are equal. In that special case M = m I, so M^{-1}K = \frac{1}{m}K, and the normal modes are simply the eigenvectors of K.
Key observations:
- M^{-1}K is a 3N \times 3N matrix. Its symmetry is determined by the symmetry of the physical system.
- The eigenvectors \mathbf{a} (displacement patterns) live in a vector space of dimension N_{\text{atoms}} \times 3.
- This vector space transforms under the group representation: \Gamma^{\text{a.s.}} \otimes \Gamma^{\text{vec}}, where \Gamma^{\text{a.s.}} describes how atomic sites swap under the group, and \Gamma^{\text{vec}} describes how the 3D displacement vector transforms under the group.
4.3) Finding the Vibrational Modes
The masses-and-springs Hamiltonian above gives us the physical motivation: solving the secular equation yields the vibrational frequencies and mode shapes. But that requires knowing the stiffness matrix K — i.e., the actual physics of the bonds.
The power of representation theory: What we do next is entirely independent of the energetics or dynamics. We are simply splitting the vector space of displacements into orthogonal subspaces that are a consequence of the self-symmetry of the molecule alone. We don't need to know the spring constants, the masses, or even solve any physical equations — just the geometry and symmetry group.
Yet this purely mathematical decomposition gives us concrete physical insights: how many vibrational modes exist, which modes are degenerate (forced to have the same energy by symmetry), and which modes are observable by IR or Raman spectroscopy. All of this comes from representation theory, before we ever solve the real physical system.
5) Setting Up the Displacement Space
A general displacement of n atoms from their equilibrium positions is a 3n-dimensional vector \boldsymbol{\xi} — each atom can be displaced in any direction relative to where it sits at rest. The equilibrium positions are determined by the minimum of the potential energy (the geometry that balances all interatomic forces), and the displacements \boldsymbol{\xi} describe small deviations from that configuration.
In general, arbitrary displacements of atoms in space transform under the full 3D Euclidean group E(3) = T(3) \rtimes O(3) — translations, rotations, and reflections. We reduce this in two steps. First, we mod out translations by working in the center-of-mass frame. Since T(3) is a normal subgroup of E(3), this is a clean quotient: E(3) / T(3) \cong O(3).
Second, a given equilibrium geometry is not invariant under all of O(3), but only under a finite subgroup that leaves the configuration fixed. More precisely, the symmetry group is the subgroup of O(3) together with permutations of identical nuclei that maps the molecule onto itself. Equivalently, it is the stabilizer of the configuration under the natural action of O(3) \ltimes S_N, restricted to permutations exchanging indistinguishable atoms. This subgroup, the finite point group G, captures the residual symmetry of the equilibrium geometry. The continuous rotational symmetry is thus broken down to this discrete stabilizer. It is this G that organizes the displacement space into irreducible subspaces.
Our goal is to understand how this symmetry organizes the space of displacements. Because we are in the harmonic approximation (which led us to the secular equation), only the symmetry of the equilibrium geometry matters — the analysis depends on the geometry and symmetry group, not on the magnitude of the displacements or the details of the potential.
This displacement space combines two kinds of information:
- How atoms swap under symmetry operations of the molecule. We call this the atomic site representation \Gamma^{\text{a.s.}} (following Dresselhaus). It consists of n \times n permutation matrices: under each symmetry operation, identical atoms may exchange positions.
- How displacement vectors transform under the same operations. This is the vector representation \Gamma^{\text{vec}} — 3 \times 3 matrices describing how (x, y, z) components rotate and reflect.
Important: We must orient the representation matrices to align with the symmetries of the molecule (or other system) we are analyzing. The rotation axes and mirror planes of the abstract group must match the actual geometry — the same abstract group (e.g. C_{2v}) can be represented by different 3 \times 3 matrices depending on how the molecule is oriented in space.
The full displacement space is the tensor product of these two representations: \Gamma^{\text{a.s.}} \otimes \Gamma^{\text{vec}}. For n atoms in 3D, this is a 3n-dimensional space. We will construct both of these representations explicitly in the steps below.
Not all of these 3n degrees of freedom are internal vibrations — some correspond to rigid-body translations (3 DOF) and rotations (3 DOF, or 2 for linear molecules). The vibrational modes are what remain after removing these:
(For linear molecules: 2 rotational DOF, giving 3n - 5 vibrational modes.)
Note that this equation is a statement about representations, not just dimensions. Each \Gamma on both sides decomposes as a direct sum of irreps, and the "subtraction" means removing entire irreducible representations from that direct sum. For example, if \Gamma^{\text{trans}} = A_1 + B_1 + B_2, we subtract one copy of A_1, one of B_1, and one of B_2 from the irrep content of \Gamma^{\text{a.s.}} \otimes \Gamma^{\text{vec}}. The result \Gamma^{\text{vib}} tells us exactly which irreps — and how many copies of each — make up the vibrational subspace.
5.1) \Gamma^{\text{a.s.}} and \Gamma^{\text{vec}} for Water
Let's make this concrete with water (\text{H}_2\text{O}), which has symmetry group C_{2v} (4 operations) and 3 atoms — each with a 3D displacement vector from its equilibrium position, giving a 9-dimensional displacement space.
The vector representation \Gamma^{\text{vec}} — 3 \times 3 matrices describing how displacement vectors (x, y, z) transform under C_{2v}. The C_2 axis is along z, and the mirror planes are xz and yz:
The atomic site (permutation) representation \Gamma^{\text{a.s.}} — 3 \times 3 matrices describing which atoms swap. The oxygen always stays fixed; the two hydrogens either stay or swap:
Notice that \Gamma^{\text{a.s.}} is an unfaithful representation — multiple group elements map to the same matrix (e.g. E and \sigma_{xz} both give the identity). This is perfectly valid as a representation; it just means the molecule is symmetric enough that some operations permute the atoms in the same way. Compare with \Gamma^{\text{vec}}, which is faithful: every group element produces a distinct 3 \times 3 matrix.
The interactive graphic below shows how the vector representation acts on the coordinates of the molecule under each C_{2v} operation, and from that we construct the permutation matrix by seeing which atoms are now mapped to the coordinates of the pre-transformed molecule:
5.2) The Tensor Product: How the Group Acts on Displacements
How does the group act on the full 9-dimensional displacement vector? It depends not only on how displacement vectors transform (given by \Gamma^{\text{vec}}) but also on which atom gets mapped to which (given by \Gamma^{\text{a.s.}}). The tensor product \Gamma^{\text{a.s.}} \otimes \Gamma^{\text{vec}} combines both pieces of information into 9 \times 9 matrices acting on the full displacement space:
5.3) Displacement Vector Examples
To see the 9 \times 9 matrices in action, consider the displacement from equilibrium \boldsymbol{\xi} = (-1, 0, 0, 1, 0, 0, 0, 0, 1) — meaning O is displaced in -x, H_1 in +x, and H_2 in +z relative to their equilibrium positions. The graphic below shows how each symmetry operation maps \boldsymbol{\xi} to a new displacement \boldsymbol{\xi}' = \Gamma^{\text{a.s.} \otimes \text{vec}}(g) \, \boldsymbol{\xi}:
Beyond displacements. The tensor product construction \Gamma^{\text{a.s.}} \otimes \Gamma^{\text{vec}} is a special case of a much broader idea: any physical quantity that lives on atoms and transforms under symmetry can be analyzed the same way. For example, a set of atomic orbitals \{p_x, p_y, p_z\} on each atom transforms under \Gamma^{\text{a.s.}} \otimes \Gamma^{(\ell=1)} — the same permutation representation tensored with a different vector-space representation. Higher-rank tensors (like 3 \times 3 stress or polarizability matrices) involve tensor products of \Gamma^{\text{vec}} with itself. We will return to this perspective when we study Lie groups and continuous symmetries, where the representation theory of SO(3) classifies how tensors of any rank transform under rotations.
6) Preview: The Vibrational Modes
The goal of the next two sections is to decompose the 3n-dimensional displacement space into orthogonal subspaces for translation, rotation, and vibration. We can represent each of these subspaces by a projector: P^{\text{trans}} projects onto the subspace of pure translations, P^{\text{rot}} onto pure rotations, and P^{\text{vib}} onto the remaining internal vibrations. An arbitrary displacement lives in the full 3n-dimensional space, spanned by the identity I_{3n}. The decomposition
splits any displacement into its translational, rotational, and vibrational components. We will discuss how to construct these projectors in the sections below.
Example: Water. For water (n = 3), removing translation and rotation from the 9D space leaves 3 vibrational modes: two A_1 modes (symmetric stretch and bend) and one B_1 mode (asymmetric stretch). The interactive graphic below shows this decomposition:
We will discuss how to derive these vibrational modes step-by-step in the sections below. But first — once you have the displacement patterns, how can you verify which irrep each mode transforms as?
6.1) Identifying Irreps from Displacement Patterns
Given a vibrational mode's displacement pattern, we can determine which irrep it transforms as by applying each symmetry operation and checking whether the pattern is preserved or negated. For a 1D irrep, each operation either leaves the pattern unchanged (character = +1) or reverses it (character = -1). The resulting list of characters uniquely identifies the irrep via the character table.
For reference, the C_{2v} character table:
| C_{2v} | E | C_2(z) | \sigma_v(xz) | \sigma_v(yz) |
|---|---|---|---|---|
| A_1 | +1 | +1 | +1 | +1 |
| A_2 | +1 | +1 | −1 | −1 |
| B_1 | +1 | −1 | +1 | −1 |
| B_2 | +1 | −1 | −1 | +1 |
\nu_1: Symmetric stretch (A_1). Both H atoms stretch radially in/out in phase — identical displacements on the two hydrogens.
- E: unchanged → +1
- C_2(z): swaps H_1 \leftrightarrow H_2, but since their displacements are identical the pattern is unchanged → +1
- \sigma_v(xz): no atom swap, displacements lie in the xz plane → +1
- \sigma_v(yz): swaps H_1 \leftrightarrow H_2, identical displacements → +1
- Characters: (1,\; 1,\; 1,\; 1) = \mathbf{A_1} ✓
\nu_2: Symmetric bend (A_1). The H–O–H angle opens and closes — O moves in +z, both H atoms move in -z (and slightly inward/outward). By the same reasoning as the symmetric stretch, every operation preserves the pattern.
- Characters: (1,\; 1,\; 1,\; 1) = \mathbf{A_1} ✓
\nu_3: Asymmetric stretch (B_1). One H moves toward O while the other moves away — the displacements on the two H atoms are equal and opposite.
- E: unchanged → +1
- C_2(z): swaps H_1 \leftrightarrow H_2 and rotates displacement vectors (x \to -x) — the pattern is negated → -1
- \sigma_v(xz): no atom swap, reflects y \to -y (no y-component) → +1
- \sigma_v(yz): swaps H_1 \leftrightarrow H_2 and reflects x \to -x — the pattern is negated → -1
- Characters: (1,\; -1,\; 1,\; -1) = \mathbf{B_1} ✓
Connection to symmetry breaking. A displacement pattern that transforms as a nontrivial irrep (like B_1) breaks exactly those symmetry operations whose character is -1. If the asymmetric stretch \nu_3 were to freeze as a permanent distortion, the resulting structure would only retain the operations \{E,\; \sigma_v(xz)\} — the subgroup where B_1 has character +1 for all operations, meaning it restricts to the trivial irrep (A_1) of the surviving subgroup. This is the fundamental idea behind symmetry-breaking distortions and order parameters: a distortion transforming as irrep \Gamma breaks the symmetries with \chi^\Gamma(g) \neq +1, and the surviving symmetries form a subgroup of the original group. We will return to this topic later in the course.
6.2) Two Approaches
We present two complementary methods for decomposing the displacement space into vibrational modes:
By hand (character tables): Using the decomposition formula and character tables, we can determine the irrep content of \Gamma^{\text{vib}} — how many modes of each symmetry type exist, which are degenerate, and which are IR/Raman active. This requires only characters (traces), not full matrices. However, it does not give us the actual displacement vectors of the modes.
Numerically (projectors): By explicitly constructing projectors P^{\text{trans}}, P^{\text{rot}}, and P^{\text{vib}} = I - P^{\text{trans}} - P^{\text{rot}}, we can directly compute the vibrational subspace and then decompose the group action on it into irreps. This gives us everything the character-table method does, plus the actual eigenvectors (displacement patterns) needed to draw and animate the vibrational modes.
We start with the character-table approach to build intuition, then develop the projector approach in the next section.
7) By Hand: The Character Table Approach
7.1) Step 1: Identify the Symmetry Group and Vector Representation
The first step is to identify the symmetry group G of the molecule and obtain the vector representation \Gamma^{\text{vec}}(g) — the 3 \times 3 matrices describing how each symmetry operation acts on displacement vectors. These matrices must match the orientation of the molecule: the rotation axes and mirror planes of the abstract group must align with the actual geometry.
In practice, packages like spglib (used inside pymatgen) automate this step for both molecules and crystals. The algorithm is essentially guess and check: given atom positions, the code tests candidate symmetry operations (rotations, reflections, inversions) and keeps those that map the structure onto itself within a numerical tolerance. The tolerance is necessary because real-world coordinates (from experiment or optimization) are never exactly symmetric. The output is the set of 3 \times 3 matrices \Gamma^{\text{vec}}(g) oriented to match the input geometry. See the companion notebook for an example using pymatgen's PointGroupAnalyzer.
Example: Water (\text{H}_2\text{O})
From the vector representation matrices shown in the water example above, the characters (traces) are:
| C_{2v} | E | C_2(z) | \sigma_v(xz) | \sigma_v(yz) |
|---|---|---|---|---|
| \chi^{\text{vec}} | 3 | −1 | 1 | 1 |
Decomposing: \Gamma^{\text{vec}} = A_1 + B_1 + B_2
7.2) Step 2: Determine the Permutation Representation
Given the vertex positions and the vector representation, we can determine the permutation representation \Gamma^{\text{a.s.}}: apply each \Gamma^{\text{vec}}(g) to the atom positions and see which atom maps to which. The result is a set of permutation matrices describing which atoms swap under each operation.
Note that \Gamma^{\text{a.s.}} is an unfaithful representation of the group — multiple elements can have the same matrix (as we saw for water above).
From the permutation matrices shown in the water example above, the characters (traces) are:
| C_{2v} | E | C_2(z) | \sigma_v(xz) | \sigma_v(yz) |
|---|---|---|---|---|
| \chi^{\text{a.s.}} | 3 | 1 | 3 | 1 |
Decomposing using the character table for C_{2v}:
| C_{2v} | E | C_2(z) | \sigma_v(xz) | \sigma_v(yz) |
|---|---|---|---|---|
| A_1 | +1 | +1 | +1 | +1 |
| A_2 | +1 | +1 | −1 | −1 |
| B_1 | +1 | −1 | +1 | −1 |
| B_2 | +1 | −1 | −1 | +1 |
7.3) Step 3: Compute the Full Displacement Representation
The tensor product of characters is the product of the individual characters:
| C_{2v} | E | C_2(z) | \sigma_v(xz) | \sigma_v(yz) |
|---|---|---|---|---|
| \chi^{\text{a.s.}} | 3 | 1 | 3 | 1 |
| \chi^{\text{vec}} | 3 | −1 | 1 | 1 |
| \chi^{\text{a.s.} \otimes \text{vec}} | 9 | −1 | 3 | 1 |
Alternatively, using the tensor product decomposition table for C_{2v} (where all irreps are 1D, so the table is just element-wise multiplication of characters):
| \otimes | A_1 | A_2 | B_1 | B_2 |
|---|---|---|---|---|
| A_1 | A_1 | A_2 | B_1 | B_2 |
| A_2 | A_2 | A_1 | B_2 | B_1 |
| B_1 | B_1 | B_2 | A_1 | A_2 |
| B_2 | B_2 | B_1 | A_2 | A_1 |
7.4) Step 4: Subtract Translation and Rotation
We need to identify \Gamma^{\text{trans}} and \Gamma^{\text{rot}}. These can be read directly from the character table, which lists which irreps correspond to linear functions (x, y, z) (translation) and rotations (R_x, R_y, R_z):
| C_{2v} | E | C_2(z) | \sigma_v(xz) | \sigma_v(yz) | Linear, rotations | Quadratic |
|---|---|---|---|---|---|---|
| A_1 | +1 | +1 | +1 | +1 | z | x^2, y^2, z^2 |
| A_2 | +1 | +1 | −1 | −1 | R_z | xy |
| B_1 | +1 | −1 | +1 | −1 | x, R_y | xz |
| B_2 | +1 | −1 | −1 | +1 | y, R_x | yz |
Coordinate conventions. The "Linear, rotations" and "Quadratic" columns of character tables assume a standard coordinate system: the highest-order symmetry axis is aligned along z, and the x- and y-axes are chosen to coincide with other symmetry elements when possible (e.g., mirror planes). For C_{2v}, the convention is C_2 \parallel z, with \sigma_v(xz) and \sigma_v(yz) as the two mirror planes. The assignment of which functions belong to which irreps depends on this choice — rotating your coordinate system would shuffle the assignments among irreps.
From this table:
- \Gamma^{\text{trans}} = A_1 + B_1 + B_2 (the irreps for z, x, y)
- \Gamma^{\text{rot}} = A_2 + B_1 + B_2 (the irreps for R_z, R_y, R_x)
Subtracting:
Water has 3 vibrational modes: two that transform as A_1 (symmetric stretch and symmetric bend) and one that transforms as B_1 (asymmetric stretch).
All three modes are both IR active and Raman active, since A_1 and B_1 both appear among the linear functions (IR) and the quadratic functions (Raman) in the character table.
Schur's lemma and the two A_1 modes. We found two modes that both transform as A_1 — the symmetric stretch and the symmetric bend. By Schur's lemma, any operator that commutes with the group action (including the Hamiltonian K/M) can mix modes within the same irrep. This means symmetry alone cannot tell us that one mode is a "stretch" and the other is a "bend" — it only tells us there are two modes of A_1 symmetry.
The actual mode shapes (and their frequencies) depend on the energetics: stretching a bond costs a different amount of energy than bending a bond angle, and it is the Hamiltonian that separates these two A_1 modes into distinct eigenvectors with distinct frequencies. Symmetry guarantees they exist and that they don't mix with the B_1 mode, but the physics determines how they split from each other.
8) The Numerical Approach: Projectors
The character-table method above gives us the irrep content of the vibrational modes, but not the actual displacement vectors. To get the full mode shapes — and to handle larger, more complex molecules computationally — we take a different approach based on projectors.
The key idea: rather than subtracting irrep multiplicities (a bookkeeping operation on characters), we directly project out the translational and rotational degrees of freedom from the full 3n-dimensional displacement space, leaving exactly the vibrational subspace.
8.1) Recap: Projectors from Basis Vectors
Recall from the linear algebra note that given an orthonormal set of vectors \{\mathbf{v}_1, \ldots, \mathbf{v}_k\} spanning a subspace V, the projector onto V is:
This is a rank-k matrix satisfying P_V^2 = P_V (idempotent). Applied to any vector \mathbf{u}, it extracts the component that lies in V:
So if we can find orthonormal bases for the translation and rotation subspaces, we can build projectors that cleanly separate out these degrees of freedom.
8.2) The Displacement Space
For n atoms in 3D, the displacement space is \mathbb{R}^{3n}: each atom has 3 degrees of freedom. We order the components as:
The projector for the entire displacement space is simply I_{3n}, the 3n \times 3n identity matrix — every displacement is allowed. Our goal is to decompose this space:
8.3) Example Molecule: The Tetrahedron
For the projector construction, we use a regular tetrahedron with 4 identical atoms. Its symmetry group is T_d (24 elements, 5 irreps), making it rich enough to illustrate all the key ideas — unlike water, the tetrahedron is a 3D molecule, so all three rotational degrees of freedom are nontrivial (none of the rotation displacement vectors vanish).
A regular tetrahedron can be built by placing atoms at alternating corners of a cube:
| Atom | x | y | z |
|---|---|---|---|
| 1 | -1 | -1 | +1 |
| 2 | -1 | +1 | -1 |
| 3 | +1 | -1 | -1 |
| 4 | +1 | +1 | +1 |
These coordinates are already centered at the origin (\sum_i \mathbf{r}_i = \mathbf{0}), which is required for the translation and rotation projectors to be orthogonal. All four inter-atom distances equal 2\sqrt{2}, confirming it is a regular tetrahedron.
Other Platonic solid vertices from the cube. There is a similar trick for the octahedron: its 6 vertices sit at the face centers of the cube, i.e. (\pm 1, 0, 0), (0, \pm 1, 0), (0, 0, \pm 1). More generally, the octahedron is the dual of the cube — its vertices are at the face centers of the cube, and vice versa.
With 4 atoms in 3D, the displacement space has dimension 3 \times 4 = 12. We expect 12 - 3 - 3 = 6 vibrational modes.
8.4) Constructing the Translation Projector
A pure translation moves all atoms by the same displacement. A uniform displacement along \hat{x} corresponds to the 3n-vector:
and similarly \mathbf{t}_y and \mathbf{t}_z with the 1 in the y- or z-slot. The 1/\sqrt{n} factor normalizes each vector. These three vectors are automatically orthonormal: \mathbf{t}_\alpha \cdot \mathbf{t}_\beta = \delta_{\alpha\beta}.
The translation projector is their outer-product sum:
This is a 3n \times 3n matrix of rank 3 (one per spatial dimension). Written in blocks of 3 \times 3 submatrices (one block per pair of atoms), every block equals \frac{1}{n} I_3 — reflecting the fact that a translation affects all atoms equally and identically.
The interactive graphic below walks through this construction step by step for a tetrahedron (4 atoms, 12D displacement space) — building up from a single displacement to the full translation projector:
8.5) Constructing the Rotation Projector
An infinitesimal rotation about axis \hat{\mathbf{a}} displaces atom i (at position \mathbf{r}_i relative to the center of mass) by the cross product:
This is the key formula: the cross product of the rotation axis with the atom's position vector gives the direction and magnitude of displacement under an infinitesimal rotation.
For each of the three coordinate axes \hat{\mathbf{e}}_m (m \in \{x, y, z\}), we compute the cross product with every atom position to get a 3n-dimensional displacement vector:
In index notation, the displacement of atom n along direction k due to rotation about axis m is:
where \varepsilon_{ijk} is the Levi-Civita symbol and a_{mj} = \delta_{mj} for the coordinate axes. This array d_{mnk} has shape (3, n, 3) — three axes, n atoms, three spatial components. Flattening the last two indices gives a (3, 3n) matrix: three candidate rotation basis vectors, each of length 3n.
The Levi-Civita symbol as Clebsch–Gordan coefficients. The \varepsilon_{ijk} appearing here are precisely the Clebsch–Gordan coefficients for coupling \text{vector} \otimes \text{vector} \to \text{pseudovector}. The cross product takes two vectors (the rotation axis \hat{\mathbf{a}} and the position \mathbf{r}) and produces a pseudovector — an object that transforms like a vector under proper rotations but differently under improper operations (mirrors and inversion).
To see why the result is a pseudovector, consider inversion: \hat{x} \times \hat{y} = \hat{z}, but (-\hat{x}) \times (-\hat{y}) = \hat{z} as well — the \hat{z} did not flip, even though both inputs did. Under inversion, a true vector \mathbf{v} \to -\mathbf{v}, but a pseudovector \mathbf{p} \to +\mathbf{p}.
This is why the character tables list R_x, R_y, R_z (rotations) separately from x, y, z (translations): they are pseudovectors and transform according to different irreps under groups that contain improper operations (mirrors, inversion). Under pure rotation groups like C_n and D_n (no mirrors), vectors and pseudovectors transform identically, but under groups like C_{nv}, D_{nh}, O_h, etc., they split into distinct irreps.
Unlike the translation vectors, these rotation vectors are generally not orthogonal to each other (their overlap depends on the molecular geometry). We apply Gram–Schmidt orthonormalization to obtain an orthonormal rotation basis \{\hat{\mathbf{d}}_1, \ldots, \hat{\mathbf{d}}_{d_{\text{rot}}}\}, discarding any vectors that vanish.
Linear molecules have only 2 rotational degrees of freedom (rotation about the molecular axis doesn't change anything), so one of the \mathbf{d}_m vectors will be zero and Gram–Schmidt automatically discards it.
The rotation projector is:
where d_{\text{rot}} = 3 for nonlinear molecules and d_{\text{rot}} = 2 for linear molecules.
Centering requirement: For P^{\text{trans}} and P^{\text{rot}} to project onto orthogonal subspaces (i.e., P^{\text{trans}} P^{\text{rot}} = 0), the atom positions must be centered at the origin: \sum_i \mathbf{r}_i = \mathbf{0}. This is because:
which vanishes only when the positions sum to zero. Always center your molecule before computing projectors!
The interactive graphic below steps through the rotation projector construction for the tetrahedron, starting from the Levi-Civita tensor:
8.6) The Vibration Projector
With orthogonal translation and rotation projectors in hand, the vibration projector is simply the complement:
This projector has rank 3n - 3 - d_{\text{rot}}, which equals the number of vibrational modes:
- Nonlinear molecules/shapes: 3n - 6 vibrational modes (e.g., tetrahedron: 3 \times 4 - 6 = 6; water: 3 \times 3 - 6 = 3)
- Linear molecules: 3n - 5 vibrational modes
A note on notation. Technically, the projector formula involves the conjugate of the projector: P^{\text{vib}} = (P^{\text{vib}})^\dagger. Since we are working exclusively in real 3D space, all our projectors are real symmetric matrices, so P^\dagger = P^T = P and the distinction doesn't matter. In complex settings (e.g., spinor representations), you would need to be careful to use P^\dagger rather than P.
The graphic below shows the vibrational projector for the tetrahedron as a matrix equation:
8.7) From Projector to Vibrational Modes
Once we have P^{\text{vib}}, group theory helps us organize the vibrational subspace. We continue with our tetrahedron example to demonstrate each step.
Step 1: Build the full displacement representation. We need the 3n \times 3n matrices \Gamma^{\text{a.s.} \otimes \text{vec}}(g) that describe how the group acts on the full displacement space. These are constructed entirely from the vertex positions and the 3 \times 3 vector representation \Gamma^{\text{vec}}(g): for each group element, we determine which atoms swap by applying the 3 \times 3 matrix to each atom position and checking which vertex it lands on, giving the permutation matrix \Gamma^{\text{a.s.}}(g), then take the Kronecker product \Gamma^{\text{a.s.}}(g) \otimes \Gamma^{\text{vec}}(g).
The graphic below shows the result for the tetrahedron — one representative per conjugacy class:
Step 2: Extract a spanning set Q for the vibrational subspace — an orthonormal basis for the column space of P^{\text{vib}}. For n_{\text{vib}} vibrational modes, Q is a 3n \times n_{\text{vib}} matrix.
Step 3: Project the group action into the vibrational subspace:
This produces compact n_{\text{vib}} \times n_{\text{vib}} matrices — the group representation restricted to the vibrational subspace, with no nullspace zeros.
Step 4: Decompose \Gamma^{\text{vib}} into irreps using the projector-based decomposition methods from the decomposition note. This gives both the irrep content and the actual displacement vectors for each vibrational mode.
The interactive graphic below demonstrates Steps 2–4 for the tetrahedron — from projecting the group action via Q, through block diagonalization into irreps, to the final displacement vectors:
Why not just sandwich with P^{\text{vib}}? You could compute P^{\text{vib}} \, \Gamma(g) \, P^{\text{vib}}, which gives 3n \times 3n matrices of the correct rank. But these matrices have 3n - n_{\text{vib}} rows and columns of zeros (the translation + rotation nullspace), which are useless for decomposition. Extracting Q and projecting via Q^T \Gamma Q gives the same representation in compact form.
Summary of the numerical pipeline. The inputs are just the atom positions and the 3 \times 3 vector representation matrices \Gamma^{\text{vec}}(g):
- Center the atom positions at the origin.
- Construct \Gamma^{\text{a.s.}}(g) from the vertex positions: apply each \Gamma^{\text{vec}}(g) to each atom position, determine which atom it maps to, and build the permutation matrix.
- Form \Gamma^{\text{a.s.} \otimes \text{vec}}(g) via the Kronecker product \Gamma^{\text{a.s.}}(g) \otimes \Gamma^{\text{vec}}(g).
- Build P^{\text{trans}} from uniform displacement vectors (rank d).
- Build P^{\text{rot}} from cross products of rotation axes with atom positions, then Gram–Schmidt (rank d_{\text{rot}}).
- Compute P^{\text{vib}} = I - P^{\text{trans}} - P^{\text{rot}} (rank n_{\text{vib}}).
- Extract spanning set Q (3n \times n_{\text{vib}}) from the column space of P^{\text{vib}}.
- Form the vibration representation: \Gamma^{\text{vib}}(g) = Q^T \, \Gamma^{\text{a.s.} \otimes \text{vec}}(g) \, Q.
- Decompose into irreps to get mode symmetries and displacement vectors.
This is exactly what the symm4ml.vib_modes module implements.
8.8) Tetrahedron: Character-Table Verification
We can verify the numerical decomposition above using the character-table approach from Steps 1–4. The tetrahedron has 3 \times 4 = 12 total DOF, minus 3 translation, minus 3 rotation = 6 vibrational modes.
The character table for T_d is:
| T_d | E | 8C_3 | 3C_2 | 6S_4 | 6\sigma_d | Linear, rotations | Quadratic |
|---|---|---|---|---|---|---|---|
| A_1 | 1 | 1 | 1 | 1 | 1 | — | x^2+y^2+z^2 |
| A_2 | 1 | 1 | 1 | −1 | −1 | — | — |
| E | 2 | −1 | 2 | 0 | 0 | — | (2z^2{-}x^2{-}y^2,\; x^2{-}y^2) |
| T_1 | 3 | 0 | −1 | 1 | −1 | (R_x, R_y, R_z) | — |
| T_2 | 3 | 0 | −1 | −1 | 1 | (x, y, z) | (xy, xz, yz) |
Computing the characters step by step:
| T_d | E | 8C_3 | 3C_2 | 6S_4 | 6\sigma_d |
|---|---|---|---|---|---|
| \chi^{\text{a.s.}} | 4 | 1 | 0 | 0 | 2 |
| \chi^{\text{vec}} | 3 | 0 | −1 | −1 | 1 |
| \chi^{\text{a.s.} \otimes \text{vec}} | 12 | 0 | 0 | 0 | 2 |
Subtracting translation (T_2: dimension 3) and rotation (T_1: dimension 3):
Physical interpretation of the modes:
- A_1 (1 mode): The symmetric breathing mode — all four atoms move radially inward or outward simultaneously. This preserves the full T_d symmetry at every instant.
- E (2 modes): Two degenerate deformation modes — the tetrahedron distorts its shape while preserving the center of mass. Because E is 2-dimensional, symmetry forces these two modes to have the same vibrational frequency.
- T_2 (3 modes): Three degenerate asymmetric stretch modes — pairs of atoms move in opposite directions. The 3D T_2 irrep forces all three to share the same frequency.
Spectroscopic activity: From the character table, T_2 contains the linear functions (x, y, z) and the quadratic functions (xy, xz, yz), so the T_2 modes are both IR and Raman active. The E modes appear only in the quadratic column, so they are Raman active but IR inactive. The A_1 mode corresponds to x^2 + y^2 + z^2 (the isotropic part of polarizability), making it Raman active but IR inactive.
The interactive viewer below shows all 6 modes computed by the symm4ml.vib_modes pipeline, animated as oscillations. Use the projection buttons to switch between the xz, xy, and yz viewing planes — since the tetrahedron is a 3D object, different projections reveal different displacement components. Depth cueing (lighter shading) indicates atoms farther behind the viewing plane.
8.9) Identifying Irreps from Displacement Patterns (Tetrahedron)
As we did for water, we can verify the irrep assignment of each vibrational mode by examining how symmetry operations transform the displacement pattern. The A_1 breathing mode works just like the water case, but the E and T_2 modes illustrate an important new feature: multi-dimensional irreps.
For reference, the T_d character table:
| T_d | E | 8C_3 | 3C_2 | 6S_4 | 6\sigma_d | Linear, rotations | Quadratic |
|---|---|---|---|---|---|---|---|
| A_1 | 1 | 1 | 1 | 1 | 1 | — | x^2+y^2+z^2 |
| A_2 | 1 | 1 | 1 | −1 | −1 | — | — |
| E | 2 | −1 | 2 | 0 | 0 | — | (2z^2{-}x^2{-}y^2,\; x^2{-}y^2) |
| T_1 | 3 | 0 | −1 | 1 | −1 | (R_x, R_y, R_z) | — |
| T_2 | 3 | 0 | −1 | −1 | 1 | (x, y, z) | (xy, xz, yz) |
A_1: Breathing mode. All four atoms move radially inward or outward by the same amount. Every operation of T_d permutes identical radial displacements, leaving the overall pattern unchanged.
- Character for every conjugacy class: +1
- Characters: (1,\; 1,\; 1,\; 1,\; 1) = \mathbf{A_1} ✓
Multi-dimensional irreps. For water (all 1D irreps), each operation either preserved (+1) or negated (-1) the displacement pattern, giving the character immediately. For multi-dimensional irreps like E (2D) and T_2 (3D), individual modes are generally mixed by symmetry operations rather than simply preserved or negated. We can still narrow things down by elimination — count how many modes are related by symmetry and check which operations preserve the pattern — but as we will see, visual inspection alone sometimes isn't enough.
T_2: Asymmetric stretches (3 modes). Looking at the displacement patterns in the viewer above, the three modes are clearly related by C_3 rotations — a 120° rotation about a vertex axis maps one mode into another. This means all three belong to the same irrep, which must have dimension \geq 3. In T_d, the only 3D irreps are T_1 and T_2. But T_1 and T_2 share the same characters under E, C_3, and C_2 — they differ only under the improper operations S_4 and \sigma_d, which are much harder to check visually. This is where visual elimination reaches its limit. To make the final call, we can use the basis functions listed in the character table: T_2 transforms as (x, y, z) (vector-like distortions along coordinate axes), while T_1 transforms as (R_x, R_y, R_z) (pseudovector-like distortions along body diagonals). Alternatively, the full character-table decomposition derived above resolves this unambiguously. → \mathbf{T_2} ✓
E: Deformation modes (2 modes). The two remaining modes are related by symmetry — each maps to a combination of both under C_3 — forming a 2D subspace. Since T_d has only one 2D irrep (E), the identification is immediate by elimination. → \mathbf{E} ✓
Connection to symmetry breaking. For a 1D irrep like B_1 in water, a frozen distortion breaks exactly the operations with character -1, and the result is unambiguous. For a multi-dimensional irrep, the surviving symmetry also depends on which direction in the irrep space is frozen. For example, the three T_2 modes span a 3D space, and freezing along different directions gives different subgroups: freezing along a coordinate axis (one of the three modes) lowers T_d to C_{2v} (order 4), while freezing along a body diagonal (equal combination of all three modes) lowers T_d to C_{3v} (order 6). In every case, the frozen mode becomes the trivial irrep (A_1) of the surviving subgroup — the same principle as for water.
8.10) Example: Water (C_{2v})
Returning to water (C_{2v}, 3 atoms, 9D displacement space). We built its \Gamma^{\text{vec}} and \Gamma^{\text{a.s.}} matrices in Setting Up the Displacement Space, analyzed them by hand in The Character Table Approach (Steps 1–4), and previewed the result in Preview: The Vibrational Modes. The projector pipeline applied to the same 9 \times 9 tensor product matrices produces the translation, rotation, and vibration projectors, and the decomposition of \Gamma^{\text{vib}} confirms our by-hand result: 2A_1 + B_1.
9) Summary
The procedure for vibrational mode analysis:
- Identify the symmetry group G of the molecule and obtain the vector representation \Gamma^{\text{vec}}(g) with operations matching the orientation of the molecule.
- Construct the permutation representation \Gamma^{\text{a.s.}} of the atomic sites.
- Form the displacement representation \Gamma^{\text{a.s.}} \otimes \Gamma^{\text{vec}}.
- Subtract translation and rotation to get \Gamma^{\text{vib}}.
- Decompose into irreps to classify modes.
- Use character tables to determine IR/Raman activity.
Next: Symmetry-Breaking Distortions — how vibrational modes connect to phase transitions and how group theory predicts allowed distortion pathways.
Related exercises: Representations II