ampsci
High-precision calculations for one- and two-valence atomic systems
DiracOperator::hfsfinal

Generalised hyperfine-structure operator, including relevant nuclear moment. More...

#include <hfs.hpp>

+ Inheritance diagram for DiracOperator::hfs:

Public Member Functions

 hfs (int in_k, double GQ, double rN_au, const Grid &rgrid, const RadialFunction &hfs_F=Hyperfine::pointlike_F(), bool MHzQ=true)
 Constructs hyperfine operator of multipolarity k.
 
std::string name () const override final
 Returns "name" of operator (e.g., 'E1')
 
std::string units () const override final
 Returns units of operator (usually au, may be MHz, etc.)
 
double angularF (const int ka, const int kb) const override final
 angularF: links radiation integral to RME. RME = <a||h||b> = angularF(a,b) * radial_int(a,b)
 
double angularCff (int, int) const override final
 Angular factor for f_a*f_b part of radial integral.
 
double angularCgg (int, int) const override final
 Angular factor for g_a*g_b part of radial integral.
 
double angularCfg (int, int) const override final
 Angular factor for f_a*g_b part of radial integral.
 
double angularCgf (int, int) const override final
 Angular factor for g_a*f_b part of radial integral.
 
- Public Member Functions inherited from DiracOperator::TensorOperator
bool freqDependantQ () const
 
bool isZero (const int ka, int kb) const
 If matrix element <a|h|b> is zero, returns true.
 
bool isZero (const DiracSpinor &Fa, const DiracSpinor &Fb) const
 
bool selectrion_rule (int twoJA, int piA, int twoJB, int piB) const
 
virtual void updateFrequency (const double)
 Update frequency for frequency-dependant operators.
 
void scale (double lambda)
 Permanently re-scales the operator by constant, lambda.
 
const std::vector< double > & getv () const
 Returns a const ref to vector v.
 
double getc () const
 Returns a const ref to constant c.
 
int get_d_order () const
 
bool imaginaryQ () const
 returns true if operator is imaginary (has imag MEs)
 
int rank () const
 Rank k of operator.
 
int parity () const
 returns parity, as integer (+1 or -1)
 
int symm_sign (const DiracSpinor &Fa, const DiracSpinor &Fb) const
 returns relative sign between <a||x||b> and <b||x||a>
 
virtual DiracSpinor radial_rhs (const int kappa_a, const DiracSpinor &Fb) const
 radial_int = Fa * radial_rhs(a, Fb) (a needed for angular factor)
 
virtual double radialIntegral (const DiracSpinor &Fa, const DiracSpinor &Fb) const
 Radial part of integral R_ab = (Fa|t|Fb).
 
double rme3js (const int twoja, const int twojb, int two_mb=1, int two_q=0) const
 ME = rme3js * RME.
 
DiracSpinor reduced_rhs (const int ka, const DiracSpinor &Fb) const
 <a||h||b> = Fa * reduced_rhs(a, Fb) (a needed for angular factor)
 
DiracSpinor reduced_lhs (const int ka, const DiracSpinor &Fb) const
 <b||h||a> = Fa * reduced_lhs(a, Fb) (a needed for angular factor)
 
double reducedME (const DiracSpinor &Fa, const DiracSpinor &Fb) const
 The reduced matrix element.
 
double fullME (const DiracSpinor &Fa, const DiracSpinor &Fb, std::optional< int > two_ma=std::nullopt, std::optional< int > two_mb=std::nullopt, std::optional< int > two_q=std::nullopt) const
 Returns "full" matrix element, for optional (ma, mb, q) [taken as int 2*]. If not specified, returns z-component (q=0), with ma=mb=min(ja,jb)
 
double matel_factor (MatrixElementType type, int twoJa, int twoJb) const
 Converts reduced matrix element to different "type" (MatrixElementType)
 
double matel_factor (MatrixElementType type, const DiracSpinor &Fa, const DiracSpinor &Fb) const
 

Additional Inherited Members

- Protected Member Functions inherited from DiracOperator::TensorOperator
 TensorOperator (int rank_k, Parity pi, double constant=1.0, const std::vector< double > &vec={}, int diff_order=0, Realness RorI=Realness::real, bool freq_dep=false)
 Constructs a tensor operator description.
 
- Protected Attributes inherited from DiracOperator::TensorOperator
int m_rank
 
Parity m_parity
 
int m_diff_order
 
Realness opC
 
bool m_freqDependantQ {false}
 
double m_constant
 
std::vector< double > m_vec
 

Detailed Description

Generalised hyperfine-structure operator, including relevant nuclear moment.

