v1.2 — July 2018

  • Wednesday, Jul 4, 2018




Release Notes

Advertised Version: 1.2 Continuous Version: 1.2 Release Date: 4 July 2018 Documentation: http://psicode.org/psi4manual/1.2/ Availability: Public, GitHub source, CMake build, Conda binary installers

Major Points of Interest

  • The DFT kernels were migrated to use LibXC, Psi4 now has 400+ functionals including modern functionals such as wB97M-V.
  • The DFT code was optimized leading up to a 4x speed enhancement on 6 cores.
  • A new Density-Fitted JK backend was written, DF-SCF is now up to 2x as fast.
  • Dozens of additional methods, bug fixes, and performance enhancements.


  • Binary installers:
  • Python Anaconda: conda install psi4 -c psi4.
    • If you’re working from Psi4 v1.1 (psi4conda) or any conda Psi4 from 2017, do not update. Instead, create a new environment for a new Psi4. You may need to conda update conda beforehand.

New Methods

  • SNS-MP2
  • Hundreds of new DFT Functionals
  • VV10 non-local dispersion
  • Dispersion Corrected Spin-Component Scaled Double Hybrid (DSD) Functionals
  • Second-Order SCF Convergence of Density Functional Theory
  • Coupled Perturbed Self-Consistent Field (HF and DFT)
  • Second-Order Electron Propagator Theory (EP2)
  • SAPT0 with S^Infinity Induction and Induction Exchange
  • DF Gradients for range-separated and CAM functionals
  • Support for the MolSSI QC Schema interface v1

New Methods (beta)

  • Effective Core Potenitals (ECP’s)

New External Libraries

  • Gau2Grid - Very fast gaussian to grid collocation matrices
  • OpenFermion-Psi4 - Quantum computer interface
  • SNS-MP2 - Spin-Network-Scaled MP2 theory
  • GeomeTRIC - Geometry optimizations in the TRIC coordinate system.

First Time Contributors

  • Peter Kraus (@PeterKraus) - #949, #937, #922, #904
  • Holger Kruse (@hokru) - #877, #912, #914
  • Shannon Houk(@shannonhouck) - #850, #876
  • Johnathan Waldrop (@jwaldrop107) - #921
  • Marvin Lechner (@mhlechner) - #698
  • Jonathon Misiewicz (@JonathonMisiewicz) - #895, #882, #873, #849, #825
  • Adam Abbott (@adabbott) - #761
  • Thomas Sexton (@tsexton) - #780
  • Tianyuan Zhang (@tyzhang1993) - #743
  • Dom Sirianni (@dsirianni) - #776, #952
  • Asim Alenaizan (@alenaizan) - #956

Performance Optimizations

  • Density Fitted 3-index AO->MO transformation significantly improved.
  • MemDFJK module up to 2x as fast as original DFJK for in-core operations.
  • DFT XC kenels threaded with a more efficient vectorization.
  • DFT collocation matrix generation vectorized and exploits cache-level localization.
  • All matrix and vector operations threaded for MIC and large Xeon/EPYC nodes to avoid bottlenecks.

Psi Developer Upgrade Guide

  • The driver method property(...) has moved toproperties(...) to avoid python namespace conflicts.
  • If you have a (non-py-only) plugin,
    • Add PSI_API to your plugin code in this pattern
    • If, upon rebuilding against psi4, you get symbol not found errors, run c++filt on the mangled symbol name, then add PSI_API to the psi4 repo to make sure the core.so you’re linking against is exporting the symbol you need. See example here. Or just file an issue with your lost symbol.
  • Note that anyone wanting to re-use an objdir will need to thoroughly remove the old pybind11 v2.0.0 from detectability. This means:
    • <objdir> rm -rf stage/<TAB-TAB-...-TAB>/includes/pybind11
    • <objdir> rm -rf stage/<TAB-TAB-...-TAB>/share/cmake/pybind11
    • <objdir> rm -rf external/upstream/pybind11
  • Intel 2016 is no longer a valid compiler (doesn’t work with py11 >=2.2.1)

Developer Interests

  • Now uses LibXC for DFT XC kernels (#698)
  • Reworked the building of superfunctionals to use dictionaries (#922)
  • SCF Wavefunctions can now do Hessian-Vector builds see RHF.Hx and RHF.solve for examples. (#760)
  • The DFT V Potential object now has Hessian-Vector functionality. (#698)
  • DFT Functionals now takes advantage of polarized vs unpolarized DFT kernels.
  • Added generalized solvers in p4util/solvers.py. These include DIIS and conjugate gradient
  • New density-fitted AO->MO transform object. More efficient than previous objects and has multiple modes depending on the type of computation (direct or AO storage).
  • ECP SCF energies.
  • ECP gradients by finite differences in Python.
  • DFT is now has several hundred tests against Psi4 and other implementations
  • Shared pointers were rewritten to use std::make_shared. (#836)
  • One-electron integrals from LibMints now properly apply external potentials so that external potentials are now applied evenly throughout the code base (#844).
  • Psi4 is now buildable with Ninja (#794)
  • Begins to deprecate char * from Psi4 (#780)
  • Pragma header for diagnostics and API’s (#774)
  • Improved C++/Python binding docstrings (#761)
  • Clang and YAPF configuration files (#753)
  • Improved parallel and routine timing information in Psi4 (#743)
  • SCF can now be run in symmetry for post-SCF modules that do not use symmetry (#737)
  • Psi4 now compiles much faster (~3 minutes with LLVM on 4 cores) (#736)
  • NumPy views of Psi4 objects are now correctly reference tracked in cases where C++ returns a new matrix. arr = wfn.Ca_subset("AO", "OCC").nph now no longer give noise. (#736)
  • Basis PyParsing is now simpler and code duplication has been removed (#734 )
  • Update cc-pVXZ and add cc-pwCVXZ for Li, Be, Na, Mg (#728)
  • MCSCF orbital semicanonicalization (#722)
  • C++ Options are now exposed to Python (#720)
  • Intermediate sub-system and partial-basis energies from nbody wrapped exported as psivars (#952)
  • Better start/stop/elapsed time printing


  • Additional Documentation Information (#787)


  • Added N to ANO0 basis set (#825)

Bug Fixes

  • Accidental signed integer overflow when using extremely low memory in DFJK
  • wB97X had an incorrect range-seperation parameter. This is now fixed. Note that this did not effect wB97X-D.
  • Restricted-irrep finite-difference Hessians were only returning the totally symmetric portion of the Hessian (in #834)
  • Analytic HF Hessians were wrong under particular circumstances (#903)
  • A bug causing IRCs to converge to the initial transition state was fixed (#882)

Conda changes since v1.1

  • MKL linked dynamically through free Anaconda-provided mkl_rt.so rather than statically linked. This saves size (since NumPy also uses mkl_rt) and eliminates incorrect results and threading damping associated with multiple programs accessing BLAS/LAPACK from multiple sources (#748, #755).
  • Psi4 no longer installs a non-standard gcc5.2 alongside Psi4 on Linux (or gcc feature on Mac). This was necessary when conda’s default 4.8.5 was too low for Psi4’s c++11 requirements, but since conda’s default has leaped to 7.2.0, we use default again. Note that only libraries (e.g., libstdc++) are installed alongside Psi4 now, not compilers (e.g., g++).
  • (generic, not psi4, conda) conda activate env works multishell, not just on bash. Since conda 4.4 c. Dec 2017

Known Bugs

  • PCM-ROHF is broken. See #999
  • ERD interface is broken and disabled