Documentation
Installers
Source
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 (replacingCOSX_INCFOCK
), able to recompute the full Fock matrix every n iterations controlled byINCFOCK_FULL_FOCK_EVERY
, and able to disable incfock at a certainINCFOCK_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 plainValidationError
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 throughSCF_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. Deprecatersp()
andsq_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_ toWavefunction::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
andMatrix::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