v1.1 — May 2017

  • Friday, May 19, 2017




Release Notes

Advertised Version: 1.1 Continuous Version: 1.1 Release Date: 19 May 2017 Documentation: http://psicode.org/psi4manual/1.1/ Availability: Public, GitHub source, CMake build, Conda binary installers

New Methods

  • Added analytic RHF Hessians, conventional and density fitted.
  • Added analytic RHF CCSD(T) gradients (no frozen core).
  • Added functional-group and intramolecular symmetry-adapted perturbation theory (F/I-SAPT) capabilities, scripts, and tests. (DOIs: 10.1021/ct500724p, 10.1063/1.4927575)
  • Added high-spin open-shell SAPT0. Note that Ind20,r (and exch counterpart) contains unrelaxed induction. (DOI: 10.1063/1.4963385)
  • Added analytic RHF-CC2 gradients and building of CC2 UHF and ROHF densities.
  • Reworked MCSCF with density-fitting, py driver, augmented Hessian iterations, better printing, and the ability to rotate guess orbitals in MCSCF procedure with MCSCF_ROTATE keyword.
  • Added B86B & PW86 exchange and B86BPBE & PW86PBE exchange-correlation functionals
  • Added X2C and (external) DKH relativistic corrections for post-SCF methods.
  • (external) Added Grimme’s semi-semiempirical HF-3c and PBEh-3c semi-semiempirical energy methods through gCP interface.
  • (external) Added ROHF reference for perturbative methods (e.g., ROHF-CCSDT(Q)) in MRCC interface.
  • (external) Added PCM in the PTE (perturbation to energy) approximation for implicit solvation to CCSD via PCMSolver.
  • (external) Added SIMINT integral interface.

User Improvements

  • Fixed interfragment coordinates in geometry optimizer
  • Added option to only write occupied orbitals to Molden files.
  • Added saving of geometry and normal modes to Molden file after vibrational analysis.
  • Added Jensen [aug-]pc[s][seg]-N, N=0–4 basis sets.
  • Renamed rel_basis keyword to basis_relativistic.
  • Added 3c overlap integrals to libmints.
  • Switched default auxiliary basis sets for sto-3g and 3-21g to def2-SVP series.
  • Enhanced cc* modules to write OPDM back to Wavefunction object if computed and to construct psivars for eom-cc, 0-indexed (ground state = 0).
  • Added psi4.set_options(dict) function, making psi4.geometry(), psi4.set_options(), and psi4.energy(), etc. the mainstays of driving calculations in PsiAPI.
  • Added AO-based CASSCF.
  • Reworked CI root indexing to use 0 as ground-state index, so now CI and CC use so the same indexing for PSI variables.
  • Added atom- and AM-labels to printing of molecular orbitals.
  • Reworked exiting so that if a geometry optimization exceeds maxiter, it no longer just prints a warning and exits sucessfully (beer) but now exits unsuccessfully (coffee) and raises a psi4.ConvergenceError.
  • Reworked psi4.set_memory() to optionally take a string that includes a memory unit. Added a minimum memory (250MiB) and increase the default memory (500 MiB).
  • Reworked parallelism control. Environment variables OMP_NUM_THREADS and MKL_NUM_THREADS now ignored. Control parallelism in PsiAPI with psi4 -nN or in either mode through set_num_threads(N).
  • Reworked Psi variables in dfmp2 module so that duplicated in Wavefunction.get_variables() as well as psi4.get_variables().
  • Added printing of file and line origin for basis sets upon loading. Auxiliary basis sets now get a name (basis1 + basis2 for combination) rather than a blank. Auto-selection of auxiliary basis sets for >=5-zeta orbitals basis sets no longer defaults to def2-quad-zeta when an appropriate >=5-zeta auxiliary basis not available.
  • Added new complete set of test case reference output files.
  • Added BFDb databases.
  • Reworked print in Psithon (input file syntax) to no longer process into print_out commands that redirect to output file. Now it means whatever your python print means.
  • Added to Numpy integration the ability for psi4.core.Matrix and psi4.core.Vector to be converted to NumPy arrays and back. Please see tests/numpy-array-interface for a full suite of examples.
  • Reworked the finding of useful text files in /share/psi4/. Environment variable PSI4DATADIR is now defunct. PSIDATADIR remains but should not need to be used unless you want to specify one not adjacent to the built psi4/core.so library. For running psi4 from both staged and installed locations, it should default just fine and not need PSIDATADIR=/path/to/share/psi4 or psi4 -l /path/to/share/psi4.
  • Added beginnings of JSON interface.

