Quickstart

GaInt (Gaussian Integration) is a Python package for computing molecular integrals of primitive Cartesian Gaussian orbitals.

This tutorial will guide you through the basic usage of GaInt for quantum chemistry calculations.

Importing Required Modules

First, import the core modules of GaInt:

import numpy as np
from gaint.gauss import PrimitiveGaussian
from gaint.obara_saika.overlap import Overlap
from gaint.obara_saika.kinetic import Kinetic
from gaint.obara_saika.nuclear_attraction import NuclearAttraction
from gaint.obara_saika.electron_repulsion import ElectronRepulsion

print("GaInt modules imported successfully!")
GaInt modules imported successfully!

Basic Usage: Creating Gaussian Orbitals

Create a primitive Gaussian orbital:

# Create an s-type Gaussian orbital
# Parameters: coefficient, origin, angular momentum, exponent
s_orbital = PrimitiveGaussian(
    coefficient=1.0,
    origin=[0.0, 0.0, 0.0],
    shell=[0, 0, 0],  # s orbital: angular momentum [0,0,0]
    exponent=1.0
)

print(f"Orbital type: s orbital")
print(f"Origin: {s_orbital.origin}")
print(f"Exponent: {s_orbital.exponent}")
print(f"Normalization factor: {s_orbital.norm}")
Orbital type: s orbital
Origin: [0.0, 0.0, 0.0]
Exponent: 1.0
Normalization factor: 0.7127054703549901

Creating p Orbitals

Create p orbitals in different directions:

# Create px orbital (angular momentum [1,0,0])
px_orbital = PrimitiveGaussian(
    coefficient=1.0,
    origin=[0.0, 0.0, 0.0],
    shell=[1, 0, 0],  # px orbital
    exponent=1.0
)

# Create py orbital (angular momentum [0,1,0])
py_orbital = PrimitiveGaussian(
    coefficient=1.0,
    origin=[0.0, 0.0, 0.0],
    shell=[0, 1, 0],  # py orbital
    exponent=1.0
)

# Create pz orbital (angular momentum [0,0,1])
pz_orbital = PrimitiveGaussian(
    coefficient=1.0,
    origin=[0.0, 0.0, 0.0],
    shell=[0, 0, 1],  # pz orbital
    exponent=1.0
)

print(f"px orbital normalization factor: {px_orbital.norm}")
print(f"py orbital normalization factor: {py_orbital.norm}")
print(f"pz orbital normalization factor: {pz_orbital.norm}")
px orbital normalization factor: 1.4254109407099802
py orbital normalization factor: 1.4254109407099802
pz orbital normalization factor: 1.4254109407099802

Computing Overlap Integrals

Calculate overlap integrals between two orbitals using the Obara-Saika scheme:

# Create overlap integral calculator
overlap_calculator = Overlap()

# Compute s-s orbital overlap (same center)
s_s_overlap = overlap_calculator(s_orbital, s_orbital)
print(f"s-s orbital overlap: {s_s_overlap:.6f}")

# Compute s-px orbital overlap (orthogonality test)
s_px_overlap = overlap_calculator(s_orbital, px_orbital)
print(f"s-px orbital overlap: {s_px_overlap:.6f} (should be close to 0 due to orthogonality)")

# Compute px-px orbital overlap
px_px_overlap = overlap_calculator(px_orbital, px_orbital)
print(f"px-px orbital overlap: {px_px_overlap:.6f}")
s-s orbital overlap: 1.968701
s-px orbital overlap: 0.000000 (should be close to 0 due to orthogonality)
px-px orbital overlap: 0.492175

Computing Kinetic Energy Integrals

Calculate kinetic energy integrals:

# Create kinetic integral calculator
kinetic_calculator = Kinetic()

# Compute kinetic integral for s orbital
s_kinetic = kinetic_calculator(s_orbital, s_orbital)
print(f"s orbital kinetic integral: {s_kinetic:.6f}")

# Compute kinetic integral for px orbital
px_kinetic = kinetic_calculator(px_orbital, px_orbital)
print(f"px orbital kinetic integral: {px_kinetic:.6f}")
s orbital kinetic integral: 2.953052
px orbital kinetic integral: 1.230438

Computing Nuclear Attraction Integrals

Calculate attraction integrals between electrons and nuclei:

# Create nuclear attraction integral calculator
nuclear_calculator = NuclearAttraction()

# Define nucleus position and charge
nucleus_position = [0.0, 0.0, 0.0]  # Nucleus position
nuclear_charge = 1.0  # Hydrogen nucleus charge

# Compute nuclear attraction integral for s orbital
s_nuclear = nuclear_calculator(s_orbital, s_orbital, nucleus_position)
print(f"s orbital nuclear attraction integral: {s_nuclear:.6f}")

# Compute nuclear attraction integral for px orbital
px_nuclear = nuclear_calculator(px_orbital, px_orbital, nucleus_position)
print(f"px orbital nuclear attraction integral: {px_nuclear:.6f}")
s orbital nuclear attraction integral: 3.141593
px orbital nuclear attraction integral: 0.523599

Computing Electron Repulsion Integrals

Calculate repulsion integrals between electrons:

# Create electron repulsion integral calculator
eri_calculator = ElectronRepulsion()

# Compute kinetic integral for s orbital
eri1717 = eri_calculator(s_orbital,s_orbital,s_orbital,s_orbital)
print(f"s orbital repulsion integral: {eri1717:.6f}")

# Compute kinetic integral for px orbital
eri1717 = eri_calculator(px_orbital,px_orbital,px_orbital,px_orbital)
print(f"px orbital repulsion integral: {eri1717:.6f}")
s orbital repulsion integral: 4.373355
px orbital repulsion integral: 0.223223