Home > ThING

ThING

ThING is a project mainly written in SHELL and C++, based on the GPL-3.0 license.

ThING: ThING Is Not Gaussian calculates gaussian contractions using recursion relations

Program information

  ThING Is Not Gaussian is a rudimentary program to calculate
  matrix elements of gaussian contractions using recursion
  relations.

Copyright notice

  Copyright 2011, 2011 Sebastian Wouters
  <[email protected]>

Copyright permission

  This file is part of ThING Is Not Gaussian.

  ThING Is Not Gaussian is free software: you can redistribute
  it and/or modify it under the terms of the GNU General 
  Public License as published by the Free Software Foundation,
  either version 3 of the License, or (at your option) any
  later version.

  ThING Is Not Gaussian is distributed in the hope that it will
  be useful, but WITHOUT ANY WARRANTY; without even the implied
  warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  See the GNU General Public License for more details.

  You should have received a copy of the GNU General Public
  License along with ThING Is Not Gaussian. If not, see 
  <http://www.gnu.org/licenses/>.

The concept

  In quantum chemistry calculations, contractions of gaussians
  are often used to approximate atomic orbitals. This way, one
  and two body matrix elements can be evaluated analytically.
  The integrals corresponding to higher orbital angular momentum
  can also be expressed with recursion relations in function of
  integrals with lower angular momentum. It is the subject of
  "Efficient recursive computation of molecular integrals over
  Cartesian Gaussian Functions", by S. Obara and A. Saika, in
  J. Chem. Phys. 84 (7), 1986. The ideas presented in the paper
  are implemented in this program.

  A basic unrestricted Hartree Fock algorithm and an exact
  diagonalization procedure are also included to assert the
  implementation of the recursion relations. Note that I give
  no guarantee for convergence of the Hartree Fock energy of
  all atoms and molecules with all basis sets, but a lot of
  them do converge (e.g. the ones in "example/").

Outline of the code

  First you should make a startup file. An example is given in
  "start.stp" and several others can be found in "examples/".

  In main an input object is created that reads the startup
  file in. The basis sets can be found in "basissets/", and
  others can be downloaded from <https://bse.pnl.gov/bse/portal>.
  The format should be "Gaussian 94".

  Once the input is read in, the matrix elements can be
  constructed with MxElem::Init. You can then fetch them from
  the MxElem class as is done by the HF and Diag classes.

  Before you can compile you should install BLAS, LAPACK and GMP.
  I use ATLAS for BLAS and LAPACK on Ubuntu 10.10.