-
Notifications
You must be signed in to change notification settings - Fork 2
Open
Description
Should use built-in functionality instead of duplicating
CompactBases.jl/docs/bspline_plots.jl
Lines 458 to 512 in b022394
struct ShiftAndInvert{TA,TB,TT} | |
A⁻¹::TA | |
B::TB | |
temp::TT | |
end | |
Base.size(S::ShiftAndInvert, args...) = size(S.A⁻¹, args...) | |
Base.eltype(S::ShiftAndInvert) = eltype(S.A⁻¹) | |
function LinearAlgebra.mul!(y,M::ShiftAndInvert,x) | |
mul!(M.temp, M.B, x) | |
ldiv!(y, M.A⁻¹, M.temp) | |
end | |
construct_linear_map(A,B,σ=0) = | |
ShiftAndInvert(factorize(A-σ*B),B,Vector{eltype(A)}(undef, size(A,1))) | |
function bsplines_hydrogen_eigenstates() | |
k = 7 | |
N = 31 | |
a,b = 0,70 | |
coulomb(r) = -1/r | |
nev = 5 | |
σ = -0.5 | |
n = 1:nev | |
cfigure("Hydrogen", figsize=(7,9)) do | |
for (j,(t,x,tol)) in enumerate([(LinearKnotSet(k, a, b, N), | |
range(a, stop=b, length=500)[2:end-1], | |
9e-3), | |
(ExpKnotSet(k, -1.0, log10(b), N), | |
10 .^ range(-1.0, stop=log10(b), length=500)[2:end-1], | |
2e-7)]) | |
B = BSpline(t)[:,2:end-1] | |
xx = axes(B, 1) | |
S = B'B | |
χ = B[x,:] | |
D = Derivative(xx) | |
∇² = B'*D'*D*B | |
T = -∇²/2 | |
V = B'*QuasiDiagonal(coulomb.(xx))*B | |
H = T + V | |
schurQR,history = partialschur(construct_linear_map(H, S, σ), nev=nev) |
Metadata
Metadata
Assignees
Labels
No labels