Library Structure - GaryZ700/CatLab_CompChem GitHub Wiki

Library Structure

Overview

The process of computationally solving the Schrödinger's equation heavily influenced the structure and design of this library and can be seen by breaking down the Schrödinger equation:

As can be seen in the image, this package breaks the Schrödinger equation down into individual class components that provide a significant amount of flexibility, and ease of testing to the developer.

Schrödinger Class

The Schrödinger class provides the core of this package, in that it solves the eigenvalue problem posed by Schrödinger, and returns the solution in the form of two lists containing eigenvalues and eigenvectors; respectively the energy levels and the coefficients needed to create a wavefunction for the system in question.

Basis Set

The basis set is comprised of two main classes, the wavefunction class and the basis set class. A wavefunction is the code for a single, individual basisfunction, while the basis set is a container that instantiates multiple copies of the wavefunction defined by the wavefunction class.

Operators

The operators class contains definitions for the Hamiltonian, potential, and kinetic energy operators. These operators act upon the basis set in order to build a Hamiltonian matrix that can then be used in the Schrödinger Class to compute the wavefunctions of the system.

Potential Energy

The potential energy is made up of two separate classes. The first class, the PES Method stands for Potential Energy Surface method, and refers to a method such as RKR, DFT, Hartree-Fock, etc. that is used to compute the PES. The diatomic potential class refers to diatomic potentials such as the Morse, Rydberg, and Extended-Rydberg potentials that are then used to fit the values created by the PES method. This in turn is passed into the potential energy operator in order to compute the potential energy matrix.

Important Note

Each of the above-described classes refers to abstract class definitions in Python that can then be extended by the programmer to create concrete implementations of the desired methods for the specified portion of the computation.