# 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/ 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
"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-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