Research code dump!
I’ve finally gotten around to cleaning up my home-brewed research code (at least a little bit), and I’ve hosted it here on my GitHub. I’m calling the project pyqchem
, and it contains Hartree Fock, MP2, coupled cluster and a smattering of excited state methods. I’d love it if you check it out!
You’ll notice that I still don’t have a way of reading in molecular geometry and basis set, and so I am still reliant on parsing G09 outputfor the atomic orbital integrals. Oh well, it’s a future project :) I’d also love to learn how to make it object oriented, as well as optimize the lower level routines in C/C++
. It is so far far from optimized right now it is ridiculous. I think my EOM-CCSD code scales as N^8 instead of N^6, just because I haven’t factored the equations right. But it works, and it has helped me learn so much about electronic structure methods. If you get the chance to look at it, I would love input for the future. I’m still developing as a programmer and I could use all the help I can get!
I hosted a lot of premade molecules (and their AO integrals), so all you have to do is execute pyqchem.py
followed by the folder of interest.
For example:
>>$ python pyqchem.py h2_3-21G
Would execute the pyqchem.py
script on the folder h2_3-21G
, which contains all the precomputed atomic-orbital basis integrals. The type of calculation is changed by editing the pyqchem.py
script itself. Say I wanted to perform an MP2 calculation on H2 in a 3-21G basis. I open pyqchem.py
, and edit at the top:
""" Edit below to perform the calculation desired
"""
do_DIIS = True # DIIS acceleration (just keep on)
do_ao2mo = True # Set to true so we use our optimized (MO) orbitals from SCF
do_mp2 = True # Set to True so we do an MP2
do_cistdhf = False # Set to False so we don't do a CIS/TDHF
do_ccsd = False # Set to False so we don't do CCSD
do_eomccsd = False # Set to False so we don't do EOM-CCSD
do_eommbpt2 = False # Set to False so we don't do EOM-MBPT2
do_eommbptp2 = False # Set to False so we don't do EOM-MBPT(2)
do_eommbptd = False # Set to False so we don't do EOM-MBPT(D)
printops = True # True prints more stuff
convergence = 1.0e-8 # Our iterative convergence criteria
Then run:
>>$ python pyqchem.py h2_3-21G
And you’ll see the pretty output dump to your terminal :)
That’s all there is to it! Enjoy!