Implements the nuclear multipole hyperfine operator of rank k using a specified finite-nucleus radial model.

By default, includes the nuclear moment, and relevant factors. Input parameter GQ is the g-factor (k=1) or nuclear moment (k>1), in units of nuclear magnetons * barns^power.

That is, it calculates:

\[ GQ * t^k \]

with:

\[ t^k = \frac{-1}{r^{k+1}}\,F(r) \begin{cases} C^k & \text{electric (even k)} \\ \sqrt{\frac{k+1}{k}} \mathbf{\alpha}\!\cdot\!\mathbf{C}^{(0)}_k & \text{magnetic (odd k)} \end{cases} \]

where F(r) is nuclear k-pole distribution (=1 for pointlike).

Convert to hyperfine constant by taking stretched state, and multiply by:

\[ M = \begin{cases} 1/J & k = 1 \\ 2 & k = 2 \\ -1 & k = 3 \\ 1 & k \geq 4 \\ \end{cases} \]

This factor (including the steched 3j symbol) is returned by Hyperfine::convert_RME_to_HFSconstant()

Units:

  • Assumes nuclear moments in units of:
  • magnetic moments: \(\mu_N\, b^{(k-1)/2}\)
  • electric moments: \(b^{k/2}\)
  • Matrix element are in MHz by default, otherwise in atomic units.

Here \( \mu_N \) is the nuclear magneton and \( b \) is the barn.

See, e.g., Xiao et al., Phys. Rev. A 102, 022810 (2020).

The radial part is constructed from Hyperfine::tk_radial().

Constructor & Destructor Documentation

◆ hfs()

DiracOperator::hfs::hfs ( int  in_k,
double  GQ,
double  rN_au,
const Grid rgrid,
const RadialFunction &  hfs_F = Hyperfine::pointlike_F(),
bool  MHzQ = true 
)
inline

Constructs hyperfine operator of multipolarity k.

Initialises the hyperfine interaction operator.

Parameters
in_kTensor rank k (multipolarity) of the hyperfine interaction (e.g., 1,2,3,... for M1, E2, M3,... etc.)
GQNuclear g-factor for k=1, general moment for k>1
rN_auNuclear radius (a.u.), used for finite-size magnetisation models.
rgridRadial grid used to define the radial functions.
hfs_FRadial magnetisation distribution function (see DiracOperator::Hyperfine).
MHzQIf true outputs in MHz units; otherwise in atomic units.
See also
See also: DiracOperator::Hyperfine

Member Function Documentation

◆ name()

std::string DiracOperator::hfs::name ( ) const
inlinefinaloverridevirtual

Returns "name" of operator (e.g., 'E1')

Reimplemented from DiracOperator::TensorOperator.

◆ units()

std::string DiracOperator::hfs::units ( ) const
inlinefinaloverridevirtual

Returns units of operator (usually au, may be MHz, etc.)

Reimplemented from DiracOperator::TensorOperator.

◆ angularF()

double DiracOperator::hfs::angularF ( const int  ,
const int   
) const
inlinefinaloverridevirtual

angularF: links radiation integral to RME. RME = <a||h||b> = angularF(a,b) * radial_int(a,b)

Implements DiracOperator::TensorOperator.

◆ angularCff()

double DiracOperator::hfs::angularCff ( int  ,
int   
) const
inlinefinaloverridevirtual

Angular factor for f_a*f_b part of radial integral.

  • Often constant, though sometimes depends on \(\kappa_a,\kappa_b\)

    \[ \int_0^\infty v(r)\left( C_{ff}f_a(r)f_b(r) + C_{fg}f_a(r)g_b(r) + C_{gf}g_a(r)f_b(r) + C_{gg}g_a(r)g_b(r) \right)\,{\rm d}r \]

Reimplemented from DiracOperator::TensorOperator.

◆ angularCgg()

double DiracOperator::hfs::angularCgg ( int  ,
int   
) const
inlinefinaloverridevirtual

Angular factor for g_a*g_b part of radial integral.

Reimplemented from DiracOperator::TensorOperator.

◆ angularCfg()

double DiracOperator::hfs::angularCfg ( int  ,
int   
) const
inlinefinaloverridevirtual

Angular factor for f_a*g_b part of radial integral.

Reimplemented from DiracOperator::TensorOperator.

◆ angularCgf()

double DiracOperator::hfs::angularCgf ( int  ,
int   
) const
inlinefinaloverridevirtual

Angular factor for g_a*f_b part of radial integral.

Reimplemented from DiracOperator::TensorOperator.


The documentation for this class was generated from the following file: