Some days ago. I updated psikit, added new function, SAPT.
The method can calculate inter-intra molecular interaction with psi4. Psikit can call the method very easily.
And I added sample notebook in the repository. Following codes are very simple example of SATP for water dimer and FSAPT for phenol dimer.
SAPT for water dimer.
from rdkit import Chem from rdkit.Chem.Draw import IPythonConsole from rdkit.Chem import Draw from psikit import Sapt w1 = Chem.MolFromMolFile('water1.mol', removeHs=False) w2 = Chem.MolFromMolFile('water2.mol', removeHs=False) Draw.MolsToGridImage([w1,w2]) sapt = Sapt() sapt.monomer1_from_molfile('water1.mol') sapt.monomer2_from_molfile('water2.mol') sapt.make_dimer() res = sapt.run_sapt() ---stdout is below Initializing SAPT object... RHF for monomer A finished in 0.55 seconds. RHF for monomer B finished in 0.52 seconds. Building ERI tensor... ...built ERI tensor in 3.180 seconds. Size of the ERI tensor is 0.36 GB, 82 basis functions. ...finished initializing SAPT object in 4.49 seconds. Starting electrostatics... ...electrostatics took a total of 0.17 seconds. Starting exchange... ...exchange took a total of 0.63 seconds. Starting dispersion... ...dispersion took a total of 8.92 seconds. Starting induction... Ind20,r (AB) -1.37852223 mH -0.86503511 kcal/mol Exch-Ind20,r (AB) 0.88580457 mH 0.55585034 kcal/mol ...induction took a total of 15.90 seconds. SAPT0 Results ---------------------------------------------------------------------- Exch10 (S^2) 10.53844851 mH 6.61297129 kcal/mol Elst10 -13.02830646 mH -8.17537956 kcal/mol Disp20 -3.42996225 mH -2.15233218 kcal/mol Exch-Disp20 0.61399531 mH 0.38528758 kcal/mol Ind20,r -4.33068313 mH -2.71754264 kcal/mol Exch-Ind20,r 2.30125737 mH 1.44405971 kcal/mol ---------------------------------------------------------------------- Total SAPT0 -7.33525065 mH -4.60293580 kcal/mol
F-SAPT for phenol dimer
from rdkit import Chem from rdkit.Chem.Draw import IPythonConsole from rdkit.Chem import Draw from psikit import Sapt p1 = Chem.MolFromMolFile('phenol1.mol', removeHs=False) p2 = Chem.MolFromMolFile('phenol2.mol', removeHs=False) Draw.MolsToGridImage([p1,p2]) sapt = Sapt() sapt.monomer1_from_molfile('phenol1.mol') sapt.monomer2_from_molfile('phenol2.mol') sapt.make_dimer() res = sapt.run_fisapt() --fA.dat and fB.dat files are generated in fsapt folder the call fsapt.py from terminal, it generates FSAPT results which is shown below. => Full Analysis Reduced Analysis F-ISAPT: Links 50-50 Full Analysis Reduced Analysis <= Frag1 Frag2 Elst Exch IndAB IndBA Disp Total c1ccccc1_0 c1ccccc1_0 0.686 2.197 0.007 -0.208 -2.403 0.278 c1ccccc1_0 O_0 -2.751 0.733 -0.147 -0.227 -0.675 -3.067 O_0 c1ccccc1_0 1.392 0.720 0.222 -0.347 -0.793 1.194 O_0 O_0 -8.421 6.218 -0.584 -1.512 -1.250 -5.549 c1ccccc1_0 All -2.065 2.930 -0.140 -0.435 -3.078 -2.789 O_0 All -7.030 6.938 -0.362 -1.859 -2.043 -4.356 All c1ccccc1_0 2.078 2.917 0.229 -0.556 -3.196 1.472 All O_0 -11.173 6.951 -0.731 -1.739 -1.925 -8.617 All All -9.095 9.868 -0.502 -2.295 -5.121 -7.145
Psikit can use SAPT, FSAPT efficiently I think. There is room for improvement for FSAPT fragmentation method. Any comments and advice will be greatly appreciated.
URL is below.
GITHUB
https://github.com/Mishima-syk/psikit
FSAPT
https://nbviewer.jupyter.org/github/Mishima-syk/psikit/blob/master/examples/example_sapt/fsapt_ex.ipynb
SAPT
https://nbviewer.jupyter.org/github/Mishima-syk/psikit/blob/master/examples/example_sapt/sapt_ex.ipynb