|
ampsci
High-precision calculations for one- and two-valence atomic systems
|
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 |
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:
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().
|
inline |
Constructs hyperfine operator of multipolarity k.
Initialises the hyperfine interaction operator.
| in_k | Tensor rank k (multipolarity) of the hyperfine interaction (e.g., 1,2,3,... for M1, E2, M3,... etc.) |
| GQ | Nuclear g-factor for k=1, general moment for k>1 |
| rN_au | Nuclear radius (a.u.), used for finite-size magnetisation models. |
| rgrid | Radial grid used to define the radial functions. |
| hfs_F | Radial magnetisation distribution function (see DiracOperator::Hyperfine). |
| MHzQ | If true outputs in MHz units; otherwise in atomic units. |
|
inlinefinaloverridevirtual |
Returns "name" of operator (e.g., 'E1')
Reimplemented from DiracOperator::TensorOperator.
|
inlinefinaloverridevirtual |
Returns units of operator (usually au, may be MHz, etc.)
Reimplemented from DiracOperator::TensorOperator.
|
inlinefinaloverridevirtual |
angularF: links radiation integral to RME. RME = <a||h||b> = angularF(a,b) * radial_int(a,b)
Implements DiracOperator::TensorOperator.
|
inlinefinaloverridevirtual |
Angular factor for f_a*f_b part of radial integral.
\[ \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.
|
inlinefinaloverridevirtual |
Angular factor for g_a*g_b part of radial integral.
Reimplemented from DiracOperator::TensorOperator.
|
inlinefinaloverridevirtual |
Angular factor for f_a*g_b part of radial integral.
Reimplemented from DiracOperator::TensorOperator.
|
inlinefinaloverridevirtual |
Angular factor for g_a*f_b part of radial integral.
Reimplemented from DiracOperator::TensorOperator.