Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add sigma t-J model #45

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/MPSKitModels.jl
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ export quantum_potts
export heisenberg_XXX, heisenberg_XXZ, heisenberg_XYZ
export bilinear_biquadratic_model
export hubbard_model, bose_hubbard_model
export tj_model
export tj_model, sigmatj_model
export quantum_chemistry_hamiltonian

export classical_ising
Expand Down
51 changes: 51 additions & 0 deletions src/models/hamiltonians.jl
Original file line number Diff line number Diff line change
Expand Up @@ -425,4 +425,55 @@
end
end

"""
sigmatj_model([elt::Type{<:Number}], [particle_symmetry::Type{<:Sector}],
[spin_symmetry::Type{<:Sector}], [lattice::AbstractLattice];
t, J, mu, slave_fermion::Bool=false)

MPO for the hamiltonian of the sigma t-J model (introduced in https://doi.org/10.1038/srep02586)
```math
H = -t \\sum_{\\langle i,j \\rangle, \\sigma} \\sigma
(\\tilde{e}^\\dagger_{i,\\sigma} \\tilde{e}_{j,\\sigma} + h.c.)
+ J \\sum_{\\langle i,j \\rangle}(\\mathbf{S}_i \\cdot \\mathbf{S}_j - \\frac{1}{4} n_i n_j)
- \\mu \\sum_i n_i
```
where ``\\tilde{e}_{i,\\sigma}`` is the electron operator with spin ``\\sigma`` restrict to the no-double-occupancy subspace.
"""
function sigmatj_model end
function sigmatj_model(lattice::AbstractLattice; kwargs...)
return sigmatj_model(ComplexF64, Trivial, Trivial, lattice; kwargs...)

Check warning on line 444 in src/models/hamiltonians.jl

View check run for this annotation

Codecov / codecov/patch

src/models/hamiltonians.jl#L443-L444

Added lines #L443 - L444 were not covered by tests
end
function sigmatj_model(particle_symmetry::Type{<:Sector}, spin_symmetry::Type{<:Sector};

Check warning on line 446 in src/models/hamiltonians.jl

View check run for this annotation

Codecov / codecov/patch

src/models/hamiltonians.jl#L446

Added line #L446 was not covered by tests
kwargs...)
return sigmatj_model(ComplexF64, particle_symmetry, spin_symmetry; kwargs...)

Check warning on line 448 in src/models/hamiltonians.jl

View check run for this annotation

Codecov / codecov/patch

src/models/hamiltonians.jl#L448

Added line #L448 was not covered by tests
end
function sigmatj_model(elt::Type{<:Number}, lattice::AbstractLattice; kwargs...)
return sigmatj_model(elt, Trivial, Trivial, lattice; kwargs...)

Check warning on line 451 in src/models/hamiltonians.jl

View check run for this annotation

Codecov / codecov/patch

src/models/hamiltonians.jl#L450-L451

Added lines #L450 - L451 were not covered by tests
end
function sigmatj_model(T::Type{<:Number}=ComplexF64,

Check warning on line 453 in src/models/hamiltonians.jl

View check run for this annotation

Codecov / codecov/patch

src/models/hamiltonians.jl#L453

Added line #L453 was not covered by tests
particle_symmetry::Type{<:Sector}=Trivial,
spin_symmetry::Type{<:Sector}=Trivial,
lattice::AbstractLattice=InfiniteChain(1);
t=2.5, J=1.0, mu=0.0, slave_fermion::Bool=false)
hopping = (TJOperators.e_plusmin_up(T, particle_symmetry, spin_symmetry;

Check warning on line 458 in src/models/hamiltonians.jl

View check run for this annotation

Codecov / codecov/patch

src/models/hamiltonians.jl#L458

Added line #L458 was not covered by tests
slave_fermion) -
TJOperators.e_plusmin_down(T, particle_symmetry, spin_symmetry;
slave_fermion) +
TJOperators.e_minplus_up(T, particle_symmetry, spin_symmetry;
slave_fermion) -
TJOperators.e_minplus_down(T, particle_symmetry, spin_symmetry;
slave_fermion))
num = TJOperators.e_number(T, particle_symmetry, spin_symmetry; slave_fermion)
heisenberg = TJOperators.S_exchange(T, particle_symmetry, spin_symmetry;

Check warning on line 467 in src/models/hamiltonians.jl

View check run for this annotation

Codecov / codecov/patch

src/models/hamiltonians.jl#L466-L467

Added lines #L466 - L467 were not covered by tests
slave_fermion) -
(1 / 4) * (num ⊗ num)
return @mpoham begin
sum(nearest_neighbours(lattice)) do (i, j)
return (-t) * hopping{i,j} + J * heisenberg{i,j}

Check warning on line 472 in src/models/hamiltonians.jl

View check run for this annotation

Codecov / codecov/patch

src/models/hamiltonians.jl#L470-L472

Added lines #L470 - L472 were not covered by tests
end + sum(vertices(lattice)) do i
return (-mu) * num{i}

Check warning on line 474 in src/models/hamiltonians.jl

View check run for this annotation

Codecov / codecov/patch

src/models/hamiltonians.jl#L474

Added line #L474 was not covered by tests
end
end
end

# TODO: add (hardcore) bosonic t-J model (https://arxiv.org/abs/2409.15424)
Loading