v1.6 — May 2022

  • Thursday, May 19, 2022




Release Notes

Advertised Version: 1.6 Continuous Version: 1.6 Release Date: 19 May 2022 NYI Documentation: https://psicode.org/psi4manual/1.6.0/ NYI Availability: Public, GitHub source, CMake build, Conda binary installers Span: 138 PRs

Required Dependency Changes

  • SciPy for ADIIS/EDIIS. Can be avoided.
  • Python minimum bumped to v3.8.
  • No longer need GMP/MPFR to build against Libint2. Better Eigen3, Boost transitive dependency handling. (#2413, #2046)
  • Newer Libint2 required (interface change) and need new integrals classes. When in doubt, make a new conda environment to get a suitable Libint2.
  • Pytest >=7 is required.
  • Perl no longer required for testing. (#2551)
  • msgpack-python required to keep numpy arrays serialized when communicating in schema. (#2575)

New Methods

  • ADIIS/EDIIS for RHF/UHF. Now the default. (#2320, #2235)
  • E(30)exch-ind term in SAPT2+3 without the S^2 approximation. (#2314)
  • Linear exchange matrix build (LinK) in Direct SCF algorithm. (#2359)
  • “Chain of Spheres” exchange. Used with density-fitted J, this is completely in-core and faster than DF for large system. Access through SCF_TYPE=COSX. (#2567)

External Libraries

  • libecpint – switched from internal code to R. Shaw’s library. Enable with -D ENABLE_ecpint=ON. Analytic gradients and Hessians available (use with caution for post-SCF). Conda packages available for Linux and Mac. (#2368, #2135)
  • For ADC, the built-in code is deprecated and will only be used if external adcc library is not present. Built-in adc module will be fully removed in v1.7. (#2419)
  • adcc, cppe, openfermion, dftd4: some external libraries previously packaged on psi4 conda channel, it is now advisable to obtain from conda-forge. See GitHub Action for details on running with Psi4. (#2454)
  • Use of Libint2 is much expanded, including one-electron integrals and F12 integrals. See details below and summary at https://github.com/psi4/psi4/blob/master/doc/sphinxman/source/prog_integrals.rst#one-electron-integral-algorithm-overview. (#2527)
  • Ambit >=v0.6 required if ambit enabled. (#2546)
  • For CheMPS2, DMRG densities saved to wavefunction to allow natural orbitals. (#2570, #2558)

Contributors to v1.6

@alenaizan, @andyj10224, @brianz98, @carolinesargent, @cgbriggs99, @e-kwsm, @konpat, @lazaroid, @philipmnel, @susilehtola, @TiborGY, @timostrunk, @andysim, @hokru, @jeffschriber, @JonathonMisiewicz, @jturney, @loriab, @maxscheurer, @zachglick

Breaking Changes

  • Require adcc 0.15.9 and possible adjustment to environment keyword. (#2393)
  • Scalar Debye-based n-pole components QCVariables are retired, replaced by atomic-units arrays (e.g., CC DIPOLE X –> CC DIPOLE. (#2479)
  • External charges locations now always specified in Bohr, rather than units of molecule. Also, creation of QMMM object is discouraged. Instead, pass charges and locations through external_potentials keyword argument. (#2515)
  • In composite (CBS) methods, extrapolation functions like corl_xtpl_helgaker_2 must be referred to as strings, not objects. User-supplied ones use NumPy arrays rather than psi4.core.Matrix objects and must be registered with a register_xtpl_function function call. In any inputs where the cbs() function was referred to as an object (e.g., energy(cbs)), it must now be referred to by string (e.g., energy("cbs")). Functions analogous to sherrill_gold_standard must be referred to as strings and registered with register_composite_function. Running old inputs will trigger update guidance. (#2526, #2532, #2575)
  • The default energy("sapt0") code changed its default density-fitting basis, so it’s more physically correct and matches energy("fisapt0") values but no longer matches values reported from high-level SAPT methods. (#2582)
  • Hessian calculations no longer always evaluate gradient beforehand to test safety of projecting rotations. Instead assuming unsafe. Can pass ref_gradient array to test on or set findif fd_project T/F explicitly to control. (#2575)
  • Previously, the CBS wrapper issued a clean() btwn calcs. Plain “string modelchem” calcs like energy('hf/cc-pvdz') were getting caught and also being cleaned, meaning their behavior was slightly different than set basis cc-pvdz \n energy('hf'). Now, string modelchem calcs behave like “set” calcs, so for occasional string modelchem calcs (that is, energy|gradient|hessian("mtd/bas") only), you may need to add a clean in the input. Signatures of this problem are PSIO errors and, in an obscure case, CC amplitudes being all zeros when called as mtd/bas. An example is shown below, collected by modifying steps 6 & 7 of cbs-xtpl-energy-conv test: (#2575)
master (pre-v1.6) ddd (v1.6)
set basis bas; energy(mtd); clean() ok ok
set basis bas; energy(mtd) PSIO_ERROR: (Incorrect block end address) PSIO_ERROR: (Incorrect block end address)
energy(mtd/bas); clean() ok ok
energy(mtd/bas) ok PSIO_ERROR: (Incorrect block end address)
  • The n-body wrapper can no longer do embedding with internally calculated Mulliken charges. Charges must now be provided with embedding_charges kwarg. (#2575)
  • The Libint2 conda packages for Linux are no longer extra-high angular momentum (AM) compared to Mac and Windows. There isn’t a proven Libint2 tarball file for higher AM if requested through MAX_AM_ERI.

Performance Optimizations

  • Improve performance for the DLPNO-MP2 algorithm on many-core machines by around 20%. (#2378)

Details of Interest

  • Modernize -D ENABLE_XHOST CMake option for processor tuning to more architectures. (#2377, #2384)
  • Remove potentially buggy convergence metric in DCT. (#2381)
  • Plan memory feasibility correctly for large (~1k nbf) (FNO)-DF-CC computations. (#1372, #2382)
  • Memory/const cleanup (DMRG #2383; FittingMetric #2417; SCF #2425; FNOCC #2421, #2444, #2561; CCDENSITY #2438; CCEOM #2466) MERGE* Move DIIS to Python, and implement ADIIS/EDIIS (#2369, #2387, #2436, #2445, #2449)
  • Allow C++17 syntax in code (#2392)
  • Fix guess mix with SAD and other guesses. (#2411)
  • Expose to Python (Vector.clone() #2375; FittingMetric #2420; DIISManager::reset_subspace() #2437; OEProp #2507)
  • Add an atomic blocking scheme for quadrature grid points (needed for COSX and ddCOSMO). (#2336)
  • Reform ccdensity keywords around OPDM relaxation. Keywords ONEPDM, OPDM_ONLY, ONEPDM_GRID_DUMP, and OPDM_GRID_DUMP affected. (#2432, #2434)
  • Store cc* modules results in QCVariables and use them in testing. These include energies, left- and right-overlap vectors, dipole polarizability, specific rotation, quadrupole polarizability, oscillator strength, Einstein coefficients, rotatory strength. (#2440, #2443, #2447, #2451, #2456, #2460, #2461, #2508, #2514, #2525, #2541)
  • Reconcile excited-state QCVariable names in EOMCC, TDSCF, ADC, ADCC. Remove “EOM-” in some cases. In general, a value is stored in each of the following qcvars. (#2462, #2470, #2475, #2506, #2533, #2513, #2538, #2486, #2569)
    "{method} ROOT {global_idx_from} -> ROOT {global_idx_to} {property}"
    "{method} ROOT {global_idx_from} -> ROOT {global_idx_to} {property} - {transition_irrep} TRANSITION"
    "{method} ROOT {global_idx_from} ({irrep_from}) -> ROOT {global_idx_to} ({irrep_to}) {property}"
    "{method} ROOT {within_irrep_idx_from} (IN {irrep_from}) -> ROOT {within_irrep_idx_to} (IN {irrep_to}) {property}"
  • Libint2
    • Switches one-electron integrals to Libint2. (#2388)
    • Convert all double shell loops to use Onebody object’s shell pair list instead. (#2388)
    • Convert multipole potential ints to use McMurchie-Davidson recursions. (#2414)
    • Convert X2C ints to use L2 engines. (#2388)
    • Convert AngularMomentum ints to use McMurchie-Davidson recursions. (#2414; #2483)
    • Screening of one electron integrals to improve efficiency of PCM, EFP, and embedding methods. (#2388)
    • Parallelized PCM integral computations, which are typically rate-limiting for implicit solvent SCF. (#2388)
    • Three-center overlap integrals using Libint2. (#2489)
    • Arbitrary-order multipole integrals (and gradients) with McMurchie-Davidson. (#2496)
    • Multipole Potential Integrals (for EFP/PE) with McMurchie-Davidson. (#2504)
    • Remove Obara-Saika recursion code. (#2517)
    • Algorithm summary https://github.com/psi4/psi4/blob/master/doc/sphinxman/source/prog_integrals.rst#one-electron-integral-algorithm-overview (#2527)
    • F12 integrals. (#2502)
  • Cleanup find_occupation and add more sanity checks to avoid sudden changes of occupation. (#2488)
  • Removed specialized dipole and quadrupole code from OEProp, so now that printing looks a little different. (#2485)
  • Access Yukawa integrals from Libint2. (#2386)
  • Adapt DIIS for ambit (#2505)
  • Added CI Testing of add-ons, particularly those now advised to get from conda-forge, not psi4, channel. (#2454)
  • All tests runable through Pytest. Those written natively for pytest form subset -m api. Those in the usual CTest suite form subset -m cli. (#2454, #2495)
  • A new logging file is added and default output file naming simplified at edge cases. Set different log level with psi4 input.dat --loglevel=10. The log file is the place to look for composite, finite difference, and manybody output. (#2512; #2575)
  • Allow JK screening to be SCF-iteration-dependent. Make derived JK classes responsible for zeroing their matrices. (#2529)
  • Add option to locate path to Python module from Psi4 executable: psi4 --module. (#2530)
  • Add QCVariables FINDIF NUMBER, CBS NUMBER, NBODY NUMBER to check how many jobs the wrappers are running. (#2544)
  • Use better driver-targeted (e.g., energy vs. findif freq) convergence criteria and determination of what analytic derivatives available. (#2536)
  • Standardize pair energy arrays across CC modules and save them as QCVariables. (#2551, #2568)
  • Add dipole derivative by finite difference of dipoles. IR intensities available. (#2552; #2575)
  • Add means of saving CCSD amplitudes in QCSchema through extras["psi4:tamps"]. (#2328)
  • Various n-body QCVariables have been renamed. Old ones will work for a while. (#2575)
    # from: to
  • The output generated from wrappers (cbs/composite, findif/finite difference, manybody/nbody) now writes the single-point calc to the output file after completion, not in real-time. Ordinary analytic single-point calcs continue to write to output in real-time. (#2575)

Bug Fixes

  • Allow MBIS volume ratios to be called from set scf_properties ['MBIS_VOLUME_RATIOS']. This is equivalent to the already-working oeprop(...,'MBIS_VOLUME_RATIOS') but now can be used with a QCSchema call. (#2299, #2370)
  • Fixes error in MBE VMFC Hessian. (#2389)
  • Fixes bug in compare_recursive() (#2397)
  • Fixes bug where fchk() couldn’t be run on a Wavefunction deserialized from file (#2400, #2408)
  • Fixes bug in MemDFJK affecting TD-DFT excitation spectra with range-separated functionals in asymmetric case. (#2431, #2435)
  • Avert segfault for non-RHF CC response properties. (#2310, #2450)
  • Fixes export of left eigenvector beta in TDSCF scf_response.py. (#2452, #2453)
  • Fixes parallel scaling of Libint2 one-electron integrals by using new Libint2. (#2491, #2413)
  • Fixes finding ambit when specialty ambit path given. (#2500)
  • Fixes bug with Karton 2-point SCF extrapolation. (#2526)
  • Fixes bug where allen_focal_point wasn’t working because higher deltas were getting lopped off. (#2532)
  • Fixes CC properties naming bug by making OEProp names flexible. (#2534)
  • Fixes fcidump.py handling of frozen orbitals. (#2545)
  • Fixes incremental Fock convergence bug. (#2550)
  • Fixes bug where non-physical masses couldn’t run through QCSchema. (#2557)
  • Fixes testing bug where pytest psi4/ would pick up unconfigured tests so one had to use pytest psi4/tests/. (#2549)
  • Fixes dftd3/gcp/mp2d on single cpu job. (#2548, #2549)
  • Fixes single-atom Hessian by finite difference. (#1683, #2552)
  • Fixes bad performance where SCF gradients took longer with more threads. (#2559, #2581)

Known Bugs

Find them and tell us