13. tddft — Time dependent density functional theory¶
13.1. TDHF¶

class
pyscf.tdscf.rhf.
TDA
(mf)[source]¶ TammDancoff approximation
 Attributes:
 conv_tol : float
 Diagonalization convergence tolerance. Default is 1e9.
 nstates : int
 Number of TD states to be computed. Default is 3.
Saved results:
 converged : bool
 Diagonalization converged or not
 e : 1D array
 excitation energy for each excited state.
 xy : A list of two 2D arrays
 The two 2D arrays are Excitation coefficients X (shape [nocc,nvir]) and deexcitation coefficients Y (shape [nocc,nvir]) for each excited state. (X,Y) are normalized to 1/2 in RHF/RKS methods and normalized to 1 for UHF/UKS methods. In the TDA calculation, Y = 0.

as_scanner
(td)¶ Generating a scanner/solver for TDA/TDHF/TDDFT PES.
The returned solver is a function. This function requires one argument “mol” as input and returns total TDA/TDHF/TDDFT energy.
The solver will automatically use the results of last calculation as the initial guess of the new calculation. All parameters assigned in the TDA/TDDFT and the underlying SCF objects (conv_tol, max_memory etc) are automatically applied in the solver.
Note scanner has side effects. It may change many underlying objects (_scf, with_df, with_x2c, ...) during calculation.
Examples:
>>> from pyscf import gto, scf, tdscf >>> mol = gto.M(atom='H 0 0 0; F 0 0 1') >>> td_scanner = tdscf.TDHF(scf.RHF(mol)).as_scanner() >>> de = td_scanner(gto.M(atom='H 0 0 0; F 0 0 1.1'))
[ 0.34460866 0.34460866 0.7131453 ] >>> de = td_scanner(gto.M(atom=’H 0 0 0; F 0 0 1.5’)) [ 0.14844013 0.14844013 0.47641829]

e_tot
¶ Excited state energies

get_ab
(mf=None)[source]¶ A and B matrices for TDDFT response function.
A[i,a,j,b] = delta_{ab}delta_{ij}(E_a  E_i) + (iabj) B[i,a,j,b] = (iajb)

get_nto
(tdobj, state=1, threshold=0.3, verbose=None)¶ Natural transition orbital analysis.
The natural transition density matrix between ground state and excited state \(Tia = \langle \Psi_{ex}  i a^\dagger  \Psi_0 \rangle\) can be transformed to diagonal form through SVD \(T = O \sqrt{\lambda} V^\dagger\). O and V are occupied and virtual natural transition orbitals. The diagonal elements \(\lambda\) are the weights of the occupiedvirtual orbital pair in the excitation.
Ref: Martin, R. L., JCP, 118, 47754777
Note in the TDHF/TDDFT calculations, the excitation part (X) is interpreted as the CIS coefficients and normalized to 1. The deexcitation part (Y) is ignored.
 Args:
 state : int
 Excited state ID. state = 1 means the first excited state. If state < 0, state ID is counted from the last excited state.
 Kwargs:
 threshold : float
 Above which the NTO coefficients will be printed in the output.
 Returns:
 A list (weights, NTOs). NTOs are natural orbitals represented in AO basis. The first N_occ NTOs are occupied NTOs and the rest are virtual NTOs.

transition_dipole
(tdobj, xy=None)¶ Transition dipole moments in the length gauge

transition_magnetic_dipole
(tdobj, xy=None)¶ Transition magnetic dipole moments (imaginary part only)

transition_magnetic_quadrupole
(tdobj, xy=None)¶ Transition magnetic quadrupole moments (imaginary part only)

transition_octupole
(tdobj, xy=None)¶ Transition octupole moments in the length gauge

transition_quadrupole
(tdobj, xy=None)¶ Transition quadrupole moments in the length gauge

transition_velocity_dipole
(tdobj, xy=None)¶ Transition dipole moments in the velocity gauge (imaginary part only)

