v1.7 — December 2022

  • Tuesday, Dec 6, 2022




Release Notes

Advertised Version: 1.7 Continuous Version: 1.7 Release Date: 6 Dec 2022 NYI Documentation: https://psicode.org/psi4manual/1.7.0/ Availability: Public, GitHub source, CMake build, NYI Conda binary installers Span: 141 PRs

Required Dependency Changes

New Methods

  • Hybrid perturbative methods REMP (https://doi.org/10.1063/1.5086168) and OO-REMP (https://doi.org/10.1021/acs.jctc.1c00280) with cc_type = CONV/DF/CD. REMP is essentially a hybrid between MP and CEPA(0) rewritten as perturbation theory (https://doi.org/10.1016/j.cplett.2006.07.081). REMP2 energies and OREMP2 energies and non-CD gradients are available. (#2354, #2653, #2670)
  • UHF non-orbital-optimized, non-FNO coupled cluster methods: DF/CD energies and DF gradients for UHF CCD/CCSD are available. (#2739)
  • Implementation of PCM and COSMO solvation models based on the ddx library. (#2767)

External Libraries

  • Works with geomeTRIC v1.0 rather than longstanding v0.9.7. (#2750)
  • Internal ADC module removed. External ADCC v0.15.13 module covers its capabilities and more. (#2737, #2785)
  • Works with Libxc v5 or v6. (#2815, #2817)
  • Replace internal C++ geometry optimizer, optking, with an external Python module. (#2727)
    • Most inputs should continue to work as before.
    • The fixed_* optimization keywords have been changed to ranged_* options.
    • Optimizer output will be changed. Check output.dat for simple convergence/step info and output.log for detailed info.
    • IRC convergence behavior different for minima and substep.
    • Note that this is a new required dependency.
  • Interface to the ddx library for solvation. (#2767)
  • Additionally support the next branch of QCArchive with the distributed driver, as well as the longstanding v0.15.8 (#2821)
  • Upstream maintained and developed software for Grimme empirical dispersion corrections is now interfaced. The longstanding slight forks maintained by Psi4 folks still work and will be maintained until there’s a reason not to. All are still run through QCEngine. Psi4 chooses automatically based on what’s detected, so no change to input files needed. Package names and locations are a little different – see table at PR or in docs. (#2791, #2360)

Contributors to v1.7

@AlexHeide, @andyj10224, @aquaticseatard, @behnle, @bozkaya, @davpoolechem, @JonathonMisiewicz, @JoshRackers, @lazaroid, @loriab, @psi-rking, @maxscheurer, @mfherbst, @philipmnel, @sashashura, @susilehtola, @tallakahath, @TiborGY, @yxie326, @zachglick

Breaking Changes

  • MRCC now called with set qc_module mrcc rather than “mr” prefix onto method. (#2731)
  • Arbitrary-order MPn no longer runable with ROHF. Arbitrary-order ZAPTn no longer runable with RHF. Use MPn for RHF and ZAPTn for ROHF. (#2731)
  • Downstream plugin users who were still getting wfn from globals will find it has now departed. Please follow the advice it’s been issuing for years to do wfn passing. (#2727)

Performance Optimizations

  • Improves convergence of DF & CD orbital-optimized methods by implementing coupled DIIS for dfocc module. Can now converge tightly. (#2354, #2669)
  • Optimizes the integral transformation step of SAPT(DFT) where the transformed MO is written to disk. (#2481)
  • Running wavefunction SAPT0 through the SAPT(DFT) procedure now avoids redundant SCF calculations. (#2481)
  • Fixed a bug where UKS was not properly parallelized. (#2824)

Details of Interest

  • Migrate density screening from TwoBodyAOInt toward JK objects. (#2547)
  • Expanded standard suite testing to check return and QCVariable contracts for remp2, oremp2, omp2, omp2.5, omp3, oremp2, olccd, and filled in some gaps for ccsd, ccsd(t), a-ccsd(t). (#2653, #2632)
  • Tightened rms_mograd_convergence default for OO in occ and dfocc modules so that at least small molecules reliably compute energies, gradients, and findif gradients to 1e-6. (#2653, #2669)
  • Tightened r_convergence default computed from e_convergence for non-OO in dfocc module. (#2669)
  • Syntax modernization and removing unused and clearing memory leaks. (#2610, #2626, #2649, #2663, #2671, #2672, #2654, #2677, #2679, #2666, #2678, #2721, #2772, #2774, #2776, #2805, #2813, )
  • Replacing ERISieve (#2660, #2657, #2659)
  • Retire deprecated syntax and machinery. (#2592, #2787, #2809, #2819, #2727)
  • Improve docs reliability by turning on strict checking and running at PR time. (#2607)
  • Adds contributing excitations to tdscf output for non-C1 symmetry. (#2605)
  • If DFT functional returns NaN, throw an error rather than waiting for ADIIS to balk. Note that whether this triggers may depend on the compiler: https://groups.google.com/g/llvm-dev/c/Ys0hpgTFMH8?pli=1 . (#2611)
  • Updates LibXC interface so that one can set omega for any functional that contains it, rather than only for a hardcoded list of functionals. (#2643)
  • References with more beta than alpha orbitals of a given irrep can now be represented, as docc and socc are computed from alpha and beta rather than the other way around. (#2619)
  • Adds an option to FREEZE_CORE called “policy”, which enables frozen core settings to be looked up from a list specified in the global variable FREEZE_CORE_POLICY. This is more flexible than NUM_FROZEN_DOCC for situations like SAPT where multiple molecules are run in the same command and may require different individual numbers of frozen cores. (#2667)
  • Incremental Fock builds
    • Turn off incfock by default for SCF_TYPE=COSX for greater reliability. (#2689)
    • Standardizes the incfock implementation of DFJLinK toward the model of DFJCOSK, thereby improving memory usage. (#2792)
    • Standardizes the incfock implementation of DirectJK toward the model of DFJCOSK, thereby improving memory usage. (#2808)
    • Enhances the incfock implementation of DFJCOSK to be like the others: controlled by INCFOCK keyword (replacing COSX_INCFOCK), able to recompute the full Fock matrix every n iterations controlled by INCFOCK_FULL_FOCK_EVERY, and able to disable incfock at a certain INCFOCK_CONVERGENCE threshold. (#2816)
  • Update CC* modules toward internal use of Wavefunction: remove unused code, MOInfo->Wfn data, Libmints for orbital rotation, use Matrix class, Slice notation, orbital indexing management. (#2703, #2696, #2704, #2715, #2719, #2720, #2751, #2753, #2782, #2786, #2812, #2818, #2826)
  • Brueckner CC no longer set QCVariable CCSD TOTAL ENERGY as the final result but instead set BCCD-specific variables from the final iteration and some other variables from the first iteration. BRUECKNER_ORBS_R_CONVERGENCE parameter tightened when defaulting from E_CONVERGENCE. (#2708)
  • Renovate PSIO to improve error messaging. (#2711, #2700, #2724, #2741, #2756, #2773)
  • Improve Matrix/Vector tech.
    • Refactor Vector and IntVector. (#2628, #2705)
    • Allow non-symmetric matrix <-> dpdfile2. (#2722)
    • Matrix::set_block can be used on matrices that are not totally symmetric. (#2734)
    • Check Matrix size compatability in gemm(). (#2729)
    • Improved Matrix::transform’s ability to handle edge cases. (#2748)
    • Improved Matrix::back_transform’s ability to handle edge cases. (#2745)
    • Matrix::get_block can be used on matrices that are not totally symmetric. (#2752)
  • Running DF through CCENERGY (experimental, expert only) may now require set qc_module ccenergy. (#2731)
  • Many NYI messages, whether from ManagedMethodError, MissingMethodError, or plain ValidationError from run_* fns have changed their wording and added content. On the whole, this should be helpful, but if you’re searching for particular phrasing, you’ll likely need to adjust regexes. (#2731)
  • Capabilities tables in documentation made more detailed and thorough; autogenerated from tests. (#2731)
  • Modified the orbital instability following procedure. This should be a minor change for most applications: contact developers if you notice a problem. (#2758)
  • LinearK algorithm has been removed as an option to SCF_TYPE=DIRECT (DO_LINK is no longer an option). It has been added back through SCF_TYPE=LINK that enables integral-direct density-fitted J + Linear Exchange K algorithm combination for JK computations. (#2762, #2768)
  • Delayed announcement that IR intensities through finite difference Hessians work as of distributed driver in v1.6. (#2469)
  • UHF instability analysis is migrated over to use the Python Davidson solver. This adds LDA UKS instability analysis. (#2766)
  • The keyword SOLVER_ROOTS_PER_IRREP has been added to allow more fine-tuned control over the roots converged during instability analysis. (#2766)
  • Instability keywords have moved from the CPHF module to the SCF module. See the corresponding SCF subsection of the documentation for details. (#2766)
  • The LINEQ_SOLVER option for occ has been removed in favor of LAPACK calls. (#2778)
  • Kinetic energy, potential energy, and virial energy are added as QCVariables for fully QM HF and CC computations. The variable names are subject to change. (#2769)
  • Changed the default scaling scheme of SAPT(DFT) exchange-dispersion energy is now changed from DISP to FIXED which scales the uncoupled Exch-Disp2 by 0.769848. (#2481)
  • Added shortcut for SPW92 functional. (#2784)
  • Replace sq_rsp() function internally with a new wrapper to DSYEV. Deprecate rsp() and sq_rsp(). (#2686, #2798)
  • Orbital-optimized occ densities now available on the wavefunction. (#2788)
  • DC-06 densities now symmetrized. (#2788)
  • Empirical dispersion capabilities changed slightly between dftd3 and s-dftd3. In particular, the former can also do -D2 and the latter can do 3-body -D3 in the same call as 2-body -D3. All Psi4 calls will continue to do only 2-body -D3 as default (regardless of dftd3 or s-dftd3 engine). That is, -d3 is still an alias to -d3zero which is now an alias to a new extension -d3zero2b, which can now be given explicitly disallow 3-body as a tweakable parameter (internally, s9:=0.0). When s-dftd3 is the engine, another set of new extensions, e.g., -d3atm alias of -d3zeroatm turns on 3-body (s9=1.0) and allows user tweaks. This latter is the same behavior as -D4, which turns on 3-body by default. If this seems confusing, state what calc you want — e.g., energy(“b3lyp-d3atm”) — and Psi4 will figure out if you have the right engine to do the job. (#2791)
  • psi4.core.Molecule.run_dftd3 and qcdb.Molecule.run_dftd3 don’t work with s-dftd3. Please file an issue if you really want this capability. run_gcp will use classic gcp or mctc-gcp interchangeably, whichever you have available. (#2791)

Bug Fixes

  • Fixed memory estimates for larger systems in dfocc module by deploying long ints. (#2354, #2669)
  • Fixed OO ROHF printing and setting wrong plain MP2 energies. Fixed wrong Wfn.energy_ for OMP3 & OMP2.5. (#2653)
  • Worked around Intel compiler bug. (#2625)
  • Fixed memory estimation bug in DFTensor that affects fno-df-cc. (#2673)
  • Fixed c1_deep_copy which sent nsopi_ to Wavefunction::epsilon_subset_helper in place of the number of occupied orbitals. When nsopi_[h] > nmopi_[h] for some h, this led to accessing out-of-bounds memory. (#2692)
  • Fixed Mulliken charges used qualitatively in DLPNO-MP2. (#2707)
  • Fixed SCF gradient segfault from serialized Wavefunction. (#2712, #2714)
  • Fixed insidious bug in Lebedev initialization that fails approximately once-in-a-thousand in parallel DFT runs. (#2743)
  • Fixed segfaults in Matrix::transpose and Matrix::transpose_this for matrices that are not totally symmetric. Now performs the transpose or raises an error messages, respectively. (#2740)
  • Fixed arbitrary order methods and MRCC methods to work with distributed driver. (#2731)
  • Fixed CBS extrapolated finite-difference Hessians crashing on molecules with zero dipole moment. (#2759)
  • Fixed so basis_relativistic <name> {...} now works. (#2764)
  • Fixed using multithreading with PK algorithm and small basis sets. (#2760, #2763)
  • Fixed a segfault caused by Libint2’s engine.h being indirectly imported into mintshelper.cc. (#2770)
  • Raise an error when a user requests more roots of detci than there are determinants. (#2779, #2780)
  • Fixed a bug where UHF-CCSD properties were incorrect when some orbitals were singly occupied (#2818)
  • Previous to QCEngine v0.26.0 (now required), the pairwise dispersion analysis returned by executable/classic/psi4-channel dftd3 was scaled differently from that by s-dftd3 and dftd4 (any channel). This has been fixed. However, one must be consistent about QCEngine/Psi4/fsapt.py versions. A consistent set are QCEngine >=0.26.0 and Empirical_Disp.dat file generated in the course of energy(“fisapt0-d”) by v1.7 or later Psi4 and script fsapt.py released with Psi4 v1.7 or later. This is semi-enforced since v1.7 requires v0.26 (fsapt.py is a free agent). Another consistent set is QCEngine <0.26.0 and Psi4 and fsapt.py <v1.7. Mixing old Psi4 or fsapt.py with new QCEngine and classic dftd3 can yield wrong fisapt analysis, and this isn’t trapped. (#2791)

Known Bugs

Find them and tell us