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.AbstractNuclearModelType
abstract 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

Additional, each nuclear model may also implement

  • density(::T, r::Real) -> Float64: return the value of the (normalized) charge density at the radius r.

  • 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.

Units

All quantities are assumed to be in atomic units.

source

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.PointNucleusType
struct 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 of PointNucleus

Examples

julia> using AtomicMiscellany: PointNucleus, rms, potential

julia> rms(PointNucleus())
0.0

julia> potential(PointNucleus(), 2)
-0.5
source
AtomicMiscellany.UniformShellNucleusType
struct 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 radius R.

  • 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}\]

source
AtomicMiscellany.UniformSphericalNucleusType
struct 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 radius R.

  • 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}\]

source
AtomicMiscellany.GaussianNucleusType
struct 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 size R.

  • 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}\]

source

Root-mean-square radius

The following methods are for determining the RMS radius of nuclei, loosely based on experimental data.

AtomicMiscellany.rmsMethod
rms(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
Accuracy and validity

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.}$.

source

Utilities

AtomicMiscellany.potentialFunction
potential(::AbstractNuclearModel, r::Real) -> Float64

Return the value of the (normalized) charge density at the radius r.

source
AtomicMiscellany.densityFunction
density(::AbstractNuclearModel, r::Real) -> Float64

Return the value of the (normalized) charge density at the radius r.

source
AtomicMiscellany.rmsFunction
rms(::AbstractNuclearModel)

Return the root-mean-square radius $\sqrt{\langle r^2 \rangle}$ of the underlying charge distribution.

source
AtomicMiscellany.from_rmsFunction
from_rms(::Type{<:AbstractNuclearModel}, rms)

Construct an instance of the nuclear model with the specified root-mean-square radius.

source
AtomicMiscellany.NuclearModelsModule

Can be used to bring various bindings related to nuclear models into the namespace.

julia> using AtomicMiscellany.NuclearModels

julia> parentmodule(rms), parentmodule(AbstractNuclearModel)
(AtomicMiscellany, AtomicMiscellany)
source

References

Index