// Create a `OrbitalIntegral` instance to store a two-electron molecular
// orbital integral data.
var orbitalIntegral = new OrbitalIntegral(new[] { 0, 1, 2, 3 }, 0.123);
// Create an `OrbitalIntegralHamiltonian` instance to store the orbital integral
// terms.
var orbitalIntegralHamiltonian = new OrbitalIntegralHamiltonian();
orbitalIntegralHamiltonian.Add(orbitalIntegral);
// Convert the orbital integral representation to a fermion
// representation. This also requires choosing a convention for
// mapping spin orbital indices to integer indices.
var fermionHamiltonian = orbitalIntegralHamiltonian.ToFermionHamiltonian(IndexConvention.UpDown);
// Alternatively, one can add orbital integrals directly to a fermion Hamiltonian
// as follows. This automatically enumerates over all symmetries, and then
// orders the `HermitianFermionTerm` instances in canonical order. We will need to
// choose an indexing convention as well.
fermionHamiltonian.AddRange(orbitalIntegral
.ToHermitianFermionTerms(0, IndexConvention.UpDown)
.Select(o => (o.Item1, o.Item2.ToDoubleCoeff())));
Preview:
downloadDownload PNG
downloadDownload JPEG
downloadDownload SVG
Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!
Click to optimize width for Twitter