From bdf35583aa2a0718ee15f7130dc52fbf44847931 Mon Sep 17 00:00:00 2001 From: Nuwan Yapa Date: Wed, 4 Dec 2024 18:06:15 -0500 Subject: [PATCH] Optimize generating Berggren bases --- berggren_3body_resonance.jl | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/berggren_3body_resonance.jl b/berggren_3body_resonance.jl index 57f627b..37fc756 100644 --- a/berggren_3body_resonance.jl +++ b/berggren_3body_resonance.jl @@ -32,16 +32,15 @@ basis_size = length(js) * length(ks)^2 println("Basis size = $basis_size") # generate Berggren bases -berg_bases = Vector{Matrix{ComplexF64}}(undef, jmax + 1) -berg_Es = Vector{Vector{ComplexF64}}(undef, jmax + 1) -for j in 0:jmax - berg_E, berg_basis = eigen(get_H_matrix((k, kp) -> V_l(j, k, kp), ks, ws, μ); permute=false, scale=false) - N_berg = diag(transpose(berg_basis .* ws) * berg_basis) - berg_basis = berg_basis ./ transpose(sqrt.(N_berg)) - berg_bases[1 + j] = berg_basis - berg_Es[1 + j] = berg_E +@time "berg_bases" begin + berg_bases = Vector{Matrix{ComplexF64}}(undef, jmax + 1) + for j in 0:jmax + _, berg_basis = eigen(get_H_matrix((k, kp) -> V_l(j, k, kp), ks, ws, μ); permute=false, scale=false) + N_berg = sum(berg_basis.^2 .* ws, dims=1) + berg_bases[1 + j] = berg_basis ./ transpose(sqrt.(N_berg)) + end + to_berg_basis(mat, j) = transpose(berg_bases[1 + j] .* ws) * mat * berg_bases[1 + j] end -to_berg_basis(mat, j) = transpose(berg_bases[1 + j] .* ws) * mat * berg_bases[1 + j] @time "U_berggren" begin U_blocks = [kron(berg_bases[1 + j1], berg_bases[1 + j2]) for (j1, j2) in js]