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:
where refers to nearest-neighbor bonds of type with cyclic permutations of , to all nearest-neighbor bonds, and to third-neighbor bonds. A magnetic field is included through a Zeeman coupling,
with an anisotropic -tensor consistent with the crystallographic axes of . In , the orthonormal axes , and , and are defined by the crystallographic directions, with , , and . In this convention, denote the cubic spin-space axes, and lie in the honeycomb plane, and is perpendicular to it. Within the honeycomb plane, is parallel to one bond direction of the honeycomb lattice, while is perpendicular to it. The magnetic field is applied in the - plane, nearly parallel to the crystallographic 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 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.
Use provided script to download ALF and link the Hamiltonian to it¶
!./clone_alf.shOutput
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, SimulationCreate 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
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 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.
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 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- 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
- 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