Skip to content

Commit 723c9de

Browse files
add L^2 \cap C^0 eigenproblem
1 parent 60ac807 commit 723c9de

File tree

1 file changed

+47
-0
lines changed

1 file changed

+47
-0
lines changed

test/EigTest.jl

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,53 @@ Base._range(a::T, step::T, ::Nothing, len::Integer) where {T <: AbstractFloat} =
9999
@test norm((λ[1:4] - λtrue)./λ[1:4]) < 1e-5
100100
end
101101

102+
@testset "Schrödinger with linear + Dirac potential with Robin boundary conditions" begin
103+
#
104+
# [-𝒟² + V] u = λu, u(-1) = u(1) + u'(1) = 0,
105+
#
106+
# where V = x + 100δ(x-0.25).
107+
#
108+
d = Segment(-1..0.25)Segment(0.25..1)
109+
S = PiecewiseSpace(Ultraspherical.(0.5, d.domains))
110+
NS = PiecewiseSpace(NormalizedUltraspherical.(0.5, d.domains))
111+
V = Fun(identity, S)
112+
L = -Derivative(S, 2) + V
113+
C = Conversion(domainspace(L), rangespace(L))
114+
B4 = zeros(Operator{ApproxFun.prectype(S)}, 1, 2)
115+
B4[1, 1] = -Evaluation(component(S, 1), rightendpoint, 1) - 100*0.5*Evaluation(component(S, 1), rightendpoint)
116+
B4[1, 2] = Evaluation(component(S, 2), leftendpoint, 1) - 100*0.5*Evaluation(component(S, 2), leftendpoint)
117+
B4 = ApproxFun.InterlaceOperator(B4, PiecewiseSpace, ApproxFun.ArraySpace)
118+
B = [Evaluation(S, -1); Evaluation(S, 1) + Evaluation(S, 1, 1); continuity(S, 0); B4]
119+
QS = QuotientSpace(B)
120+
Q = Conversion(QS, S)
121+
D1 = Conversion(S, NS)
122+
D2 = Conversion(NS, S)
123+
R = D1*Q
124+
P = cache(PartialInverseOperator(C, (0, bandwidth(L, 1) + bandwidth(R, 1) + bandwidth(C, 2))))
125+
A = R'D1*P*L*D2*R
126+
B = R'R
127+
128+
n = 100
129+
SA = Symmetric(A[1:n,1:n], :L)
130+
SB = Symmetric(B[1:n,1:n], :L)
131+
132+
k = 3
133+
134+
λ, Q = eigen(SA, SB);
135+
u_QS = Fun(QS, Q[:, k])
136+
u_S = Fun(u_QS, S)
137+
u = Fun(u_S, PiecewiseSpace(Chebyshev.(d.domains)))
138+
u /= sign(u'(-1))
139+
u1, u2 = components(u)
140+
141+
@test norm(u(-1)) < 100eps()
142+
@test u(1) -u'(1)
143+
@test u1(0.25) u2(0.25)
144+
@test u2'(0.25) - u1'(0.25) 100*u(0.25)
145+
@test -u1'' + component(V, 1)*u1 λ[k]*u1
146+
@test -u2'' + component(V, 2)*u2 λ[k]*u2
147+
end
148+
102149
@testset "BigFloat negative Laplacian with Dirichlet boundary conditions" begin
103150
#
104151
# -𝒟² u = λu, u(±1) = 0.

0 commit comments

Comments
 (0)