Optimize generating Berggren bases

This commit is contained in:
Nuwan Yapa 2024-12-04 18:06:15 -05:00
parent 56be97ea22
commit bdf35583aa
1 changed files with 8 additions and 9 deletions

View File

@ -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]