Molecular frequency-dependent response properties for arbitrary operators.
For documentation, go to https://berquist.github.io/pymolresponse/.
Currently, the goal is to provide:
- a pedagogical example of a working molecular orbital response program as an almost direct translation from equations to code,
- an implementation that gives "exact" results for testing, and
- an example of testing and documenting scientific code using modern software development tools.
To set up a conda environment with all dependencies for running, testing, and building the documentation, look under devtools
.
- Python >=
3.2 because of pyscf3.6 because of f-strings. - pyscf and its dependencies: CMake, NumPy, SciPy, HDF5 + h5py
- Psi4
- periodictable (for calculating the center of mass)
- pytest (for testing)
- daltools (for testing?)
- cclib (for testing)
make pytest
- RHF and UHF references only; no ROHF yet.
- Hartree-Fock and DFT only; no post-HF methods yet.
- Real orbitals only; no complex or generalized orbitals yet.
- Because the dimensioning of all arrays is based around the ov/vo space, methods that have non-zero contributions from the oo space (specifically derivatives of GIAOs/London orbitals w.r.t. the B-field) are not currently possible.
- An iterative solver exists for response properties, not transition properties, where only explicit formation and then diagonalization of the orbital Hessian is available.
- Linear response and single residues only.
- unrestricted diagonalization-based properties are not implemented/working
- Non-orthogonal orbitals. Requires switch from using MO energies to full Fock matrices.
- ROHF reference (compare against DALTON). Requires equations for the ROHF orbital Hessian.
- Post-HF support: MP2, CCSD, and CIS. Requires constriction of a Lagrangian.
- Support for GIAOs. Only requires re-dimensioning as long as AO matrix elements are available??
- At least one iterative method for each property type, for example DIIS for inversion and Davidson for diagonalization. Requires matrix-vector products.
- Quadratic response and associated single residues (needed for phosphorescence) and double residues (excited state expectation values and transition moments of linear operators). Requires permutation of linear response solution vectors.
- Open-ended response: see Ringholm, Jonsson, and Ruud.
- Finite-difference for testing and higher-order response.
- Interface to PyQuante and/or pyquante2.
- Jupyter Notebook-based tutorials.
- Argument type-checking using mypy.
Forthcoming...