qrunch.chemistry.ground_state_problem.builders.tools.localization

The localization module provides means to localize molecular orbitals.

Classes

LocalizerCreator

Orbital localizer creator.

OrbitalAssignerCreator

Orbital assigner creator.

class LocalizerCreator

Bases: Generic[T]

Orbital localizer creator.

__init__(parent: T, field_name: str) None

Initialize an orbital localizer creator.

Parameters:
  • parent (T) – Parent object to which the molecular orbital calculator will be assigned.

  • field_name (str) – Name of the field in the parent object where the molecular orbital calculator will be assigned.

Return type:

None

pipek_mezey(population_method: Literal['meta-lowdin', 'mulliken', 'lowdin'] = 'meta-lowdin', options: LocalizationOptions | None = None) T

Narrow the molecular orbital localizer to a Pipek-Mezey Localizer.

This method transforms delocalized molecular orbitals into localized orbitals that are more chemically intuitive. The localized orbitals can be associated with specific bonds or lone pairs in a molecule, aiding in the interpretation of chemical structures and reactions.

Pipek-Mezey Localization Algorithm

The Pipek-Mezey localization procedure [PipekMezey1989] aims to maximize the sum of the squares of atomic partial charges (populations) for each orbital. By doing so, the method localizes orbitals on individual atoms or between pairs of atoms (chemical bonds), enhancing the chemical interpretability of the wavefunction.

The localization criterion Omega is defined as:

\[\Omega = \sum_{i}^{N_{\text{occ}}} \sum_{A}^{N_{\text{atoms}}} [q_{iA}]^2\]

where:

  • \(N_{\text{occ}}\) is the number of occupied molecular orbitals.

  • \(N_{\text{atoms}}\) is the number of atoms in the molecule.

  • \(q_{iA}\) is the Mulliken population of orbital \(i\) on atom \(A\), calculated as:

\[q_{iA} = \sum_{\mu \in A} \sum_{\nu} C_{\mu i} S_{\mu \nu} C_{\nu i}\]

Here:

  • \(C_{\mu i}\) are the coefficients of the molecular orbitals.

  • \(S_{\mu \nu}\) is the overlap between atomic orbitals \(\mu\) and \(\nu\).

  • The sum over \(\mu \in A\) includes all basis functions centered on atom \(A\).

Implementation Details

The method involves iteratively rotating pairs of occupied molecular orbitals to increase \(\Omega\) until convergence is achieved. This is typically done using a Jacobi-like rotation procedure that ensures the orthogonality of the resulting localized orbitals.

Advantages

  • Chemical Intuition: Produces orbitals that correspond closely to chemical bonds and lone pairs.

  • Computational Efficiency: Generally faster than other localization methods like Boys localization.

  • Applicability: Suitable for both ab initio and semiempirical wavefunctions.

[PipekMezey1989]

Pipek, J., & Mezey, P. G. (1989). A fast intrinsic localization procedure applicable for ab initio and semiempirical linear combination of atomic orbital wave functions. The Journal of Chemical Physics, 90(9), 4916-4926. doi:10.1063/1.456588

param population_method:

The method for calculating the orbital population.

param options:

The algorithmic options.

Parameters:
  • population_method (Literal['meta-lowdin', 'mulliken', 'lowdin'])

  • options (LocalizationOptions | None)

Return type:

T

class OrbitalAssignerCreator

Bases: Generic[T]

Orbital assigner creator.

__init__(parent: T, field_name: str) None

Initialize an orbital assigner creator.

Parameters:
  • parent (T) – Parent object to which the molecular orbital calculator will be assigned.

  • field_name (str) – Name of the field in the parent object where the molecular orbital calculator will be assigned.

Return type:

None

total_weight(assignment_tolerance: float | Literal['kmeans_midpoint', 'largest_gap_midpoint']) T

Narrow the orbital assigner to a TotalWeightBasedOrbitalAssigner.

The TotalWeightBasedOrbitalAssigner Assigns molecular orbitals to embedded and environment regions based on the total weights of their atomic orbital contributions.

Parameters:

assignment_tolerance (float | Literal['kmeans_midpoint', 'largest_gap_midpoint'])

Return type:

T

Modules

localization_protocols

Module containing protocols for localization and orbital assignment.

orbital_assigners

Molecular orbital assignment utilities.

orbital_localizers

Molecular orbital localization.