@@ -764,36 +764,31 @@ function Base.:+(H₁::MPOH, H₂::MPOH) where {MPOH<:AbstractMPOHamiltonian}
764764end
765765Base.:- (H₁:: AbstractMPOHamiltonian , H₂:: AbstractMPOHamiltonian ) = H₁ + (- H₂)
766766Base.:- (H:: AbstractMPOHamiltonian ) = - one (scalartype (H)) * H
767-
768- function Base.:* (λ:: Number , H:: AbstractMPOHamiltonian )
769- T = promote_type (scalartype (H), scalartype (λ))
770- isinf = H isa InfiniteMPOHamiltonian
771- Otype = jordanmpotensortype (spacetype (H), T)
772- Ws = map (parent (H)) do h
773- return Otype (undef, space (h))
767+ Base.:* (λ:: Number , H:: AbstractMPOHamiltonian ) = H * λ
768+ Base.:* (H:: AbstractMPOHamiltonian , λ:: Number ) = scale (H, λ)
769+
770+ function VectorInterface. scale (H:: InfiniteMPOHamiltonian , λ:: Number )
771+ Hλ = copy (H)
772+ foreach (Hλ. data) do h
773+ # multiply scalar with start of every interaction
774+ # this avoids double counting
775+ # 2:end to avoid multiplying the top left and bottom right corners
776+ return rmul! (h[1 , 1 , 1 , 2 : end ], λ)
774777 end
775- for i in eachindex (Ws)
776- for I in eachindex (IndexCartesian (), Ws[i])
777- if isinf
778- if I[4 ] == size (Ws[i], 4 ) && I[1 ] != size (Ws[i], 1 )
779- Ws[i][I] = λ * H[i][I]
780- else
781- Ws[i][I] = copy (H[i][I])
782- end
783- else
784- if (i == 1 && I[4 ] == size (Ws[i], 4 )) ||
785- (i != 1 && I[1 ] != size (Ws[i], 1 ) && I[4 ] == size (Ws[i], 4 ))
786- Ws[i][I] = λ * H[i][I]
787- else
788- Ws[i][I] = copy (H[i][I])
789- end
790- end
778+ return Hλ
779+ end
780+
781+ function VectorInterface. scale (H:: FiniteMPOHamiltonian , λ:: Number )
782+ Hλ = copy (H)
783+ foreach (enumerate (Hλ. data)) do (i, h)
784+ if i != length (Hλ)
785+ rmul! (h[1 , 1 , 1 , 2 : end ], λ) # multiply top row (except BraidingTensor)
786+ else
787+ rmul! (h[end , 1 , 1 , 1 : (end - 1 )], λ) # multiply right column (except BraidingTensor)
791788 end
792789 end
793- return H isa FiniteMPOHamiltonian ? FiniteMPOHamiltonian (Ws) :
794- InfiniteMPOHamiltonian (Ws)
790+ return Hλ
795791end
796- Base.:* (H:: AbstractMPOHamiltonian , λ:: Number ) = λ * H
797792
798793function Base.:* (H1:: FiniteMPOHamiltonian , H2:: FiniteMPOHamiltonian )
799794 check_length (H1, H2)
0 commit comments