ampsci
c++ program for high-precision atomic structure calculations of single-valence systems
|
Matrix element of tensor operator: J_L(qr)*C^L. More...
#include <jL.hpp>
Inherits DiracOperator::TensorOperator.
Inherited by DiracOperator::g0jL, DiracOperator::ig0g5jL, and DiracOperator::ig5jL.
Public Member Functions | |
jL (const Grid &r_grid, const Grid &q_grid, std::size_t max_l, bool subtract_one=false) | |
Contruction takes radial grid, a q grid, and a maximum L. Fills lookup table. | |
jL (const jL &other) | |
Constructing from existing operator: copies JL table - faster. Can copy from a jL of different type (g0,g5 etc) | |
jL & | operator= (const jL &)=delete |
std::size_t | L () const |
Current value of L (should = rank) | |
std::size_t | max_L () const |
Maximum L value in table. | |
const auto & | q_grid () const |
const auto & | r_grid () const |
virtual void | set_L_q (std::size_t L, double q) |
Sets the current L and q values for use. Note: NOT thread safe! | |
DiracSpinor | radial_rhs (const int kappa_a, const DiracSpinor &Fb) const override |
radial_int = Fa * radial_rhs(a, Fb) (a needed for angular factor) | |
virtual double | radialIntegral (const DiracSpinor &Fa, const DiracSpinor &Fb) const override final |
Defined via <a||h||b> = angularF(a,b) * radialIntegral(a,b) (Note: if radial_rhs is overridden, then radialIntegral must also be_. | |
double | rme (const DiracSpinor &a, const DiracSpinor &b, std::size_t L, double q) const |
Directly calculate reduced matrix element without needing to call set_L_q - this is thread safe. | |
bool | is_zero (const DiracSpinor &a, const DiracSpinor &b, std::size_t L) const |
Checks if specific ME is zero (when not useing set_L_q) | |
virtual double | angularF (const int ka, const int kb) const override |
angularF: links radiation integral to RME. RME = <a||h||b> = angularF(a,b) * radial_int(a,b) | |
virtual double | angularCff (int, int) const override |
virtual double | angularCgg (int, int) const override |
virtual double | angularCfg (int, int) const override |
virtual double | angularCgf (int, int) const override |
virtual std::string | name () const override |
Returns "name" of operator (e.g., 'E1') | |
std::string | units () const override final |
Returns units of operator (usually au, may be MHz, etc.) | |
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 |
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> | |
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) | |
Protected Attributes | |
std::size_t | m_max_l |
LinAlg::Matrix< std::vector< double > > | m_j_lq_r |
const Grid * | m_r_grid |
const Grid * | m_q_grid |
bool | m_subtract_one |
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 |
Additional Inherited Members | |
Protected Member Functions inherited from DiracOperator::TensorOperator | |
TensorOperator (int rank_k, Parity pi, double constant=1.0, const std::vector< double > &inv={}, int diff_order=0, Realness RorI=Realness::real, bool freq_dep=false) | |
Matrix element of tensor operator: J_L(qr)*C^L.
Common matrix element for scattering problems. Defined as matrix element of J_L(qr)*C^L. Note: Does NOT include the Sqrt(2L+1) term (or 4pi). JL is spherical bessel function. Uses a look-up table for jL, faster than calculating on-the-fly. Note: different to other operators: rank (rank=L) and q are variable. Must use set_L_q (which sets L and q value) prior to use. Note: this is not thread-safe, so cannot parallelise over L or q.