Reference
Contents
Index
KagomeDSL.DoubleKagome
KagomeDSL.MC
Carlo.init!
Carlo.sweep!
KagomeDSL.Hmat
KagomeDSL.Sz
KagomeDSL.getOL
KagomeDSL.getxprime
KagomeDSL.is_occupied
KagomeDSL.spinInteraction!
KagomeDSL.tilde_U
KagomeDSL.update_W!
KagomeDSL.update_W_matrices!
KagomeDSL.DoubleKagome
— Methoddouble triangle unit cell Kagome lattice
note n1
here is still the number of repititions of triangle in the a1
direction, so n1
is asserted to be even. The total number is n1 * n2 * 3
sites.
KagomeDSL.MC
— MethodMC(params::AbstractDict)
Create a Monte Carlo object
Carlo.init!
— MethodCarlo.init!(mc::MC, ctx::MCContext, params::AbstractDict)
Initialize the Monte Carlo object params
n1
:Int
number of cells in x directionn2
:Int
number of cells in y directionPBC
:Tuple{Bool,2}
boundary condition, e.g. (false, false)
Carlo.sweep!
— MethodCarlo.sweep!(mc::MC, ctx::MCContext) -> Nothing
Perform one Monte Carlo sweep for the Mott state simulation. This implements a two-spin swap update where electrons can exchange positions between different spin states at occupied sites.
Note: The W matrices are re-evaluated periodically (every n_occupied sweeps) to maintain numerical stability. If the re-evaluation fails due to singular matrices, a warning is issued and the simulation continues.
KagomeDSL.Hmat
— MethodHmat(lat::DoubleKagome) -> Matrix{Float64}
Return the Spinor Hamiltonian matrix for a DoubleKagome lattice.
KagomeDSL.Sz
— MethodSz(i::Int, kappa_up::Vector{Int}, kappa_down::Vector{Int}) -> Float64
$Sz = 1/2 (f^†_{↑} f_{↑} - f^†_{↓} f_{↓})$ Calculate the z-component of spin at site i
given up and down spin configurations.
Returns: +1/2 for up spin -1/2 for down spin
Throws: ArgumentError: if site is doubly occupied or empty BoundsError: if i is outside the valid range
KagomeDSL.getOL
— MethodThe observable $O_L = \frac{<x|H|\psi_G>}{<x|\psi_G>}$ The Hamiltonian should be the real one!
KagomeDSL.getxprime
— Methodreturn $|x'> = H|x>$ where $H$ is the Heisenberg Hamiltonian Note $|x>$ here should also be a Mott state.
KagomeDSL.is_occupied
— Methodis_occupied(kappa::Vector{Int}, l::Int) -> Bool
Check if site l
is occupied in the kappa configuration vector.
Throws: BoundsError: if l is outside the valid range of kappa
KagomeDSL.spinInteraction!
— MethodspinInteraction!(xprime::Dict, kappa_up::Vector{Int}, kappa_down::Vector{Int}, i::Int, j::Int)
Compute the spin flip term 1/2(S+i S-j + S-i S+j) contribution to xprime.
The function handles two cases:
- S+i S-j: when j has up spin and i has down spin
- S-i S+j: when i has up spin and j has down spin
Each case contributes with coefficient 1/2.
KagomeDSL.tilde_U
— Methodtilde_U(U::AbstractMatrix, kappa::Vector{Int})
Creates a tilde matrix by rearranging rows of U according to kappa indices.
Parameters:
U
: Source matrix of size (n × m)kappa
: Vector of indices where each non-zero value l indicates that row Rl of U should be placed at row l of the output
Returns:
- A matrix of size (m × m) with same element type as U
KagomeDSL.update_W!
— Methodupdate_W!(W::AbstractMatrix; l::Int, K::Int)
Update the W matrix $W'_{I,j} = W_{I,j} - W_{I,l} / W_{K,l} * (W_{K,j} - \delta_{l,j})$
KagomeDSL.update_W_matrices!
— Methodupdate_W_matrices(mc::MC; K_up::Int, K_down::Int, l_up::Int, l_down::Int)
Update the W matrices