Quantum chemical methods#
Configuration interaction#
CI methods find (one or a couple of the lowest) eigenvectors of the Hamiltonian expressed in a certain Fock subspace. GQCP offers the following ONV bases:
Fock subspace |
GQCP ONV basis |
Use case |
---|---|---|
Full spin-resolved |
|
Full CI and Hubbard calculations |
Spin-resolved, selection |
|
Selected CI calculations |
Seniority-zero |
|
DOCI, seniority-zero calculations |
Let’s explore a full CI calculation using the molecular Hamiltonian as an example, but note that you may replace the SpinResolvedONVBasis
with a different one.
# Create the molecular Hamiltonian in the Löwdin spin-orbital basis.
molecule = gqcpy.Molecule.HChain(4, 0.742)
N_P = molecule.numberOfElectronPairs()
spinor_basis = gqcpy.RSpinOrbitalBasis(molecule, "STO-3G")
K = spinor_basis.numberOfSpatialOrbitals()
sq_hamiltonian = gqcpy.SQHamiltonian.Molecular(spinor_basis, molecule)
# Do a dense FCI calculation.
onv_basis = gqcpy.SpinResolvedONVBasis(K, N_P, N_P)
solver = gqcpy.EigenproblemSolver.Dense()
environment = gqcpy.CIEnvironment.Dense(sq_hamiltonian, onv_basis)
qc_structure = gqcpy.CI(onv_basis).optimize(solver, environment)
energy = qc_structure.groundStateEnergy()
linear_expansion = qc_structure.groundStateParameters()
// Create the molecular Hamiltonian in the Löwdin spin-orbital basis.
const auto molecule = GQCP::Molecule::HChain(4, 0.742);
const auto N_P = molecule.numberOfElectronPairs();
GQCP::RSpinOrbitalBasis<double, GQCP::GTOShell> spinor_basis {molecule, "STO-3G"};
const auto K = spinor_basis.numberOfSpatialOrbitals();
spinor_basis.lowdinOrthonormalize();
auto sq_hamiltonian = spinor_basis.quantize(GQCP::FQMolecularHamiltonian(molecule));
// Do a dense FCI calculation.
const GQCP::SpinResolvedONVBasis onv_basis {K, N_P, N_P};
auto solver = GQCP::EigenproblemSolver::Dense<double>();
auto environment = GQCP::CIEnvironment::Dense(sq_hamiltonian, onv_basis);
const auto qc_structure = GQCP::QCMethod::CI<double, GQCP::SpinResolvedONVBasis>(onv_basis).optimize(solver, environment);
const auto energy = qc_structure.groundStateEnergy()
const auto linear_expansion = qc_structure.groundStateParameters();