MRSF-TDDFT¶
Source access and public downloads
Repository paths identify files in the licensed engine source; they are not public downloads. For freely downloadable .oqp inputs and results, see Worked Examples.
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.