Skip to content

Spin-Orbit Coupling

OpenQP supports MRSF-TDDFT spin-orbit coupling through runtype=soc. SOC mixes spin-free electronic states through relativistic one-electron terms and, when requested, a mean-field treatment of the two-electron SOC operator. This workflow is useful when intersystem crossing, phosphorescence, or singlet-triplet mixing is important. See the References page for OpenQP's relativistic MRSF-TDDFT SOC method and the mean-field SOC operator background.

.oqp

Use one route count for equal singlet and triplet spaces:

mrsf(nstate=3)/bhhlyp/6-31g*
soc
geom="h2o.xyz"

This requests S0--S2 and T0--T2. For unequal spaces, omit route nstate and specify both counts:

mrsf/bhhlyp/6-31g*
soc(ns=3,nt=5)
geom="h2o.xyz"

Do not combine the two forms. The canonical route also recognizes MRSF-TDHF and MRSF-TDDFTB SOC, subject to the selected backend being available; the detailed all-electron example below is MRSF-TDDFT.

Python:

from oqp.openqp import OpenQP

job = OpenQP("h2o_soc", silent=1)
job.molecule(geometry="water", charge=0)
job.theory.mrsf(functional="bhhlyp", basis="6-31G(2df,p)", nstate=12)
job.workflow.soc(soc_2e=1, scal_rel=2)

mol = job.run()
soc = mol.get_soc()

Legacy .inp:

[input]
runtype=soc
method=tdhf
functional=bhhlyp
basis=6-31G(2df,p)
soc_2e=1

[scf]
type=rohf
multiplicity=3
scal_rel=2

[tdhf]
type=mrsf
nstate=12

Runnable .oqp inputs:

Each has a same-stem legacy .inp companion.

SOC Terms

[input] soc_2e controls the SOC Hamiltonian. The current MRSF-SOC driver forms one-electron Breit-Pauli SOC matrix elements and can add a mean-field two-electron SOC contribution:

Value Meaning
0 One-electron SOC terms only.
1 One-electron plus mean-field two-electron SOC terms.

The all-electron workflow on this page uses MRSF with its automatic triplet ROHF working reference and [tdhf] type=mrsf in legacy input. The SOC driver computes both singlet and triplet response roots internally, so Python scripts should use job.workflow.soc(...) after job.theory.mrsf(...) rather than setting job.tdhf.multiplicity. The Python helper sets [scf] scal_rel=2 by default for the SOC workflow; pass scal_rel=0, 1, or 2 to override it.

Scalar Relativistic Correction

Scalar relativistic correction is separate from SOC. It changes the spin-free one-electron core Hamiltonian and does not mix spin states by itself. In the current OpenQP input surface, the exposed scalar-relativistic keyword is [scf] scal_rel:

Value Meaning
0 No scalar relativistic correction.
1 First-order Douglas-Kroll-Hess correction.
2 First- and second-order Douglas-Kroll-Hess correction.

Use scal_rel when the spin-free Hamiltonian should include DKH scalar relativistic effects. Use runtype=soc and soc_2e when the calculation needs spin-orbit coupling. X2C support is under implementation and should be documented as a user-facing option only after an OpenQP keyword is exposed.