v1.8 — May 2023

  • Thursday, May 11, 2023




Release Notes

Advertised Version: 1.8 Continuous Version: 1.8 Release Date: 11 May 2023 Documentation: Use https://psicode.org/psi4manual/master/index.html for now. Use https://github.com/psi4/psi4/issues/2965 for build documentation. Availability: Public, GitHub source, CMake build, Conda binary installers, Docker Span: 78 PRs

Required Dependency Changes

  • See External Libraries below for dependency bumps.
  • Boost header-only libraries for compiling against Libint2. This isn’t a change to Psi4 or to Libint2; it’s just a change to how Libint2 was packaged.

New Methods

  • Stability analysis is now supported for unrestricted GGAs. (#2849)
  • TDDFT is now supported for unrestricted GGAs. (#2849)
  • Triplet TDDFT excitations from RKS are now supported for LDA and GGA functionals. (#2885)
  • Implementation of new linker functionalities in intramolecular SAPT (ISAPT) as published in https://doi.org/10.1021/acs.jpca.2c06465 . (#2899, #2950, #2956)

External Libraries

  • QCFractal/QCArchive: Continue supporting last official release of QCFractal v0.15.8 and the imminent “next” branch v0.50b10 (available from -c qcarchive/label/next). Demonstrate get_psi_results to make QCFractal runs behave more like serial runs. (#2835, #2929, #2939)
  • BSE: Add capability to use basis sets from the Basis Set Exchange when new optional dependency basis_set_exchange present. Basis sets can be specified with version or without (latest): bse:def2-tzvp or bse:def2-tzvp:0 and in set or assign statements, set basis bse:sto-3g. Note that at the moment, you should specify any aux basis sets or Psi4 will fall back to the universal def2-qz aux. (#2905)
  • DDX: The interface for the pyddx library for continuum solvation is extended by support for the linearized Poisson-Boltzmann model (LPB). NOTE: There is a bug in this as of 1.8.0, but it’s already fixed in master (#2963 and pyddx v0.4.3) and will be released in 1.8.1. (#2918, #2952, #2940, #2921)
  • ADCC: After bugfixes upstream, use >=0.15.16 and reconcile ref data. (#2944, #2942)
  • PCMSolver: Update to v1.2.3 (#2903)
  • Libint2: Psi4 now uses a Libint configured to entirely standard CCA orderings (sss) but that can switch to Psi4’s usual order (gss) at runtime, so no change in internal ordering. This isn’t in upstream Libint, so we’re still on a branch and binary packages need -c conda-forge/label/libint_dev. If you build from source, you’ll get an AM5-generated Libint, but if you specify CMake MAX_AM_ERI=6 (or higher), you’ll get an AM7-generated Libint. (#2861)

Contributors to v1.8

@AlexHeide, @andyj10224, @bennybp, @davpoolechem, @dluu12, @hmacdope, @JonathonMisiewicz, @konpat, @loriab, @lukekurfman, @maxscheurer, @mfherbst, @philipmnel, @q-posev, @TiborGY

Breaking Changes

  • Replace SCF_TYPE=COSX by DFDIRJ+COSX. (#2833)
  • Replace SCF_TYPE=LINK by DFDIRJ+LINK. (#2833)

Performance Optimizations

  • Enable UKS gradient threading. (#2839, #2941, #2945, #2941)
  • Significant acceleration of the calculation of ESP over grid in memory, now without a race condition. (#2891)

Details of Interest

  • Better document DFT code. LSDA gradient (#2839). compute_V, compute_Vx up to GGA and compute_gradient up to LDA (#2863).
  • Alpha and beta densities now screened together, so RKS and closed-shell UKS now screen out the same points. The Hermiticity of the UKS energy Hessian should now be restored. (#2834)
  • The screen-summed density cutoff for the second derivative is no longer independent DFT_V2_RHO_CUTOFF but now defaults to DFT_DENSITY_TOLERANCE which in turn defaults to the Libxc value. (#2834)
  • For memory safety, return integrals as unique_ptrs, not raw pointers. (#2775, #2493, #2855)
  • Remove deprecated code:
    • Old c-side NBOWriter. (#2856)
    • Matrix.diagonalize overloads. (#2837, #2693)
    • Function rsp diagonalizer and supporting functions tqli and tred2. (#2838)
    • Selections from libqt/ras_set.cc and declarations of int* get_frzcpi() and int* get_frzvpi() from qt.h. (#2814)
    • Fortran, C and C++ style wrappers for DGEGS, DGEGV, DGELSX, DGEQPF, DGGSVD, DGGSVP and DTZRQF are removed. (#2823)
    • Psi4 now requires the LAPACK library to provide DGGSVD3 and DGGSVP3. (#2823)
    • Remove unused diagonalizers and linear solvers from dfocc. (#2684)
    • Remove unused Davidson solver from detci. (#2925)
    • Remove unused normalize and schmidt_add from libqt. (#2927)
    • Remove unused sq_rsp (after much work replacing its dependents. (#2928)
  • Improve ECP testing and enable MP2 ECP gradients. (#2836)
  • Provided a more informative error message when SAD crashes due to an atom having more core electrons than basis functions. (#2859, #2853)
  • Rename for clarification build_disp_functor->build_functional_and_disp. (#2874)
  • Add DAXPBY blas call and Vector method. For BLAS implementations that don’t have it (i.e., Apple Accelerate), reroute through DAXPY. (#2887, #2895)
  • Add build_polarized function to create a polarized (UKS) version of an unpolarized (RKS) functional. Needed for triplet derivatives. (#2888)
  • The HF base class has been weakened from having a std::shared_ptr potential_ to having an accessor method, get_potential(). (#2889)
  • The COSX method uses a grid, and some grids have points with negative weights. Suggest the user change the grid rather than segfaulting. (#2890)
  • Usually SCF_TYPE=DF selects the best algorithm between MemDF and DiskDF and the best subalgorithm for each between incore and out-of-core. Users have always been able to specify the algorithm with SCF_TYPE. Now they can specify the subalgorithm with SCF_SUBTYPE (useful for profiling). For SCF_TYPE=PK, SCF_SUBTYPE also allows specifying incore or two out-of-core subalgorithms (replacing removed keywords PK_INCORE and PK_ALGO). (#2848, #2924, #2926)
  • If you call psi4.set_output_file() (note that this is the usual fancy one, not the low-level psi4.core.set_output_file()), that file will now have a psi4 header so suitable for cclib parsing. (#2932, #2893)
  • If you don’t want psi4 managing the logging, psi4 --inherit-loglevel or psi4.set_output_file(..., inherit_loglevel=True) prevents psi4 from resetting the log level, even to default. (#2932)
  • Add CMake options psi4_SKIP_ENABLE_FORTRAN and psi4_INSTALL_CMAKEDIR to sidestep Fortran compiler detection when linking Fortran addons and to specify the psi4Config.cmake install location, respectively. (#2946)
  • Deprecate ERISieve. (#2935)
  • Implement CompositeJK class such that J or K algorithms can live in their own class and be combined at runtime. Users call with “+”. (#2833, #2954)
  • Conventional (non-DF) ccsd(t) gradients will now proceed as finite-difference calculations, which are much more memory efficient. If you still want to access the analytic gradients, add set qc_module ccenergy. (#2943, #2913)
  • Add CMake option psi4_SHGAUSS_ORDERING to use sss (all CCA standard orderings) internally. Expert only! See notes at PR. (#2949, #2537)
  • Psi4 works with next-gen Intel compilers icpx and now uses c++17 standard throughout. (#2861)

Bug Fixes

  • Fixes obvious bug in UV::compute_X. (#2832)
  • Fixes orbital read for finite difference Hessian by only passing write_orbitals=True for the reference geometry. (#2827)
  • Fixes DLPNO-MP2 segfault with Cartesian basis sets by fixing bug in PointsFunction class. (#2840)
  • Fixes a bug causing crashes upon linearly dependent basis sets for some correlated methods. (#2857)
  • Fixes a bug disabling non-orbital optimized DCT with spin restriction. (#2860)
  • Fixes Atom not in list bug with geometric optimizer when using 2-letter elements. (#2872, #2871)
  • Fixes very minor bug where functionals created by dictionary weren’t printing the Libxc citation. (#2877, #2867)
  • Fixes bug where optimize(…, engine=“geometric”, molecule=mol) would not run. (#2929)
  • Fixes bug where FSAPT with an external potential and without no_com/no_reorient set would return wrong answer. (#2934)
  • Fixes obscure case (i.e., Windows normal or Unix elaborate use of CMAKE_INSTALL_*DIR) where the buildsystem install layout was more flexible than the paths glue in bin/psi4 or psi4.__init__.py. (#2948)
  • Fixes a difference in definitions so that wfn.Fa_subset and wfn.Fb_subset now return the correct matrices in the MO basis. (#2958, #1989)

Known Bugs

Search 2918 above. Otherwise, find them and tell us.