Psi4 Versions Save

Open-Source Quantum Chemistry – an electronic structure package in C++ driven by Python

v1.4

2 years ago

Obtaining

  • Binary installers: see link above
  • Python Anaconda: conda install psi4 -c psi4.
  • Windows conda packages available (#1560)
  • Dropped dependencies: deepdiff, Libint1
  • Added dependencies: QCEngine, Libint2

New Methods

  • Add ability to call Axilrod-Teller-Muto (ATM) 3-body dispersion correction from Grimme's DFTD3. Note that this is for dftd3 call, not energy call (#1491)
  • MP2D energies and gradients with help of external program (#1661)
  • SCAN functionals – SCAN0, revSCAN0, SCAN, revSCAN, BMK, revM06-L (#1597)
  • hybrid LDA functionals – CAM-LDA0, LDA0 (when Libxc puts them in a release) (#1645)
  • FISAPT-D (#1670)
  • Superposition of atomic potentials (SAP) guess (#1665, #1700)
  • Implementation of partial Cholesky orthogonalization (#1760, #1817, #1824 #1842)
  • Overlap half-derivative integrals (#1895)
  • TDDFT for HF, LDA, and GGA SCF wave functions (#1349, #1885, #1814, #2156)
  • UHF Hessians and gradients (#842)
  • LIBxc density screening (#1860)
  • Add MBIS charge partitioning (#1961, #2035, #2056, #2127)
  • External potentials to CP-SCF solver (#2006)
  • FMM and PE(ECP) (#2025)
  • SAPT(DFT) supports hybrid XC kernel in dispersion (#1865)
  • SAPT0-D routines, includes interface (#2081)
  • Electrostatic embedding to FSAPT (#2131)
  • Implement level shifts in RHF, UHF, CUHF, ROHF (#2225, #2237)

New External Libraries

  • QCEngine - A QCSchema runner is now a required dependency since we use it for several interfaces (#1577)
    • DFTD3
    • MP2D
    • gCP
  • CPPE - Polarizable embedding with environment modeled by multi-center multipole expansion with dipole-dipole polarizabilities at the expansion sites (#1401)
  • ADC from ADCC callable from Psi (#1744, #1827, #1848, #1892, #1914)
  • Enables use of GeomeTRIC optimizer in Psi (#1813)
  • Interoperability via Molssi Driver (#1676, #1929, #2163)
  • Psi4fockci (#1855)
  • CCT3 (#1934)
  • Interface to i-pi (#1057)
  • BrianQC GPU module (#1893)
  • Upgrade to Libint2 (#1721)
  • Update RESP and PSIXAS (#2065)
  • Move to Libxc5 (#1101, #2113, #2169, #2191)

Additional Non-Core Contributors to v1.4

@ramis, @jwaldrop107, @obrien951, @dsirianni, @Dpgibney, @derekmetcalf, @alenaizan, @susilehtola, @tovestra, @jeffschriber, @zachglick, @maxscheurer, @chapincavender, @PhillCli, @mdamer, @katrinleinweber, @mfherbst, @edeprince3, @konpat, @kcpearce, @Icyyork, @timostrunk, @shivupa, @taylor-a-barnes, @shannonhouck, @bennybp, @tomspur, @jgonthier, @sjrl, @kis-gergely-dzsi, @ferchault, @andyj10224, @psi-rking, @SimonBoothroyd, @yxie326, @VHchavez, @nlk36701, @edeustua, @leeping, @mquevill, @lazaroid, @sgoodlett

Performance Optimizations

  • omega exchange can now be computed with MemJK algorithm. By not having to shunt range-separated functionals to DiskJK even when they'd fit in memory, 30-40% performance improvements seen (#1749)
  • Big performance improvement to DF SCF Hessian (#1805)
  • Omega combine algorithm for computing exchange terms (#1911)
  • Optimize linalg::triplet (#2053)
  • Thread external charge potential (#1946)

Details of Interest

See section at https://github.com/psi4/psi4/issues/1562#issue-416040173 that won't fit here.

Bug Fixes

See section at https://github.com/psi4/psi4/issues/1562#issue-416040173 that won't fit here.

v1.3.2

4 years ago

Enhancements

  • #1576 regularize MP2 correlation QCSchema variable and move psi4 --json output to tmpfile.

Building

Bug Fixes

  • #1602 fixes multiple bugs in NBOWriter that make all previous Psi-generated NBO files suspect.
  • #1607 explicitly allow loading pickles in np.read in psi4.core.Wavefunction deserialization. This is needed for Psi4 to work with NumPy >=1.16.3, when the pickle-loading-default changed.

v1.3.1

5 years ago

Enhancements

  • #1570 (partial) better format exception when run_json encounters error. set_options can be used for local options, e.g., set_options({'scf__d_convergence': 8}).
  • #1578 (1st commit) update schema name to qcschema_[in|out]put, use dtype=2 Molecule in schema, move psi4:qcvars to extras/qcvars.
  • #1592 print the IR intensities for analytic RHF Hessians, not just compute, test, and export them.

Building

  • Now requires QCElemental v0.3.3, which brings in Pydantic.
  • #1560 add Windows package building.
  • #1571 update Windows MKL/OpenMP build for MKL 2019.
  • #1572 expect libderiv/libderiv.h like everyone else, not libint/libderiv.h.

Bug Fixes

  • #1577 (partial) fix CFOUR ERROR CODE and DROPMO formatting for Cfour interface.
  • #1587 no change to code itself, but the conda dftd3 package has been rebuilt (conda update dftd3 -c psi4) to not segfault on Windows WSL and some Linux architectures.
  • #1585 (1st & 3rd commits) Per-stage options handling in cbs() previously wasn't stashing options correctly.
  • #1592 restore keyword cphf_tasks needed for psi4numpy polarizability.

v1.3

5 years ago

Major Points of Interest

  • Added native Windows compatibility without the WSL requirement.
  • DFT collocation grids can now be cache in-memory to avoid extra computation and lowering the total cost of DFT by up to a factor of two (#1233).
  • Wavefunctions can now be serialized to disk and back using Wavefunction.to_file/from_file (#1304).
  • Psi4 is now Python 3.6+ only.
  • Physical Constants updated to CODATA 2014 (#1213)
  • SCF iterations are py-side for easier access and logic (#953)
  • RHF analytic dipole derivatives. This means IR intensities when using analytic second deriv (#1382 ).

Obtaining

  • Binary installers: see link above
  • Python Anaconda: conda install psi4 -c psi4.
  • All Linux (and Windows WSL) binaries now built with AM=8 libint.
  • To obtain v1.2, use conda install psi4=1.2 libint=1.2.1=h87b9b30_4 -c psi4 (#1533)

New Methods

  • Improved support for the MolSSI QC Schema interface v1
  • VV10 dispersion is now available for UKS references.
  • Cubeprop can now compute the FRONTIER_ORBITALS and DUAL_DESCRIPTOR quantities.
  • nZaPa-NR basis sets have been added (#1346 ).
  • The recursive driver can now compute N-body gradients and Hessians.
  • CBS composite calculations can now use arbitrary options (frozen core, relativistic effects) or basis sets for different stages (e.g., scf, correlation, delta) (#1235)
  • Rework of SAD guess (#1451, #1452, #1456, #1458, #1477, #1479, #1481, #1438), fixing issues with fractional occupations, ECPs, and ghost atoms. Sad with spin-averaged fractional occupations is now the default guess in Psi4, yielding performance improvements, especially significant for unrestricted and restricted open-shell methods, for which the former default guess was GWH.
  • Implemented the on-the-fly extended Huckel guess (#1498, #1529), which is based on the SAD solver.
  • molecule {...} will take xyz (element symbol or atomic number) or psi4 formats. docs
  • overall chgmult now specifiable through 1 3\n-- before any fragments.
  • can specify atomic number, mass number, mass, ghosting, extra-label in mol spec.
  • Frozen core now aware of charged fragments and implements "previous shells" freezing, using e.g. freeze_core {1,2,...} (#1350).
  • Finite difference properly handles user-specific symmetry (#1424).

New Methods (beta)

  • TDDFT for HF, LDA, and GGA SCF wave functions (#1349). Guts are ready; interface is not.

New External Libraries

  • QCElemental - A library for CODATA, molecule manipulation routines, and periodic table information.
  • RESP - A restrained electrostatic potential fitting plugin.
  • PylibEFP - A Python API for I. Kaliman's libefp.
  • Libxc - Libxc isn't new, but we're finally using directly from upstream (#1502).

First Time Contributors

  • @raimis - #1399, #1185, #1183, +70 more!
  • @obrien951 #1359, #1222, #1130, #1140, #1100, #1097
  • @zachglick #1453, #1304, #1291
  • @tovrstra #1510, #1506, #1500
  • @timostrunk #1133, #1128, #1127
  • @mdav2 #1374, #1142
  • @chapincavender #1364
  • @janisozaur #1321
  • @rainli323 #1131
  • @yxie326 #1083

Additional Non-Core Contributors to v1.3

  • @JonathonMisiewicz #1518, #1487, #1379, #1424, #1435, #1378, #1352, #1337, #1336, #1289, #1310, #1299, #1214, #1150, #1024, #1139, #1108
  • @susilehtola #1475, #1493, #1481, #1479, #1472, #1458, #1460, #1468, #1456, #1452, #1451, #1260
  • @PeterKraus #1470, #1350, #1405, #1235, #1303, #1262, #1232, #1138, #1123, #1119, #1109
  • @hokru #1320, #1377, #1346, #1300, #1244, #1241
  • @alenaizan #1365, #1042, #1294
  • @tyzhang1993 #1437
  • @tomspur #1257

Performance Optimizations

  • DFT grid generation is now threaded (#1291).
  • DFT collocation grids can now be cache in-memory to avoid extra computation and lowering the total cost of DFT by up to a factor of two (#1233).

Psi Developer Upgrade Guide

  • Psi4 now requires C++14 (up from C++11)
  • The C++ code base was reformatted using clang-format and the provided format file (many PRs). Also clang-tidy was run for several transformations.
  • EFP_POL, QMEFP_POL, EFP_POL_DAMPING, all POL --> IND
  • outright cbs(...) calls --> energy(cbs, ...)
  • doublet, triplet, create, horzcat, vertcat and the blocked matrix "new" and "delete" are now free functions, rather than static methods in Matrix. Also, create for Vector a free function now (#1447).
  • Wavefunction.reference_energy() --> Wavefunction.energy() in keeping with grad/hess (#1445).
  • Deprecate the c-side Wavefunction.frequencies member data and getter/setter. getter now reads off the py-side member data. setter will go away entirely (#1445). More deprecations in (#1394).
  • Non-Grimme B97 is now B97-0 (#1436, #1403 ).
  • Can run pytest in parallel with pytest-xdist. Known that final exit won't be clean.
  • Regularize Wfn and P::e psivar access for scalars and arrays (#1393) in accordance with (#1375). Mostly get_variable.
  • Deprecated LAPACK routines removed (#1314 ).

Developer Interests

  • Cleans up the Matrix class for non-totally symmetric irreps (#1383).
  • Psi4 is now C++17 compatible (#1345).
  • DFT grid generation is now threaded (#1291).
  • findif is now "metadata"-based to allow for greater serialization (#1289).
  • Additional documentation and notes on alpha/beta for DFT functionals (#1260).
  • dpd.gbl has been removed (#1254).
  • The CC* modules are moving to a CCWavefunction based solution (#1253).
  • CBS has been reworked to be dictionary based to allow for greater flexibility (#1235).
  • Updated conversion factors to CODATA 2014 (#1213).
  • pthreads has been removed from Psi4 (shall not return, #1199).
  • Empirical Dispersion has been refactored to a new unified interface (#1151).
  • OEProp has been split into many small modules allowing greater flexibility (#1133).
  • SCF now throws a SCFConverenceError upon reaching maximum iterations (#1130).
  • Standardizes memory printing to [GiB] (#1097, ...)
  • DIIS maximum absolute error criterion for SCF, instead of the default RMS error (#1460).
  • EFP/EFP and SCF/EFP accessed at driver layer, not multiple places in C-layer. EFP object now core.Molecule.EFP, not Process::environment.EFP (#953).
  • All molecule parsing and validation moved py-side. So chg/mult physics checked upon creation, not upon SCF. Form mols from_string, from_arrays, or from_dict (#953).
  • Read access to T1/T2 amplitudes py-side (#1344).
  • More functions added to PSI_API for plugins (#1400).

Bug Fixes

  • Fixes an error where the CBS extrapolation technology was not comparable with FNO-CC* methods (#1377)
  • Fixes an issue where relativistic basis sets were not compatible with SCF stability analysis (#1374).
  • Fixes an issue where JSON called from the command line did not correctly write an output (#1369).
  • Fixed an error where float options when set as integer were not correctly cast (#1352 ).
  • Correctly throws when Yukawa functionals are called from LibXC (#1260).
  • Fixed a bug where casting from a small basis was incompatible with symmetry-breaking displacements (#1139).
  • Ghost atoms were incorrectly attributing to core electron counts (#1109).
  • Fixes an issue in DFHelper memory estimation (#1100).
  • Fixes range-separate disk gradient paging (backported in v1.2.1, #1096 )
  • Fixed inconsistencies in the passing of DF_FITTING_CONDITION; the default value is now 1e-10 in line with what was actually used by the code before.
  • Fixed inconsistencies and bugs in formatted checkpoint files (#1475). Code assumes that the post-HF wave function contains a correlated density.
  • Fixed dzvp basis set that was malformed from EMSL (#1554).
  • Added full element range to pbeh-3c basis def2-msvp (#1554).
  • Fixed various memory errors (#1520 , #1488, #1489, #1480, #1469, #1476, #1441, #1440, #1432, #1427, #1422 ).
  • Fixed couldn't switch from ECP basis to non-ECP basis in same input. Prevent non-matching ECP-ness in cast-up basis (#1494).
  • Fix precision and formatting and truncation of Molden output files (#1510).
  • Now big-endian compatible (#1464).
  • Fix irrep ordering in FCIDUMP (#1453).
  • Fix BlockOPoints segfault (#1525).
  • Fix race condition in maximum orbital gradient of parallel ODCT (#1435).
  • Fix previously little-used symmetry operations on core.Matrix (#1383).
  • Fix nasty SAPT double free bug (#1398 ).
  • Fix integer overflow in SAPT (#1364).

Known Bugs

  • Find them and tell us

v1.2.1

5 years ago

Advertised Version: 1.2.1 Continuous Version: 1.2.1 Release Date: 24 July 2018 Documentation: http://psicode.org/psi4manual/1.2/ Availability: Public, GitHub source, CMake build, Conda binary installers

Release Notes

  • Fixes a bug in the DFJK gradient algorithm when using disk paging. (#1096)
  • Fixes memory estimate in SCF_TYPE=MEM_DF that wasn't switching between in-core and disk correctly for SAPT (direct_iaq in AO_core in DFHelper) (#1100)
  • Improves memory printing and uses correct GiB units for SCF_TYPE=MEM_DF (#1103, #1104)
  • Source right image in README (#1105)

v1.2

5 years ago

Advertised Version: 1.2 Continuous Version: 1.2 Release Date: 4 July 2018 Documentation: http://psicode.org/psi4manual/1.2/ Availability: Public, GitHub source, CMake build, Conda binary installers

Major Points of Interest

  • The DFT kernels were migrated to use LibXC, Psi4 now has 400+ functionals including modern functionals such as wB97M-V.
  • The DFT code was optimized leading up to a 4x speed enhancement on 6 cores.
  • A new Density-Fitted JK backend was written, DF-SCF is now up to 2x as fast.
  • Dozens of additional methods, bug fixes, and performance enhancements.

Obtaining

  • Binary installers:
  • Python Anaconda: conda install psi4 -c psi4.
    • If you're working from Psi4 v1.1 (psi4conda) or any conda Psi4 from 2017, do not update. Instead, create a new environment for a new Psi4. You may need to conda update conda beforehand.

New Methods

  • SNS-MP2
  • Hundreds of new DFT Functionals
  • VV10 non-local dispersion
  • Dispersion Corrected Spin-Component Scaled Double Hybrid (DSD) Functionals
  • Second-Order SCF Convergence of Density Functional Theory
  • Coupled Perturbed Self-Consistent Field (HF and DFT)
  • Second-Order Electron Propagator Theory (EP2)
  • SAPT0 with S^Infinity Induction and Induction Exchange
  • DF Gradients for range-separated and CAM functionals
  • Support for the MolSSI QC Schema interface v1

New Methods (beta)

  • SAPT(DFT)
  • Effective Core Potenitals (ECP's)

New External Libraries

  • Gau2Grid - Very fast gaussian to grid collocation matrices
  • OpenFermion-Psi4 - Quantum computer interface
  • SNS-MP2 - Spin-Network-Scaled MP2 theory
  • GeomeTRIC - Geometry optimizations in the TRIC coordinate system.

First Time Contributors

  • Peter Kraus (@PeterKraus) - #949, #937, #922, #904
  • Holger Kruse (@hokru) - #877, #912, #914
  • Shannon Houk(@shannonhouck) - #850, #876
  • Johnathan Waldrop (@jwaldrop107) - #921
  • Marvin Lechner (@mhlechner) - #698
  • Jonathon Misiewicz (@JonathonMisiewicz) - #895, #882, #873, #849, #825
  • Adam Abbott (@adabbott) - #761
  • Thomas Sexton (@tsexton) - #780
  • Tianyuan Zhang (@tyzhang1993) - #743
  • Dom Sirianni (@dsirianni) - #776, #952
  • Asim Alenaizan (@alenaizan) - #956

Performance Optimizations

  • Density Fitted 3-index AO->MO transformation significantly improved.
  • MemDFJK module up to 2x as fast as original DFJK for in-core operations.
  • DFT XC kenels threaded with a more efficient vectorization.
  • DFT collocation matrix generation vectorized and exploits cache-level localization.
  • All matrix and vector operations threaded for MIC and large Xeon/EPYC nodes to avoid bottlenecks.

Psi Developer Upgrade Guide

  • The driver method property(...) has moved toproperties(...) to avoid python namespace conflicts.
  • If you have a (non-py-only) plugin,
    • Add PSI_API to your plugin code in this pattern
    • If, upon rebuilding against psi4, you get symbol not found errors, run c++filt on the mangled symbol name, then add PSI_API to the psi4 repo to make sure the core.so you're linking against is exporting the symbol you need. See example here. Or just file an issue with your lost symbol.
  • Note that anyone wanting to re-use an objdir will need to thoroughly remove the old pybind11 v2.0.0 from detectability. This means:
    • <objdir> rm -rf stage/<TAB-TAB-...-TAB>/includes/pybind11
    • <objdir> rm -rf stage/<TAB-TAB-...-TAB>/share/cmake/pybind11
    • <objdir> rm -rf external/upstream/pybind11
  • Intel 2016 is no longer a valid compiler (doesn't work with py11 >=2.2.1)

Developer Interests

  • Now uses LibXC for DFT XC kernels (#698)
  • Reworked the building of superfunctionals to use dictionaries (#922)
  • SCF Wavefunctions can now do Hessian-Vector builds see RHF.Hx and RHF.solve for examples. (#760)
  • The DFT V Potential object now has Hessian-Vector functionality. (#698)
  • DFT Functionals now takes advantage of polarized vs unpolarized DFT kernels.
  • Added generalized solvers in p4util/solvers.py. These include DIIS and conjugate gradient
  • New density-fitted AO->MO transform object. More efficient than previous objects and has multiple modes depending on the type of computation (direct or AO storage).
  • ECP SCF energies.
  • ECP gradients by finite differences in Python.
  • DFT is now has several hundred tests against Psi4 and other implementations
  • Shared pointers were rewritten to use std::make_shared. (#836)
  • One-electron integrals from LibMints now properly apply external potentials so that external potentials are now applied evenly throughout the code base (#844).
  • Psi4 is now buildable with Ninja (#794)
  • Begins to deprecate char * from Psi4 (#780)
  • Pragma header for diagnostics and API's (#774)
  • Improved C++/Python binding docstrings (#761)
  • Clang and YAPF configuration files (#753)
  • Improved parallel and routine timing information in Psi4 (#743)
  • SCF can now be run in symmetry for post-SCF modules that do not use symmetry (#737)
  • Psi4 now compiles much faster (~3 minutes with LLVM on 4 cores) (#736)
  • NumPy views of Psi4 objects are now correctly reference tracked in cases where C++ returns a new matrix. arr = wfn.Ca_subset("AO", "OCC").nph now no longer give noise. (#736)
  • Basis PyParsing is now simpler and code duplication has been removed (#734 )
  • Update cc-pVXZ and add cc-pwCVXZ for Li, Be, Na, Mg (#728)
  • MCSCF orbital semicanonicalization (#722)
  • C++ Options are now exposed to Python (#720)
  • Intermediate sub-system and partial-basis energies from nbody wrapped exported as psivars (#952)
  • Better start/stop/elapsed time printing

Documentation

  • Additional Documentation Information (#787)

Miscellaneous

  • Added N to ANO0 basis set (#825)

Bug Fixes

  • Accidental signed integer overflow when using extremely low memory in DFJK
  • wB97X had an incorrect range-seperation parameter. This is now fixed. Note that this did not effect wB97X-D.
  • Restricted-irrep finite-difference Hessians were only returning the totally symmetric portion of the Hessian (in #834)
  • Analytic HF Hessians were wrong under particular circumstances (#903)
  • A bug causing IRCs to converge to the initial transition state was fixed (#882)

Conda changes since v1.1

  • MKL linked dynamically through free Anaconda-provided mkl_rt.so rather than statically linked. This saves size (since NumPy also uses mkl_rt) and eliminates incorrect results and threading damping associated with multiple programs accessing BLAS/LAPACK from multiple sources (#748, #755).
  • Psi4 no longer installs a non-standard gcc5.2 alongside Psi4 on Linux (or gcc feature on Mac). This was necessary when conda's default 4.8.5 was too low for Psi4's c++11 requirements, but since conda's default has leaped to 7.2.0, we use default again. Note that only libraries (e.g., libstdc++) are installed alongside Psi4 now, not compilers (e.g., g++).
  • (generic, not psi4, conda) conda activate env works multishell, not just on bash. Since conda 4.4 c. Dec 2017

Known Bugs

  • PCM-ROHF is broken. See #999
  • ERD interface is broken and disabled

v1.1

6 years ago

Advertised Version: 1.1 Continuous Version: 1.1 Release Date: 19 May 2017 Documentation: http://psicode.org/psi4manual/1.1/ Availability: Public, GitHub source, CMake build, Conda binary installers

New Methods

  • Added analytic RHF Hessians, conventional and density fitted.
  • Added analytic RHF CCSD(T) gradients (no frozen core).
  • Added functional-group and intramolecular symmetry-adapted perturbation theory (F/I-SAPT) capabilities, scripts, and tests. (DOIs: 10.1021/ct500724p, 10.1063/1.4927575)
  • Added high-spin open-shell SAPT0. Note that Ind20,r (and exch counterpart) contains unrelaxed induction. (DOI: 10.1063/1.4963385)
  • Added analytic RHF-CC2 gradients and building of CC2 UHF and ROHF densities.
  • Reworked MCSCF with density-fitting, py driver, augmented Hessian iterations, better printing, and the ability to rotate guess orbitals in MCSCF procedure with MCSCF_ROTATE keyword.
  • Added B86B & PW86 exchange and B86BPBE & PW86PBE exchange-correlation functionals
  • Added X2C and (external) DKH relativistic corrections for post-SCF methods.
  • (external) Added Grimme's semi-semiempirical HF-3c and PBEh-3c semi-semiempirical energy methods through gCP interface.
  • (external) Added ROHF reference for perturbative methods (e.g., ROHF-CCSDT(Q)) in MRCC interface.
  • (external) Added PCM in the PTE (perturbation to energy) approximation for implicit solvation to CCSD via PCMSolver.
  • (external) Added SIMINT integral interface.

User Improvements

  • Fixed interfragment coordinates in geometry optimizer
  • Added option to only write occupied orbitals to Molden files.
  • Added saving of geometry and normal modes to Molden file after vibrational analysis.
  • Added Jensen [aug-]pc[s][seg]-N, N=0–4 basis sets.
  • Renamed rel_basis keyword to basis_relativistic.
  • Added 3c overlap integrals to libmints.
  • Switched default auxiliary basis sets for sto-3g and 3-21g to def2-SVP series.
  • Enhanced cc* modules to write OPDM back to Wavefunction object if computed and to construct psivars for eom-cc, 0-indexed (ground state = 0).
  • Added psi4.set_options(dict) function, making psi4.geometry(), psi4.set_options(), and psi4.energy(), etc. the mainstays of driving calculations in PsiAPI.
  • Added AO-based CASSCF.
  • Reworked CI root indexing to use 0 as ground-state index, so now CI and CC use so the same indexing for PSI variables.
  • Added atom- and AM-labels to printing of molecular orbitals.
  • Reworked exiting so that if a geometry optimization exceeds maxiter, it no longer just prints a warning and exits sucessfully (beer) but now exits unsuccessfully (coffee) and raises a psi4.ConvergenceError.
  • Reworked psi4.set_memory() to optionally take a string that includes a memory unit. Added a minimum memory (250MiB) and increase the default memory (500 MiB).
  • Reworked parallelism control. Environment variables OMP_NUM_THREADS and MKL_NUM_THREADS now ignored. Control parallelism in PsiAPI with psi4 -nN or in either mode through set_num_threads(N).
  • Reworked Psi variables in dfmp2 module so that duplicated in Wavefunction.get_variables() as well as psi4.get_variables().
  • Added printing of file and line origin for basis sets upon loading. Auxiliary basis sets now get a name (basis1 + basis2 for combination) rather than a blank. Auto-selection of auxiliary basis sets for >=5-zeta orbitals basis sets no longer defaults to def2-quad-zeta when an appropriate >=5-zeta auxiliary basis not available.
  • Added new complete set of test case reference output files.
  • Added BFDb databases.
  • Reworked print in Psithon (input file syntax) to no longer process into print_out commands that redirect to output file. Now it means whatever your python print means.
  • Added to Numpy integration the ability for psi4.core.Matrix and psi4.core.Vector to be converted to NumPy arrays and back. Please see tests/numpy-array-interface for a full suite of examples.
  • Reworked the finding of useful text files in /share/psi4/. Environment variable PSI4DATADIR is now defunct. PSIDATADIR remains but should not need to be used unless you want to specify one not adjacent to the built psi4/core.so library. For running psi4 from both staged and installed locations, it should default just fine and not need PSIDATADIR=/path/to/share/psi4 or psi4 -l /path/to/share/psi4.
  • Added beginnings of JSON interface.

Infrastructure Improvements

  • Relicensed Psi4 from GPL-2.0+ to LGPL-3.0.
  • "Inverted" Psi4 from C++ executable with embedded Python to ordinary Python module layout. Added PsiAPI mode for interacting with Psi4 as Python module (i.e., python -c "import psi4". Tutorial at http://psicode.org/psi4manual/master/psiapi.html .
  • Reworked bin/psi4 so now a light script calling import psi4 rather than a hefty C++ executable. No longer linking to libpython.so.
  • Added Python 3 (3.5 & 3.6) support to existing Python 2.7
  • Reorganized directory layout so that Psi4+Addons in /, Psi4 Python module in /psi4/, and Psi4 C++ library in /psi4/src/.
  • Rewrote build system into a CMake (min version 3.3) superbuild, evicting all external code and leaving each add-on with only a single-file build footprint in the external/upstream/ folder specifying its build as a CMake External Project.
  • Removed setup.py as user interface to CMake build. Now one should call CMake directly using options and guidance in the first ~115 lines of top-level CMakeLists.txt.
  • Switched Python binding of C++ from Boost Python to pybind11. Renamed Py-bound C++ library from "psi4" to "core". A consequence is that Psi4 now requires full C++11 compliance (GCC 4.9+, Clang 3.3+, Apple Clang 6.1+, ICC 2016.0.2+). Note that ICC requires GCC and therefore GCC 4.9+. Note that PyBind11 adheres more to C-style than Python-style when it comes to references and pointer counting. As such, several functions required deep changes as internal references from C-side are no longer manipulatable Python-side.
  • Added testing mode to see if Psi4 basically works when you turn it on. From a build directory, using CTest, ctest -L smoke. On any executable, using pytest, psi4 --test. On the python module, using pytest, psi4.test().
  • Reworked plugin system to CMake from GNUMake. Use psi4 --plugin-compile to generate Makefile rather than psi4 --new-plugin-makefile as formerly. Plugin interface has been substantially renovated.
  • Renamed plugin generation from, for example, psi4 --new-plugin +wavefunction myplugin to psi4 --plugin-name myplugin --plugin-template wavefunction.
  • Build performs pre-install to BuildDir/stage/ so python driver not being run from source. Use psi4 --inplace to run python driver from source.
  • Switched versioning (e.g., 15 commits after tag v1.0 before tab v1.1rc1) from 1.0.15 to 1.1rc1.dev15.
  • Reworked build documentation into documentation proper (http://psicode.org/psi4manual/master/build_faq.html), making GitHub wiki defunct.
  • Switched Python build detection from find_package(PythonLibs) to find_package(PythonLibsNew) CMake module used by NumPy and pybind11.
  • Reworked ASCII scratch/output file names to incorporate job PID, just as binary scratch files do.
  • Adjusts BLAS/LAPACK detection to detect OpenBLAS and to favor unified runtime library mkl_rt.so for MKL.
  • Added internal variables_ and arrays_ std::maps for double and SharedMatrix types, respectively, to the Wavefunction class. These should be used inside a computation to enable greater localization of variables.
  • Switched Mac conda binary builds from gnu/libstdc++ to clang/libc++ with implications for mixing conda packages with locally compiled software (e.g., plugins from conda Psi4).
  • Rewrote GitHub history of psi4/psi4. All forks prior to 2016-10-19 are no longer valid. Please refork before working on Psi4.
  • Reworked BasisSets to be exclusively built in Python and passed into C-side by the Wavefunction get_basisset and set_basisset calls.

Performance Optimization

  • Reworked I/O in UHF CC routines to avoid expensive sorting.
  • Reworked fitting algorithm behind diatomic() from hard-wired Lagrange interpolations to weighted least squares that can use an arbitrary number of points.
  • Removed ccsort/transqt2 legacy modules from codebase. They can be enabled at build-time for testing.
  • Added threading to MintsHelper for one-body integrals for MIC architectures.

Bug Fixes

  • Fixed OEProp bug for fields and electrostatic potentials when spherical basis sets were used with a symmetry-breaking origin.
  • Fixed CBS syntax bug that produced outrageous HF extrapolations errors for some methods.
  • Fixed DF-MP2 to fail gracefully when no virtual orbitals present.
  • Fixed bug that prevented freezing a bond angle at 0 degrees during a geometry optimization.
  • Fixed CASSCF to return correct variable if state averaging requested.
  • Fixed diag_method=rsp in detci module that wasn't working.
  • Fixed guess=read for ROHF wavefunctions.
  • Fixed integer overflows in SAPT code and libdpd code (for CC2) and dfocc code (for CCSD(T)).
  • Fixed DF-MP2 gradients in the presence of external potential.
  • Fixed various bugs and useability improvements for calculations in the presence of a dipole field.
  • Fixed silent fail for non-Lebedev numbers in dft_spherical_points.
  • Fixed instability of matrix diagonalization that led to anomolous DFT grid generation on Haswell processors.
  • Fixed specifying non-default basis-set-extrapolation schemes as a keyword argument to energy(), optimize(), etc.
  • Fixed properties_origin["COM"] that wasn't working.
  • Fixed bug in ccresponse that led to different polariability values with symmetry on and off.
  • Fixed molden(..., dovirtual) bug so that keyword is honored and unrestricted occupations are returned correctly.
  • Fixed wB97X-based functionals that were using 0.3 instead of 0.4. This makes no appreciable difference at the cross-database hundredths of a kcal/mol level but in a little wrong.

External Features and Infrastructure

  • Reworked Libint integration to pull from upstream repository at 1.2.0 or 1.2.1
  • Added new integral library SIMINT by Ben Pritchard for energy integrals, accessed through cmake -DENABLE_simint. Pinned at 0.7.
  • Added using ERD for most all energy integrals (previously only direct conventional HF).
  • Reworked LIBEFP integration so no longer required for Psi4 and so source built from upstream repository, not code internal to Psi4. Bumped LIBEFP to 1.4.2.
  • Bumped CheMPS2 to 1.8.3-12
  • Reworked ambit to reenable it and the ambit plugin template. Ambit not presently linked into Psi4 as not used internally.
  • Reworked DKH integration so that project obtained from home repository, not from code stored in Psi4. Reworked DKH procedure so that orbital basis decontracted to form the DKH one-electron integrals, then recontracted for further calculation.
  • Bumped PCMSolver to 1.1.9 (see also "PTE").
  • Added basic gCP interface (see also "3c").
  • Maintained GDMA, MRCC (see also "ROHF-CC"), DFTD3 interfaces.
  • Bumped v2rdm_casscf plugin to 0.3.
  • Switches PubChem to use REST interface.
  • Pinned pybind11 version at 2.0.0 (2.0.1 also known to work).