forte2.symmetry.mo_sym_detect ============================= .. py:module:: forte2.symmetry.mo_sym_detect Module Contents --------------- .. py:function:: local_sign(l, m, op) Return phase describing how the spherical harmonic Y_lm transforms under Abelian symmetry operations `op`, which is one of [E, C2z, C2x, C2y, σ_xy, σ_xz, σ_yz]. .. !! processed by numpydoc !! .. py:function:: get_symmetry_ops(point_group) Compute 3x3 matrix representations for the symmetry operators in `point_group`. These representation perform reflections/rotations in the molecular principal frame. .. !! processed by numpydoc !! .. py:class:: MOSymmetryDetector(system, info, S, C, eps, tol=1e-06) Class to detect the irreducible representation (irrep) labels of molecular orbitals. :Parameters: **system** : forte2.System Forte2 System object with symmetry information **info** : forte2.BasisInfo Forte2 BasisInfo object with basis set information **S** : ndarray AO overlap matrix **C** : ndarray MO coefficient matrix (columns are MOs) **eps** : ndarray MO energies **tol** : float, optional, default=1e-6 tolerance for matching atomic positions under symmetry operations :Attributes: **irrep_indices** : list of int List of irrep indices for each MO according to COTTON_LABELS **labels** : list of str List of irrep labels for each MO (e.g. 'a1', 'b2', etc.) .. rubric:: Notes We compute symmetry irreps for MOs a posteriori by computing the character of each MO under each symmetry operation of the point group. In a nutshell, what we want is the character .. math:: \chi(g)_{p} = \langle p | \hat{R}(g) | p \rangle = \sum_{uv} c_{pu}^* c_{pv} \langle u | \hat{R}(g) | v \rangle Each AO function :math:`|u\rangle \sim R_{nl}(r) Y_{lm}(\theta,\phi)`. For Abelian point groups, we only need to consider C2 rotations and mirror planes. None of these affect the radial part, but they transform the angular part to a symmetric partner on the same or a different atom with a phase. If :math:`\hat{R}(g)|v\rangle = \sum_{w} U_{vw} |w\rangle`, then :math:`\langle u | \hat{R}(g) | v \rangle = \sum_{w} U_{vw} \langle u | w \rangle`, and :math:`\chi(g)_{p} = \sum_{uvw} c_{pu}^* c_{pv} U_{vw} S_{uw}.` The above procedure works if the symmetry operations do not mix MOs (i.e., the true molecular point group is Abelian). If some MOs are mixed by the symmetry operations, then we need diagonalize subsets of the MO space that are mixed together to obtain MOs that purely transform as irreps of the Abelian subgroup. .. !! processed by numpydoc !! .. py:attribute:: system .. py:attribute:: info .. py:attribute:: S .. py:attribute:: C .. py:attribute:: eps .. py:attribute:: tol :value: 1e-06 .. py:attribute:: two_component .. py:method:: run()