Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Kitaev-Heisenberg model

This Hamiltonian has been implemented for Sato et al. (2024)Inácio et al. (2026). It defines a spin model on a honeycomb lattice as:

H^Spin=i,jγ[K1S^iγS^jγ+Γ1(S^iαS^jβ+S^iβS^jα)+Γ1(S^iγS^jα+S^iγS^jβ+S^iαS^jγ+S^iβS^jγ)]+i,jJ1S^iS^j.+i,jJ3S^iS^j,\begin{align} \hat{H}_{\text{Spin}}&=&\sum_{\langle \boldsymbol{i},\boldsymbol{j}\rangle_\gamma}\left[K_1\hat{S}_{\boldsymbol{i}}^{\gamma} \hat{S}_{\boldsymbol{j}}^{\gamma}+\Gamma_1 \left(\hat{S}_{\boldsymbol{i}}^{\alpha} \hat{S}_{\boldsymbol{j}}^{\beta}+\hat{S}_{\boldsymbol{i}}^{\beta} \hat{S}_{\boldsymbol{j}}^{\alpha}\right) +\Gamma'_1 \left(\hat{S}_{\boldsymbol{i}}^{\gamma} \hat{S}_{\boldsymbol{j}}^{\alpha}+\hat{S}_{\boldsymbol{i}}^{\gamma} \hat{S}_{\boldsymbol{j}}^{\beta} +\hat{S}_{\boldsymbol{i}}^{\alpha} \hat{S}_{\boldsymbol{j}}^{\gamma}+\hat{S}_{\boldsymbol{i}}^{\beta} \hat{S}_{\boldsymbol{j}}^{\gamma}\right) \right] \nonumber \\ & & + \sum_{\langle \boldsymbol{i},\boldsymbol{j}\rangle} J_{1} \hat{\boldsymbol{S}}_{\boldsymbol{i}} \cdot \hat{\boldsymbol{S}}_{\boldsymbol{j}}.+ \sum_{\langle\langle\langle \boldsymbol{i},\boldsymbol{j}\rangle\rangle\rangle} J_{3} \hat{\boldsymbol{S}}_{\boldsymbol{i}} \cdot \hat{\boldsymbol{S}}_{\boldsymbol{j}}, \end{align}

where i,jγ\langle \boldsymbol{i},\boldsymbol{j} \rangle_\gamma refers to nearest-neighbor bonds of type γ=x,y,z\gamma=x,y,z with cyclic permutations (γ,α,β)(\gamma,\alpha,\beta) of (x,y,z)(x,y,z), i,j\langle \boldsymbol{i},\boldsymbol{j} \rangle to all nearest-neighbor bonds, and i,j\langle\langle\langle \boldsymbol{i},\boldsymbol{j}\rangle\rangle\rangle to third-neighbor bonds. A magnetic field is included through a Zeeman coupling,

H^=H^Spin+μBigS^iB,\hat{H}=\hat{H}_{\text{Spin}} +\mu_B\sum_{\boldsymbol{i}} g \hat{\boldsymbol{S}}_{\boldsymbol{i}} \cdot \boldsymbol{B} ,

with an anisotropic gg-tensor consistent with the crystallographic axes of αRuCl3\alpha{\rm -RuCl}_3. In αRuCl3\alpha{\rm -RuCl}_3, the orthonormal axes ea\mathbf{e}_a, and eb\mathbf{e}_b, and ec\mathbf{e}_c are defined by the crystallographic directions, with ec[111]\mathbf{e}_c \parallel [111], ea[112ˉ]\mathbf{e}_a \parallel [11\bar{2}], and eb[1ˉ10]\mathbf{e}_b \parallel [\bar{1}10]. In this convention, [xyz][xyz] denote the cubic spin-space axes, ea\mathbf{e}_a and eb\mathbf{e}_b lie in the honeycomb plane, and ec\mathbf{e}_c is perpendicular to it. Within the honeycomb plane, eb\mathbf{e}_b is parallel to one bond direction of the honeycomb lattice, while ea\mathbf{e}_a is perpendicular to it. The magnetic field is applied in the aa-cc plane, nearly parallel to the crystallographic aa axis, consistent with the experimental setup.

The following model-specific parameters are available:

To use the Hamiltonian, it has to be selected via its name “Kit_Heis”

&VAR_ham_name
ham_name = "Kit_Heis"  ! Name of Hamiltonian
/

The following values for VAR_lattice choose 4×4=164\times4 = 16 honeycomb unit cells with 32 spins.

&VAR_lattice
L1 = 4  ! Length in direction a_1
L2 = 4  ! Length in direction a_2
/

The rest of the model-specific parameters are in VAR_Kit_Heis.

&VAR_Kit_Heis
Ham_J = -0.1d0  ! Nearest neighbor Heisenberg coupling
Ham_J3 = 0.1d0  ! Third nearest neighbor Heisenberg coupling
Ham_alphax = -1.0d0  ! Kitaev coupling on x-bonds
Ham_alphay = -1.0d0  ! Kitaev coupling on y-bonds
Ham_alphaz = -1.0d0  ! Kitaev coupling on z-bonds
Ham_Gx = 0.5d0  ! Gamma coupling on x-bonds
Ham_Gy = 0.5d0  ! Gamma coupling on y-bonds
Ham_Gz = 0.5d0  ! Gamma coupling on z-bonds
Ham_Gx_p = 0.0d0  ! Gamma prime coupling on x-bonds
Ham_Gy_p = 0.0d0  ! Gamma prime coupling on y-bonds
Ham_Gz_p = 0.0d0  ! Gamma prime coupling on z-bonds
Hab = 0.0579d0  ! mu_B * B / K ; Magnetic field strength
Htheta = 0.45d0  ! Magnetic field angle (in units of pi)
Ham_U = 7.14d0  ! Hubbard U, for freezing out charge fluctuations
Dtau = 0.1d0  ! Imaginary time step. Ltrot=Beta/dtau
Beta = 0.5d0  ! Inverse temperature
/

Usage example

A brief usage example using pyALF.

!./clone_alf.sh
Output
Cloning into 'ALF'...
remote: Enumerating objects: 518, done.
remote: Counting objects: 100% (518/518), done.
remote: Compressing objects: 100% (423/423), done.
remote: Total 518 (delta 113), reused 369 (delta 74), pack-reused 0 (from 0)
Receiving objects: 100% (518/518), 7.07 MiB | 6.41 MiB/s, done.
Resolving deltas: 100% (113/113), done.
Finished cloning ALF and setting up the Hamiltonian "Kit_Heis".
Creating symbolic links and modifying the Makefile for the analysis that calculates the magetotropic susceptibility.
The workflow that adapts the Makefile is fragile and may break if the Makefile is changed in future versions of ALF.
Done.

Import necessary pyALF classes.

from py_alf import ALF_source, Simulation

Create ALF source object and inspect available parameters

alf_src = ALF_source(alf_dir='./ALF')
# Note the available Hamiltonian 'Kit_Heis'.
alf_src.get_ham_names()
Output
['Kondo', 'Hubbard', 'Hubbard_Plain_Vanilla', 'tV', 'LRC', 'Z2_Matter', 'Spin_Peierls', 'Kit_Heis']
# Display the default parameters for the 'Kit_Heis' Hamiltonian.
alf_src.get_default_params('Kit_Heis', include_generic=False)
Output
OrderedDict([('VAR_lattice', {'L1': {'comment': 'Length in direction a_1', 'defined_in_base': False, 'value': 4}, 'L2': {'comment': 'Length in direction a_2', 'defined_in_base': False, 'value': 4}, 'Lattice_type': {'comment': "Lattice type. Only 'Honeycomb-Kit' implemented for Kit_Heis model", 'defined_in_base': False, 'value': 'Honeycomb-Kit'}, 'Model': {'comment': "Model name. Must be 'Kit_Heis' for this Hamiltonian module", 'defined_in_base': False, 'value': 'Kit_Heis'}}), ('VAR_Kit_Heis', {'Ham_J': {'comment': 'Nearest neighbor Heisenberg coupling', 'defined_in_base': False, 'value': -0.1}, 'Ham_J3': {'comment': 'Third nearest neighbor Heisenberg coupling', 'defined_in_base': False, 'value': 0.1}, 'Ham_alphax': {'comment': 'Kitaev coupling on x-bonds', 'defined_in_base': False, 'value': -1.0}, 'Ham_alphay': {'comment': 'Kitaev coupling on y-bonds', 'defined_in_base': False, 'value': -1.0}, 'Ham_alphaz': {'comment': 'Kitaev coupling on z-bonds', 'defined_in_base': False, 'value': -1.0}, 'Ham_Gx': {'comment': 'Gamma coupling on x-bonds', 'defined_in_base': False, 'value': 0.5}, 'Ham_Gy': {'comment': 'Gamma coupling on y-bonds', 'defined_in_base': False, 'value': 0.5}, 'Ham_Gz': {'comment': 'Gamma coupling on z-bonds', 'defined_in_base': False, 'value': 0.5}, 'Ham_Gx_p': {'comment': 'Gamma prime coupling on x-bonds', 'defined_in_base': False, 'value': 0.0}, 'Ham_Gy_p': {'comment': 'Gamma prime coupling on y-bonds', 'defined_in_base': False, 'value': 0.0}, 'Ham_Gz_p': {'comment': 'Gamma prime coupling on z-bonds', 'defined_in_base': False, 'value': 0.0}, 'Hab': {'comment': 'mu_B * B / K ; Magnetic field strength', 'defined_in_base': False, 'value': 0.0579}, 'Htheta': {'comment': 'Magnetic field angle (in units of pi)', 'defined_in_base': False, 'value': 0.45}, 'Ham_U': {'comment': 'Hubbard U, for freezing out charge fluctuations', 'defined_in_base': False, 'value': 7.14}, 'Dtau': {'comment': 'Imaginary time step. Ltrot=Beta/dtau', 'defined_in_base': False, 'value': 0.1}, 'Beta': {'comment': 'Inverse temperature', 'defined_in_base': False, 'value': 5.0}, 'Theta': {'comment': 'Projection parameter', 'defined_in_base': False, 'value': 0.0}, 'Projector': {'comment': 'Whether the projective algorithm is used. Not implemented for Kit_Heis model.', 'defined_in_base': True, 'value': False}})])

Create and run Simulation

sim = Simulation(
    alf_src, "Kit_Heis",
    {
        'L1': 4,
        'L2': 4,
        'beta': 0.5,
     },
     machine='GNU',
     mpi=True,
    )
# On first compile, an ALF-local version of HDF5 will be compiled, 
# which takes several minutes and echos many warnings.
sim.compile()
Output
Fetching long content....
Compiling ALF... 
Cleaning up Prog/
Cleaning up Libraries/
Cleaning up Analysis/
Compiling Libraries
ar: creating modules_90.a
ar: creating libqrref.a
Compiling Analysis
Compiling Program
Compiling program modules
Parsing Hamiltonian parameters
filenames: Hamiltonians/Hamiltonian_Kondo_smod.F90 Hamiltonians/Hamiltonian_Kondo_read_write_parameters.F90
filenames: Hamiltonians/Hamiltonian_Hubbard_smod.F90 Hamiltonians/Hamiltonian_Hubbard_read_write_parameters.F90
filenames: Hamiltonians/Hamiltonian_Hubbard_Plain_Vanilla_smod.F90 Hamiltonians/Hamiltonian_Hubbard_Plain_Vanilla_read_write_parameters.F90
filenames: Hamiltonians/Hamiltonian_tV_smod.F90 Hamiltonians/Hamiltonian_tV_read_write_parameters.F90
filenames: Hamiltonians/Hamiltonian_LRC_smod.F90 Hamiltonians/Hamiltonian_LRC_read_write_parameters.F90
filenames: Hamiltonians/Hamiltonian_Z2_Matter_smod.F90 Hamiltonians/Hamiltonian_Z2_Matter_read_write_parameters.F90
filenames: Hamiltonians/Hamiltonian_Spin_Peierls_smod.F90 Hamiltonians/Hamiltonian_Spin_Peierls_read_write_parameters.F90
filenames: Hamiltonians/Hamiltonian_Kit_Heis_smod.F90 Hamiltonians/Hamiltonian_Kit_Heis_read_write_parameters.F90
Link program
Done.
sim.run()
Output
Prepare directory "/home/jonas/Programs/hamiltonians/Hamiltonians/Kit_Heis/ALF_data/Kit_Heis_L1=4_L2=4_beta=0.5" for Monte Carlo run.
Create new directory.
Run /home/jonas/Programs/hamiltonians/Hamiltonians/Kit_Heis/ALF/Prog/ALF.out
 ALF Copyright (C) 2016 - 2022 The ALF project contributors
 This Program comes with ABSOLUTELY NO WARRANTY; for details see license.GPL
 This is free software, and you are welcome to redistribute it under certain conditions.
 No initial configuration

Calculating magnetotropic susceptibilty

This repository also includes files for calculating the magnetotropic susceptibilty kk displayed in Sato et al. (2024)Inácio et al. (2026). The workflow will need simulations to be carried out with HDF5, legacy formats are not supported out of the box.

k=k1(k2k3)k = k_1 - (k_2 - k_3)

To this effect, we included the following files:

  • calc_k.py: Main scripts for calculating the susceptibilty.

  • generate_tau_replicas.py: Script for generating replica of time-displaced observables. This is used for error analysis with MaxEnt

  • calc_k2_tau.F90: Custom program for preparing time-displaced observable that is used to calculate k2k_2 via MaxEnt.

The script clone_alf.sh already sets up calc_k2_tau.F90 to be compiled as part of the analysis. Furthermore, pyALF is needed. After that, calc_k.py is already ready to use.

Usage of calc_k.py:

usage: calc_k.py [-h] --alf-dir ALF_DIR [--sim-dir SIM_DIR] [--results-dir RESULTS_DIR] [--always]

Calculate the magnetotropic susceptibility k.

options:
  -h, --help            show this help message and exit
  --alf-dir ALF_DIR     Path to ALF directory
  --sim-dir SIM_DIR     Path to simulation directory
  --results-dir RESULTS_DIR
                        Path where analysis results should be written
  --always              Always calculate k, even if results exist
References
  1. Sato, T., Ramshaw, B. J., Modic, K. A., & Assaad, F. F. (2024). Scale-invariant magnetic anisotropy in RuCl₃: A quantum Monte Carlo study. Phys. Rev. B, 110(20), L201114. 10.1103/PhysRevB.110.L201114
  2. Inácio, J. C., Schwab, J., Rakhmanova, G., Safari, S., Zambra, V., Nasir, H., Paschen, S., Modic, K. A., Assaad, F. F., & Sato, T. (2026). Dynamical magnetotropic susceptibility as a new probe of Kitaev materials and beyond. https://arxiv.org/abs/2605.00568