pyscf.tdscf.rhf.
as_scanner
(td)[source]¶ Generating a scanner/solver for TDA/TDHF/TDDFT PES.
The returned solver is a function. This function requires one argument “mol” as input and returns total TDA/TDHF/TDDFT energy.
The solver will automatically use the results of last calculation as the initial guess of the new calculation. All parameters assigned in the TDA/TDDFT and the underlying SCF objects (conv_tol, max_memory etc) are automatically applied in the solver.
Note scanner has side effects. It may change many underlying objects (_scf, with_df, with_x2c, ...) during calculation.
Examples:
>>> from pyscf import gto, scf, tdscf >>> mol = gto.M(atom='H 0 0 0; F 0 0 1') >>> td_scanner = tdscf.TDHF(scf.RHF(mol)).as_scanner() >>> de = td_scanner(gto.M(atom='H 0 0 0; F 0 0 1.1'))
[ 0.34460866 0.34460866 0.7131453 ] >>> de = td_scanner(gto.M(atom=’H 0 0 0; F 0 0 1.5’)) [ 0.14844013 0.14844013 0.47641829]

pyscf.tdscf.rhf.
gen_tda_hop
(mf, fock_ao=None, singlet=True, wfnsym=None)¶ Generate function to compute (A+B)x
 Kwargs:
 wfnsym : int or str
 Point group symmetry irrep symbol or ID for excited CIS wavefunction.

pyscf.tdscf.rhf.
gen_tda_operation
(mf, fock_ao=None, singlet=True, wfnsym=None)[source]¶ Generate function to compute (A+B)x
 Kwargs:
 wfnsym : int or str
 Point group symmetry irrep symbol or ID for excited CIS wavefunction.

pyscf.tdscf.rhf.
gen_tdhf_operation
(mf, fock_ao=None, singlet=True, wfnsym=None)[source]¶ Generate function to compute
[ A B][X] [B A][Y]

pyscf.tdscf.rhf.
get_ab
(mf, mo_energy=None, mo_coeff=None, mo_occ=None)[source]¶ A and B matrices for TDDFT response function.
A[i,a,j,b] = delta_{ab}delta_{ij}(E_a  E_i) + (iabj) B[i,a,j,b] = (iajb)

pyscf.tdscf.rhf.
get_nto
(tdobj, state=1, threshold=0.3, verbose=None)[source]¶ Natural transition orbital analysis.
The natural transition density matrix between ground state and excited state \(Tia = \langle \Psi_{ex}  i a^\dagger  \Psi_0 \rangle\) can be transformed to diagonal form through SVD \(T = O \sqrt{\lambda} V^\dagger\). O and V are occupied and virtual natural transition orbitals. The diagonal elements \(\lambda\) are the weights of the occupiedvirtual orbital pair in the excitation.
Ref: Martin, R. L., JCP, 118, 47754777
Note in the TDHF/TDDFT calculations, the excitation part (X) is interpreted as the CIS coefficients and normalized to 1. The deexcitation part (Y) is ignored.
 Args:
 state : int
 Excited state ID. state = 1 means the first excited state. If state < 0, state ID is counted from the last excited state.
 Kwargs:
 threshold : float
 Above which the NTO coefficients will be printed in the output.
 Returns:
 A list (weights, NTOs). NTOs are natural orbitals represented in AO basis. The first N_occ NTOs are occupied NTOs and the rest are virtual NTOs.

pyscf.tdscf.rhf.
transition_dipole
(tdobj, xy=None)[source]¶ Transition dipole moments in the length gauge

pyscf.tdscf.rhf.
transition_magnetic_dipole
(tdobj, xy=None)[source]¶ Transition magnetic dipole moments (imaginary part only)

pyscf.tdscf.rhf.
transition_magnetic_quadrupole
(tdobj, xy=None)[source]¶ Transition magnetic quadrupole moments (imaginary part only)

pyscf.tdscf.rhf.
transition_octupole
(tdobj, xy=None)[source]¶ Transition octupole moments in the length gauge

pyscf.tdscf.rhf.
transition_quadrupole
(tdobj, xy=None)[source]¶ Transition quadrupole moments in the length gauge

pyscf.tdscf.rhf.
transition_velocity_dipole
(tdobj, xy=None)[source]¶ Transition dipole moments in the velocity gauge (imaginary part only)