Skip to content

Commit 8decd8c

Browse files
authored
Avoid adding SparseBlockTensorMap slices in TaylorCluster implementation (#229)
1 parent 0a667fa commit 8decd8c

File tree

1 file changed

+18
-7
lines changed

1 file changed

+18
-7
lines changed

src/algorithms/timestep/timeevmpo.jl

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)