MRSF-TDDFT¶
Recommended .oqp input
OpenQP 1.3.0 includes the .oqp parser. Start with the physical calculation
you want:
mrsf/bhhlyp/6-31g* opt
geom="h2o.xyz"
This optimizes S0. Write opt(S1) for the next singlet or opt(T0) for
the lowest triplet. Do not enter a ROHF multiplicity: OpenQP selects the
internal MRSF reference automatically. Add controls only when needed:
mrsf(nstate=3)/bhhlyp/6-31g* opt(S1,maxit=100) scf(conv=1e-08)
geom="h2o.xyz"
See the .oqp Quick Start.
MRSF-TDDFT uses input.method=tdhf, tdhf.type=mrsf, and usually a triplet
ROHF reference. Although it is configured through the TDHF/TDDFT response
section, MRSF-TDDFT is used for multiconfigurational ground-state surfaces as
well as excited-state surfaces.
MRSF-TDDFT combines the two high-spin spin-flip reference components into a mixed-reference response problem. This keeps the linear-response workflow close to TDDFT while reducing the spin contamination that can obscure ordinary spin-flip TDDFT roots. See the References page for the original theory, analytic-gradient implementation, and recent accounts.
Energy¶
The concise form defaults to the singlet manifold:
mrsf(nstate=3)/bhhlyp/6-31g*
geom="h2o.xyz"
This calculates S0--S2. Select another physical manifold through the
driver, not through the route:
mrsf(nstate=3)/bhhlyp/6-31g* energy(T0)
geom="h2o.xyz"
This calculates T0--T2. All-electron MRSF also accepts energy(Q0) for a
quintet manifold. Route parentheses accept nstate only.
For MRSF-TDHF, use the explicit basis-only route:
mrsf-tdhf(nstate=3)/6-31g*
geom="h2o.xyz"
Related basis-only routes are sf-tdhf(...), umrsf-tdhf(...), and
tda-tdhf(...); cis(...) is an accepted alias of tda-tdhf(...).
Python:
from oqp.openqp import OpenQP
job = OpenQP("h2o_mrsf", silent=1)
job.molecule(geometry="water", charge=0)
job.theory.mrsf(functional="bhhlyp", basis="6-31g*", nstate=3)
mol = job.run()
results = mol.get_results()
print("Ground/reference energy:", results["energy"])
print("TD energies:", results["td_energies"])
Canonical .oqp input:
mrsf(nstate=3)/bhhlyp/6-31g* energy(S0)
geom="molecule.xyz"
Runnable .oqp:
examples/MRSF-TDDFT/H2O_BHHLYP-MRSFTDDFT_ENERGY.oqp.
For post-run NTOs, attachment/detachment densities, transition densities, cube files, QCSchema export, FCIDUMP export, and external-code comparisons, see MRSF Analysis and Interoperability.
Gradient¶
In canonical input, select the physical state directly; an omitted state
defaults to S0:
mrsf/bhhlyp/6-31g* grad(S2)
geom="h2o.xyz"
Here physical S2 lowers to internal response root 3, matching the
traditional and Python examples below.
Python:
from oqp.openqp import OpenQP
job = OpenQP("h2o_mrsf_grad", silent=1)
job.molecule(geometry="water", charge=0)
job.theory.mrsf(functional="bhhlyp", basis="6-31g*", nstate=3)
job.workflow.gradient(state=3)
mol = job.run()
gradient = mol.get_grad()
The same physical derivative in a canonical file is:
mrsf/bhhlyp/6-31g* grad(S2)
geom="molecule.xyz"
Runnable .oqp:
examples/MRSF-TDDFT/H2O_BHHLYP-MRSFTDDFT_GRADIENT.oqp.
Notes¶
- Logs distinguish the physical target (
S0,S1, and so on) from the triplet ROHF reference and internal response-root index. The reference is an implementation requirement, not the spin or identity of the requested target state. - MRSF states are zero-based within every physical spin manifold.
S0,T0, andQ0lower to response root 1;S1,T1, andQ1lower to root 2. - In Python,
job.theory.mrsf(...)supplies the usual ROHF triplet reference for MRSF-TDDFT, as does the canonicalmrsfroute. In internal metadata,tdhf.multiplicity=1,3, or5is the physical response multiplicity, not the SCF reference multiplicity. - MRSF state numbering follows the spin-flip/MRSF target-state list.
state=1in Python, orgrad=1inproperties, means the lowest MRSF target state, which can be the multiconfigurational ground state. This differs from ordinary TDHF/TDDFT, where state1means the first excited state. - The internal
tdhf.nstatemust include every state requested by gradients, NACME, SOC, or EKT analysis;.oqpinput widens the root count from the driver's state labels automatically, somrsf/bhhlyp/6-31g* grad(S2)solves three roots without a routenstate. - For SOC,
mrsf(nstate=3)/... socrequestsS0--S2andT0--T2. Usemrsf/... soc(ns=3,nt=5)for unequal counts;nsandntmust appear together and cannot be combined with routenstate. - NAMD uses the same zero-based labels.
namd(T0,scheme=Overlap,soc=true)means the first triplet MCH state and lowers tomd.init_state=T0; it must not be written asT1merely because the internal response root is 1. - For ordinary TDDFT, see TDDFT and TDHF.
- For spin-flip TDDFT without mixed-reference correction, use SF-TDDFT.
- UMRSF-TDDFT uses
tdhf.type=umrsfwith a UHF triplet reference. Besides energies it provides analytic nuclear gradients (runtype=grad) and the gradient-drivenoptimize,meci,mecpandtciworkflows for HF, LDA/GGA and global-hybrid functionals;job.theory.umrsf(...)is the compact-API counterpart ofjob.theory.mrsf(...). Range-separated, meta-GGA and double-hybrid functionals and custom spin-pair-coupling scales are energy-only, and Hessians, NACME and SOC are not available for UMRSF. Gradient-driven UMRSF runs accept singlet and triplet response states (tdhf.multiplicity=1or3; roots are numbered from 1 within that manifold, sograd=1withmultiplicity=1is S0). In Python, themultiplicityargument ofjob.theory.umrsf(...)sets the UHF reference; select a triplet response with a followingjob.tdhf(multiplicity=3). UMRSF gradients also accept effective core potentials, and the input checker rejectsproperties.td_prop=True,tdhf.ixcoreand QM/MM (qmmm_flag=True) for them because the relaxed density and ESPF charges those paths consume are not produced. Seeexamples/UMRSF-TDDFT/H2CO_BHHLYP_UMRSFTDDFT_GRAD.oqpand, with an ECP,examples/ECP/HBr_BHHLYP-UMRSFTDDFT_GRAD.oqp.