Documentation
Installers
Source
Release Notes
Advertised Version: 1.6 Continuous Version: 1.6 Release Date: 19 May 2022 NYI Documentation: https://psicode.org/psi4manual/1.6.0/ 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_potentialskeyword argument. (#2515) - In composite (CBS) methods, extrapolation functions like
corl_xtpl_helgaker_2must be referred to as strings, not objects. User-supplied ones use NumPy arrays rather than psi4.core.Matrix objects and must be registered with aregister_xtpl_functionfunction 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 tosherrill_gold_standardmust be referred to as strings and registered withregister_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 matchesenergy("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_gradientarray to test on orset findif fd_project T/Fexplicitly to control. (#2575) - Previously, the CBS wrapper issued a
clean()btwn calcs. Plain “string modelchem” calcs likeenergy('hf/cc-pvdz')were getting caught and also being cleaned, meaning their behavior was slightly different thanset 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 ofcbs-xtpl-energy-convtest: (#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_chargeskwarg. (#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_XHOSTCMake 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
ccdensitykeywords around OPDM relaxation. KeywordsONEPDM,OPDM_ONLY,ONEPDM_GRID_DUMP, andOPDM_GRID_DUMPaffected. (#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_occupationand 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 NUMBERto 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
"CP-CORRECTED {nb}-BODY INTERACTION ENERGY": ("CP-CORRECTED INTERACTION ENERGY THROUGH {nb}-BODY", 1.7),
"NOCP-CORRECTED {nb}-BODY INTERACTION ENERGY": ("NOCP-CORRECTED INTERACTION ENERGY THROUGH {nb}-BODY", 1.7),
"VMFC-CORRECTED {nb}-BODY INTERACTION ENERGY": ("VMFC-CORRECTED INTERACTION ENERGY THROUGH {nb}-BODY", 1.7),
"COUNTERPOISE CORRECTED TOTAL ENERGY": ("CP-CORRECTED TOTAL ENERGY", 1.7),
"COUNTERPOISE CORRECTED INTERACTION ENERGY": ("CP-CORRECTED INTERACTION ENERGY", 1.7),
"NON-COUNTERPOISE CORRECTED TOTAL ENERGY": ("NOCP-CORRECTED TOTAL ENERGY", 1.7),
"NON-COUNTERPOISE CORRECTED INTERACTION ENERGY": ("NOCP-CORRECTED INTERACTION ENERGY", 1.7),
"VALIRON-MAYER FUNCTION COUTERPOISE TOTAL ENERGY": ("VALIRON-MAYER FUNCTION COUNTERPOISE TOTAL ENERGY", 1.7), # note misspelling
"VALIRON-MAYER FUNCTION COUTERPOISE INTERACTION ENERGY": ("VMFC-CORRECTED INTERACTION ENERGY", 1.7),
- 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-workingoeprop(...,'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_pointwasn’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 usepytest 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