# F/I-SAPT: Functional Group and/or Intramolecular SAPT

Code author: Robert M. Parrish

Section author: Robert M. Parrish

Module: Keywords, PSI Variables, FISAPT

The FISAPT module provides two extensions to standard SAPT theory to allow for (1) an effective two-body partition of the various SAPT terms to localized chemical functional groups (F-SAPT) and (2) a means to compute the SAPT interaction between two moieties within the embedding field of a third body (I-SAPT). F-SAPT is designed to provide additional insight into the chemical origins of a noncovalent interaction, while I-SAPT allows for one to perform a SAPT analysis for intramolecular interactions. F-SAPT and I-SAPT can be deployed together in this module, yielding “F/I-SAPT.” All F/I-SAPT computations in PSI4 use density-fitted SAPT0 as the underlying SAPT methodology. Interested users should consult the manual page for Ed Hohenstein’s SAPT0 code and the SAPT literature to understand the specifics of SAPT0 before beginning with F/I-SAPT0.

F-SAPT is detailed over two papers: [Parrish:2014:044115] on our much-earlier “atomic” SAPT (A-SAPT) and [Parrish:2014:4417] on the finished “functional group” SAPT (F-SAPT). An additional paper describes how to use F-SAPT to analyze differences under functional group substitutions [Parrish:2014:17386]. I-SAPT is explained in [Parrish:2015:051103]. There is also a reasonably-detailed review of the aims of A/F/I-SAPT and the existing state-of-the-art in the field in the introduction chapter on partitioned SAPT methods in Parrish’s thesis.

A video tutorial series for the use of the FISAPT module is available here. Specific videos in the series include:

- F-SAPT#1. Describes the use of F-SAPT to analyze the distribution of the intermolecular interaction energy components between the various hydroxyl and phenyl moieties of the phenol dimer.
- F-SAPT#2. Discusses how to plot the order-1 F-SAPT analysis with PyMol and perform a “difference F-SAPT” analysis
- I-SAPT#1. Describes the use of I-SAPT to analyze the interaction between the two phenol groups in a 2,4-pentanediol molecule.
- I-SAPT#2. Discusses how to plot the density fields and ESPs of the various moieties of the I-SAPT embedding scheme with PyMol
- F/I-SAPT Options. Details all of the more-advanced options in the F/I-SAPT code (rarely needed).

The scripts discussed below are located in psi4/psi4/share/psi4/fsapt.

## F-SAPT: A Representative Example

Below, we show an example of using F-SAPT0/jun-cc-pVDZ to analyze the distribution of the intermolecular interaction energy components between the various hydroxyl and phenyl moieties of the phenol dimer. This example is explicitly included in fsapt1. A video lecture explaining this example is available F-SAPT#1, while an additional video describing how to plot the order-1 F-SAPT analysis with PyMol and perform a “difference F-SAPT” analysis is available F-SAPT#2:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    memory 1 GB

    molecule mol {
    0 1
    O    -1.3885044    1.9298523   -0.4431206
    H    -0.5238121    1.9646519   -0.0064609
    C    -2.0071056    0.7638459   -0.1083509
    C    -1.4630807   -0.1519120    0.7949930
    C    -2.1475789   -1.3295094    1.0883677
    C    -3.3743208   -1.6031427    0.4895864
    C    -3.9143727   -0.6838545   -0.4091028
    C    -3.2370496    0.4929609   -0.7096126
    H    -0.5106510    0.0566569    1.2642563
    H    -1.7151135   -2.0321452    1.7878417
    H    -3.9024664   -2.5173865    0.7197947
    H    -4.8670730   -0.8822939   -0.8811319
    H    -3.6431662    1.2134345   -1.4057590
    --
    0 1
    O     1.3531168    1.9382724    0.4723133
    H     1.7842846    2.3487495    1.2297110
    C     2.0369747    0.7865043    0.1495491
    C     1.5904026    0.0696860   -0.9574153
    C     2.2417367   -1.1069765   -1.3128110
    C     3.3315674   -1.5665603   -0.5748636
    C     3.7696838   -0.8396901    0.5286439
    C     3.1224836    0.3383498    0.8960491
    H     0.7445512    0.4367983   -1.5218583
    H     1.8921463   -1.6649726   -2.1701843
    H     3.8330227   -2.4811537   -0.8566666
    H     4.6137632   -1.1850101    1.1092635
    H     3.4598854    0.9030376    1.7569489
    symmetry c1
    no_reorient
    no_com
    }

    set {
    basis         jun-cc-pvdz
    scf_type df
    guess sad
    freeze_core true
    }

    energy('fisapt0')

