@@ -103,13 +103,20 @@ function make_time_mpo(H::MPOHamiltonian, dt::Number, alg::TaylorCluster)
103103 n1 = count (== (1 ), c. I)
104104 n3 = count (== (V), c. I)
105105
106- if n3 <= n1 && s_c != c
107- slice[linds[s_c], 1 , 1 , :] += slice[c_lin, 1 , 1 , :]
108- for I in nonzero_keys (slice)
109- (I[1 ] == c_lin || I[4 ] == c_lin) && delete! (slice, I)
106+ if n3 <= n1 && s_c != c || n3 > n1 && s_r != c
107+ if n3 <= n1 && s_c != c
108+ for k in 1 : size (slice, 4 )
109+ if CartesianIndex (c_lin, 1 , 1 , k) in nonzero_keys (slice)
110+ slice[linds[s_c], 1 , 1 , k] += slice[c_lin, 1 , 1 , k]
111+ end
112+ end
113+ elseif n3 > n1 && s_r != c
114+ for k in 1 : size (slice, 1 )
115+ if CartesianIndex (k, 1 , 1 , c_lin) in nonzero_keys (slice)
116+ slice[k, 1 , 1 , linds[s_r]] += slice[k, 1 , 1 , c_lin]
117+ end
118+ end
110119 end
111- elseif n3 > n1 && s_r != c
112- slice[:, 1 , 1 , linds[s_r]] += slice[:, 1 , 1 , c_lin]
113120 for I in nonzero_keys (slice)
114121 (I[1 ] == c_lin || I[4 ] == c_lin) && delete! (slice, I)
115122 end
@@ -127,8 +134,11 @@ function make_time_mpo(H::MPOHamiltonian, dt::Number, alg::TaylorCluster)
127134 b = CartesianIndex (replace (a. I, V => 1 ))
128135 b_lin = linds[b]
129136 factor = τ^ n1 * factorial (N - n1) / factorial (N)
130- slice[:, 1 , 1 , b_lin] += factor * slice[:, 1 , 1 , a_lin]
131-
137+ for k in 1 : size (slice, 1 )
138+ if CartesianIndex (k, 1 , 1 , a_lin) in nonzero_keys (slice)
139+ slice[k, 1 , 1 , b_lin] += factor * slice[k, 1 , 1 , a_lin]
140+ end
141+ end
132142 for I in nonzero_keys (slice)
133143 (I[1 ] == a_lin || I[4 ] == a_lin) && delete! (slice, I)
134144 end
0 commit comments