Symmetry#

In everyday life, symmetry operations are given by rotations, reflections, and inversions of a physical object that leaves the object unchanged, i.e., the properties of the object are invariant under these transformations.

In quantum mechanics, symmetry operations are applied to wave functions, operators, and equations, and we are concerned with the invariance of observables.

Active or passive point of view#

When discussing the effect of symmetry operations, it becomes important to distinguish the active and passive points of view. In the former, symmetry operations move the system whereas, in the latter, the frame of reference is changed. An illustration of a step-by-step sequence of operations from these two points of view is presented in the figure below.

Passive and active transformations

We will adopt the active view in which the transformation of a function takes the form

\[ \hat{R} f(\mathbf{r}) = f(\hat{R}^{-1}\mathbf{r}) \]

i.e., we map function values of \(f\) from one point in space \(\mathbf{r}' = \hat{R}^{-1}\mathbf{r}\) to another \(\hat{R}\mathbf{r}' = \mathbf{r}\).

Invariance of observables#

Spectrum intensities are observables given by

\[ \sigma_{f\leftarrow i} \propto \left| \langle \Psi_f | \hat{\Omega} | \Psi_i \rangle \right|^2 = \left| \langle \Psi_f | \Psi_{\Omega,i} \rangle \right|^2 \]

For these to be invariant, we must have

