ampsci
High-precision calculations for one- and two-valence atomic systems
DiracOperator::Hyperfine Namespace Reference

Detailed Description

Auxiliary functions for hyperfine operators; F(r) [nuclear distribution] and similar.

See DiracOperator::hfs for operator

Typedefs

using RadialFunction = std::function< double(double r, double r_Nuc)>
 Type for radial function F(r, r_Nuc) – nuclear magnetisation/charge distribution.
 

Functions

std::vector< double > tk_radial (int k, double rN, const std::vector< double > &r, const RadialFunction &hfs_F)
 Forms the hyperfine radial operator: F(r, r_N) / r^{k+1}.
 
RadialFunction sphericalBall_F (int k)
 Spherical ball model for F(r, r_N) [default]. Uniformly distributed point k-poles.
 
RadialFunction sphericalShell_F ()
 Spherical shell F(r, r_N): 0 for r < r_N, 1 for r > r_N.
 
RadialFunction pointlike_F ()
 Pointlike F(r): F = 1 everywhere.
 
RadialFunction VolotkaSP_F (double mu, double I_nuc, double l_pn, int gl, bool print=true)
 Volotka single-particle nuclear model: F(r, rN)
 
RadialFunction uSP (double mu, double I_nuc, double l_pn, int gl, double n, double R, bool u_option, bool print=true)
 Elizarov single-particle magnetisation model [extended Volotka].
 
RadialFunction doublyOddSP_F (double mut, double It, double mu1, double I1, double l1, int gl1, double I2, double l2, bool print=true)
 Volotka single-particle model for doubly-odd nuclei.
 
RadialFunction generic_F (const Grid &grid, const std::vector< double > &rho, int k)
 Constructs F(r) from a numerical density rho(r) given on the radial grid.
 
double convert_RME_to_HFSconstant_2J (int k, int tja, int tjb)
 Converts reduced matrix element to A/B coeficients (takes k, 2J, 2J)
 
double convert_RME_to_HFSconstant (int k, int ka, int kb)
 Converts reduced matrix element to A/B coeficients (takes k, kappa, kappa)
 

Typedef Documentation

◆ RadialFunction

using DiracOperator::Hyperfine::RadialFunction = typedef std::function<double(double r, double r_Nuc)>

Type for radial function F(r, r_Nuc) – nuclear magnetisation/charge distribution.

  • F(r,rN) contains only finite nuclear size correction, not HFS radial function.
  • F(r,rN) -> 1 for r > rN
  • r and rN always in atomic units

The full HFS radial operator is t^k(r) = F(r, r_N) / r^{k+1}, formed by tk_radial. F(r) itself is defined by the chosen nuclear model; see sphericalBall_F, VolotkaSP_F, uSP, doublyOddSP_F, generic_F.

Function Documentation

◆ tk_radial()

std::vector< double > DiracOperator::Hyperfine::tk_radial ( int  k,
double  rN,
const std::vector< double > &  r,
const RadialFunction hfs_F 
)

Forms the hyperfine radial operator: F(r, r_N) / r^{k+1}.

\[ t^k_{\rm radial}[r_i] = \frac{F(r_i, r_N)}{r_i^{k+1}} \]

See RadialFunction for the contract on F(r, r_N). Angular factors and signs are handled elsewhere.

Parameters
kMultipole rank (1 = M1, 2 = E2, ...)
rNNuclear radius (a.u.); passed to hfs_F as r_N
rRadial grid points (a.u.)
hfs_FNuclear magnetisation/charge distribution F(r, r_N); see RadialFunction and sphericalBall_F
Returns
Radial values of t^k(r)

◆ sphericalBall_F()

RadialFunction DiracOperator::Hyperfine::sphericalBall_F ( int  k)

Spherical ball model for F(r, r_N) [default]. Uniformly distributed point k-poles.

Based on a simple multipole expansion, assuming the nucleus is composed of uniformly distributed point k-poles. Note: not everyone defines this the same way.

\[ F(r, r_N) = \begin{cases} (r/r_N)^{2k+1} & r < r_N \\ 1 & r > r_N \end{cases} \]

◆ sphericalShell_F()

RadialFunction DiracOperator::Hyperfine::sphericalShell_F ( )

Spherical shell F(r, r_N): 0 for r < r_N, 1 for r > r_N.

◆ pointlike_F()

RadialFunction DiracOperator::Hyperfine::pointlike_F ( )

Pointlike F(r): F = 1 everywhere.

◆ VolotkaSP_F()

RadialFunction DiracOperator::Hyperfine::VolotkaSP_F ( double  mu,
double  I_nuc,
double  l_pn,
int  gl,
bool  print = true 
)

Volotka single-particle nuclear model: F(r, rN)

