@@ -461,4 +461,75 @@ function tj_model(
461461 end
462462end
463463
464+ #= ==========================================================================================
465+ Quantum Ashkin-Teller model
466+ ===========================================================================================#
467+ """
468+ ashkin_teller([T::Type{<:Number} = ComplexF64], [S = Trivial],
469+ [lattice::AbstractLattice = InfiniteChain(1)];
470+ h = 1.0, J = 1.0, λ = 1.0)
471+
472+ MPO for the hamiltonian of the quantum Ashkin-Teller model. The model is
473+ defined on a chain of two qubits per site. Writing Pauli operators on each of these qubits
474+ as ``\\ sigma `` and ``\\ tau ``, the Hamiltonian reads:
475+ ```math
476+ H = -h \\ sum_i\\ bigg(\\ sigma_i^x + \\ tau_i^x + \\ lambda \\ sigma_i^x \\ tau_i^x \\ bigg)
477+ -J \\ sum_{\\ langle i,j \\ rangle} \\ bigg( \\ sigma_i^z \\ sigma_j^z + \\ tau_i^z \\ tau_j^z
478+ +\\ lambda \\ sigma_i^z \\ sigma_j^z \\ tau_i^z \\ tau_j^z \\ bigg).
479+
480+ ```
481+ """
482+ function ashkin_teller end
483+ function ashkin_teller (lattice:: AbstractLattice ; kwargs... )
484+ return ashkin_teller (ComplexF64, Trivial, lattice; kwargs... )
485+ end
486+ function ashkin_teller (symmetry:: Type{<:Sector} ; kwargs... )
487+ return ashkin_teller (ComplexF64, symmetry; kwargs... )
488+ end
489+ function ashkin_teller (T:: Type{<:Number} , lattice:: AbstractLattice ; kwargs... )
490+ return ashkin_teller (T, Trivial, lattice; kwargs... )
491+ end
492+ function ashkin_teller (
493+ T:: Type{<:Number} = ComplexF64, S:: Type{<:Sector} = Trivial,
494+ lattice:: AbstractLattice = InfiniteChain (1 );
495+ h = 1.0 , J = 1.0 , λ = 1.0
496+ )
497+ S₁, S₂ = _ashin_teller_decompose_symmetry (S)
498+
499+ # component tensors
500+ X₁ = σˣ (T, S₁)
501+ Z₁Z₁ = σᶻᶻ (T, S₁)
502+ I₁ = id (T, domain (X₁))
503+ I₁I₁ = id (T, domain (Z₁Z₁))
504+
505+ Z₂Z₂ = σᶻᶻ (T, S₂)
506+ X₂ = σˣ (T, S₂)
507+ I₂ = id (T, domain (X₂))
508+ I₂I₂ = id (T, domain (Z₂Z₂))
509+
510+ # Single site operators
511+ XI = X₁ ⊠ I₂
512+ IX = I₁ ⊠ X₂
513+ XX = X₁ ⊠ X₂
514+ F = isometry (Int, fuse (domain (XX)) ← domain (XX))
515+ onsite = F * (- h * (XI + IX + λ * XX)) * F'
516+
517+ # Nearest-neighbour terms
518+ @tensor FF[- 1 - 2 ; - 3 - 5 - 4 - 6 ] := F[- 1 ; - 3 - 4 ] * F[- 2 ; - 5 - 6 ] # note permutation!
519+ ZIZI = FF * (Z₁Z₁ ⊠ I₂I₂) * FF'
520+ IZIZ = FF * (I₁I₁ ⊠ Z₂Z₂) * FF'
521+ ZZZZ = FF * (Z₁Z₁ ⊠ Z₂Z₂) * FF'
522+ twosite = - J * (ZIZI + IZIZ + λ * ZZZZ)
523+
524+ return @mpoham sum (vertices (lattice)) do i
525+ return onsite{i}
526+ end + sum (nearest_neighbours (lattice)) do (i, j)
527+ return twosite{i, j}
528+ end
529+ end
530+
531+ _ashin_teller_decompose_symmetry (:: Type{Trivial} ) = (Trivial, Trivial)
532+ _ashin_teller_decompose_symmetry (:: Type{ProductSector{Tuple{A, B}}} ) where {A <: Union{Trivial, Z2Irrep} , B <: Union{Trivial, Z2Irrep} } = (A, B)
533+ _ashin_teller_decompose_symmetry (T) = error (" Ashkin-Teller model not implemented for symmetry $T " )
534+
464535# TODO : add (hardcore) bosonic t-J model (https://arxiv.org/abs/2409.15424)
0 commit comments