OM2/MRCI
PyQED exposes an OM2/MRCI API for semiempirical excited-state
workflows. The API is intentionally separated into two layers:
OM2builds the semiempirical reference Hamiltonian and orbitals.MRCIdiagonalizes the selected multireference CI Hamiltonian.
Current Status
The native API now includes a runnable closed-shell OM2-style reference and MRCI driver:
Built-in H/C/N/O/F OM2 parameter table from Dral et al., J. Chem. Theory Comput. 12, 1082 (2016), Table 2, including the X-H resonance rows, orthogonalization factors, and semiempirical ECP rows.
Orthogonal valence AO Hamiltonian data with one-electron terms, compact NDDO-like electron repulsion terms, core attraction, semiempirical ECP corrections, additive OM2 orthogonalization corrections, and core repulsion.
Closed-shell SCF reference energies and orbitals.
Full or selected determinant-space MRCI using the PyQED Slater-Condon CI builder.
Scanner and CI-vector pseudo-overlap helpers for PES/LDR workflows.
The current integral kernel is intentionally modular. It now uses the published X-H resonance rows, semiempirical ECP rows, and explicit additive F1/F2 and G1/G2 orthogonalization-correction contractions. It is still not bit-for-bit MNDO2005 OM2 because the native overlap/local-core primitives are compact analytic approximations. The next physics step is replacing those primitive overlap/local-core kernels by the exact OM2 two-center primitives while keeping the same user API.
API Sketch
from pyqed.qchem.semiempirical import OM2
om2 = OM2(
atom="C 0 0 0; H 0 0 1.09",
charge=0,
spin=0,
unit="angstrom",
).run()
mrci = om2.MRCI(nstates=5).run()
print(mrci.e)
MRCI is intentionally both the driver and the result object. After
run(), energies and CI vectors are available as mrci.e and mrci.ci;
there is no separate MRCIResult wrapper.
For PES scans, the same interface will be usable as a callable scanner:
scanner = OM2(atom="H 0 0 0; H 0 0 0.74").as_scanner(
nstates=2,
full=True,
)
result = scanner(atom="H 0 0 0; H 0 0 0.80")
print(result.e)
Wavefunction pseudo-overlaps can be computed directly from two completed MRCI objects:
s = mrci1.wavefunction_overlap(mrci2)
Published Benchmarks
PyQED ships a small registry of published OM2 benchmark targets from the OMx papers. It includes aggregate MAEs plus selected molecule-level supporting-information values from the G2-CHNOF and S22 tables. These values are heats of formation or interaction energies rather than total electronic energies, so they are useful for tracking the expected accuracy envelope while a direct MNDO executable benchmark is unavailable.
from pyqed.qchem.semiempirical import (
format_published_om2_benchmarks,
format_published_om2_molecule_benchmarks,
)
print(format_published_om2_benchmarks())
print(format_published_om2_molecule_benchmarks())
The same registry is used by examples/qchem/benchmark_om2_published.py.
Implementation Roadmap
Replace the compact approximate integral kernel with the exact OM2 orthogonalization/ECP Hamiltonian.
Add open-shell/UHF OM2 references.
Add production MRCI reference selection and perturbative selection thresholds.
Add transition dipoles and oscillator strengths.
Add analytic or robust finite-difference gradients after energies/overlaps are stable.