Nuclear models
Each nuclear model is implemented as a subtype of AbstractNuclearModel. An instance of each nuclear model is assumed to be normalized to $Z = 1$.
AtomicMiscellany.AbstractNuclearModel — Typeabstract type AbstractNuclearModelSupertype for all (radially symmetric) nuclear models. The underlying charge distribution of the nuclear model is assumed to be normalized to unity (i.e. corresponding to $Z = 1$).
Each concrete nuclear model of type T <: AbstractNuclearModel should implement the following method
potential(::T, r::Real) -> Float64: return the value of the potential at the radiusr.
Additional, each nuclear model may also implement
density(::T, r::Real) -> Float64: return the value of the (normalized) charge density at the radiusr.rms(::T): return the root-mean-square radius $\sqrt{\langle r^2 \rangle}$ of the underlying charge distribution.from_rms(::Type{T}, rms): construct an instance of the nuclear model with the specified root-mean-square radius.
All quantities are assumed to be in atomic units.
The package implements various nuclear models, illustrated by the following plot. The root-mean-square radius of the charge density is the same for each mode to keep the potentials comparable.
using AtomicMiscellany.NuclearModels, Plots
rs = 10 .^ range(-6, -2, length=501)
plot(
title = "Nuclear potentials with RMS = 10⁻⁴ a.u.",
xlabel = "r (a.u.)", ylabel = "Nuclear potential V",
xaxis=:log10, ylims = (-2.1e4, 0.1e4), legend=:bottomright,
)
V(M) = r -> potential(M, r)
plot!(rs, V(PointNucleus()).(rs), label = "PointNucleus")
plot!(rs, V(from_rms(UniformShellNucleus, 1e-4)).(rs), label = "UniformShellNucleus")
plot!(rs, V(from_rms(UniformSphericalNucleus, 1e-4)).(rs), label = "UniformSphericalNucleus")
plot!(rs, V(from_rms(GaussianNucleus, 1e-4)).(rs), label = "GaussianNucleus")
AtomicMiscellany.PointNucleus — Typestruct PointNucleus <: AbstractNuclearModelRepresent a point nucleus with the potential
\[V(r) = - Z / r, \quad \rho(r) = \frac{Z}{4\pi r^2} \delta(r)\]
This nuclear model has no parameters. Also, this model does not define a method for density due to the delta-function nature of the charge distribution.
Constructors
PointNucleus(): construct an instance ofPointNucleus
Examples
julia> using AtomicMiscellany: PointNucleus, rms, potential
julia> rms(PointNucleus())
0.0
julia> potential(PointNucleus(), 2)
-0.5AtomicMiscellany.UniformShellNucleus — Typestruct UniformShellNucleus <: AbstractNuclearModelRepresents a nuclear model where all the charge is unformly distributed over an infinitely thin shell at radius R. The nuclear potential and charge distribution are given by
\[V(r) = \begin{cases} -Z/R, & 0 \leq r \leq R \\ -Z/r, & r > R \end{cases}, \quad \rho(r) = \frac{Z}{4\pi r^2} \delta(r - R)\]
Note that this model does not define a method for density due to the delta-function nature of the charge distribution.
Constructors
UniformShellNucleus(R::Real): construct a shell nucleus with radiusR.from_rms(UniformShellNucleus, rms): constructs a shell nucleus with the radius determined from the root-mean-square radius $\sqrt{\langle r^2 \rangle}$ of the charge distribution\[R = \sqrt{\langle r^2 \rangle}\]
AtomicMiscellany.UniformSphericalNucleus — Typestruct UniformSphericalNucleus <: AbstractNuclearModelRepresents a nuclear charge distribution where the charge is homogeneously distributed in a sphere of radius $R$. The potential and charge distributions are given by
\[V(r) = \begin{cases} -\frac{Z}{2R}\left[3 - \left(\frac{r}{R}\right)^2\right], & 0 \leq r \leq R \\ -\frac{Z}{r}, & r > R \end{cases}, \quad \rho(r) = \begin{cases} \frac{3Z}{4\pi R^3}, & 0 \leq r \leq R \\ 0, & r > R \end{cases} \]
Constructors
UniformSphericalNucleus(R::Real): construct a homogeneous spherical nucleus with radiusR.from_rms(UniformSphericalNucleus, rms): constructs a homogeneous spherical nucleus with the radius determined from the root-mean-square radius $\sqrt{\langle r^2 \rangle}$ of the charge distribution\[R = \sqrt{\frac{5}{3}} \sqrt{\langle r^2 \rangle}\]
AtomicMiscellany.GaussianNucleus — Typestruct GaussianNucleus <: AbstractNuclearModelRepresents a Gaussian-shaped nuclear charge distribution, size of which is determined by the parameter $R$`. The potential and charge distributions are given by
\[V(r) = - \frac{Z}{r} \mathrm{erf}\left(\frac{r}{R}\right), \quad \rho(r) = \frac{Z}{\pi^{3/2} R^3}\exp\left[-\left(\frac{r}{R}\right)^2\right] \]
Constructors
GaussianNucleus(R::Real): constructs a Gaussian nuclear model of sizeR.from_rms(UniformSphericalNucleus, rms): constructs a Gaussian nucleus with the $R$ parameter determined from the root-mean-square radius $\sqrt{\langle r^2 \rangle}$ of the charge distribution\[R = \sqrt{\frac{2}{3}} \sqrt{\langle r^2 \rangle}\]
Root-mean-square radius
The following methods are for determining the RMS radius of nuclei, loosely based on experimental data.
AtomicMiscellany.rms — Methodrms(JohnsonSoff1985, A::Real) -> Float64Returns the root-mean-square radius (in atomic units) of a nucleus based on the fit from the JohnsonSoff1985 paper
\[\rm{rms}(A) = (0.836 A^{1/3} + 0.570)~\rm{fm}\]
where A is the atomic mass number of the isotope.
julia> using AtomicMiscellany: rms, JohnsonSoff1985
julia> rms(JohnsonSoff1985, 238)
0.00010867476884785438The paper states that the fit is for $A > 9$, and it appears that the largest $A$ value in the data used for the fit was about $250$. The implementation, however, will work with any positive $A$ value.
The accuracy is stated to be $0.05~\rm{fm}$ i.e. $9.5 \times 10^{-7}~\rm{a.u.}$.
Utilities
AtomicMiscellany.potential — Functionpotential(::AbstractNuclearModel, r::Real) -> Float64Return the value of the (normalized) charge density at the radius r.
AtomicMiscellany.density — Functiondensity(::AbstractNuclearModel, r::Real) -> Float64Return the value of the (normalized) charge density at the radius r.
AtomicMiscellany.rms — Functionrms(::AbstractNuclearModel)Return the root-mean-square radius $\sqrt{\langle r^2 \rangle}$ of the underlying charge distribution.
AtomicMiscellany.from_rms — Functionfrom_rms(::Type{<:AbstractNuclearModel}, rms)Construct an instance of the nuclear model with the specified root-mean-square radius.
AtomicMiscellany.NuclearModels — ModuleCan be used to bring various bindings related to nuclear models into the namespace.
julia> using AtomicMiscellany.NuclearModels
julia> parentmodule(rms), parentmodule(AbstractNuclearModel)
(AtomicMiscellany, AtomicMiscellany)References
AtomicMiscellany.Andrae2000 — Typestruct Andrae2000Type to dispatch on data from the following paper:
- Andrae, D. "Finite Nuclear Charge Density Distributions in Electronic Structure Calculations for Atoms and Molecules." Physics Reports 336, no. 6 (October 2000): 413–525. https://doi.org/10.1016/S0370-1573(00)00007-7.
AtomicMiscellany.JohnsonSoff1985 — Typestruct JohnsonSoff1985Type to dispatch on data from the following paper:
- W.R. Johnson, Gerhard Soff, "The lamb shift in hydrogen-like atoms, 1 ⩽ Z ⩽ 110", Atomic Data and Nuclear Data Tables, Volume 33, Issue 3, 1985, Pages 405-446, https://doi.org/10.1016/0092-640X(85)90010-5
See also: rms(::Type{JohnsonSoff1985}, ::Real).
Index
AtomicMiscellany.NuclearModelsAtomicMiscellany.AbstractNuclearModelAtomicMiscellany.Andrae2000AtomicMiscellany.GaussianNucleusAtomicMiscellany.JohnsonSoff1985AtomicMiscellany.PointNucleusAtomicMiscellany.UniformShellNucleusAtomicMiscellany.UniformSphericalNucleusAtomicMiscellany.densityAtomicMiscellany.from_rmsAtomicMiscellany.potentialAtomicMiscellany.rmsAtomicMiscellany.rms