Quickstart

XC calculation (B3LYP)

import numpy as np
import gauxc as gxc
from gauxc import tools
from pyscf import gto, scf

# Build an H2O molecule using PySCF
hoh = gto.Mole()
hoh.atom = '''
O  0.000000  0.000000  0.000000
H  0.000000 -0.757160  0.586260
H  0.000000  0.757160  0.586260
'''
hoh.basis = 'def2-svp'
hoh.build()

# Build a basis set
mol = gxc.tools.get_mol(hoh)
basis = gxc.tools.get_basis(hoh)

# Make a molecular grid for numerical integration
grid = gxc.Molgrid(mol, quality=gxc.GridQuality.FineGrid)

# Initialize an integrator for the RKS XC calculation
integrator = gxc.Integrator(
    gxc.ExecutionSpace.Host,
    mol, basis, grid,
    func_names=['HYB_GGA_XC_B3LYP'],
    func_coeffs=[1.0]
)

# Compute the XC energy and potential
density = np.eye(basis.nao) # Some density matrix for closed-shell KS DFT
exc, vxc = integrator.compute_vxc(density)

Exact exchange calculation

integrator = gxc.Integrator(gxc.ExecutionSpace.Host, mol, basis, grid)
K_matrix = integrator.compute_k(density, tol_e=1e-10, tol_k=1e-10)

Note

When working with hybrid functionals you can reuse the integrator instance from the XC calculation

GPU execution

To run on GPU, use ExecutionSpace.Device.

It is highly recommended to manually set nbytes or fill_fraction to avoid GauXC allocating too much GPU memory: the default is to allocate 70% of the currently unoccupied memory on the device. Example: allocate 8 GiB:

integrator = gxc.Integrator(
    gxc.ExecutionSpace.Device,
    mol, basis, grid,
    func_names=['HYB_GGA_XC_B3LYP'],
    func_coeffs=[1.0],
    nbytes=8*1024**3
)