Skip to content

Commit 3e0d1ef

Browse files
author
leburgel
committed
Avoid adding exact zeros
1 parent 8b7ce46 commit 3e0d1ef

File tree

1 file changed

+18
-8
lines changed

1 file changed

+18
-8
lines changed

src/algorithms/timestep/timeevmpo.jl

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

Comments
 (0)