1.1 Release Notes
The 1.1 release "inverts" the code so that it is now a Python module with a C++ core. It can be loaded into a Python script by import psi4 and called from Python with our new Python API (PsiAPI)
- 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](http://pubs.acs.org/doi/abs/10.1021/ct500724p), [10.1063/1.4927575](http://aip.scitation.org/doi/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](http://aip.scitation.org/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.
- 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.
- 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.
- 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.
- 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).
1.0 Release Notes
Psi4 is, in many ways, a whole new package compared to Psi3. While some libraries and modules remain the same, the majority of the code has been rewritten from scratch based on a powerful set of new libraries written in C++. A totally new Python front-end makes Psi4 incredibly user-friendly and automates many common tasks such as basis set extrapolation, composite methods, running the same computation on every molecule in a test set, etc. Density-functional theory, absent in Psi3, is quite efficient in Psi4, with many functionals available. Density fitting is ubiquitous in Psi4, leading to some of the most efficient MP2 and CCSD(T) code available. Psi4 also introduces extensive, powerful features for energy component analysis of non-covalent interactions via symmetry-adapted perturbation theory. Orbital-optimized versions of perturbation theory and coupled-cluster methods, and their analytic gradients, have also been added. Through external libraries, Psi4 gains access to implicit solvent (PCM) capabilities, density-matrix renormalization group CI, effective fragment potentials, Grimme dispersion corrections, Stone's distributed multipole analysis, and high-order coupled-cluster theory.
Relative to the Beta5 release, the 1.0 Release (7/4/2016) includes a substantial update of the driver and how information is passed between Psi4 modules. The driver is now capable of fully automating energies and optimizations of composite methods (e.g., CBS extrapolated MP2). Modules are now able to return a Wavefunction object that can be manipulated or used as input to another module (e.g., to write out natural orbitals or use those instead of Hartree-Fock orbitals in the next module). Numerous density-fitted perturbation theory and coupled-cluster methods and their analytic gradients have been added.
- Created binary distribution of Psi4 for users
- Automatic extrapolations at the driver layer:
- New N-Body wrapper capable of computing non-CP, CP, and VMFC energies and gradients. The
cpwrapper has been deprecated and CP can now be called as an optional argument to an energy call:
- More sophisticated user input for one-electron property analysis; the
propertiescall now has a uniform interface for SCF, DFT, MP2, CI, MCSCF methods
- More user-friendly error checking: If the user specifies an unknown keyword, the program will print that this keyword is unknown and will suggest possible alternatives that are close in spelling
- Added code to output cube files for orbitals, densities, etc.
- Added automatic defaults for auxiliary basis sets
- Improvements to the reporting of SAPT summary information, and enhancements to obtain SAPT methods reported in doi: 10.1063/1.4867135.
- Added command-line arguments -l to specify
PSIDATADIR(for developers) and
-sto specify location of scratch directories (overrides
GUESS_MIXkeyword to UHF/UKS to generate broken-symmetry guesses
- Added STO-3G, 3-21G, and def2 basis sets through radon
- New cmake build system for developers
- The Wavefunction object is now returnable for all Psi4 methods; it can be passed to other methods or directly manipulated
- The MOLDEN writer now accepts density matrices for writing natural orbitals
- Internal upgrades to the direct product decomposition library, libdpd, especially regarding density fitting
- All code improvements now go through a review process on
github.com/psi4/psi4in addition to a continuous integration server to ensure code quality
- Added quadratic convergence algorithms for RHF, UHF, ROHF
- Added conventional and density-fitted CASSCF and RASSCF energies
- Added X2C scalar relativistic corrections
- Added QM/MM computations with MM point charges: energies and gradients
- Added UHF/UHF stability analysis for non-PK integrals
- Added density cumulant functional theory methods DC-12, ODC-12, and ODC-13
- Added CCD treatment of dispersion in SAPT
- Added density-fitted and Cholesky-decomposed orbital-optimized MP2
- Added DF-MP3 and DF-MP2.5 energies and gradients (RHF, UHF, or optimized orbitals)
- Added DF-CCD and DF-CCSD gradients (RHF)
- Added DF-LCCD energy and gradient (RHF, UHF, or optimized orbitals)
- Added DF-Lambda-CCSD(T) energy
- Added distrubted computation of Hessian by finite difference of gradients
- Improved support for frozen coordinates and fixed coordinates
- Dynamic level algorithm tries increasingly robust optimization approaches for difficult systems
- Added Cartesian coordinate optimizations
- Ability to freeze selected Cartesian coordinates
- Added iterative, restricted-step method to RFO geometry optimizations
- Added delocalized internal coordinate optimizations
- Added EFP energies added via libEFP
- Added PCM implicit solvent for SCF via the PCMSolver library
- Added interface to DMRG-CI and DMRG-SCF code in CheMPS2
- Added interface to Stone's Distributed Multipole Analysis program GDMA
- Added code to do potential energy scans via the WebMO interface
- Sped up integrals computation by optimizing libmints layer
- The PK JK builder has received significant performance improvements
- SAD guess has been improved dramatically, now default for all RHF computations
- Various bug fixes and improvements to optimizer and IRC code
- Fixed a bug with DF-K in systems with only one occupied orbital
- Fixed an integer overflow bug in DF-CCSD(T)
- Fixed modules that crashed when not finding full integral files available (because DF-HF was run instead of conventional HF)
- Fixed problem with double hybrid DFT total energies not being printed
- Fixed crash caused by changing number of MO's during optimization (changes in number of MO's dropped due to linear dependencies)
- Fixed an orientation bug in distributed Hessian by finite difference of energies
- Innumerable additional bug fixes and tweaks
Beta5 Release Notes
This release adds a little additional functionality, fixes several bugs, improves the installation process and the documentation, and adds a couple of new built-in databases. It also includes some work-in-progress that will lead to improvements in the next release.
The Beta5 release (7/3/2013; User's Manual) includes the latest accomplishments:
- WARNING: Double hybrids like B2PLYP are not having their total energies printed to the output file. This is fixed in future versions. In Beta5 you can simply work around this problem by saving the total energy in a variable and printing it, like this: etot = energy('b2plyp'), print etot
- WARNING: There has been a name change in the PSI4 Python driver to replace PsiMod with psi4. This change will prevent PSI4 from running if you have any reference to PsiMod in your input files or in a .psi4rc file. If you get any error complaining about one of those words, immediately check your .psi4rc or .psirc files and rename any PsiMod to psi4.
- Standardize psi variable naming for mp2 modules
- Add capability to compute frequencies by finite difference of energies in embarrasingly parallel fashion
- Fix problem in database wrapper where named subsets (other than small/large) wouldn't run
- Fix problem with computing multiplicity in database with fragmented open-shell molecules
- Allow more complex model chemistries through cbs() wrapper. Add alias for Wes Allen's focal point analysis
- Alias sherrillgroup_gold_standard renamed to sherrill_gold_standard
- Make cbs() wrapper work with MRCC interface
- CC code can now be used to compute energies with applied external field. Charges must be set up using the QM/MM module.
- DF-CC code now uses two sets of 3-index integrals: one for building the Fock matrix and one for all other ERI's
- Implementation of libefp is in progress
- Improved documentation of CC codes
- Improved handling of certain out-of-core contractions in CC code
- Added HTR40 database of hydrogen transfer reactions
- Partial fix to fallback to non-DF SCF when DF basis not available
- Allows PSI4 to be run interactively
- Updated naming of external files such as MOLDEN files
- Initial work to make PSI4 work with cmake
- Some changes to make more compatible with C++11
- Allow user-specified fixed geometry coordinates
Beta4 Release Notes
The first public beta release includes all-new, very efficient density-fitted, shared-memory parallel code for Hartree-Fock, DFT, and MP2, and symmetry-adapted perturbation theory (SAPT). We also add new code for MP4, QCISD(T), and G2. New modules performing frozen natural orbital coupled-cluster have been added. Previous PSI3 functionality for coupled-cluster energies and properties, and arbitrary-order CI and MBPT energies is also available. A completely new, very user-friendly input format has been implemented, and it can be (optionally) mixed with Python to allow automation of very complex tasks with simple input files. Built-in routines to handle counterpoise correction and basis set extrapolation are included.
The Beta4 release (4/7/2013; User's Manual) is the first public version. The latest accomplishments are:
- Frozen Natural orbital CCSD(T) code available
- RHF MP4, QCISD(T), and G2 features added
- dlDF-D available
- Interface to WebMO completed
- General framework for double-hybrid functionals, with several added such as B2PLYP
- More efficient Density Cumulant Functional Theory (DCFT) code with analytic gradients working
- Production-level DFT code implemented for GGA, LRC, and Meta functionals.
- Production-level DF-MP2 code working with RHF, UHF, ROHF references
- ADC(2) propagator code working
- CC gradients, CC response, CI energies, MP(n) energies, ZAPT(n) energies, EOM-CC excitation energies, CC3 energies working
- Extremely efficient, threaded SAPT code completed
- User-friendly interface to Kallay's MRCC code
- Interface to PubChem to allow chemical names in lieu of coordinates in molecule inputs
Beta3 Release Notes
This version of PSI contains the following features: Hartree-Fock, DFT, MP2, CI, CC, PSIMRCC, ADC(2), SAPT, DCFT, and optimized-orbital MP2 and MP3. Density-fitting is available for Hartree-Fock, DFT, MP2, and SAPT, and is much faster than the conventional algorithms. Most popular functionals are available, but only M05 and M05-2X are available among meta-GGA's. DFT gradients have not been tested extensively yet. We recommend linking to a threaded BLAS library and running with multiple threads. Intel's MKL library works particularly well in this regard.
The Beta3 release (10/23/2012; User's Manual) contains many enhancements and bug fixes. Among them are:
- More appropriate default values for convergence criteria and grids should speed up computations
- Density-fitting is now turned on by default when it is available, resulting in much, much faster computations
- dlDF+D and support for double-hybrids now available
- Utilizes Grimme's DFTD3 program if present to enable -D3 corrections
- Fixes a problem with optimizations using Z-matrices
- Use analytic gradients by default when they are available
Beta2 Release Notes
The Beta2 release (5/6/2012; User's Manual) fixes the following bugs reported by beta testers:
- Boost library compilation inside PSI4 now uses the user's PYTHON environmental variable, to help avoid the situation where one version of Python is used for Boost, and another for PSI4, leading to linker errors.
- Problems were encountered when compiling with versions of OpenMP older than version 3. Code specific to OpenMP 3 has been removed. The code should now compile with OpenMP 2.
- User manual has been updated to remove mention of dependency script psi4depend-v2.sh, which was only intended for machines that had very few of the relevant dependencies installed (unusual case).