2#include "DiracOperator/TensorOperator.hpp"
3#include "IO/InputBlock.hpp"
4#include "Wavefunction/Wavefunction.hpp"
27 Ek(
const Grid &gr,
const int k)
32 std::unique_ptr<TensorOperator>
clone()
const override {
33 return std::make_unique<Ek>(*
this);
36 std::string
name()
const override {
37 return std::string(
"E") + std::to_string(m_k);
39 std::string
units()
const override {
40 return m_k == 1 ?
"|e|aB" : std::string(
"|e|aB^") + std::to_string(m_k);
43 double angularF(
const int ka,
const int kb)
const override final {
47 static std::unique_ptr<TensorOperator> generate(
const IO::InputBlock &input,
49 input.
check({{
"k",
"Rank: k=1 for E1, =2 for E2 etc. [1]"}});
52 const auto k = input.
get(
"k", 1);
53 return std::make_unique<Ek>(wf.
grid(), k);
67class E1 final :
public Ek {
71 std::unique_ptr<TensorOperator>
clone() const override final {
72 return std::make_unique<E1>(*
this);
75 static std::unique_ptr<TensorOperator> generate(
const IO::InputBlock &input,
77 input.
check({{
"no options",
""}});
80 return std::make_unique<E1>(wf.
grid());
89 std::string
name() const override final {
return "s.r"; }
90 std::string
units() const override final {
return "aB"; }
92 std::unique_ptr<TensorOperator>
clone() const override final {
93 return std::make_unique<sigma_r>(*
this);
96 static std::unique_ptr<TensorOperator> generate(
const IO::InputBlock &input,
98 input.
check({{
"no options",
""}});
101 return std::make_unique<sigma_r>(wf.
grid());
118 E1v(
const double alpha,
const double omega = 0.0)
123 std::string
name() const override final {
return "E1v"; }
124 std::string
units() const override final {
return "|e|aB"; }
126 double angularF(
const int ka,
const int kb)
const override final {
131 double angularCff(
int,
int)
const override final {
return 0; }
132 double angularCgg(
int,
int)
const override final {
return 0; }
148 m_constant = std::abs(omega) > 1.0e-10 ? -1.0 / (m_alpha * omega) : -1.0;
151 std::unique_ptr<TensorOperator>
clone() const override final {
152 return std::make_unique<E1v>(*
this);
155 static std::unique_ptr<TensorOperator> generate(
const IO::InputBlock &input,
157 input.
check({{
"no options",
""}});
160 return std::make_unique<E1v>(wf.
alpha(), 0.0);
170class ialpha final :
public TensorOperator {
172 ialpha() : TensorOperator(1,
Parity::odd, 1.0, {}, Realness::real,
false) {}
174 std::string name() const override final {
return "i*alpha"; }
175 std::string units() const override final {
return "au"; }
177 double angularF(
const int ka,
const int kb)
const override final {
181 double angularCff(
int,
int)
const override final {
return 0; }
182 double angularCgg(
int,
int)
const override final {
return 0; }
183 double angularCfg(
int ka,
int kb)
const override final {
return ka - kb - 1; }
184 double angularCgf(
int ka,
int kb)
const override final {
return ka - kb + 1; }
186 std::unique_ptr<TensorOperator> clone() const override final {
187 return std::make_unique<ialpha>(*
this);
192 input.
check({{
"no options",
""}});
195 return std::make_unique<ialpha>();
201class E2 final :
public Ek {
203 E2(
const Grid &gr) : Ek(gr, 2) {}
205 std::unique_ptr<TensorOperator> clone() const override final {
206 return std::make_unique<E2>(*
this);
211 input.
check({{
"no options",
""}});
214 return std::make_unique<E2>(wf.
grid());
Electric dipole operator: -|e|r = -er.
Definition Ek.hpp:67
std::unique_ptr< TensorOperator > clone() const override final
Creates a polymorphic copy of the operator at its current state, or nullptr if cloning is not support...
Definition Ek.hpp:71
Electric dipole operator, v-form: .
Definition Ek.hpp:116
double angularCgg(int, int) const override final
Angular coefficient C_gg for the g_a*g_b term of the radial integral.
Definition Ek.hpp:132
double angularF(const int ka, const int kb) const override final
Angular factor A_ab linking the radial integral to the RME.
Definition Ek.hpp:126
std::string name() const override final
Returns "name" of operator (e.g., 'E1')
Definition Ek.hpp:123
double angularCfg(int ka, int kb) const override final
Angular coefficient C_fg for the f_a*g_b term of the radial integral.
Definition Ek.hpp:133
double angularCgf(int ka, int kb) const override final
Angular coefficient C_gf for the g_a*f_b term of the radial integral.
Definition Ek.hpp:137
std::unique_ptr< TensorOperator > clone() const override final
Creates a polymorphic copy of the operator at its current state, or nullptr if cloning is not support...
Definition Ek.hpp:151
std::string units() const override final
Returns units of operator as a string (usually au, may be MHz, etc.)
Definition Ek.hpp:124
double angularCff(int, int) const override final
Angular coefficient C_ff for the f_a*f_b term of the radial integral.
Definition Ek.hpp:131
E^k (electric multipole) operator, length form, with qr<<1 (static) approximation.
Definition Ek.hpp:25
std::string name() const override
Returns "name" of operator (e.g., 'E1')
Definition Ek.hpp:36
double angularF(const int ka, const int kb) const override final
Angular factor A_ab linking the radial integral to the RME.
Definition Ek.hpp:43
std::string units() const override
Returns units of operator as a string (usually au, may be MHz, etc.)
Definition Ek.hpp:39
std::unique_ptr< TensorOperator > clone() const override
Creates a polymorphic copy of the operator at its current state, or nullptr if cloning is not support...
Definition Ek.hpp:32
Rank-0 (scalar) tensor operator; derives from TensorOperator with k=0.
Definition TensorOperator.hpp:587
General tensor operator (virtual base class); all single-particle (one-body) tenosor operators derive...
Definition TensorOperator.hpp:198
virtual void updateFrequency(const double)
Updates the operator for a new frequency omega.
Definition TensorOperator.hpp:305
Odd-parity rank-0 operator with radial function r (sigma_r)
Definition Ek.hpp:86
std::string name() const override final
Returns "name" of operator (e.g., 'E1')
Definition Ek.hpp:89
std::unique_ptr< TensorOperator > clone() const override final
Creates a polymorphic copy of the operator at its current state, or nullptr if cloning is not support...
Definition Ek.hpp:92
std::string units() const override final
Returns units of operator as a string (usually au, may be MHz, etc.)
Definition Ek.hpp:90
Non-uniform radial grid with Jacobian, suitable for atomic structure calculations.
Definition Grid.hpp:85
const std::vector< double > & r() const
Full grid vector r.
Definition Grid.hpp:131
std::vector< double > rpow(double k) const
Returns a vector of r^k for each grid point.
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:233
double Ck_kk(int k, int ka, int kb)
Reduced relativistic angular ME: <ka||C^k||kb>. Takes kappa values.
Definition Wigner369j.hpp:486
Dirac operators: TensorOperator base class and derived implementations for single-particle (one-body)...
Definition GenerateOperator.cpp:6
std::unique_ptr< DiracOperator::TensorOperator > generate(std::string_view operator_name, const IO::InputBlock &input, const Wavefunction &wf)
Constructs and returns a TensorOperator by name.
Definition GenerateOperator.cpp:10
Parity
Parity of operator.
Definition TensorOperator.hpp:57