# Interface to SIMINT by B. Pritchard

Code author: Benjamin P. Pritchard

Section author: Lori A. Burns

These are the vectorized implementation of the Obara-Saika (OS) method of calculating electron repulsion integrals developed by B. Pritchard and interfaced into libmints. Enabling simint and adding `set integral_package simint` (do this in `~/.psi4rc` for universal effect) runs libderiv from Libint for derivative integrals and simint for non-derivative integrals. Note that present AM maximum is `$$(gg|gg)$$`

Warning

simint seems to be having some problems with Intel 2018 compilers. presently disabled in conda package.

## Installation

Binary

- SIMINT is available as a conda package for Linux and macOS (and Windows, through the Ubuntu shell).

- The conda package is compiled to least-common-denominator, namely SSE instruction set.

- If using the PSI4 binary, simint has already been installed alongside.

- If using PSI4 built from source, and anaconda or miniconda has already been installed (instructions at Quick Installation), simint can be obtained through `conda install simint -c psi4`. Then enable it as a feature with ENABLE_simint, hint its location with CMAKE_PREFIX_PATH, and rebuild PSI4 to detect simint and activate dependent code.

- Previous bullet had details. To build PSI4 from source and use simint from conda without thinking, consult sec:condapsi4dev.

- To remove a conda installation, `conda remove simint`.

Source

- If using PSI4 built from source and you want simint built from from source also, enable it as a feature with ENABLE_simint, and let the build system fetch and build it and activate dependent code.

## How to configure simint for building Psi4

Role and Dependencies

- Role — In PSI4, simint is a library that provides alternate integrals.
- Downstream Dependencies — PSI4 (\(\Leftarrow\) optional) simint
- Upstream Dependencies — simint \(\Leftarrow\) None

CMake Variables

- ENABLE_simint — CMake variable toggling whether PSI4 builds with simint
- CMAKE_PREFIX_PATH — CMake list variable to specify where pre-built dependencies can be found. For simint, set to an installation directory containing `include/simint/simint.h`
- simint_DIR — CMake variable to specify where pre-built simint can be found. Set to installation directory containing `share/cmake/simint/simintConfig.cmake`
- CMAKE_DISABLE_FIND_PACKAGE_simint — CMake variable to force internal build of simint instead of detecting pre-built
- CMAKE_INSIST_FIND_PACKAGE_simint — CMake variable to force detecting pre-built simint and not falling back on internal build
- SIMINT_VECTOR — CMake variable for simint vectorization (i.e., scalar sse avx avxfma micavx512). Default is `avx`, not detected, so `sse` may be required for older chipsets. See http://www.bennyp.org/research/simint/README.txt for details.

Examples

1. Build bundled

>     >>> cmake -DENABLE_simint=ON

2. Build without simint

>     >>> cmake

3. Link against pre-built

>     >>> cmake -DENABLE_simint=ON -DCMAKE_PREFIX_PATH=/path/to/simint/root

>     >>> cmake -DENABLE_simint=ON -Dsimint_DIR=/path/to/simint/configdir

4. Build bundled despite pre-built being detectable

>     >>> cmake -DENABLE_simint=ON -DCMAKE_PREFIX_PATH=/path/to/unwanted/simint/root/and/wanted/other/dependencies/root -DCMAKE_DISABLE_FIND_PACKAGE_simint=ON