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

Auxillary Functions for hyperfine operatrs; F(r) [nuclear distribution] and similar. More...

Typedefs

using RadialFunction = std::function< double(double r, double r_Nuc)>
 Type for radial function F(r,rN) (type alias to save typing)
 

Functions

std::vector< double > tk_radial (int k, double rN, const std::vector< double > &r, const RadialFunction &hfs_F)
 
RadialFunction sphericalBall_F (int k)
 Spherical ball model for F(r,rN) [default]. Uniformly distributed point k-poles.
 
RadialFunction sphericalShell_F ()
 Spherical shell F(r): 0 for r<rN, 1 for r>rN.
 
RadialFunction pointlike_F ()
 Pointlike F(r): 1.
 
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.
 
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)
 

Detailed Description

Auxillary Functions for hyperfine operatrs; F(r) [nuclear distribution] and similar.

See DiracOperator::hfs for operator

Typedef Documentation

◆ RadialFunction

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

Type for radial function F(r,rN) (type alias to save typing)

  • 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

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 function: F(r,rN)/r^{k+1}

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

Parameters
kMultipole rank (1 = M1, 2 = E2, ...)
rNNuclear radius (a.u.); passed to F(r,r_N)
rRadial grid (a.u.)
hfs_FFinite nuclear magnetisation function F(r,r_N)
Returns
Radial values of t^k(r)
Note
  • Angular factors and signs are handled elsewhere.
  • F(r,r_N) contains only the finite nuclear-size correction.
  • Default F corresponds to the spherical-ball model.
  • F(r,r_N) -> 1 for r > r_N.

◆ sphericalBall_F()

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

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

Based on a simple multipole expansion, assuming nucleus is made up from uniformly distributed point k-poles. Note: not everyone seems to define 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): 0 for r<rN, 1 for r>rN.

◆ pointlike_F()

RadialFunction DiracOperator::Hyperfine::pointlike_F ( )

Pointlike F(r): 1.

◆ 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 BohrWeisskopf magnetisation distribution using the ‘Volotka’ single-particle model of Phys. Rev. Lett. 125, 063002 (2020). Returns a RadialFunction F(r,r_N). F goes to 1 as r_N->0, and F=1 for r>rN. Assumes radial nuclear density is a step function.

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 Volotka model.

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 in usually 0,1,2, but can be anything. 0 => Volotka
RNuclear radius
u_optionSelects returned radial form: true means u1(r)
printPrint model details
Returns
Radial magnetisation function
Warning
Does normalisation by numerical integration; may be unstable. Check that returns to Volotka 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)

◆ 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)