Optimize generating Berggren bases
This commit is contained in:
parent
56be97ea22
commit
bdf35583aa
|
|
@ -32,16 +32,15 @@ basis_size = length(js) * length(ks)^2
|
|||
println("Basis size = $basis_size")
|
||||
|
||||
# generate Berggren bases
|
||||
@time "berg_bases" begin
|
||||
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
|
||||
_, 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
|
||||
|
||||
@time "U_berggren" begin
|
||||
U_blocks = [kron(berg_bases[1 + j1], berg_bases[1 + j2]) for (j1, j2) in js]
|
||||
|
|
|
|||
Loading…
Reference in New Issue