qrunch.chemistry.problem_builders.tools.localization.creators

Module containing creators for the orbital localizers and assigners.

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

avoid_region_mixing_pipek_mezey(options: AvoidRegionMixingPipekMezeyOptions | None = None) T

Narrow the molecular orbital localizer to an avoid-cross-region-mixing Pipek-Mezey Localizer.

Maximizes

\[F = \sum_i \left( E_i^{p} + N_i^{p} \right),\]

where \(E_i\) (resp. \(N_i\)) is the population of orbital \(i\) on the embedded atoms (resp. on the environment atoms) of the molecular configuration. This is equivalent to a Pipek-Mezey procedure that coarse-grains the atoms into two regions (embedded and environment), thus encouraging each orbital to localize on exactly one region and discouraging cross-region mixing.

Parameters:

options (AvoidRegionMixingPipekMezeyOptions | None) – The algorithmic options.

Return type:

T

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