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);
42class 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 ka,
const int kb)
const override final {
81 double angularCff(
int,
int)
const override final {
return 0; }
82 double angularCgg(
int,
int)
const override final {
return 0; }
83 double angularCfg(
int ka,
int kb)
const override final {
87 double angularCgf(
int ka,
int kb)
const override final {
94 m_constant = std::abs(omega) > 1.0e-10 ? -1.0 / (m_alpha * omega) : -1.0;
104class ialpha final :
public TensorOperator {
106 ialpha() : TensorOperator(1, Parity::odd, 1.0, {}, 0, Realness::real,
true) {}
108 std::string name() const override final {
return "i*alpha"; }
109 std::string units() const override final {
return "au"; }
111 double angularF(
const int ka,
const int kb)
const override final {
115 double angularCff(
int,
int)
const override final {
return 0; }
116 double angularCgg(
int,
int)
const override final {
return 0; }
117 double angularCfg(
int ka,
int kb)
const override final {
return ka - kb - 1; }
118 double angularCgf(
int ka,
int kb)
const override final {
return ka - kb + 1; }
123inline std::unique_ptr<DiracOperator::TensorOperator>
126 input.
check({{
"no options",
""}});
130 return std::make_unique<sigma_r>(wf.
grid());
133inline std::unique_ptr<DiracOperator::TensorOperator>
136 input.
check({{
"no options",
""}});
140 return std::make_unique<E1>(wf.
grid());
143inline std::unique_ptr<DiracOperator::TensorOperator>
146 input.
check({{
"no options",
""}});
150 return std::make_unique<E1v>(wf.
alpha(), 0.0);
153inline std::unique_ptr<DiracOperator::TensorOperator>
156 input.
check({{
"no options",
""}});
160 return std::make_unique<Ek>(wf.
grid(), 2);
163inline std::unique_ptr<DiracOperator::TensorOperator>
166 input.
check({{
"no options",
""}});
170 return std::make_unique<ialpha>();
174inline std::unique_ptr<DiracOperator::TensorOperator>
177 input.
check({{
"k",
"Rank: k=1 for E1, =2 for E2 etc. [1]"}});
181 const auto k = input.
get(
"k", 1);
182 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
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:76
void updateFrequency(const double omega) override final
Update frequency for frequency-dependant operators.
Definition Ek.hpp:92
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:37
const Grid & grid() const
Returns a const reference to the radial grid.
Definition Wavefunction.hpp:82
double alpha() const
Local value of fine-structure constant.
Definition Wavefunction.hpp:88
constexpr bool evenQ(int a)
Returns true if a is even - for integer values.
Definition Wigner369j.hpp:154
double Ck_kk(int k, int ka, int kb)
Reduced (relativistic) angular ME: <ka||C^k||kb> [takes k and kappa].
Definition Wigner369j.hpp:306
Dirac Operators: General + derived.
Definition GenerateOperator.cpp:3