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 AbstractNuclearModel
Supertype 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 <: AbstractNuclearModel
Represent 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.5
AtomicMiscellany.UniformShellNucleus
— Typestruct UniformShellNucleus <: AbstractNuclearModel
Represents 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 <: AbstractNuclearModel
Represents 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 <: AbstractNuclearModel
Represents 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) -> Float64
Returns 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.00010867476884785438
The 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) -> Float64
Return the value of the (normalized) charge density at the radius r
.
AtomicMiscellany.density
— Functiondensity(::AbstractNuclearModel, r::Real) -> Float64
Return 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 Andrae2000
Type 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 JohnsonSoff1985
Type 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.NuclearModels
AtomicMiscellany.AbstractNuclearModel
AtomicMiscellany.Andrae2000
AtomicMiscellany.GaussianNucleus
AtomicMiscellany.JohnsonSoff1985
AtomicMiscellany.PointNucleus
AtomicMiscellany.UniformShellNucleus
AtomicMiscellany.UniformSphericalNucleus
AtomicMiscellany.density
AtomicMiscellany.from_rms
AtomicMiscellany.potential
AtomicMiscellany.rms
AtomicMiscellany.rms