This project is based on the Crawford Group's excellent C++ Programming Tutorial in Chemistry, but written in Fortran. The end goal of this project will be performing HF, MP2, CCSD, and CCSD(T), as per the original tutorial, but with additional support for multicore processors (modern CPUs, GPUs).
- Geometry read-in
- Integral read-in
- Nuclear repulsion energy calculation
- Hartree-Fock without symmetry
- Pretty printing, time reporting
- MP2 without symmetry
- CCSD without symmetry
- OpenMP parallelisation
- DIIS acceleration for Hartree-Fock SCF
- CCSD(T) without symmetry
- DIIS acceleration for CCSD iterations
- Loop optimisations - cache
- User input file: level of theory, tolerances
- BLAS acceleration of tensor contractions
- Spin-free CCSD
- Spin-free CCSD(T)
- Loop optimisations - using permutational symmetry
- Adapting Hartree-Fock with symmetry
- Ditto for MP2
- Ditto for CCSD
- Ditto for CCSD(T)
- MPI parallelisation
- GPU adaptation for MP2 and CCSD/(T)
To get started, clone this directory by
git clone [email protected]:brianz98/A-Fortran-Electronic-Structure-Programme.git
You need to have:
- CMake (at least 3.12)
- A Fortran compiler (gfortran 9.3.0 have been tested)
- OpenBLAS (see below for instructions)
Download the latest OpenBLAS version from their website, and untar, then
make USE_OPENMP=1
make install [PREFIX=/your/directory]
where the PREFIX
can be omitted and OpenBLAS will be installed in /opt/OpenBLAS
by default, but you'll likely need to prefix sudo
to the command.
If you install OpenBLAS in directories other than /opt/OpenBLAS
, then you need to edit the last line of CMakeLists.txt
to where libopenblas.a
actually is.