2 #include "DiracOperator/TensorOperator.hpp"
3 #include "IO/InputBlock.hpp"
4 #include "Wavefunction/Wavefunction.hpp"
17 Ek(
const Grid &gr,
const int k)
21 double angularF(
const int ka,
const int kb)
const override final {
24 std::string
name()
const override {
25 return std::string(
"E") + std::to_string(m_k);
27 std::string
units()
const override {
28 return m_k == 1 ?
"|e|aB" : std::string(
"|e|aB^") + std::to_string(m_k);
42 class E1 final :
public Ek {
51 std::string name() const override final {
return "s.r"; }
52 std::string units() const override final {
return "aB"; }
68 E1v(
const double alpha,
const double omega = 0.0)
69 :
TensorOperator(1, Parity::odd, -0.0, {}, 0, Realness::real,
true),
73 std::string
name() const override final {
return "E1v"; }
74 std::string
units() const override final {
return "|e|aB"; }
76 double angularF(
const int,
const int)
const override final {
return 1.0; }
78 double angularCff(
int,
int)
const override final {
return 0; }
79 double angularCgg(
int,
int)
const override final {
return 0; }
80 double angularCfg(
int ka,
int kb)
const override final {
83 double angularCgf(
int ka,
int kb)
const override final {
88 m_constant = std::abs(omega) > 1.0e-10 ? -2.0 / (m_alpha * omega) : 1.0;
97 inline std::unique_ptr<DiracOperator::TensorOperator>
100 input.
check({{
"no options",
""}});
104 return std::make_unique<sigma_r>(wf.
grid());
107 inline std::unique_ptr<DiracOperator::TensorOperator>
110 input.
check({{
"no options",
""}});
114 return std::make_unique<E1>(wf.
grid());
117 inline std::unique_ptr<DiracOperator::TensorOperator>
120 input.
check({{
"no options",
""}});
124 return std::make_unique<E1v>(wf.
alpha(), 0.0);
127 inline std::unique_ptr<DiracOperator::TensorOperator>
130 input.
check({{
"no options",
""}});
134 return std::make_unique<Ek>(wf.
grid(), 2);
138 inline std::unique_ptr<DiracOperator::TensorOperator>
141 input.
check({{
"k",
"Rank: k=1 for E1, =2 for E2 etc. [1]"}});
145 const auto k = input.
get(
"k", 1);
146 return std::make_unique<Ek>(wf.
grid(), k);
Electric dipole operator: -|e|r = -er.
Definition: Ek.hpp:42
Electric dipole operator, v-form: .
Definition: Ek.hpp:66
void updateFrequency(const double omega) override final
Update frequency for frequency-dependant operators.
Definition: Ek.hpp:87
double angularF(const int, const int) const override final
angularF: links radiation integral to RME. RME = <a||h||b> = angularF(a,b) * radial_int(a,...
Definition: Ek.hpp:76
std::string name() const override final
Returns "name" of operator (e.g., 'E1')
Definition: Ek.hpp:73
std::string units() const override final
Returns units of operator (usually au, may be MHz, etc.)
Definition: Ek.hpp:74
E^k (electric multipole) operator.
Definition: Ek.hpp:15
std::string name() const override
Returns "name" of operator (e.g., 'E1')
Definition: Ek.hpp:24
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,...
Definition: Ek.hpp:21
std::string units() const override
Returns units of operator (usually au, may be MHz, etc.)
Definition: Ek.hpp:27
Speacial case for scalar operator.
Definition: TensorOperator.hpp:233
General operator (virtual base class); operators derive from this.
Definition: TensorOperator.hpp:110
Holds grid, including type + Jacobian (dr/du)
Definition: Grid.hpp:31
std::vector< double > rpow(double k) const
Calculates+returns vector of 1/r.
Definition: Grid.cpp:120
Stores Wavefunction (set of valence orbitals, grid, HF etc.)
Definition: Wavefunction.hpp:36
const Grid & grid() const
Returns a const reference to the radial grid.
Definition: Wavefunction.hpp:81
double alpha() const
Local value of fine-structure constant.
Definition: Wavefunction.hpp:87
double S_kk(int ka, int kb)
Reduced spin angular ME: (for spin 1/2): <ka||S||kb>
Definition: Wigner369j.hpp:340
constexpr bool evenQ(int a)
Returns true if a is even - for integer values.
Definition: Wigner369j.hpp:115
double Ck_kk(int k, int ka, int kb)
Reduced (relativistic) angular ME: <ka||C^k||kb> [takes k and kappa].
Definition: Wigner369j.hpp:267
Dirac Operators: General + derived.
Definition: GenerateOperator.cpp:12