Skip to content

1.2, 2018-07-04

Choose a tag to compare
@loriab loriab released this 05 Jul 02:29
· 3802 commits to master since this release

Advertised Version: 1.2
Continuous Version: 1.2
Release Date: 4 July 2018
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

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 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/ 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 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