Infrastructure Improvements

  • Relicensed Psi4 from GPL-2.0+ to LGPL-3.0.
  • “Inverted” Psi4 from C++ executable with embedded Python to ordinary Python module layout. Added PsiAPI mode for interacting with Psi4 as Python module (i.e., python -c "import psi4". Tutorial at http://psicode.org/psi4manual/master/psiapi.html .
  • Reworked bin/psi4 so now a light script calling import psi4 rather than a hefty C++ executable. No longer linking to libpython.so.
  • Added Python 3 (3.5 & 3.6) support to existing Python 2.7
  • Reorganized directory layout so that Psi4+Addons in /, Psi4 Python module in /psi4/, and Psi4 C++ library in /psi4/src/.
  • Rewrote build system into a CMake (min version 3.3) superbuild, evicting all external code and leaving each add-on with only a single-file build footprint in the external/upstream/ folder specifying its build as a CMake External Project.
  • Removed setup.py as user interface to CMake build. Now one should call CMake directly using options and guidance in the first ~115 lines of top-level CMakeLists.txt.
  • Switched Python binding of C++ from Boost Python to pybind11. Renamed Py-bound C++ library from “psi4” to “core”. A consequence is that Psi4 now requires full C++11 compliance (GCC 4.9+, Clang 3.3+, Apple Clang 6.1+, ICC 2016.0.2+). Note that ICC requires GCC and therefore GCC 4.9+. Note that PyBind11 adheres more to C-style than Python-style when it comes to references and pointer counting. As such, several functions required deep changes as internal references from C-side are no longer manipulatable Python-side.
  • Added testing mode to see if Psi4 basically works when you turn it on. From a build directory, using CTest, ctest -L smoke. On any executable, using pytest, psi4 --test. On the python module, using pytest, psi4.test().
  • Reworked plugin system to CMake from GNUMake. Use psi4 --plugin-compile to generate Makefile rather than psi4 --new-plugin-makefile as formerly. Plugin interface has been substantially renovated.
  • Renamed plugin generation from, for example, psi4 --new-plugin +wavefunction myplugin to psi4 --plugin-name myplugin --plugin-template wavefunction.
  • Build performs pre-install to BuildDir/stage/ so python driver not being run from source. Use psi4 --inplace to run python driver from source.
  • Switched versioning (e.g., 15 commits after tag v1.0 before tab v1.1rc1) from 1.0.15 to 1.1rc1.dev15.
  • Reworked build documentation into documentation proper (http://psicode.org/psi4manual/master/build_faq.html), making GitHub wiki defunct.
  • Switched Python build detection from find_package(PythonLibs) to find_package(PythonLibsNew) CMake module used by NumPy and pybind11.
  • Reworked ASCII scratch/output file names to incorporate job PID, just as binary scratch files do.
  • Adjusts BLAS/LAPACK detection to detect OpenBLAS and to favor unified runtime library mkl_rt.so for MKL.
  • Added internal variables_ and arrays_ std::maps for double and SharedMatrix types, respectively, to the Wavefunction class. These should be used inside a computation to enable greater localization of variables.
  • Switched Mac conda binary builds from gnu/libstdc++ to clang/libc++ with implications for mixing conda packages with locally compiled software (e.g., plugins from conda Psi4).
  • Rewrote GitHub history of psi4/psi4. All forks prior to 2016-10-19 are no longer valid. Please refork before working on Psi4.
  • Reworked BasisSets to be exclusively built in Python and passed into C-side by the Wavefunction get_basisset and set_basisset calls.

Performance Optimization

  • Reworked I/O in UHF CC routines to avoid expensive sorting.
  • Reworked fitting algorithm behind diatomic() from hard-wired Lagrange interpolations to weighted least squares that can use an arbitrary number of points.
  • Removed ccsort/transqt2 legacy modules from codebase. They can be enabled at build-time for testing.
  • Added threading to MintsHelper for one-body integrals for MIC architectures.

Bug Fixes

  • Fixed OEProp bug for fields and electrostatic potentials when spherical basis sets were used with a symmetry-breaking origin.
  • Fixed CBS syntax bug that produced outrageous HF extrapolations errors for some methods.
  • Fixed DF-MP2 to fail gracefully when no virtual orbitals present.
  • Fixed bug that prevented freezing a bond angle at 0 degrees during a geometry optimization.
  • Fixed CASSCF to return correct variable if state averaging requested.
  • Fixed diag_method=rsp in detci module that wasn’t working.
  • Fixed guess=read for ROHF wavefunctions.
  • Fixed integer overflows in SAPT code and libdpd code (for CC2) and dfocc code (for CCSD(T)).
  • Fixed DF-MP2 gradients in the presence of external potential.
  • Fixed various bugs and useability improvements for calculations in the presence of a dipole field.
  • Fixed silent fail for non-Lebedev numbers in dft_spherical_points.
  • Fixed instability of matrix diagonalization that led to anomolous DFT grid generation on Haswell processors.
  • Fixed specifying non-default basis-set-extrapolation schemes as a keyword argument to energy(), optimize(), etc.
  • Fixed properties_origin["COM"] that wasn’t working.
  • Fixed bug in ccresponse that led to different polariability values with symmetry on and off.
  • Fixed molden(..., dovirtual) bug so that keyword is honored and unrestricted occupations are returned correctly.
  • Fixed wB97X-based functionals that were using 0.3 instead of 0.4. This makes no appreciable difference at the cross-database hundredths of a kcal/mol level but in a little wrong.

External Features and Infrastructure

  • Reworked Libint integration to pull from upstream repository at 1.2.0 or 1.2.1
  • Added new integral library SIMINT by Ben Pritchard for energy integrals, accessed through cmake -DENABLE_simint. Pinned at 0.7.
  • Added using ERD for most all energy integrals (previously only direct conventional HF).
  • Reworked LIBEFP integration so no longer required for Psi4 and so source built from upstream repository, not code internal to Psi4. Bumped LIBEFP to 1.4.2.
  • Bumped CheMPS2 to 1.8.3-12
  • Reworked ambit to reenable it and the ambit plugin template. Ambit not presently linked into Psi4 as not used internally.
  • Reworked DKH integration so that project obtained from home repository, not from code stored in Psi4. Reworked DKH procedure so that orbital basis decontracted to form the DKH one-electron integrals, then recontracted for further calculation.
  • Bumped PCMSolver to 1.1.9 (see also “PTE”).
  • Added basic gCP interface (see also “3c”).
  • Maintained GDMA, MRCC (see also “ROHF-CC”), DFTD3 interfaces.
  • Bumped v2rdm_casscf plugin to 0.3.
  • Switches PubChem to use REST interface.
  • Pinned pybind11 version at 2.0.0 (2.0.1 also known to work).