Spectrum of Kitaev-Heisenberg model on a honeycomb lattice
We consider the Kitaev-Heisenberg model on a honeycomb lattice [1]. The Hamiltonian is given by
where \(\boldsymbol{S}_i\) are spin \(1/2\) operators, \(\langle \dots \rangle\) denotes sum over nearest and next-nearest neighbor sites, and in the first (Kitaev) term, when the nearest neighbor bonds are (anti)parallel to \(\tilde{\gamma}=(0,1),(\sqrt{3},-1)/2,(-\sqrt{3},-1)/2\), \(\gamma=x,y,z\), respectively. This model hosts Néel, stripy, zigzag, and ferromagnetic magnetic orders as well as Kitaev spin liquid phase depending on the parameter regimes [2].
Here, we will show how to obtain the low energy spectrum of this model using XDiag. Due to translation and \(C_2\) rotation symmetry (note that this Hamiltonian does not possess \(SU(2)\) or \(S_z\) symmetry), the Hilbert space splits into different irreducible representation (irrep) sectors. We choose a system with \(24\) sites (\(12\) unit cells, such that all three \(M\) points and \(K\) and \(K'\) points are accessible), and converge the lowest-lying eigenvalues in each of the irrep sector at each momentum point. We plot the spectrum \(K/J\) in the figure below.
One can see in the figure above that there is a phase transition around \(K/J\approx1.5\). For \(K/J< 1.3\) the ground state is at \(\Gamma\) point, whereas for \(K/J> 1.7\), the ground states are at the \(M\) points. The state for \(K/J< 1.3\) is the Néel state, which is supported by the fact there are tower of states [3] above the ground state. For \(K/J>1.7\) the ground state has stripy order, which is why the ground state is at the \(M\) point. Note that this model is exactly solvable at \(K/J=2\) [2], with ground state having stripy antiferromagnetic order [1]. However, remarkably, this stripy order, despite being antiferromagnetic, does not possess tower of states; or in other words, this state is fluctuation free. This is because at \(K/J=2\), the model can be mapped to a Heisenberg model with ferromagnetic nearest neighbor coupling by rotating the spin operators in a particular way [1].
The C++ script used to obtain the eigen spectra is given below
#include <xdiag/all.hpp>
int main(int argc, char **argv) {
using namespace xdiag;
using namespace arma;
using fmt::format;
say_hello();
// Parse input arguments
assert(argc == 8);
int n_sites = atoi(argv[1]); // number of sites
std::string kname = std::string(argv[2]); // momentum k
double J = atof(argv[3]);
double KX = atof(argv[4]);
double KY = atof(argv[5]);
double KZ = atof(argv[6]);
int seed = atoi(argv[7]);
Log("Diagonalizing H in block k: {}", kname);
auto lfile = FileToml(format("kitaev.{}.toml", n_sites));
std::string ofilename = format(
"outfile.honeycomb.{}.J.{:.2f}.KX.{:.2f}.KY.{:.2f}.KZ.{:.2f}.k.{}.seed.{}.h5",
n_sites, J, KX, KY, KZ, kname, seed);
auto ofile = FileH5(ofilename, "w!");
auto ops_read = read_opsum(lfile, "Interactions");
cx_mat sx(mat({{0., 0.5}, {0.5, 0.}}), mat({{0., 0.}, {0., 0.}}));
cx_mat sy(mat({{0., 0.}, {0., 0.}}), mat({{0., -0.5}, {0.5, 0.}}));
cx_mat sz(mat({{0.5, 0.0}, {0.0, -0.5}}), mat({{0., 0.}, {0., 0.0}}));
cx_mat sxsx = kron(sx, sx);
cx_mat sysy = kron(sy, sy);
cx_mat szsz = kron(sz, sz);
cx_mat gsx = kron(sy, sz) + kron(sz, sy);
cx_mat gsy = kron(sx, sz) + kron(sz, sx);
cx_mat gsz = kron(sx, sy) + kron(sy, sx);
auto ops = OpSum();
for (auto [cpl, op] : ops_read) {
std::string type = op.type();
auto sites = op.sites();
if (type == "KITAEVX") {
ops += KX * Op("Matrix", sites, sxsx);
} else if (type == "KITAEVY") {
ops += KY * Op("Matrix", sites, sysy);
} else if (type == "KITAEVZ") {
ops += KZ * Op("Matrix", sites, szsz);
} else if (type == "SdotS") {
ops += J * Op("Matrix", sites, sxsx);
ops += J * Op("Matrix", sites, sysy);
ops += J * Op("Matrix", sites, szsz);
}
}
auto irrep = read_representation(lfile, kname);
Log("Creating block ...");
tic();
auto block = Spinhalf(n_sites, irrep);
toc();
Log("Dimension: {}", block.size());
Log("Running Lanczos ...");
tic();
int n_eig_to_converge = 2;
int max_iterations = 30;
auto tmat = eigvals_lanczos(ops, block, n_eig_to_converge, 1e-12,
max_iterations, 1e-7, seed);
toc();
ofile["Alphas"] = tmat.alphas;
ofile["Betas"] = tmat.betas;
ofile["Eigenvalues"] = tmat.eigenvalues;
ofile["Dimension"] = block.size();
return EXIT_SUCCESS;
}
The interactions terms and the symmetry representation inputs are given in the following TOML file:
# This modelfile was created with the following properties:
# Basis coordinates: (0.0, 1.1547005383792517), (0.0, 0.0)
# Lattice vectors: a1=(1.0, 1.7320508075688776), a2=(2.0, 0.0)
# Simulation torus vectors: t1=(6.0, 3.4641016151377553), t2=(-6.0, 3.4641016151377553)
# Simulation torus matrix: ((2, 2), (2, -4))
# Symmetry center: (1.0, 0.5773502691896258)
# Lattice Point Group: D6
# Lattice Space Group (infinite Lattice): D6
# K points (K wedge marked with *):
# [2.0943951023931957 0.0] *
# [1.5707963267948968 0.9068996821171087] *
# [1.5707963267948968 -0.9068996821171087] *
# [1.0471975511965979 1.8137993642342174] *
# [1.0471975511965979 0.0] *
# [0.5235987755982989 0.9068996821171087] *
# [0.5235987755982989 -0.9068996821171087] *
# [0.0 1.8137993642342174] *
# [0.0 0.0] *
# [-0.5235987755982989 0.9068996821171087]
# [-0.5235987755982989 -0.9068996821171087]
# [-1.0471975511965979 0.0]
# High Symmetry Points: K_0.C1, M_0.C2, M_1.C2, K_1.C1, X_0.C1, X_1.C1, X_2.C1, M_2.C2, Gamma.C2,
# Eccentricity: --
Coordinates = [
[0.0, 0.0],
[-3.0, 1.7320508075688776],
[1.0, 1.7320508075688776],
[-2.0, 3.4641016151377553],
[2.0, 3.4641016151377553],
[-1.0, 5.196152422706633],
[0.0, 1.1547005383792517],
[-3.0, 2.886751345948129],
[1.0, 2.886751345948129],
[-2.0, 4.618802153517007],
[2.0, 4.618802153517007],
[-1.0, 6.350852961085884],
[-1.0, 1.7320508075688776],
[3.0, 1.7320508075688776],
[-4.0, 3.4641016151377553],
[0.0, 3.4641016151377553],
[4.0, 3.4641016151377553],
[1.0, 5.196152422706633],
[-1.0, 2.886751345948129],
[3.0, 2.886751345948129],
[-4.0, 4.618802153517007],
[0.0, 4.618802153517007],
[4.0, 4.618802153517007],
[1.0, 6.350852961085884]
]
Interactions = [
['J', 'SdotS', 6, 0],
['J', 'SdotS', 8, 2],
['J', 'SdotS', 19, 13],
['J', 'SdotS', 7, 1],
['J', 'SdotS', 18, 12],
['J', 'SdotS', 10, 4],
['J', 'SdotS', 22, 16],
['J', 'SdotS', 20, 14],
['J', 'SdotS', 9, 3],
['J', 'SdotS', 21, 15],
['J', 'SdotS', 11, 5],
['J', 'SdotS', 23, 17],
['J', 'SdotS', 6, 2],
['J', 'SdotS', 8, 4],
['J', 'SdotS', 19, 16],
['J', 'SdotS', 7, 3],
['J', 'SdotS', 18, 15],
['J', 'SdotS', 10, 1],
['J', 'SdotS', 22, 12],
['J', 'SdotS', 20, 13],
['J', 'SdotS', 9, 5],
['J', 'SdotS', 21, 17],
['J', 'SdotS', 11, 0],
['J', 'SdotS', 23, 14],
['J', 'SdotS', 6, 12],
['J', 'SdotS', 8, 15],
['J', 'SdotS', 19, 4],
['J', 'SdotS', 7, 14],
['J', 'SdotS', 18, 3],
['J', 'SdotS', 10, 17],
['J', 'SdotS', 22, 1],
['J', 'SdotS', 20, 2],
['J', 'SdotS', 9, 13],
['J', 'SdotS', 21, 5],
['J', 'SdotS', 11, 16],
['J', 'SdotS', 23, 0],
['KX', 'KITAEVX', 6, 0],
['KX', 'KITAEVX', 8, 2],
['KX', 'KITAEVX', 19, 13],
['KX', 'KITAEVX', 7, 1],
['KX', 'KITAEVX', 18, 12],
['KX', 'KITAEVX', 10, 4],
['KX', 'KITAEVX', 22, 16],
['KX', 'KITAEVX', 20, 14],
['KX', 'KITAEVX', 9, 3],
['KX', 'KITAEVX', 21, 15],
['KX', 'KITAEVX', 11, 5],
['KX', 'KITAEVX', 23, 17],
['KY', 'KITAEVY', 0, 23],
['KY', 'KITAEVY', 2, 20],
['KY', 'KITAEVY', 13, 9],
['KY', 'KITAEVY', 1, 22],
['KY', 'KITAEVY', 12, 6],
['KY', 'KITAEVY', 4, 19],
['KY', 'KITAEVY', 16, 11],
['KY', 'KITAEVY', 14, 7],
['KY', 'KITAEVY', 3, 18],
['KY', 'KITAEVY', 15, 8],
['KY', 'KITAEVY', 5, 21],
['KY', 'KITAEVY', 17, 10],
['KZ', 'KITAEVZ', 0, 11],
['KZ', 'KITAEVZ', 2, 6],
['KZ', 'KITAEVZ', 13, 20],
['KZ', 'KITAEVZ', 1, 10],
['KZ', 'KITAEVZ', 12, 22],
['KZ', 'KITAEVZ', 4, 8],
['KZ', 'KITAEVZ', 16, 19],
['KZ', 'KITAEVZ', 14, 23],
['KZ', 'KITAEVZ', 3, 7],
['KZ', 'KITAEVZ', 15, 18],
['KZ', 'KITAEVZ', 5, 9],
['KZ', 'KITAEVZ', 17, 21]
]
Symmetries = [
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23],
[1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 14, 15, 12, 13, 17, 16, 20, 21, 18, 19, 23, 22],
[2, 3, 4, 5, 1, 0, 8, 9, 10, 11, 7, 6, 15, 16, 13, 17, 12, 14, 21, 22, 19, 23, 18, 20],
[3, 2, 5, 4, 0, 1, 9, 8, 11, 10, 6, 7, 13, 17, 15, 16, 14, 12, 19, 23, 21, 22, 20, 18],
[4, 5, 1, 0, 3, 2, 10, 11, 7, 6, 9, 8, 17, 12, 16, 14, 15, 13, 23, 18, 22, 20, 21, 19],
[5, 4, 0, 1, 2, 3, 11, 10, 6, 7, 8, 9, 16, 14, 17, 12, 13, 15, 22, 20, 23, 18, 19, 21],
[8, 9, 6, 7, 11, 10, 2, 3, 0, 1, 5, 4, 20, 22, 18, 23, 19, 21, 14, 16, 12, 17, 13, 15],
[11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 21, 20, 19, 18, 23, 22, 15, 14, 13, 12, 17, 16],
[9, 8, 7, 6, 10, 11, 3, 2, 1, 0, 4, 5, 18, 23, 20, 22, 21, 19, 12, 17, 14, 16, 15, 13],
[10, 11, 8, 9, 6, 7, 4, 5, 2, 3, 0, 1, 19, 18, 21, 20, 22, 23, 13, 12, 15, 14, 16, 17],
[6, 7, 11, 10, 9, 8, 0, 1, 5, 4, 3, 2, 23, 19, 22, 21, 20, 18, 17, 13, 16, 15, 14, 12],
[7, 6, 10, 11, 8, 9, 1, 0, 4, 5, 2, 3, 22, 21, 23, 19, 18, 20, 16, 15, 17, 13, 12, 14],
[12, 14, 15, 13, 17, 16, 18, 20, 21, 19, 23, 22, 3, 4, 2, 5, 1, 0, 9, 10, 8, 11, 7, 6],
[13, 15, 16, 17, 12, 14, 19, 21, 22, 23, 18, 20, 4, 0, 5, 1, 2, 3, 10, 6, 11, 7, 8, 9],
[14, 12, 13, 15, 16, 17, 20, 18, 19, 21, 22, 23, 2, 5, 3, 4, 0, 1, 8, 11, 9, 10, 6, 7],
[15, 13, 17, 16, 14, 12, 21, 19, 23, 22, 20, 18, 5, 1, 4, 0, 3, 2, 11, 7, 10, 6, 9, 8],
[16, 17, 12, 14, 15, 13, 22, 23, 18, 20, 21, 19, 1, 2, 0, 3, 4, 5, 7, 8, 6, 9, 10, 11],
[17, 16, 14, 12, 13, 15, 23, 22, 20, 18, 19, 21, 0, 3, 1, 2, 5, 4, 6, 9, 7, 8, 11, 10],
[20, 18, 23, 22, 21, 19, 14, 12, 17, 16, 15, 13, 7, 11, 6, 10, 9, 8, 1, 5, 0, 4, 3, 2],
[18, 20, 22, 23, 19, 21, 12, 14, 16, 17, 13, 15, 6, 10, 7, 11, 8, 9, 0, 4, 1, 5, 2, 3],
[19, 21, 20, 18, 23, 22, 13, 15, 14, 12, 17, 16, 9, 6, 8, 7, 11, 10, 3, 0, 2, 1, 5, 4],
[21, 19, 18, 20, 22, 23, 15, 13, 12, 14, 16, 17, 8, 7, 9, 6, 10, 11, 2, 1, 3, 0, 4, 5],
[22, 23, 19, 21, 20, 18, 16, 17, 13, 15, 14, 12, 11, 8, 10, 9, 6, 7, 5, 2, 4, 3, 0, 1],
[23, 22, 21, 19, 18, 20, 17, 16, 15, 13, 12, 14, 10, 9, 11, 8, 7, 6, 4, 3, 5, 2, 1, 0]
]
# Irreducible representations
[Gamma.C2.A]
characters = [
[1.0000000000000000, 0.0000000000000000],
[1.0000000000000000, 0.0000000000000000],
[1.0000000000000000, 0.0000000000000000],
[1.0000000000000000, 0.0000000000000000],
[1.0000000000000000, 0.0000000000000000],
[1.0000000000000000, 0.0000000000000000],
[1.0000000000000000, 0.0000000000000000],
[1.0000000000000000, 0.0000000000000000],
[1.0000000000000000, 0.0000000000000000],
[1.0000000000000000, 0.0000000000000000],
[1.0000000000000000, 0.0000000000000000],
[1.0000000000000000, 0.0000000000000000],
[1.0000000000000000, 0.0000000000000000],
[1.0000000000000000, 0.0000000000000000],
[1.0000000000000000, 0.0000000000000000],
[1.0000000000000000, 0.0000000000000000],
[1.0000000000000000, 0.0000000000000000],
[1.0000000000000000, 0.0000000000000000],
[1.0000000000000000, 0.0000000000000000],
[1.0000000000000000, 0.0000000000000000],
[1.0000000000000000, 0.0000000000000000],
[1.0000000000000000, 0.0000000000000000],
[1.0000000000000000, 0.0000000000000000],
[1.0000000000000000, 0.0000000000000000]
]
allowed_symmetries = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23]
momentum = [0.0000000000000000, 0.0000000000000000]
[Gamma.C2.B]
characters = [
[1.0000000000000000, 0.0000000000000000],
[1.0000000000000000, 0.0000000000000000],
[1.0000000000000000, 0.0000000000000000],
[1.0000000000000000, 0.0000000000000000],
[1.0000000000000000, 0.0000000000000000],
[1.0000000000000000, 0.0000000000000000],
[-1.0000000000000000, 0.0000000000000000],
[-1.0000000000000000, 0.0000000000000000],
[-1.0000000000000000, 0.0000000000000000],
[-1.0000000000000000, 0.0000000000000000],
[-1.0000000000000000, 0.0000000000000000],
[-1.0000000000000000, 0.0000000000000000],
[1.0000000000000000, 0.0000000000000000],
[1.0000000000000000, 0.0000000000000000],
[1.0000000000000000, 0.0000000000000000],
[1.0000000000000000, 0.0000000000000000],
[1.0000000000000000, 0.0000000000000000],
[1.0000000000000000, 0.0000000000000000],
[-1.0000000000000000, 0.0000000000000000],
[-1.0000000000000000, 0.0000000000000000],
[-1.0000000000000000, 0.0000000000000000],
[-1.0000000000000000, 0.0000000000000000],
[-1.0000000000000000, 0.0000000000000000],
[-1.0000000000000000, 0.0000000000000000]
]
allowed_symmetries = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23]
momentum = [0.0000000000000000, 0.0000000000000000]
[K0.C1.A]
characters = [
[1.0000000000000000, 0.0000000000000000],
[1.0000000000000000, -0.0000000000000006],
[-0.5000000000000002, 0.8660254037844385],
[-0.4999999999999996, 0.8660254037844388],
[-0.4999999999999996, -0.8660254037844388],
[-0.5000000000000002, -0.8660254037844385],
[-0.5000000000000002, -0.8660254037844385],
[1.0000000000000000, 0.0000000000000006],
[-0.5000000000000008, -0.8660254037844383],
[1.0000000000000000, 0.0000000000000000],
[-0.5000000000000008, 0.8660254037844383],
[-0.5000000000000002, 0.8660254037844385]
]
allowed_symmetries = [0, 1, 2, 3, 4, 5, 12, 13, 14, 15, 16, 17]
momentum = [2.0943951023931957, 0.0000000000000000]
[K1.C1.A]
characters = [
[1.0000000000000000, 0.0000000000000000],
[1.0000000000000000, -0.0000000000000004],
[-0.4999999999999996, -0.8660254037844388],
[-0.5000000000000004, -0.8660254037844384],
[-0.5000000000000008, 0.8660254037844383],
[-0.4999999999999992, 0.8660254037844392],
[-0.4999999999999998, 0.8660254037844387],
[1.0000000000000000, -0.0000000000000002],
[-0.4999999999999994, 0.8660254037844389],
[1.0000000000000000, -0.0000000000000002],
[-0.4999999999999998, -0.8660254037844387],
[-0.4999999999999998, -0.8660254037844387]
]
allowed_symmetries = [0, 1, 2, 3, 4, 5, 12, 13, 14, 15, 16, 17]
momentum = [1.0471975511965979, 1.8137993642342174]
[M0.C2.A]
characters = [
[1.0000000000000000, 0.0000000000000000],
[-1.0000000000000000, 0.0000000000000008],
[-1.0000000000000000, 0.0000000000000001],
[1.0000000000000000, -0.0000000000000004],
[1.0000000000000000, -0.0000000000000002],
[-1.0000000000000000, 0.0000000000000001],
[1.0000000000000000, -0.0000000000000002],
[1.0000000000000000, 0.0000000000000006],
[-1.0000000000000000, 0.0000000000000008],
[-1.0000000000000000, 0.0000000000000001],
[-1.0000000000000000, 0.0000000000000004],
[1.0000000000000000, -0.0000000000000002],
[1.0000000000000000, -0.0000000000000002],
[1.0000000000000000, 0.0000000000000006],
[-1.0000000000000000, 0.0000000000000008],
[-1.0000000000000000, 0.0000000000000001],
[-1.0000000000000000, 0.0000000000000004],
[1.0000000000000000, -0.0000000000000002],
[1.0000000000000000, 0.0000000000000000],
[-1.0000000000000000, 0.0000000000000008],
[-1.0000000000000000, 0.0000000000000001],
[1.0000000000000000, -0.0000000000000004],
[1.0000000000000000, -0.0000000000000002],
[-1.0000000000000000, 0.0000000000000001]
]
allowed_symmetries = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23]
momentum = [1.5707963267948968, 0.9068996821171087]
[M0.C2.B]
characters = [
[1.0000000000000000, 0.0000000000000000],
[-1.0000000000000000, 0.0000000000000008],
[-1.0000000000000000, 0.0000000000000001],
[1.0000000000000000, -0.0000000000000004],
[1.0000000000000000, -0.0000000000000002],
[-1.0000000000000000, 0.0000000000000001],
[-1.0000000000000000, 0.0000000000000002],
[-1.0000000000000000, -0.0000000000000006],
[1.0000000000000000, -0.0000000000000008],
[1.0000000000000000, -0.0000000000000001],
[1.0000000000000000, -0.0000000000000004],
[-1.0000000000000000, 0.0000000000000002],
[1.0000000000000000, -0.0000000000000002],
[1.0000000000000000, 0.0000000000000006],
[-1.0000000000000000, 0.0000000000000008],
[-1.0000000000000000, 0.0000000000000001],
[-1.0000000000000000, 0.0000000000000004],
[1.0000000000000000, -0.0000000000000002],
[-1.0000000000000000, 0.0000000000000000],
[1.0000000000000000, -0.0000000000000008],
[1.0000000000000000, -0.0000000000000001],
[-1.0000000000000000, 0.0000000000000004],
[-1.0000000000000000, 0.0000000000000002],
[1.0000000000000000, -0.0000000000000001]
]
allowed_symmetries = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23]
momentum = [1.5707963267948968, 0.9068996821171087]
[M1.C2.A]
characters = [
[1.0000000000000000, 0.0000000000000000],
[1.0000000000000000, -0.0000000000000006],
[1.0000000000000000, 0.0000000000000002],
[1.0000000000000000, 0.0000000000000002],
[1.0000000000000000, 0.0000000000000004],
[1.0000000000000000, 0.0000000000000002],
[-1.0000000000000000, -0.0000000000000001],
[-1.0000000000000000, -0.0000000000000008],
[-1.0000000000000000, -0.0000000000000004],
[-1.0000000000000000, -0.0000000000000001],
[-1.0000000000000000, -0.0000000000000008],
[-1.0000000000000000, -0.0000000000000001],
[-1.0000000000000000, -0.0000000000000001],
[-1.0000000000000000, -0.0000000000000008],
[-1.0000000000000000, -0.0000000000000004],
[-1.0000000000000000, -0.0000000000000001],
[-1.0000000000000000, -0.0000000000000008],
[-1.0000000000000000, -0.0000000000000001],
[1.0000000000000000, 0.0000000000000000],
[1.0000000000000000, -0.0000000000000006],
[1.0000000000000000, 0.0000000000000002],
[1.0000000000000000, 0.0000000000000002],
[1.0000000000000000, 0.0000000000000004],
[1.0000000000000000, 0.0000000000000002]
]
allowed_symmetries = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23]
momentum = [1.5707963267948968, -0.9068996821171087]
[M1.C2.B]
characters = [
[1.0000000000000000, 0.0000000000000000],
[1.0000000000000000, -0.0000000000000006],
[1.0000000000000000, 0.0000000000000002],
[1.0000000000000000, 0.0000000000000002],
[1.0000000000000000, 0.0000000000000004],
[1.0000000000000000, 0.0000000000000002],
[1.0000000000000000, 0.0000000000000001],
[1.0000000000000000, 0.0000000000000008],
[1.0000000000000000, 0.0000000000000004],
[1.0000000000000000, 0.0000000000000001],
[1.0000000000000000, 0.0000000000000008],
[1.0000000000000000, 0.0000000000000001],
[-1.0000000000000000, -0.0000000000000001],
[-1.0000000000000000, -0.0000000000000008],
[-1.0000000000000000, -0.0000000000000004],
[-1.0000000000000000, -0.0000000000000001],
[-1.0000000000000000, -0.0000000000000008],
[-1.0000000000000000, -0.0000000000000001],
[-1.0000000000000000, 0.0000000000000000],
[-1.0000000000000000, 0.0000000000000006],
[-1.0000000000000000, -0.0000000000000002],
[-1.0000000000000000, -0.0000000000000002],
[-1.0000000000000000, -0.0000000000000004],
[-1.0000000000000000, -0.0000000000000002]
]
allowed_symmetries = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23]
momentum = [1.5707963267948968, -0.9068996821171087]
[M2.C2.A]
characters = [
[1.0000000000000000, 0.0000000000000000],
[-1.0000000000000000, 0.0000000000000001],
[-1.0000000000000000, 0.0000000000000001],
[1.0000000000000000, -0.0000000000000002],
[1.0000000000000000, -0.0000000000000002],
[-1.0000000000000000, 0.0000000000000004],
[-1.0000000000000000, 0.0000000000000001],
[-1.0000000000000000, 0.0000000000000001],
[1.0000000000000000, -0.0000000000000002],
[1.0000000000000000, -0.0000000000000002],
[1.0000000000000000, -0.0000000000000002],
[-1.0000000000000000, 0.0000000000000004],
[-1.0000000000000000, 0.0000000000000001],
[-1.0000000000000000, 0.0000000000000001],
[1.0000000000000000, -0.0000000000000002],
[1.0000000000000000, -0.0000000000000002],
[1.0000000000000000, -0.0000000000000002],
[-1.0000000000000000, 0.0000000000000004],
[1.0000000000000000, 0.0000000000000000],
[-1.0000000000000000, 0.0000000000000001],
[-1.0000000000000000, 0.0000000000000001],
[1.0000000000000000, -0.0000000000000002],
[1.0000000000000000, -0.0000000000000002],
[-1.0000000000000000, 0.0000000000000004]
]
allowed_symmetries = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23]
momentum = [0.0000000000000000, 1.8137993642342174]
[M2.C2.B]
characters = [
[1.0000000000000000, 0.0000000000000000],
[-1.0000000000000000, 0.0000000000000001],
[-1.0000000000000000, 0.0000000000000001],
[1.0000000000000000, -0.0000000000000002],
[1.0000000000000000, -0.0000000000000002],
[-1.0000000000000000, 0.0000000000000004],
[1.0000000000000000, -0.0000000000000001],
[1.0000000000000000, -0.0000000000000001],
[-1.0000000000000000, 0.0000000000000002],
[-1.0000000000000000, 0.0000000000000002],
[-1.0000000000000000, 0.0000000000000002],
[1.0000000000000000, -0.0000000000000004],
[-1.0000000000000000, 0.0000000000000001],
[-1.0000000000000000, 0.0000000000000001],
[1.0000000000000000, -0.0000000000000002],
[1.0000000000000000, -0.0000000000000002],
[1.0000000000000000, -0.0000000000000002],
[-1.0000000000000000, 0.0000000000000004],
[-1.0000000000000000, 0.0000000000000000],
[1.0000000000000000, -0.0000000000000001],
[1.0000000000000000, -0.0000000000000001],
[-1.0000000000000000, 0.0000000000000002],
[-1.0000000000000000, 0.0000000000000002],
[1.0000000000000000, -0.0000000000000004]
]
allowed_symmetries = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23]
momentum = [0.0000000000000000, 1.8137993642342174]
[X0.C1.A]
characters = [
[1.0000000000000000, 0.0000000000000000],
[-1.0000000000000000, 0.0000000000000003],
[0.4999999999999999, 0.8660254037844387],
[-0.5000000000000002, -0.8660254037844385],
[-0.5000000000000002, 0.8660254037844385],
[0.4999999999999999, -0.8660254037844387],
[0.4999999999999999, -0.8660254037844387],
[-1.0000000000000000, -0.0000000000000003],
[-0.4999999999999996, 0.8660254037844388],
[1.0000000000000000, 0.0000000000000000],
[-0.4999999999999996, -0.8660254037844388],
[0.4999999999999999, 0.8660254037844387]
]
allowed_symmetries = [0, 1, 2, 3, 4, 5, 12, 13, 14, 15, 16, 17]
momentum = [1.0471975511965979, 0.0000000000000000]
[X1.C1.A]
characters = [
[1.0000000000000000, 0.0000000000000000],
[1.0000000000000000, -0.0000000000000002],
[-0.5000000000000002, 0.8660254037844385],
[-0.4999999999999998, 0.8660254037844387],
[-0.4999999999999996, -0.8660254037844388],
[-0.5000000000000004, -0.8660254037844384],
[0.5000000000000001, 0.8660254037844386],
[-1.0000000000000000, 0.0000000000000001],
[0.5000000000000003, 0.8660254037844385],
[-1.0000000000000000, 0.0000000000000001],
[0.5000000000000001, -0.8660254037844386],
[0.5000000000000001, -0.8660254037844386]
]
allowed_symmetries = [0, 1, 2, 3, 4, 5, 12, 13, 14, 15, 16, 17]
momentum = [0.5235987755982989, 0.9068996821171087]
[X2.C1.A]
characters = [
[1.0000000000000000, 0.0000000000000000],
[-1.0000000000000000, -0.0000000000000001],
[0.5000000000000001, -0.8660254037844386],
[-0.4999999999999996, 0.8660254037844388],
[-0.4999999999999998, -0.8660254037844387],
[0.5000000000000001, 0.8660254037844386],
[-0.5000000000000002, -0.8660254037844385],
[1.0000000000000000, 0.0000000000000002],
[0.5000000000000001, 0.8660254037844386],
[-1.0000000000000000, -0.0000000000000001],
[0.5000000000000003, -0.8660254037844385],
[-0.5000000000000004, 0.8660254037844384]
]
allowed_symmetries = [0, 1, 2, 3, 4, 5, 12, 13, 14, 15, 16, 17]
momentum = [0.5235987755982989, -0.9068996821171087]
To run the above C++ code with the toml file, one needs to execute the following command
where the n_sites, kname, J, KX, KY, KZ and seed are to be replaced by their values such as 24, Gamma.C2.A, 1.00, -1.00, -1.00, -1.00, 1, respectively. (Note that the code implements the possiblity of anisotropic Kitaev couplings with KX, KY and KZ taking different values. Furthermore, in the expression of the Hamiltonian above, we wrote the Kitaev term as ferromagnetic, but in the code it is implemented as antiferromagnetic, hence one needs to input negative values of KX, KY and KZ to obtain the results shown in the figure above.) The Julia code below was used to generate the plot above from the data obtaining running the above code.Plotting Script
using LinearAlgebra
using Plots
using Combinatorics
# using BenchmarkTools
using Kronecker
using LaTeXStrings
using Arpack
# using KernelDensity
using Interpolations
using SparseArrays
# using ArnoldiMethod
using KrylovKit
using JLD2
using HDF5
using Printf
plot_font = "Computer Modern"
default(
fontfamily=plot_font,
linewidth=2,
framestyle=:box,
# xtickfont=font(18),
label=nothing,
left_margin=8Plots.mm,
bottom_margin=2Plots.mm
# ytickfont=font(18),
# legendfont=font(18)
)
colors = palette(:default)#palette(:thermal,length(14:div(n_sites,2))+1)
markers = filter((m->begin
m in Plots.supported_markers()
end), Plots._shape_keys)
n_sites=24
n_seeds = 2
ks=["Gamma.C2.A", "Gamma.C2.B", "M0.C2.A", "M0.C2.B", "M1.C2.A", "M1.C2.B", "M2.C2.A", "M2.C2.B", "K0.C1.A", "K1.C1.A", "X0.C1.A", "X1.C1.A", "X2.C1.A"]
ksl=["Γ.C2.A", "Γ.C2.B", "M0.C2.A", "M0.C2.B", "M1.C2.A", "M1.C2.B", "M2.C2.A", "M2.C2.B", "K0.C1.A", "K1.C1.A", "X0.C1.A", "X1.C1.A", "X2.C1.A"]
seeds = [i for i=2:n_seeds]
Ks = [i/10. for i=-40:0]
J=1.00
for seed in seeds
plot(xlabel=L"K/J",ylabel=L"E/J",ylims=(-0.02,2.0),xlims=(-0.02,5.0),xticks=(0.0:0.4:4,[@sprintf("%.2f",i) for i=0.0:0.4:4]),dpi=400)
for K=Ks
mineig = 100.
for k in ks
f = h5open(@sprintf("outfiles/seed.%d/outfile.honeycomb.%d.J.%.2f.KX.%.2f.KY.%.2f.KZ.%.2f.k.%s.seed.%d.h5",seed,n_sites,J,K,K,K,k,seed), "r")
eigs =read(f["Eigenvalues"])
if mineig>eigs[1]
mineig = eigs[1]
end
end
c=0
for k in ks
c=c+1
f = h5open(@sprintf("outfiles/seed.%d/outfile.honeycomb.%d.J.%.2f.KX.%.2f.KY.%.2f.KZ.%.2f.k.%s.seed.%d.h5",seed,n_sites,J,K,K,K,k,seed), "r")#,J,K,K,K
eig = read(f["Eigenvalues"]).-mineig
KK=abs(K)*[1 for i=1:length(eig)]
if K==Ks[1]
plot!(KK,eig,seriestype=:scatter,m=markers[c],mc=colors[c],label=ksl[c])
else
plot!(KK,eig,seriestype=:scatter,m=markers[c],mc=colors[c],primary=false)
end
close(f)
end
end
savefig(@sprintf("outfile.kitaev.%d.seed.%d-n.png",n_sites,seed))
end
References
[1] Chaloupka, J., Jackeli, G., & Khaliullin, G. (2010). Kitaev-Heisenberg Model on a Honeycomb Lattice: Possible Exotic Phases in Iridium Oxides \(\text{A}_2\text{IrO}_3\). Phys. Rev. Lett., 105(2), 027204.
[2] Gotfryd, D., Rusnačko, J., Wohlfeld, K., Jackeli, G., Chaloupka, J., & Oleś, A. M. (2017). Phase diagram and spin correlations of the Kitaev-Heisenberg model: Importance of quantum effects. Physical Review B, 95(2), 024426.
[3] P. W. Anderson, An Approximate Quantum Theory of the Antiferromagnetic Ground State, Phys. Rev. 86, 694 (1952)