This file runs a DF-HF computation on the full dimer using PSI4’s existing SCF code. The monomer SCF computations are performed inside the FISAPT module, following which a complete DF-SAPT0 computation is performed. Additional bits of analysis are performed to generate the order-2 partition of the SAPT terms to the level of nuclei and localized occupied orbitals – this generally does not incur much additional overhead beyond a standard SAPT0 computations. The nuclear/orbital partition data is written to the folder `fsapt/` in the same directory as the input file (this can be changed by FISAPT_FSAPT_FILEPATH).

One obtains the desired F-SAPT partition by post-processing the data in `fsapt/`. Within this dir, the user is expected to provide the ASCII files `fA.dat` and `fB.dat`, which describe the assignment of atoms to chemical functional groups using 1-based ordering. E.g., for the problem at hand, `fA.dat` contains:

    1
    2
    OH 1 2
    PH 3 4 5 6 7 8 9 10 11 12 13

while `fB.dat` contains:

    1
    2
    OH 14 15
    PH 16 17 18 19 20 21 22 23 24 25 26

At this point, the user should run the `fsapt.py` post-processing script in the `fsapt` directory as:

    1
    >>> fsapt.py

This will generate, among other files, the desired functional-group partition in `fsapt.dat`. For our problem, the bottom of this file contains the finished partition:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    Frag1     Frag2          Elst      Exch     IndAB     IndBA      Disp     Total
    OH        OH           -8.425     6.216    -0.583    -1.512    -1.249    -5.553
    OH        PH            1.392     0.716     0.222    -0.348    -0.792     1.189
    PH        OH           -2.742     0.749    -0.147    -0.227    -0.674    -3.040
    PH        PH            0.680     2.187     0.007    -0.208    -2.400     0.266
    OH        All          -7.033     6.931    -0.362    -1.860    -2.040    -4.364
    PH        All          -2.062     2.936    -0.140    -0.435    -3.074    -2.774
    All       OH          -11.167     6.965    -0.730    -1.739    -1.923    -8.594
    All       PH            2.072     2.903     0.229    -0.556    -3.191     1.456
    All       All          -9.095     9.867    -0.501    -2.295    -5.114    -7.138

Note that the assignment of linking sigma bond contributions is a small point of ambiguity in F-SAPT. The `fsapt.dat` file presents the “links-by-charge” assignment at the top and the “links by 50-50” assignment at the bottom. We generally prefer the latter, but both generally give qualitatively identical energetic partitions.

Users should check the files `fragA.dat` and `fragB.dat` to ensure that there is not too much charge delocalization from one fragment to another. This is presented in the “Orbital Check” section in these files – a value larger than 0.1 docc is an indication that the picture of localizable functional groups may be breaking down. We also strongly discourage the cutting of double, triple, or aromatic bonding motifs when partitioning the molecule into fragments – cuts across only simple sigma bonds are encouraged.

## Order-1 Visualization with PyMol

The `fsapt.py` script above also generates a number of order-1 `.pdb` files that can be used to get a quick qualitative picture of the F-SAPT partition. The preferred way to do this is to use PyMol to make plots of the molecular geometry with the atoms colored according to their order-1 F-SAPT contributions. We have a set of template `.pymol` scripts to help with this process. These can be obtained by running:

    1
    >>> copy_pymol.py

and then in PyMol:

    1
    >>> @run.pymol

This last command runs all of the individual `.pymol` files (e.g., `Elst.pymol`), which in turn load in the molecule and order-1 analysis (contained in the `.pdb` file), set up the visualization, and render a `.png` image of the scene. Generally the view orientation and some specific details of the `.pymol` files require some small tweaks to permit publication-quality renderings.

## Difference F-SAPT Analysis

For those interested in taking the differences between two F-SAPT partitions (e.g., to see how a substituent modulates a noncovalent interaction), we have the `fsapt-diff.py` script to help with this. This is invoked as:

    1
    >>> fsapt-diff.py source-fsapt-dir1 source-fsapt-dir2 target-diff-fsapt-dir

Where the use has already performed `fsapt.py` analysis using the same functional group names in `source-fsapt-dir-1` and `source-fsapt-dir-2`. The difference F-SAPT partition entries are computed as \(E^{\Delta} = E^{1} - E^{2}\), and the geometries for order-1 `.pdb` visualization files are taken from system 1.

## I-SAPT: A Representative Example

Caution

