Skip to content

Commit 26de7de

Browse files
committed
Faster algorithm, hopefully?
1 parent 896d02e commit 26de7de

File tree

2 files changed

+33
-21
lines changed

2 files changed

+33
-21
lines changed

Project.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name = "QuantumDynamics"
22
uuid = "5a40c529-53c2-4483-a223-e00c1cee8134"
33
authors = ["Amartya Bose <[email protected]> and contributors"]
4-
version = "0.2.18"
4+
version = "0.2.19"
55

66
[deps]
77
AtomsIO = "1692102d-eeb4-4df9-807b-c9517f998d44"

src/PathIntegral/QuAPI.jl

+32-20
Original file line numberDiff line numberDiff line change
@@ -377,36 +377,48 @@ function get_path_influence(η::EtaCoefficients.EtaCoeffs, bath_number::Int, sta
377377
interm_influence = zero(ComplexF64)
378378
i = length(path) - 1
379379
for sk = 2:i
380-
val = real.ηmm) * state_values.Δs[bath_number, path[sk]] + 2im * imag.ηmm) * state_values.sbar[bath_number, path[sk]]
381-
for skp = 2:sk-1
382-
val += real.ηmn[sk-skp]) * state_values.Δs[bath_number, path[skp]] + 2im * imag.ηmn[sk-skp]) * state_values.sbar[bath_number, path[skp]]
380+
if state_values.Δs[bath_number, path[sk]] != 0
381+
val = real.ηmm) * state_values.Δs[bath_number, path[sk]] + 2im * imag.ηmm) * state_values.sbar[bath_number, path[sk]]
382+
for skp = 2:sk-1
383+
val += real.ηmn[sk-skp]) * state_values.Δs[bath_number, path[skp]] + 2im * imag.ηmn[sk-skp]) * state_values.sbar[bath_number, path[skp]]
384+
end
385+
interm_influence += -state_values.Δs[bath_number, path[sk]] * val
383386
end
384-
interm_influence += -state_values.Δs[bath_number, path[sk]] * val
385387
end
386388
amplitude = exp(interm_influence)
387389

388390
init_influence_0 = -state_values.Δs[bath_number, path[1]] * (real.η00) * state_values.Δs[bath_number, path[1]] + 2im * imag.η00) * state_values.sbar[bath_number, path[1]])
389-
init_influence_m = -state_values.Δs[bath_number, path[1]] * (real.ηmm) * state_values.Δs[bath_number, path[1]] + 2im * imag.ηmm) * state_values.sbar[bath_number, path[1]])
391+
# init_influence_m = -state_values.Δs[bath_number, path[1]] * (real(η.ηmm) * state_values.Δs[bath_number, path[1]] + 2im * imag(η.ηmm) * state_values.sbar[bath_number, path[1]])
390392
for j = 2:i
391-
init_influence_0 += -state_values.Δs[bath_number, path[j]] * (real.η0m[j-1] * state_values.Δs[bath_number, path[1]]) + 2im * imag.η0m[j-1]) * state_values.sbar[bath_number, path[1]])
392-
init_influence_m += -state_values.Δs[bath_number, path[j]] * (real.ηmn[j-1] * state_values.Δs[bath_number, path[1]]) + 2im * imag.ηmn[j-1]) * state_values.sbar[bath_number, path[1]])
393+
if state_values.Δs[bath_number, path[j]] != 0
394+
init_influence_0 += -state_values.Δs[bath_number, path[j]] * (real.η0m[j-1] * state_values.Δs[bath_number, path[1]]) + 2im * imag.η0m[j-1]) * state_values.sbar[bath_number, path[1]])
395+
# init_influence_m += -state_values.Δs[bath_number, path[j]] * (real(η.ηmn[j-1] * state_values.Δs[bath_number, path[1]]) + 2im * imag(η.ηmn[j-1]) * state_values.sbar[bath_number, path[1]])
396+
end
393397
end
394398
init_influence_0 = exp(init_influence_0)
395-
init_influence_m = exp(init_influence_m)
399+
# init_influence_m = exp(init_influence_m)
396400

