MP2¶
OpenQP supports standalone second-order Moller-Plesset ground-state correlation
with [input] method=mp2. The calculation first converges an HF reference, then
adds the MP2 correlation energy and reports the correlated E(HF+MP2) total.
MP2 is currently an energy-only post-SCF workflow:
- Use
runtype=energy. - Leave
[input] functionalempty. MP2 on Kohn-Sham references is rejected. - Use
[scf] type=rhf,uhf, orrohffor the reference. - Use
[mp2]only when selecting a spin-scaled variant or custom scale factors.
Energy¶
Input File Style¶
[input]
system=
8 0.000000000 0.000000000 -0.041061554
1 -0.533194329 0.533194329 -0.614469223
1 0.533194329 -0.533194329 -0.614469223
charge=0
runtype=energy
method=mp2
functional=
basis=6-31g
[guess]
type=huckel
[scf]
type=uhf
multiplicity=1
conv=1.0e-10
[mp2]
variant=mp2
Pythonic Style¶
from oqp.openqp import OpenQP
job = OpenQP("h2o_mp2", silent=1)
job.molecule(geometry="water", charge=0, multiplicity=1)
job.theory.mp2(basis="6-31g", reference="uhf", variant="mp2", conv=1.0e-10)
mol = job.run()
print("MP2 total energy:", mol.get_results()["energy"])
For custom spin scaling in Python, pass the scale factors through the same helper:
job.theory.mp2(
basis="6-31g",
reference="uhf",
variant="custom",
same_spin_scale=0.50,
opposite_spin_scale=1.10,
)
Runnable input:
examples/MP2/h2o_ump2_6-31g.inp.
For the H2O / 6-31G example, the validated installed-package run reports:
| Quantity | Value (Ha) |
|---|---|
E(MP2, correlation) |
-0.1278307451 |
E(MP2, total) |
-76.1121207760 |
Spin-Scaled Variants¶
The native MP2 kernel computes same-spin and opposite-spin components separately. Named presets choose scale factors for
E(MP2) = c_ss * (E_aa + E_bb) + c_os * E_ab
| Variant | Same-spin scale c_ss |
Opposite-spin scale c_os |
|---|---|---|
mp2, conventional |
1.0 |
1.0 |
scs-mp2, scs |
1.0 / 3.0 |
1.2 |
sos-mp2, sos |
0.0 |
1.3 |
os-mp2, os, opposite-spin |
0.0 |
1.0 |
ss-mp2, ss, same-spin, sss-mp2, sss |
1.0 |
0.0 |
scs-mi-mp2, scs-mi |
1.29 |
0.40 |
For any other literature parameterization, use variant=custom:
[mp2]
variant=custom
same_spin_scale=0.50
opposite_spin_scale=1.10
Named presets overwrite same_spin_scale and opposite_spin_scale. Set
variant=custom when the numeric scales should be read directly.
Implementation Notes¶
OpenQP assembles the MP2 energy in spin-blocked form on semicanonicalized orbitals. ROHF references are semicanonicalized before the correlation step so the denominator expression is well defined.
The current implementation uses direct per-occupied-MO-pair Coulomb builds
through the existing two-electron driver. It does not store a full fourth-order
MO integral tensor. A guard limits the number of pair builds; if a job aborts
with OQP_MP2_MAX_JBUILDS, reduce the basis/problem size or raise that guard
only after checking the expected runtime and memory cost.
Derivative workflows are not implemented for MP2 yet. Use HF/DFT or response methods for gradients, Hessians, optimization, NACME, SOC, PCM, NMR, IR, and Raman workflows until MP2-specific derivatives are added.
See References for the MP2 and spin-component-scaling papers behind the supported presets.