@@ -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