Skip to content

Molecular frequency-dependent response properties for arbitrary operators

License

Notifications You must be signed in to change notification settings

rdguerrerom/pyresponse

 
 

Repository files navigation

pyresponse

Molecular frequency-dependent response properties for arbitrary operators.

build status codecov license

For documentation, go to https://berquist.github.io/pyresponse_docs/.

Currently, the goal is to provide:

  1. a pedagogical example of a working molecular orbital response program as an almost direct translation from equations to code,
  2. an implementation that gives "exact" results for testing, and
  3. an example of testing and documenting scientific code using modern software development tools.

Installation

To set up a conda environment with all dependencies for running, testing, and building the documentation:

bash ${PROJECT_DIR}/scripts/make_conda_env.bash

Requirements

  • Python >= 3.2 because of pyscf3.6 because of f-strings.
  • pyscf and its dependencies: CMake, NumPy, SciPy, HDF5 + h5py

Other Python dependencies

Psi4 is also required for testing, and is installed as part of the conda environment setup from their conda channel. See the conda script for all dependencies.

Testing

make pytest

Caveats

  • RHF and UHF references only.
  • Hartree-Fock and DFT only; no post-HF methods 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.
  • No iterative schemes are implemented, only "exact" methods involving explicit construction of the full orbital Hessian and then inverting it (for response) or diagonalizing it (for excitation energies/transition moments/residues). Better have lots of memory!
  • Linear response and single residues only.
  • unrestricted diagonalization-based properties are not implemented/working

Desired features (in no specific order)

  • 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.

Desired features that don't fix the caveats

  • Open-ended response: see Ringholm, Jonsson, and Ruud.
  • Finite-difference for testing and higher-order response.
  • Independence from pyscf, requires AO property integral and JK wrapper.
  • Interface to PyQuante and/or pyquante2.
  • Plugin-based interface to Psi4.
  • Jupyter Notebook-based tutorials.
  • Argument type-checking using mypy.

References

Forthcoming...

About

Molecular frequency-dependent response properties for arbitrary operators

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Python 94.9%
  • VBA 4.1%
  • Other 1.0%