@@ -130,13 +130,20 @@ function make_time_mpo(H::MPOHamiltonian, dt::Number, alg::TaylorCluster;
130130 n1 = count (== (1 ), c. I)
131131 n3 = count (== (V), c. I)
132132
133- if n3 <= n1 && s_c != c
134- slice[linds[s_c], 1 , 1 , :] += slice[c_lin, 1 , 1 , :]
135- for I in nonzero_keys (slice)
136- (I[1 ] == c_lin || I[4 ] == c_lin) && delete! (slice, I)
133+ if n3 <= n1 && s_c != c || n3 > n1 && s_r != c
134+ if n3 <= n1 && s_c != c
135+ for k in 1 : size (slice, 4 )
136+ if CartesianIndex (c_lin, 1 , 1 , k) in nonzero_keys (slice)
137+ slice[linds[s_c], 1 , 1 , k] += slice[c_lin, 1 , 1 , k]
138+ end
139+ end
140+ elseif n3 > n1 && s_r != c
141+ for k in 1 : size (slice, 1 )
142+ if CartesianIndex (k, 1 , 1 , c_lin) in nonzero_keys (slice)
143+ slice[k, 1 , 1 , linds[s_r]] += slice[k, 1 , 1 , c_lin]
144+ end
145+ end
137146 end
138- elseif n3 > n1 && s_r != c
139- slice[:, 1 , 1 , linds[s_r]] += slice[:, 1 , 1 , c_lin]
140147 for I in nonzero_keys (slice)
141148 (I[1 ] == c_lin || I[4 ] == c_lin) && delete! (slice, I)
142149 end
@@ -154,7 +161,11 @@ function make_time_mpo(H::MPOHamiltonian, dt::Number, alg::TaylorCluster;
154161 b = CartesianIndex (replace (a. I, V => 1 ))
155162 b_lin = linds[b]
156163 factor = τ^ n1 * factorial (N - n1) / factorial (N)
157- slice[:, 1 , 1 , b_lin] += factor * slice[:, 1 , 1 , a_lin]
164+ for k in 1 : size (slice, 1 )
165+ if CartesianIndex (k, 1 , 1 , a_lin) in nonzero_keys (slice)
166+ slice[k, 1 , 1 , b_lin] += factor * slice[k, 1 , 1 , a_lin]
167+ end
168+ end
158169
159170 for I in nonzero_keys (slice)
160171 (I[1 ] == a_lin || I[4 ] == a_lin) && delete! (slice, I)
0 commit comments