Releases: psi4/psi4
Releases · psi4/psi4
v1.4, 2021-08-03
- Advertised Version: 1.4
- Continuous Version: 1.4
- Release Date: 3 August 2021
- Documentation: https://psicode.org/psi4manual/1.4.0/
- Availability: Public, GitHub source, CMake build, Conda binary installers
- Span: 437 PRs, roughly 1559-2264
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) ...
v1.3.2, 2019-05-17
- Advertised Version: 1.3.2
- Continuous Version: 1.3.2
- Release Date: 17 May 2019
- Documentation: http://psicode.org/psi4manual/1.3.2/
- Availability: Public, GitHub source, CMake build, Conda binary installers
- Span: 3 PRs
Enhancements
- #1576 regularize MP2 correlation QCSchema variable and move
psi4 --json
output to tmpfile.
Building
Bug Fixes
v1.3.1, 2019-04-15
- Advertised Version: 1.3.1
- Continuous Version: 1.3.1
- Release Date: 15 April 2019
- Documentation: http://psicode.org/psi4manual/1.3.1/
- Availability: Public, GitHub source, CMake build, Conda binary installers
- Span: 5 + 4 partial PRs
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
, usedtype=2
Molecule in schema, movepsi4:qcvars
toextras/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, notlibint/libderiv.h
.
Bug Fixes
- #1577 (partial) fix
CFOUR ERROR CODE
andDROPMO
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.
1.3, 2019-02-28
- Advertised Version: 1.3
- Continuous Version: 1.3
- Release Date: 28 February 2019
- Documentation: http://psicode.org/psi4manual/1.3/
- Availability: Public, GitHub source, CMake build, Conda binary installers
- Span: 335 PRs, roughly 1065-1558
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
andDUAL_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
, allPOL
-->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 inMatrix
. Also,create
forVector
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
, notProcess::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
, orfrom_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
1.2.1, 2018-07-24
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
inAO_core
inDFHelper
) (#1100) - Improves memory printing and uses correct GiB units for
SCF_TYPE=MEM_DF
(#1103, #1104) - Source right image in README (#1105)
1.2, 2018-07-04
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 addPSI_API
to the psi4 repo to make sure thecore.so
you're linking against is exporting the symbol you need. See example here. Or just file an issue with your lost symbol.
- Add
- 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
andRHF.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 usesmkl_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 onbash
. Since conda 4.4 c. Dec 2017
Known Bugs
- PCM-ROHF is broken. See #999
- ERD interface is broken and disabled
1.1, 2017-05-19
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 tobasis_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, makingpsi4.geometry()
,psi4.set_options()
, andpsi4.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 throughset_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 intoprint_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
andpsi4.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 callingimport 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 thanpsi4 --new-plugin-makefile
as formerly. Plugin interface has been substantially renovated. - Renamed plugin generation from, for example,
psi4 --new-plugin +wavefunction myplugin
topsi4 --plugin-name myplugin --plugin-template wavefunction
. - Build performs pre-install to
BuildDir/stage/
so python driver not being run from source. Usepsi4 --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_
andarrays_
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
BasisSet
s 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(....