Computing the ground state energy of the S=1/2 chain
In this example we compute the ground state energy of the \(S=1/2\) Heisenberg chain on a periodic chain lattice in one dimension. The Hamiltonian is given by
\[H = J\sum_{\langle i,j \rangle} \mathbf{S}_i \cdot \mathbf{S}_j\]where \(\mathbf{S}_i = (S_i^x, S_i^y, S_i^z)\) are the spin \(S=1/2\) operators and \(\langle i,j \rangle\) denotes summation over nearest-meighbor sites \(i\) and \(j\). We set \(J=1\). This is the “Hello World” application for ED.
#include <hydra/all.h>
int main() {
using namespace hydra;
int n_sites = 16;
int nup = n_sites / 2;
// Define the Hilbert space block
auto block = Spinhalf(n_sites, nup);
// Define the nearest-neighbor Heisenberg Hamiltonian
BondList bonds;
for (int i = 0; i < n_sites; ++i) {
bonds << Bond("HB", "J", {i, (i + 1) % n_sites});
}
// Set the coupling constant "J" to one
bonds["J"] = 1.0;
// Compute and print the ground state energy
double e0 = eig0(bonds, block);
HydraPrint(e0);
return EXIT_SUCCESS;
}