Quill Program for SCF Calculations

C
chemistry
python
Author

Charles Peterson

Published

June 30, 2021

Program Quill

I’ve recently updated a small, straightforward Hartree Fock program, primarily written in C, on my GitHub page. I primarily developed this code to understand how SCF/HF works.

The program is named after my pet hedgehog, Quill Riker.

You can find the code on my GitHub page at https://github.com/charliecpeterson/QUILL

This program utilizes PySCF and libcint to generate the 1e/2e integrals. It also employs the Eigen3 API for all matrix and linear algebra routines.

The input format is similar to NWChem. In the GitHub repository, there is a sample input file named input.inp.

geometry
C  -0.000000000000   0.000000000000   0.000000000000
H   1.183771681898  -1.183771681898  -1.183771681898
H   1.183771681898   1.183771681898   1.183771681898
H  -1.183771681898   1.183771681898  -1.183771681898
H  -1.183771681898  -1.183771681898   1.183771681898
end
basis
H    S
      3.387000E+01           6.068000E-03           0.000000E+00           0.000000E+00
      5.095000E+00           4.530800E-02           0.000000E+00           0.000000E+00
      1.159000E+00           2.028220E-01           0.000000E+00           0.000000E+00
      3.258000E-01           5.039030E-01           1.000000E+00           0.000000E+00
      1.027000E-01           3.834210E-01           0.000000E+00           1.000000E+00
H    P
      1.407000E+00           1.000000E+00           0.000000E+00
      3.880000E-01           0.000000E+00           1.000000E+00
H    D
      1.057000E+00           1.0000000
C    S
      8.236000E+03           5.310000E-04          -1.130000E-04           0.000000E+00           0.000000E+00
      1.235000E+03           4.108000E-03          -8.780000E-04           0.000000E+00           0.000000E+00
      2.808000E+02           2.108700E-02          -4.540000E-03           0.000000E+00           0.000000E+00
      7.927000E+01           8.185300E-02          -1.813300E-02           0.000000E+00           0.000000E+00
      2.559000E+01           2.348170E-01          -5.576000E-02           0.000000E+00           0.000000E+00
      8.997000E+00           4.344010E-01          -1.268950E-01           0.000000E+00           0.000000E+00
      3.319000E+00           3.461290E-01          -1.703520E-01           0.000000E+00           0.000000E+00
      9.059000E-01           3.937800E-02           1.403820E-01           1.000000E+00           0.000000E+00
      3.643000E-01          -8.983000E-03           5.986840E-01           0.000000E+00           0.000000E+00
      1.285000E-01           2.385000E-03           3.953890E-01           0.000000E+00           1.000000E+00
C    P
      1.871000E+01           1.403100E-02           0.000000E+00           0.000000E+00
      4.133000E+00           8.686600E-02           0.000000E+00           0.000000E+00
      1.200000E+00           2.902160E-01           0.000000E+00           0.000000E+00
      3.827000E-01           5.010080E-01           1.000000E+00           0.000000E+00
      1.209000E-01           3.434060E-01           0.000000E+00           1.000000E+00
C    D
      1.097000E+00           1.000000E+00           0.000000E+00
      3.180000E-01           0.000000E+00           1.000000E+00
C    F
      7.610000E-01           1.0000000
end
scf
num_elec 10
end

Currently, the code accepts only three input blocks:

  • geometry
  • basis
  • scf

The geometry and basis blocks closely resemble NWChem, with the basis set format being identical to NWChem.

The scf block accepts only num_elec. This code exclusively supports RHF. It works for single reference, closed-shell systems ONLY.

I have tested this program on several compounds, and the energy difference from PySCF results is about 10^-2 atomic units. More work is required.

I plan to use this program as a starting point for adding and testing new libraries to run computational chemistry methods, particularly for Exascale systems.

Feel free to contact me for more information!