397-
final_influence_0 = -state_values.Δs[bath_number, path[end]] * (real.η00) * state_values.Δs[bath_number, path[end]] + 2im * imag.η00) * state_values.sbar[bath_number, path[end]])
398-
final_influence_m = -state_values.Δs[bath_number, path[end]] * (real.ηmm) * state_values.Δs[bath_number, path[end]] + 2im * imag.ηmm) * state_values.sbar[bath_number, path[end]])
399-
for j = 2:i
400-
final_influence_0 += -state_values.Δs[bath_number, path[end]] * (real.η0m[i+1-j] * state_values.Δs[bath_number, path[j]]) + 2im * imag.η0m[i+1-j]) * state_values.sbar[bath_number, path[j]])
401-
final_influence_m += -state_values.Δs[bath_number, path[end]] * (real.ηmn[i+1-j] * state_values.Δs[bath_number, path[j]]) + 2im * imag.ηmn[i+1-j]) * state_values.sbar[bath_number, path[j]])
402-
end
403-
final_influence_0 = exp(final_influence_0)
404-
final_influence_m = exp(final_influence_m)
401+
final_influence_0 = one(ComplexF64)
402+
# final_influence_m = one(ComplexF64)
403+
term_influence_0e = one(ComplexF64)
404+
# term_influence_me = one(ComplexF64)
405+
# term_influence_0m = one(ComplexF64)
406+
# term_influence_mn = one(ComplexF64)
407+
if state_values.Δs[bath_number, path[end]] != 0
408+
final_influence_0 = -state_values.Δs[bath_number, path[end]] * (real.η00) * state_values.Δs[bath_number, path[end]] + 2im * imag.η00) * state_values.sbar[bath_number, path[end]])
409+
# final_influence_m = -state_values.Δs[bath_number, path[end]] * (real(η.ηmm) * state_values.Δs[bath_number, path[end]] + 2im * imag(η.ηmm) * state_values.sbar[bath_number, path[end]])
410+
for j = 2:i
411+
final_influence_0 += -state_values.Δs[bath_number, path[end]] * (real.η0m[i+1-j] * state_values.Δs[bath_number, path[j]]) + 2im * imag.η0m[i+1-j]) * state_values.sbar[bath_number, path[j]])
412+
# final_influence_m += -state_values.Δs[bath_number, path[end]] * (real(η.ηmn[i+1-j] * state_values.Δs[bath_number, path[j]]) + 2im * imag(η.ηmn[i+1-j]) * state_values.sbar[bath_number, path[j]])
413+
end
414+
final_influence_0 = exp(final_influence_0)
415+
# final_influence_m = exp(final_influence_m)
405416

406-
term_influence_0e = exp(-state_values.Δs[bath_number, path[end]] * (real.η0e[i]) * state_values.Δs[bath_number, path[1]] + 2im * imag.η0e[i]) * state_values.sbar[bath_number, path[1]]))
407-
term_influence_me = exp(-state_values.Δs[bath_number, path[end]] * (real.η0m[i]) * state_values.Δs[bath_number, path[1]] + 2im * imag.η0m[i]) * state_values.sbar[bath_number, path[1]]))
408-
term_influence_0m = exp(-state_values.Δs[bath_number, path[end]] * (real.η0m[i]) * state_values.Δs[bath_number, path[1]] + 2im * imag.η0m[i]) * state_values.sbar[bath_number, path[1]]))
409-
term_influence_mn = exp(-state_values.Δs[bath_number, path[end]] * (real.ηmn[i]) * state_values.Δs[bath_number, path[1]] + 2im * imag.ηmn[i]) * state_values.sbar[bath_number, path[1]]))
417+
term_influence_0e = exp(-state_values.Δs[bath_number, path[end]] * (real.η0e[i]) * state_values.Δs[bath_number, path[1]] + 2im * imag.η0e[i]) * state_values.sbar[bath_number, path[1]]))
418+
# term_influence_me = exp(-state_values.Δs[bath_number, path[end]] * (real(η.η0m[i]) * state_values.Δs[bath_number, path[1]] + 2im * imag(η.η0m[i]) * state_values.sbar[bath_number, path[1]]))
419+
# term_influence_0m = exp(-state_values.Δs[bath_number, path[end]] * (real(η.η0m[i]) * state_values.Δs[bath_number, path[1]] + 2im * imag(η.η0m[i]) * state_values.sbar[bath_number, path[1]]))
420+
# term_influence_mn = exp(-state_values.Δs[bath_number, path[end]] * (real(η.ηmn[i]) * state_values.Δs[bath_number, path[1]] + 2im * imag(η.ηmn[i]) * state_values.sbar[bath_number, path[1]]))
421+
end
410422

411423
quapi ? (amplitude * init_influence_0 * final_influence_0 * term_influence_0e, amplitude * init_influence_0 * term_influence_0m, amplitude * init_influence_m * final_influence_0 * term_influence_me, amplitude * init_influence_m * term_influence_mn) : amplitude * init_influence_0 * final_influence_0 * term_influence_0e
412424
end

0 commit comments

Comments
 (0)