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

General operator (virtual base class); operators derive from this. More...

#include <TensorOperator.hpp>

+ Inheritance diagram for DiracOperator::TensorOperator:

Public Member Functions

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>
 
virtual std::string name () const
 Returns "name" of operator (e.g., 'E1')
 
virtual std::string units () const
 Returns units of operator (usually au, may be MHz, etc.)
 
virtual double angularCff (int, int) const
 
virtual double angularCgg (int, int) const
 
virtual double angularCfg (int, int) const
 
virtual double angularCgf (int, int) const
 
virtual double angularF (const int, const int) const =0
 angularF: links radiation integral to RME. RME = <a||h||b> = angularF(a,b) * radial_int(a,b)
 
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
 Defined via <a||h||b> = angularF(a,b) * radialIntegral(a,b) (Note: if radial_rhs is overridden, then radialIntegral must also be_.
 
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 Member Functions

 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)
 

Protected Attributes

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

General operator (virtual base class); operators derive from this.

k is rank, c is multiplicative constant, d_order is derivative order, pi is parity, may be Parity::even or odd. RorI may be Realness::real or Realness::imaginary. Note: You may not construct a TensorOperator. Instead, you must construct one of the derived 'operators' (there are some general ones); see operators.hpp for list of operators. Operators work by overrideing the angularCxx() functions and angularF(). c, v, and Cxx are included in radial integral.

Member Function Documentation

◆ isZero()

bool DiracOperator::TensorOperator::isZero ( const int  ka,
int  kb 
) const

If matrix element <a|h|b> is zero, returns true.

◆ updateFrequency()

◆ scale()

void DiracOperator::TensorOperator::scale ( double  lambda)

Permanently re-scales the operator by constant, lambda.

◆ getv()

const std::vector< double > & DiracOperator::TensorOperator::getv ( ) const
inline

Returns a const ref to vector v.

◆ getc()

double DiracOperator::TensorOperator::getc ( ) const
inline

Returns a const ref to constant c.

◆ imaginaryQ()

bool DiracOperator::TensorOperator::imaginaryQ ( ) const
inline

returns true if operator is imaginary (has imag MEs)

◆ parity()

int DiracOperator::TensorOperator::parity ( ) const
inline

returns parity, as integer (+1 or -1)

◆ symm_sign()

int DiracOperator::TensorOperator::symm_sign ( const DiracSpinor Fa,
const DiracSpinor Fb 
) const
inline

returns relative sign between <a||x||b> and <b||x||a>

◆ name()

◆ units()

◆ angularF()

◆ radial_rhs()

◆ radialIntegral()

double DiracOperator::TensorOperator::radialIntegral ( const DiracSpinor Fa,
const DiracSpinor Fb 
) const
virtual

◆ rme3js()

double DiracOperator::TensorOperator::rme3js ( const int  twoja,
const int  twojb,
int  two_mb = 1,
int  two_q = 0 
) const

ME = rme3js * RME.

◆ reduced_rhs()

DiracSpinor DiracOperator::TensorOperator::reduced_rhs ( const int  ka,
const DiracSpinor Fb 
) const

<a||h||b> = Fa * reduced_rhs(a, Fb) (a needed for angular factor)

◆ reduced_lhs()

DiracSpinor DiracOperator::TensorOperator::reduced_lhs ( const int  ka,
const DiracSpinor Fb 
) const

<b||h||a> = Fa * reduced_lhs(a, Fb) (a needed for angular factor)

◆ reducedME()

double DiracOperator::TensorOperator::reducedME ( const DiracSpinor Fa,
const DiracSpinor Fb 
) const

The reduced matrix element.

◆ fullME()

double DiracOperator::TensorOperator::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)


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