As of April 2018, you can’t specify molecule fragments with an unphysical multiplicity like the singlet OH fragments in the molecule below, especially as (again in the example below) the overall molecule needs to be a singlet, which PSI4 doesn’t at present let be set independently. For situations like this, use the temporary input pattern in isapt1 .

Below, we show an example of using I-SAPT0/jun-cc-pVDZ to analyze the interaction between the two phenol groups in a 2,4-pentanediol molecule. This example is explicitly included in isapt1. A video lecture explaining this example is available I-SAPT#1, while an additional video describing how to plot the density and ESP fields from the I-SAPT embedding procedure is available I-SAPT#2:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    memory 1 GB

    molecule mol {
    0 1
    O          0.39987        2.94222       -0.26535
    H          0.05893        2.05436       -0.50962
    --
    0 1
    O          0.48122        0.30277       -0.77763
    H          0.26106       -0.50005       -1.28451
    --
    0 1
    C          2.33048       -1.00269        0.03771
    C          1.89725        0.31533       -0.59009
    C          2.28232        1.50669        0.29709
    C          1.82204        2.84608       -0.29432
    C          2.37905        4.02099        0.49639
    H          3.41246       -1.03030        0.19825
    H          2.05362       -1.84372       -0.60709
    H          1.82714       -1.16382        0.99734
    H          2.36243        0.42333       -1.57636
    H          3.36962        1.51414        0.43813
    H          1.81251        1.38060        1.28140
    H          2.14344        2.92967       -1.33843
    H          3.47320        4.02400        0.48819
    H          2.03535        3.99216        1.53635
    H          2.02481        4.96785        0.07455
    symmetry c1
    no_reorient
    no_com
    }

    # => Standard Options <= #

    set {
    basis jun-cc-pvdz
    scf_type df
    guess sad
    freeze_core true
    fisapt_do_plot true  # For extra analysis
    }

    energy('fisapt0')

This is essentially the same input as for F-SAPT, except that the molecular system is now divided into three moieties – subsystems A and B whose intramolecular interaction we wish to compute, and a linking unit C. This file runs a DF-HF computation on the full system using PSI4’s existing SCF code. At the start of the FISAPT code, the occupied orbitals are localized and divided by charge considerations into A, B, C, and link sets. By default, linking sigma bonds are assigned to C (this can be changed by the FISAPT_LINK_ASSIGNMENT options). Then, non-interacting Hartree–Fock solutions for A and B are optimized in the embedding field of the linking moiety C. At this point, A and B are not interacting with each other, but have any potential covalent links or other interactions with C built in by the embedding. A standard F-SAPT0 computation is then performed between A and B, yielding the I-SAPT interaction energy. Any F-SAPT considerations are also possible when I-SAPT is performed – F and I are completely direct-product-separable considerations.

## Cube File Visualization with PyMol

Setting FISAPT_DO_PLOT `true` above generates a set of `.cube` files containing the densities and ESPs of the various subsystems in the I-SAPT embedding procedure. These can be used to gain a detailed understanding of the intermolecular partition and the polarization between non-interacting and Hartree–Fock-interacting moieties. We have developed a set of template `.pymol` scripts to help with this process. These can be obtained by running:

    1
    >>> copy_pymol2.py

and then in PyMol:

    1
    >>> @run.pymol

This last command runs all of the individual `.pymol` files (e.g., `DA.pymol`), which in turn load in the molecule and cube file data (contained in the `.cube` file), set up the visualization, and render a `.png` image of the scene. Generally the view orientation and some specific details of the `.pymol` files require some small tweaks to permit publication-quality renderings.

## F/I-SAPT Keywords

The input files described above cover roughly 90% of all F/I-SAPT analyses. For more delicate or involved problems, there are a large number of user options that permit the customization of the I-SAPT subsystem partition, the convergence of the IBO localization procedure, numerical thresholds, etc. We have an entire video tutorial devoted to these options F/I-SAPT Options. Direct source-code documentation on these options is available :ref:`here <apdx:fisapt_psivar>`_.

## Additional Notes

Caution

In constrast to Ed Hohenstein’s SAPT0 code, FISAPT uses the -JKFIT auxiliary basis sets for all Fock-type terms (e.g., electrostatics, exchange, induction, and core Fock matrix elements in exchange-dispersion), and the -RI auxiliary basis sets only for the dispersion term. Ed’s code uses the -RI basis sets for all SAPT terms, which can be problematic for heavy elements. As such, Ed’s SAPT0 code will yield slightly different results than FISAPT. The differences should be very minor for up to and including second-row elements, after which point one needs to use the DF_BASIS_ELST option in Ed’s code to provide an accurate result.