oqp.library.namd
Nonadiabatic molecular dynamics (NAMD) — Tully fewest-switches surface hopping
(FSSH) on MRSF-TDDFT adiabatic states.
Design
------
The numerically critical surface-hopping physics lives in Fortran
(``source/modules/namd.F90`` -> C entry ``mrsf_namd_hop``); this Python driver
only *sequences* the existing electronic-structure drivers and integrates the
nuclei with velocity Verlet:
per step: position update (Verlet)
-> SinglePoint.reference() (SCF)
-> BasisOverlap.overlap() (MO overlap vs previous step, phase aligned)
-> SinglePoint.excitation() (MRSF energies + response vectors)
-> Gradient (active state)
-> velocity 2nd half-kick
-> NACME.nacme() (state overlap S = <i(t-dt)|j(t)>)
-> oqp.mrsf_namd_hop() (TDC, RK4 amplitude propagation, EDC,
trivial-crossing follow, FSSH hop +
isotropic velocity rescaling)
-> on hop: recompute gradient on the new active surface
-> output / restart
Units: coordinates in bohr, masses in electron masses, energies in Hartree,
velocities in bohr / atomic-time. Time step is given in fs and converted.
This is the gas-phase (all-QM) path; QM/MM and PBC are layered on later.
Attributes
Classes
Module Contents
- FS_TO_AU = 41.341374575751
- KB_HARTREE = 3.166811563e-06
- AMU_TO_AU = 1822.888486209
- BOHR_TO_NM = 0.05291772109
- NM_TO_BOHR = 18.89726124636483
- HABOHR_TO_KJMOLNM = 49614.75258041956
- KJMOL_TO_HARTREE = 0.0003808798847829512
- class NAMD(mol)
Driver for FSSH nonadiabatic molecular dynamics.
- mol
- nstep
- dt_fs
- dt
- dt_max
- dt_adaptive
- dt_min
- dx_max
- active
- nstate
- substep
- decoherence = 0
- edc_c
- thrshe
- tdc_scheme = 0
- trivial = 0
- trivial_thresh
- init_temp
- seed
- velocity_source = ''
- natom
- mass
- rng
- coef
- vel
- prev_xyz = None
- prev_data = None
- run()
- class NAMD_QMMM(mol)
Bases:
NAMDFSSH NAMD with electrostatic ESPF QM/MM embedding (non-periodic). The QM region is the OpenQP Molecule; the MM region + QM/MM coupling are handled by OpenMM via the OpenQpQMMM driver. Per step: * sync positions (QM Molecule + OpenMM context), * MM electrostatic potential at QM atoms (POTMM), * embedded SCF + MRSF excitation (all states), * active-state embedded gradient = Gradient + grad_esp_qmmm_excited, * ESPF QM charges -> MM forces (forces_mm), * full-system velocity Verlet (QM+MM, atomic units), * QM-only FSSH hop (rescale only QM velocities, as in GAMESS RESCALV).
- qm_atoms
- cutoff
- periodic
- pdb
- forcefield
- driver
- mm
- natom_all
- r_all
- m_all
- v_all
- qm_mass
- run()
- HA_TO_WAVENUM = 219474.6313708
- class NAMD_SOC(mol)
Bases:
NAMDSOC-NAMD (intersystem crossing) on the SHARC spin-adiabatic representation. soc_mrsf builds and diagonalises H = diag(E_MCH) + H_SOC, giving the spin-adiabatic energies (OQP::soc_eval, cm^-1 relative to the lowest excitation) and eigenvectors U (OQP::soc_evec_*). Surface hopping is done on these spin-adiabatic states. Nuclei propagate on the active spin-adiabatic surface using the SHARC weighted-MCH diagonal gradient (sum_i |U_i,a|^2 grad E_i^MCH, triplet Ms sublevels sharing one gradient), which is correct through an S/T crossing where SOC mixes states strongly. The spin-adiabatic FSSH hopping layer uses the local-diabatization propagator with substep energy integration and U-phase tracking (block-Procrustes within degenerate Ms groups) on the block-diagonal MCH state overlap.
- nstate_mrsf
- ns
- nt
- nstate_soc
- active
- coef
- e_ref = 0.0
- e0 = 0.0
- init_state = ''
- econs
- soc_du_dt_corr
- soc_tdc_grad_corr
- run()
- class NAMD_SOC_MCH(mol)
Bases:
NAMD_SOCSOC-NAMD in the MCH (spin-pure) basis. The active state is a single MCH basis function (singlet root or one triplet Ms component), so the nuclear force is the exact MCH root gradient. Electronic amplitudes are propagated by the SOC Hamiltonian in that MCH basis instead of the spin-adiabatic local-diabatization propagator.
- coef
- run()
- class NAMD_SOC_QMMM(mol)
Bases:
NAMD_QMMMSOC-NAMD (intersystem crossing) with electrostatic ESPF QM/MM embedding. Union of the SHARC spin-adiabatic SOC-NAMD machinery (NAMD_SOC) and the ESPF/OpenMM embedding (NAMD_QMMM). Per step: * sync positions (QM Molecule + OpenMM context), * embedded SCF + singlet MRSF + triplet MRSF + soc_mrsf -> (E_diag, U), * spin-adiabatic MCH overlap -> U-phase tracking -> overlap T, * active-surface force = weighted-MCH diagonal gradient, each MCH component carrying its own ESPF embedding gradient, * ESPF QM charges (of the dominant MCH component) -> MM forces, * full-system velocity Verlet (QM+MM, atomic units), * local-diabatization propagation + spin-adiabatic fewest-switches hop, rescaling QM velocities only (as in GAMESS RESCALV). The SOC electronic/hopping kernels are borrowed from NAMD_SOC via explicit NAMD_SOC.<method>(self, ...) calls so this class can inherit the QM/MM embedding plumbing from NAMD_QMMM.- nstate_mrsf
- ns
- nt
- nstate_soc
- active
- coef
- e_ref = 0.0
- e0 = 0.0
- init_state = ''
- econs
- soc_du_dt_corr
- soc_tdc_grad_corr
- run()
- class NAMD_SOC_MCH_QMMM(mol)
Bases:
NAMD_SOC_QMMMQM/MM SOC-NAMD in the MCH basis with exact active-root QM gradient.
- coef
- run()