Find all orbitals and plot

This commit is contained in:
Nuwan Yapa 2024-06-21 16:57:01 -04:00
parent ad2b0449ba
commit 0ca19921e1
3 changed files with 51 additions and 0 deletions

View File

@ -38,3 +38,26 @@ function findEs(κ, p, Φ0, W0, B0, A0, r_max, E_min=0, E_max=(p ? M_p : M_n))
f(E) = boundaryValue(κ, p, E, Φ0, W0, B0, A0, r_max)
return find_zeros(f, (E_min, E_max))
end
"Find N lowest lying orbitals and return two lists containing κ values and corresponding energies for a single species where
the other parameters are defined above"
function fillNucleons(N, p, Φ0, W0, B0, A0, r_max, E_min=0, E_max=(p ? M_p : M_n))
κs = Int[]
Es = Float64[]
# start from κ=-1 and go both up and down
for direction in [-1, 1]
for κ in direction * (1:100) # cutoff is 100
new_Es = findEs(κ, p, Φ0, W0, B0, A0, r_max, E_min, E_max)
if isempty(new_Es); break; end
append!(Es, new_Es)
append!(κs, fill(κ, length(new_Es)))
end
end
if length(Es) < N
@warn "Only found $(length(Es)) orbitals for $N nucleons"
return (κs, Es)
else
idxs = sortperm(Es)[1:N]
return (κs[idxs], Es[idxs])
end
end

28
test/Pb208_spectrum.jl Normal file
View File

@ -0,0 +1,28 @@
using DelimitedFiles, Interpolations, Plots
include("../dirac.jl")
# test data generated from Hartree.f
# format: x S(x) V(x) R(x) A(x)
test_data = readdlm("test/Pb208FldsFSUGarnet.csv")
xs = test_data[:, 1]
Ss = test_data[:, 2]
Vs = test_data[:, 3]
Rs = test_data[:, 4]
As = test_data[:, 5]
S_interp = linear_interpolation(xs, Ss)
V_interp = linear_interpolation(xs, Vs)
R_interp = linear_interpolation(xs, Rs)
A_interp = linear_interpolation(xs, As)
p = true
N = 82
r_max = maximum(xs)
E_min = 880
E_max = 939
κs, Es = fillNucleons(N, p, S_interp, V_interp, R_interp, A_interp, r_max, E_min, E_max)
scatter(κs, Es, label=(p ? "proton" : "neutron") * " spectrum")
xlabel!("κ")
ylabel!("E (MeV)")