\[\begin{split} \hat{R} \langle \Psi_f | \Psi_{\Omega,i} \rangle = \langle \hat{R} \Psi_f | \hat{R} \Psi_{\Omega,i} \rangle = \langle \Psi_f | \hat{R}^\dagger \hat{R} | \Psi_{\Omega,i} \rangle = \left\{ \begin{split} & \langle \Psi_f | \Psi_{\Omega,i} \rangle \quad (1)\\ \rule{0pt}{14pt} & \langle \Psi_f | \Psi_{\Omega,i} \rangle^* \quad (2) \end{split} \right. \end{split}\]
  1. \(\hat{R}\) is unitary with \(\hat{R}^\dagger \hat{R} = \hat{E}\), where \(\hat{E}\) is the identity operator

  2. \(\hat{R}\) is anti-unitary

The spatial transformations of concern are unitary transformations, whereas an example of an anti-unitary operation is time-reversal.

We can separate the action of the symmetry operator on the operator and the wave function according to

\[ \hat{R} | \Psi_{\Omega,i} \rangle = \hat{R} \hat{\Omega} | \Psi_i \rangle = \left( \hat{R} \hat{\Omega} \hat{R}^{-1} \right) \hat{R} | \Psi_i \rangle \]

In most cases, we are concerned with spatial symmetry operations that leave the Hamiltonian invariant

\[ \hat{R} \hat{H} \hat{R}^{-1} = \hat{H} \]

or

\[ \left[ \hat{R}, \hat{H} \right] = 0 \]

Time reversal symmetry#

Considering the motion of a classical particle within a time interval \(-T < t < T\) where the particle is observed at time \(t\) with position \(\mathbf{r}(t)\) and velocity \(\mathbf{v}(t)\). Applying the time reversal operator yields the following relations for the time-reversed position and velocity

\[\begin{align*} \mathbf{r}_T(t) & = \mathbf{r}(-t) \\ \mathbf{v}_T(t) & = -\mathbf{v}(-t) \end{align*}\]

Moreover, according to the Lorentz force, which represents the total derivative of mechanical momentum (itself proportional to \(\mathbf{v}_T\) and thus changing sign under time reversal),

\[ \mathbf{F}_T(t) = {d\mathbf{\pi}_T(t) \over dt} = q[\mathbf{E}_T(t) + \mathbf{v}_T(t)\times \mathbf{B}_T(t)] \]

electric and magnetic fields within the system must satisfy

\[\begin{align*} \mathbf{E}_T(t) & = \mathbf{E}(-t) \\ \mathbf{B}_T(t) & = -\mathbf{B}(-t) \end{align*}\]

The total and angular momenta should change sign as well. However, if these fields are introduced as external perturbations, they both remain unaffected by time symmetry.

Turning to the quantum-mechanical case and the description of an electronic system described by the wave function \(\Psi(t)\), we have [NRS18]

\[ \Psi_T(t) = \hat{\mathcal{T}} \Psi(t) = \hat{\mathcal{K}}_T \Psi(-t) \]

Note

One would expect that the application of time reversal twice would bring the system back to its initial state. While this holds true for systems with an even number of electron, an additional phase factor of \(-1\) appears for systems with odd number of electrons.

Spatial symmetry#

By limiting ourselves to spatial symmetry, symmetry operations are restricted to geometric actions that leave the nuclear framework invariant. There are five different kinds of spatial symmetry operations:

  1. The identity operation, \(\hat{E}\), does nothing.

  2. The rotation operation, \(\hat{C}_n\), rotates the system of an angle \(2\pi/n\) about an axis. If the molecules possesses several rotation axes, the one with the largest \(n\) is referred to as the principal axis.

  3. The reflection operation, \(\hat{\sigma}\), reflects the system in a plane. If a plane is perpendicular to the principal axis, the operation is denoted \(\hat{\sigma}_h\). If, on the other hand, it contains the principal axis, it is denoted \(\hat{\sigma}_v\). Finally, if the plane bisects the angle between two \(C_2\)-axes, it is denoted \(\hat{\sigma}_d\).

  4. The inversion operation, \(\hat{i}\), inverts space through the origin.

  5. The improper rotation (or rotoreflection) operation, \(\hat{S}_n = \hat{\sigma}_h \hat{C}_n\), performs a combination of a rotation and a reflection in a plane perpendicular to the rotation axis.

It is noted that some symmetry operations are equivalent, e.g., \(\hat{S}_2 = \hat{i}\).

Spatial symmetry operations are linear. The application of spatial symmetry operators on spatial orbitals, such as atomic orbitals, \(\chi(\mathbf{r})\), results in simple matrix multiplications

\[ \hat{R} | \overline{\chi} \rangle = | \overline{\chi} \rangle \mathbf{D}(R) \]

where \(\mathbf{D}(R)\) is called the representative of the operation. It is said that there is a homomorphism between the set operators and the ensemble of their representatives. When choosing an orthonormal space, operations preserve orthonormality and all transformations are carried out by unitary matrices.

The set of symmetry operations that commute with the Hamiltonian form a group, \(\mathbf{G}\). A group is a fundamental structure consisting of elements joined by a multiplication rule and with the following properties:

  1. The set of operations contains \(\hat{E}\), which leaves all elements unchanged

    \[ \hat{E}\hat{R} = \hat{R}\hat{E} = \hat{R} \]
  2. Closure

    \[ \forall \hat{R}, \hat{Q} \in \mathbf{G} \Rightarrow \hat{R}\hat{Q} \in \mathbf{G}\ \&\ \hat{R}\hat{Q} \in \mathbf{G} \]
  3. Associativity

    \[ \hat{R}(\hat{Q}\hat{P}) = (\hat{R}\hat{Q})\hat{P} \]
  4. The inverse for all operations belongs to the group

    \[ \hat{R}\hat{R}^{-1} = \hat{R}^{-1}\hat{R} = \hat{E} \]

A group \(\mathbf{G}\) of \(g\) elements is said to be of order \(g\).

A group is completely determined only by the products \(\hat{R}\hat{Q}\), combined in the multiplication table. It is however not necessary to store the whole multiplication table to know everything about the group. A more compact way uses the generators, a minimal set of elements capable of generating the whole group. Furthermore, symmetry operations of the same type, \(\hat{R}\) and \(\hat{R}'\), belong to the same class if there is an element of the group \(\hat{F}\) such that

\[ \hat{R}' = \hat{F}^{-1}\hat{R}\hat{F} \]

A symmetry element (different from a group element) is a geometrical entity, e.g., a point, line, or plane, about which an action takes place. For every operation there is an associated element. At least one point in space is left unchanged for all symmetry operations and we refer to such groups as point groups to distinguish them from crystal groups that also possess translational symmetry.

Abelian groups, subgroups, and cyclic groups#

Abelian groups are groups with a commutative multiplication rule

\[\begin{equation*} \forall \hat{R}, \hat{Q} \in \mathbf{G} \Rightarrow \hat{R}\hat{Q} = \hat{Q}\hat{R} \end{equation*}\]

The multiplication table of an Abelian group is therefore symmetric about the diagonal. Moreover, the unitary transformations used to determine the classes of the group always return the element on which they are acting, making each element its own class.

A subgroup \(\mathbf{H}\) of \(\mathbf{G}\), denoted \(\mathbf{H} \subset \mathbf{G}\), is a subset of elements of \(\mathbf{G}\) that satisfies all the group properties. Trivial subgroups contain the identity alone, i.e. \(C_1 = \{\hat{E}\}\) and the group \(\mathbf{G}\) itself.

Consider the example of an ammonia molecule, associated with the following group: \(\{\hat{E}, \hat{C}_3, \hat{C}_3^2, \hat{\sigma}_v, \hat{\sigma}_v', \hat{\sigma}_v''\}\). In this case, there are four nontrivial subgroups, namely, \(\{\hat{E}, \hat{C}_3, \hat{C}_3^2\}\) and three equivalent \(\{\hat{E}, \hat{\sigma}_v\}\) with the different reflexion planes. The order of a subgroup is a divisor of the order of the group. Therefore, groups with an order that is a prime number have no nontrivial subgroups.

Forming a subgroup can involve taking the successive powers of an element. Owing to the finite size of a group, elements may become redundant, leading to \(\hat{A}^n = \hat{E}\) for a generator \(A\). Cyclic groups, usually denoted \(C_n\), are groups with only one generator. All cyclic groups are Abelian, since the products of elements give rise to a sum of powers which is commutative

\[ \hat{C}^i\hat{C}^j = \hat{C}^{i+j} = \hat{C}^{j+i} = \hat{C}^j\hat{C}^i \]

Point groups#

Identifying the point group for a molecule can be achieved with use of the following flowchart.

../../_images/pointgroup_analyzer_flowchart.svg

All molecules with the same set of elements belong to the same group. The name of the group is therefore determined by its set of elements. The Schoenflies notation is here adopted as it is more common to use for molecular point groups, whereas the Hermann–Mauguin notation (or international notation) is used for crystal groups.

Knowledge of the point group of a molecule can immediately give information regarding its properties:

  • As a permanent dipole moment is the result of an asymmetric charge distribution, it is not possible to have a dipole moment along any other axis than a \(C_n\)-axis that, moreover, has no reflection perpendicular to it. As a result, only molecules belonging to the point groups \(C_n\), \(C_{nv}\), and \(C_s\) can have a permanent dipole moment.

  • A molecule that cannot be superimposed on its mirror image is said to be chiral. This is exemplified by the inability of the left hand to be superimposed on the right hand, and it has the physical effect of rotating the plane of polarized light in opposite directions for the two different enantiomers. For a molecule to be chiral, it cannot contain a \(S_n\)-axis, an axis often implied by the presence of other symmetry elements (e.g. \(\hat{\sigma}\) is equivalent to \(\hat{S}_1\)).

While the above decision tree provides a straightforward approach on paper, complexities arise when dealing with imperfectly symmetric conformations. The SymmetryAnalyzer class in VeloxChem provides a tolerance-based function to assess the point groups of nearly symmetric molecules starting from their Cartesian coordinates.

For a molecule with \(M\) atoms with masses \(M_A\) at positions \(\mathbf{R}_k\), the inertia tensor is constructed as follows

\[ \mathbf{I}^{\text{molecule}} = \sum_{A=1}^M \Big[ M_A (\mathbf{R}_A \cdot \mathbf{R}_A) \,\mathbf{I} - \mathbf{R}_A \otimes \mathbf{R}_A \Big] \]

where \(\mathbf{I}\) is the identity matrix in 3D. The principal moments and axes of inertia are found by diagonalizing the inertia tensor. The degeneracy of these moments allows for the classification of the symmetry groups:

  • linear molecules have one zero eigenvalue

  • asymmetric top molecules have non-degenerate eigenvalues

  • symmetric top molecules have doubly degenerate eigenvalues

  • cubic (or spherical top) molecules have triply degenerate eigenvalues

The aforementioned principal axes of a molecule correspond to the principal axes of inertia. In other words, a symmetry axis or plane must contain at least one eigenvector of the inertia tensor, since an operation must leave the molecule unchanged, and so its inertia tensor. This can then be used to follow the detection tree in an efficient way.

As a first example, we consider an ammonia molecule for analyzing the symmetry.

import veloxchem as vlx

ammonia_str = "N"
molecule = vlx.Molecule.read_smiles(ammonia_str)
molecule.show()
* Warning * Environment variable OMP_NUM_THREADS not set.
* Warning * Setting OMP_NUM_THREADS to 6.

You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension:
jupyter labextension install jupyterlab_3dmol

The point group is assessed by the identify_pointgroup method of the SymmetryAnalyzer class. The results are then printed using print_symmetry_results. In addition to the point group, this function returns all the symmetry elements associated with the operations that form the group and provides a list of Abelian subgroups, which will be discussed below.

#pg = vlx.SymmetryAnalyzer()

#pg_results = pg.identify_pointgroup(molecule, tolerance="very tight")
#pg.print_symmetry_results(pg_results)

The available tolerance thresholds can be provided with print_tolerance_keywords:

#pg.print_tolerance_keywords()

Symmetrizer algorithm#

The subsequent step in the SymmetryAnalyzer is the perfect symmetrization of the input structure and its reorientation according to the conventions of group theory. Additionally, one can choose to symmetrize to a lower order of symmetry by selecting a subgroup from the list of available groups returned by the symmetry analyzer. The symmetrization is achieved by the symmetrize_pointgroup object, which implements the procedure outlined in the following flowchart. This function is limited to molecules with less than 100 atoms in the current implementation. If one chooses \(C_1\) as the new point group, the molecule is simply reoriented.

../../_images/symmetrizer_flowchart.svg

The molecules are reoriented using the following conventions:

  • The reference Cartesian frame is right-handed

  • The origin is placed at the center of mass

  • The principal axis is aligned with the \(z\)-axis

  • If the \(z\)-axis lies along a \(\sigma\)-plane, the \(x\)-axis is chosen to be perpendicular to the plane

  • If the \(z\)-axis is perpendicular to a \(\sigma\)-plane, the \(x\)- and \(y\)-axes lie within the plane

  • If there is no rotation axis but a \(\sigma\)-plane exists, the \(z\)-axis is set along the plane

  • If there is no rotation axis nor \(\sigma\)-plane, the \(x\)- and \(y\)-axes are defined along the two principal axes of inertia associated with the two smallest principal moments

Additional considerations are done for spherical top molecules. If one chooses to symmetrize a molecule of this type, it will be reoriented in its \(D_{2(h)}\) orientation, viz. by using one \(C_2\)-axis perpendicular to the principal axis as the new main axis.

As an illustration, let us consider a nearly symmetric water molecule rotated and translated from the origin of the reference frame.

water = """3 

O       12.0448432299       -3.9158679908        0.9692506110
H       11.2081241979       -4.3238710922        1.0042469492
H       12.4653859253       -4.3498515284        0.2216705986
"""

molecule = vlx.Molecule.read_xyz_string(water)

#pg_results_verytight = pg.identify_pointgroup(molecule, tolerance="very tight")
#print("Tolerance: very tight")
#pg.print_symmetry_results(pg_results_verytight, symmetry_info=False)

#pg_results_loose = pg.identify_pointgroup(molecule, tolerance="loose")
#print("\nTolerance: loose")
#pg.print_symmetry_results(pg_results_loose, symmetry_info=False)
#pg_symmetrize_results = pg.symmetrize_pointgroup(pg_results_loose, pointgoup_to_symmetrize="C2v")

#symmetrized_molecule = vlx.Molecule.read_xyz_string(pg_symmetrize_results)
#symmetrized_coords = symmetrized_molecule.get_coordinates_in_angstrom()
#print("Symmetrized coordinates:")
#print(symmetrized_coords, "\n")

#pg_symmetrized_results = pg.identify_pointgroup(symmetrized_molecule, tolerance="very tight")
#pg.print_symmetry_results(pg_symmetrized_results, symmetry_info=False)

Character tables#

A matrix representation of a group is a set of matrices that represents all the operations of the group. These representations are typically in the form of block diagonal matrices. There is a limited set of representations, known as irreducible representations (or irreps), from which any other representation can be deduced. They are brought together in a character table.

A character table lists all the symmetry operations of a point group as columns and the irreducible representations as rows. The number of irreps in a group is equal to the number of conjugacy classes. For Abelian groups, the number of irreps is equal to the number of group elements, and all irreps are one-dimensional. Characters are simply the traces of the representatives $\( \chi(R) = \sum_i D_{ii}(R). \)$ Since traces of matrices are invariant under unitary transformations, characters literally characterize the representations. For a given representation, elements within the same conjugacy class have identical characters.

The irreducible representation satisfy the Great Orthogonality Theorem (GOT). Let \(\Gamma\) and \(\Gamma'\) be two irreducible representations of a group \(\mathbf{G}\), and consider vectors formed by taking elements \(ij\) and \(kl\) from the respective representatives for every element of the group. These vectors are orthogonal to each other, and their squared norm is equal to the order of the group \(g\), divided by the dimension of the irrep \(\ell\) $\( \sum_{R\in\mathbf{G}}D^{*\Gamma}_{ij}(R)D^{\Gamma'}_{kl}(R) = {g\over\ell_\Gamma}\delta_{\Gamma,\Gamma'}\delta_{ik}\delta_{jl} \)$ The highest dimensionality of the irreps of the group corresponds to the maximum degree of degeneracy in the group, e.g., the maximum degeneracy of the orbitals and quantum eigenstates of a molecule belonging to that group.

Other relations can be deduced from the GOT. For \(i=j\) and \(k=l\), consider two irreps \(\Gamma\) and \(\Gamma'\) with their strings of characters arranged in vectors. The character theorem states that the squared norm of a character string equals the order of the group if and only if the characters are from an irrep. The scalar product of character strings from different irreps is zero $\( \langle\chi^{\Gamma}|\chi^{\Gamma'}\rangle = \sum_{R\in \mathbf{G}}\bar{\chi}^{\Gamma}(R)\chi^{\Gamma'}(R) = g\delta_{\Gamma,\Gamma'} \)$

In chemical applications, irreps are denoted by labels indicating their degeneracy. One-dimensional irreps are labeled \(A\) and \(B\), representing symmetric and antisymmetric states with respect to the principal element. Two- and three-dimensional representations are labeled \(E\) and \(T\), respectively. In some icosahedral groups, four- and five-dimensional irreps are labeled \(G\) and \(H\). Further subscripts, such as \(g\) and \(u\), distinguish between even (gerade) and odd (ungerade) symmetries with respect to spatial inversion. Primes and double primes indicate behavior concerning a \(\sigma_h\) plane. Numerical indices are used when multiple representations share the same label.

The irreps spanned by orbitals on a central atom under symmetry operations are typically listed on the right-hand side of the character table. \(A_1\) is always present and is referred to as the totally symmetric irreducible representation.

Below are examples of character tables for various groups.

C\(_\mathsf{2v}\)#

Irrep

\(\hat{E}\)

\(\hat{C}_2^z\)

\(\hat{\sigma}_v^{xz}\)

\(\hat{\sigma}_v^{yz}\)

Operation

\(A_1\)

1

1

1

1

\(z\)

\(A_{2}\)

1

1

-1

-1

\(R_z\)

\(B_{1}\)

1

-1

1

-1

\(R_y\), \(x\)

\(B_{2}\)

1

-1

-1

1

\(R_x\), \(y\)

You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension:
jupyter labextension install jupyterlab_3dmol

C\(_\mathsf{2h}\)#

Irrep

\(\hat{E}\)

\(\hat{C}_2^z\)

\(\hat{i}\)

\(\hat{\sigma}_h\)

Operation

\(A_g\)

1

1

1

1

\(R_z\)

\(B_{g}\)

1

-1

1

-1

\(R_x\), \(R_y\)

\(A_{u}\)

1

1

-1

-1

\(z\)

\(B_{u}\)

1

-1

-1

1

\(x\), \(y\)

You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension:
jupyter labextension install jupyterlab_3dmol

D\(_\mathsf{2h}\)#

Irrep

\(\hat{E}\)

\(\hat{C}_2^z\)

\(\hat{C}_2^y\)

\(\hat{C}_2^x\)

\(\hat{i}\)

\(\hat{\sigma}^{xy}\)

\(\hat{\sigma}^{xz}\)

\(\hat{\sigma}^{yz}\)

Operation

\(A_g\)

1

1

1

1

1

1

1

1

\(B_{1g}\)

1

1

-1

-1

1

1

-1

-1

\(R_z\)

\(B_{2g}\)

1

-1

1

-1

1

-1

1

-1

\(R_y\)

\(B_{3g}\)

1

-1

-1

1

1

-1

-1

1

\(R_x\)

\(A_{u}\)

1

1

1

1

-1

-1

-1

-1

\(B_{1u}\)

1

1

-1

-1

-1

-1

1

1

\(z\)

\(B_{2u}\)

1

-1

1

-1

-1

1

-1

1

\(y\)

\(B_{3u}\)

1

-1

-1

1

-1

1

1

-1

\(x\)

You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension:
jupyter labextension install jupyterlab_3dmol

Note

A methane molecule belongs to the tetrahedral point group \(T_d\). This group includes \(T\) symmetry irreducible representations, allowing for triply-degenerate orbitals at most.

T\(_\mathsf{d}\)#

Irrep

\(\hat{E}\)

\(8\hat{C}_3\)

\(3\hat{C}_2\)

\(6\hat{S}_4\)

\(6\hat{\sigma}_{d}\)

Operation

\(A_1\)

1

1

1

1

1

\(A_2\)

1

1

1

-1

-1

\(E\)

2

-1

2

0

0

\(T_1\)

3

0

-1

1

-1

\((R_x, R_y, R_z)\)

\(T_2\)

3

0

-1

-1

1

\(x, y, z\)

You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension:
jupyter labextension install jupyterlab_3dmol

basis = vlx.MolecularBasis.read(molecule, "6-311G*", ostream=None)

scf_drv = vlx.ScfRestrictedDriver()
scf_drv.ostream.mute()

scf_results = scf_drv.compute(molecule, basis)

mo_energy = scf_results["E_alpha"]

print("Number of orbitals:", len(mo_energy))
print("\nMO energies (au):\n", mo_energy)
Number of orbitals: 30

MO energies (au):
 [-11.20882312  -0.94196043  -0.54536358  -0.54535991  -0.54535871
   0.16113812   0.23756108   0.23756138   0.23756174   0.42836499
   0.42836562   0.42836679   0.74942075   0.81643829   0.81643944
   0.81644296   0.98831669   1.51918059   1.51918089   1.78539525
   1.78539542   1.78539574   2.57006518   2.75828011   2.7582845
   2.75828978   3.48943639   3.489441     3.48945501  24.55021421]

Note

Some point groups, such as the cyclic groups \(C_n\) (except for \(C_1\) and \(C_2\)), \(C_{(2n+1)h}\), \(S_{2n}\), and also \(T\) and \(T_h\) have irreps with complex characters. In these cases, there will always be a complementary irrep with a complex-conjugate character string. They are orthogonal to each other, meaning no point group operation can transform a function belonging to \(\Gamma\) into \(\bar{\Gamma}\).

However, complex-conjugate irreps remain degenerate under time-reversal symmetry and are typically treated as a “kind of a” two-dimensional irreducible representation. Often, the reduction producing the pair of irreps is not carried out, as twofold degeneracy may still occur. This is illustrated below by computing the orbital energies of triethylamine in a \(C_3\) conformation.

C\(_\mathsf{3}\)#

Irrep

\(\hat{E}\)

\(\hat{C}_3^z\)

\(\hat{C}_3^{2, z}\)

Operation

\(A\)

1

1

1

\(z\), \(R_z\)

\(E\)

1

\(\epsilon\)

\(\epsilon^*\)

\((x, y)\), \((R_x, R_y)\)

1

\(\epsilon^*\)

\(\epsilon\)

You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension:
jupyter labextension install jupyterlab_3dmol

basis = vlx.MolecularBasis.read(molecule, "6-31G", ostream=None)

scf_drv = vlx.ScfRestrictedDriver()
scf_drv.ostream.mute()

scf_results = scf_drv.compute(molecule, basis)

mo_energy = scf_results["E_alpha"]

print("Number of orbitals:", len(mo_energy))
print("\nMO energies (au):\n", mo_energy)
Number of orbitals: 93

MO energies (au):
 [-15.54578849 -11.25090355 -11.25090355 -11.25087358 -11.21246683
 -11.21246653 -11.21246653  -1.21131333  -1.02510881  -1.02510881
  -0.95516387  -0.84457492  -0.84457492  -0.76156233  -0.63980813
  -0.63980813  -0.61995786  -0.58982172  -0.58982172  -0.54558603
  -0.52774456  -0.51291914  -0.51291914  -0.50152399  -0.4839755
  -0.4839755   -0.4473856   -0.4473856   -0.33930113   0.23557939
   0.24581183   0.24581183   0.27338951   0.29363159   0.29363159
   0.30611874   0.31534336   0.31534336   0.33506903   0.33506903
   0.34579136   0.36436004   0.38908878   0.38908878   0.40390215
   0.42832684   0.42832684   0.45960101   0.45960101   0.4814887
   0.73810901   0.73810901   0.76078307   0.77961338   0.77961338
   0.80202299   0.82977804   0.82977804   0.83162343   0.92269428
   0.95025505   0.95025505   0.95533729   0.98746581   0.98746581
   1.07603196   1.07603196   1.11600443   1.12617684   1.19648957
   1.20455251   1.20455251   1.22181746   1.22181746   1.22709025
   1.24353097   1.2508069    1.2508069    1.26259608   1.26259608
   1.29418576   1.32269348   1.32269348   1.35323599   1.4345424
   1.44579073   1.44579073   1.64418987   1.64418987   1.77919534
   1.92026477   1.92026477   2.06059262]

Wave function symmetry#

In view of the characters listed in the table, it is straightforward to identify to which irrep molecular orbitals (MOs) belong, \(\Gamma(\phi_i)\). Since we are here concerned with spatial operations the symmetry of spin orbitals, \(\Gamma(\psi_i)\), is equal to the symmetry of the associated MOs.

The symmetry of many-electron functions composed of Slater determinants is equal to the direct product of the irreps of the spin orbitals

\[ \Gamma(\Psi) = \Gamma(\psi_1) \otimes \Gamma(\psi_2) \otimes \cdots \otimes \Gamma(\psi_N) \]

For double electron occupied MOs, we get

\[ \Gamma(\psi_i \psi_{\bar{i}}) = \Gamma(\psi_i) \otimes \Gamma(\psi_{\bar{i}}) = \Gamma(\phi_i) \otimes \Gamma(\phi_i) = \Gamma(\hat{E}) \]

This gives us the result that closed-shell determinants belong to the all-symmetric irrep, \(\Gamma(\hat{E})\), and the symmetry of open-shell determinants equals the direct product of the irreps of the single electron occupied MOs.