Calculates the Bohr-Weisskopf magnetisation distribution using the Volotka single-particle model of Phys. Rev. Lett. 125, 063002 (2020). Assumes radial nuclear density is a step function. F goes to 1 as r_N -> 0. See RadialFunction for F(r) contract.

Parameters
muNuclear magnetic moment (in nuclear magnetons)
I_nucNuclear spin
l_pnOrbital angular momentum of valence nucleon
glOrbital g-factor (1 = proton, 0 = neutron)
printPrint model details
Returns
Radial function \( F_{\mathrm{BW}}(r, r_N) \)

◆ uSP()

RadialFunction DiracOperator::Hyperfine::uSP ( double  mu,
double  I_nuc,
double  l_pn,
int  gl,
double  n,
double  R,
bool  u_option,
bool  print = true 
)

Elizarov single-particle magnetisation model [extended Volotka].

Returns the radial magnetisation function F(r, r_N) for the model of Elizarov, A. A. et al., Opt. Spectrosc. 100, 361 (2006). Uses nuclear radial density u(r), with:

\[ u(r) = \begin{cases} u_0 (R-r)^n & \text{u1(r)} \\ u_0 r^n & \text{u2(r)} \end{cases} \]

n=0 should correspond to the Volotka model (see VolotkaSP_F). See RadialFunction for F(r) contract.

Parameters
muNuclear magnetic moment (in nuclear magnetons)
I_nucNuclear spin
l_pnOrbital angular momentum of valence nucleon
glOrbital g-factor (1 = proton, 0 = neutron)
nPower; usually 0, 1, or 2. 0 => Volotka
RNuclear radius
u_optionSelects radial form: true for u1(r), false for u2(r)
printPrint model details
Returns
Radial magnetisation function F(r, r_N)
Warning
Normalisation is done by numerical integration; may be unstable. Check that result returns to VolotkaSP_F as n -> 0.

◆ doublyOddSP_F()

RadialFunction DiracOperator::Hyperfine::doublyOddSP_F ( double  mut,
double  It,
double  mu1,
double  I1,
double  l1,
int  gl1,
double  I2,
double  l2,
bool  print = true 
)

Volotka single-particle model for doubly-odd nuclei.

From: Phys. Rev. Lett. 125, 063002 (2020).

Total magnetisation:

\[ g F(r) = 0.5 \left[ g_1 F_1(r) + g_2 F_2(r) + (g_1 F_1(r) - g_2 F_2(r)) K \right] \]

with

\[ K = \frac{[ I_1(I_1+1) - I_2(I_2+1) ]}{[ I(I+1) ]} \]

Returns F(r) (i.e., divided by total g).

g2 is obtained from g = 0.5 [ g1 + g2 + (g1 - g2) K ].

Note
F1, F2 are the Volotka single-particle functions (see VolotkaSP_F).
Parameters
mutTotal nuclear magnetic moment (in nuclear magnetons)
ItTotal nuclear spin
mu1Magnetic moment of nucleon 1
I1Spin of nucleon 1
l1Orbital angular momentum of nucleon 1
gl1Orbital g-factor of nucleon 1 (1 = proton, 0 = neutron)
I2Spin of nucleon 2
l2Orbital angular momentum of nucleon 2
printPrint model details
Returns
Radial function F(r)

◆ generic_F()

RadialFunction DiracOperator::Hyperfine::generic_F ( const Grid grid,
const std::vector< double > &  rho,
int  k 
)

Constructs F(r) from a numerical density rho(r) given on the radial grid.

Computes the cumulative radial integral with rank-k weighting:

\[ F(r) = N \int_0^r x^{2k} \rho(x)\, \d x, \qquad N = \frac{1}{\int_0^\infty x^{2k} \rho(x)\, \d x} \]

so that \( F(r) \to 1 \) as \( r \to \infty \).

The x^{2k} weighting matches the radial scaling of the multipole operator of rank k (consistent with sphericalBall_F, where F ~ r^{2k+1} inside the nucleus).

The density rho need not be pre-normalised. The returned function ignores its second argument (r_Nuc), since the distribution is already encoded in rho. Assumes r is always a grid point (no interpolation).

Parameters
gridRadial grid on which rho is defined.
rhoNuclear density values on the grid points.
kMultipole rank (1 = M1, 2 = E2, ...)
Returns
Radial distribution function F(r, r_Nuc).

◆ convert_RME_to_HFSconstant_2J()

double DiracOperator::Hyperfine::convert_RME_to_HFSconstant_2J ( int  k,
int  tja,
int  tjb 
)

Converts reduced matrix element to A/B coeficients (takes k, 2J, 2J)

◆ convert_RME_to_HFSconstant()

double DiracOperator::Hyperfine::convert_RME_to_HFSconstant ( int  k,
int  ka,
int  kb 
)

Converts reduced matrix element to A/B coeficients (takes k, kappa, kappa)