Usage
Here is a sample REPL session to draw a dispersion relationship by using this package.
First, construct FiniteSquareWell
potential object.
julia> using ExtendedKronigPennyMatrix
julia> v0=10;
julia> rho=0.5 # b/a;
julia> pot=FiniteSquareWell(v0, rho)
FiniteSquareWell(10, 0.5)
Use get_function
method to acquire potential function.
julia> begin pf = get_potential(pot) a = 1 xs=-a:a/100:2a plot(xs, pf.(xs), "k") xlim(0,1) xlabel(L"$x / a$") ylabel(L"Energy / $E_0$") title( L"$\rho =$"*string(rho)) end
Define Model
by calling its constructor.
julia> Ka=0.0 # wavenumber multiplied by a;
julia> model=Model(pot, Ka)
Model{FiniteSquareWell}(FiniteSquareWell(10, 0.5), 0.0, 60, 121, Alternates(60), [5.0 3.183098861837907 … -0.0 -0.0; 3.183098861837907 9.0 … -0.05395082816674419 0.05218194855471979; … ; -0.0 -0.05395082816674419 … 14405.0 -0.0; -0.0 0.05218194855471979 … -0.0 14405.0])
The field hnm
of model contains Hamiltonian matrix.
julia> typeof(model.hnm)
Array{Float64,2}
julia> size(model.hnm)
(121, 121)
julia> model.hnm[1:5,1:5]
5×5 Array{Float64,2}: 5.0 3.1831 3.1831 -0.0 -0.0 3.1831 9.0 -0.0 3.1831 -1.06103 3.1831 -0.0 9.0 -1.06103 3.1831 -0.0 3.1831 -1.06103 21.0 -0.0 -0.0 -1.06103 3.1831 -0.0 21.0
Use LinearAlgebra.eigvals
method to compute its energy eigenvalues. Refer to the LinearAlgebra
standard library section in Julia documentation.
julia> using LinearAlgebra
julia> evs=eigvals(model.hnm);
julia> evs[1:3]
3-element Array{Float64,1}: 1.96806550581 7.582164159222207 11.500508757009115
Draw dispersion curve by scanning Ka
values between $[-\pi, \pi]$.
julia> using PyPlot
julia> clf()
julia> begin a = 1 xs=-a:a/100:2a plot(xs .- 1/2, pf.(xs), "k") # Holizontally shift to centerize the potential well cm=get_cmap("tab10") for Ka in (-18:18)/18*π model=Model(pot, Ka) ev = eigvals(model.hnm) for i in 1:5 plot(Ka/ π, ev[i], ".", color=cm(i-1)) end end xlim(-1,1) ylim(-2,32) xlabel(L"$Ka / \pi$") ylabel(L"Energy / $E_0$") title( L"$\rho =$"*string(rho)) end