@@ -123,33 +123,20 @@ function S_zz(::Type{Trivial}=Trivial, ::Type{T}=ComplexF64; spin=1 // 2) where
123123 return S_z(Trivial, T; spin) ⊗ S_z(Trivial, T; spin)
124124end
125125
126- function transverse_field_ising(; g= 1.0 , L= Inf )
127- X = S_x(; spin= 1 // 2 )
128- ZZ = S_zz(; spin= 1 // 2 )
129- E = TensorMap(ComplexF64[1 0 ; 0 1 ], ℂ^ 2 ← ℂ^ 2 )
126+ function transverse_field_ising(:: Type{T} = ComplexF64; g= 1.0 , L= Inf ) where {T<: Number }
127+ X = S_x(Trivial, T; spin= 1 // 2 )
128+ ZZ = S_zz(Trivial, T; spin= 1 // 2 )
130129
131- # lattice = L == Inf ? PeriodicVector([ℂ^2]) : fill(ℂ^2, L)
132130 if L == Inf
133131 lattice = PeriodicArray([ℂ^ 2 ])
134- return InfiniteMPOHamiltonian(lattice,
135- (i, i + 1 ) => - (ZZ + (g / 2 ) * (X ⊗ E + E ⊗ X))
136- for i in 1 : 1 )
137- # return MPOHamiltonian(-ZZ - (g / 2) * (X ⊗ E + E ⊗ X))
132+ H₁ = InfiniteMPOHamiltonian(lattice, i => g * X for i in 1 : 1 )
133+ H₂ = InfiniteMPOHamiltonian(lattice, (i, i + 1 ) => - ZZ for i in 1 : 1 )
138134 else
139135 lattice = fill(ℂ^ 2 , L)
140- return FiniteMPOHamiltonian(lattice,
141- (i, i + 1 ) => - (ZZ + (g / 2 ) * (X ⊗ E + E ⊗ X))
142- for i in 1 : (L - 1 )) # +
143- # FiniteMPOHamiltonian(lattice, (i,) => -g * X for i in 1:L)
136+ H₁ = FiniteMPOHamiltonian(lattice, i => g * X for i in 1 : L)
137+ H₂ = FiniteMPOHamiltonian(lattice, (i, i + 1 ) => - ZZ for i in 1 : (L - 1 ))
144138 end
145-
146- H = S_zz(; spin= 1 // 2 ) + (g / 2 ) * (X ⊗ E + E ⊗ X)
147- return if L == Inf
148- MPOHamiltonian(H)
149- else
150- FiniteMPOHamiltonian(fill(ℂ^ 2 , L), (i, i + 1 ) => H for i in 1 : (L - 1 ))
151- end
152- return MPOHamiltonian(- H)
139+ return H₁ + H₂
153140end
154141
155142function heisenberg_XXX(:: Type{SU2Irrep} ; spin= 1 , L= Inf )
@@ -169,8 +156,9 @@ function heisenberg_XXX(::Type{SU2Irrep}; spin=1, L=Inf)
169156 end
170157end
171158
172- function heisenberg_XXX(; spin= 1 , L= Inf )
173- h = ones(ComplexF64, SU2Space(spin => 1 )^ 2 ← SU2Space(spin => 1 )^ 2 )
159+ function heisenberg_XXX(:: Type{Trivial} , :: Type{T} = ComplexF64; spin= 1 ,
160+ L= Inf ) where {T<: Number }
161+ h = ones(T, SU2Space(spin => 1 )^ 2 ← SU2Space(spin => 1 )^ 2 )
174162 for (c, b) in blocks(h)
175163 S = (dim(c) - 1 ) / 2
176164 b .= S * (S + 1 ) / 2 - spin * (spin + 1 )
0 commit comments