2 #include "DiracOperator/TensorOperator.hpp"
3 #include "IO/InputBlock.hpp"
4 #include "Wavefunction/Wavefunction.hpp"
22 M1(
const Grid &gr,
const double alpha,
const double omega = 0.0)
23 :
TensorOperator(1, Parity::even, +0.0, {}, 0, Realness::real,
true),
28 M1 &operator=(
const M1 &) =
delete;
29 M1(
const M1 &) =
default;
31 std::string
name() const override final {
return std::string(
"M1"); }
32 std::string
units() const override final {
return std::string(
"|mu_B|"); }
34 double angularF(
const int ka,
const int kb)
const override final {
37 double angularCff(
int,
int)
const override final {
return 0.0; }
38 double angularCgg(
int,
int)
const override final {
return 0.0; }
39 double angularCfg(
int,
int)
const override final {
return 1.0; }
40 double angularCgf(
int,
int)
const override final {
return 1.0; }
43 if (std::abs(omega) > 1.0e-10) {
44 m_constant = -3.0 / std::abs((m_alpha * m_alpha * omega));
46 SphericalBessel::fillBesselVec_kr(1, std::abs(omega) * m_alpha, m_r);
49 m_constant = -1.0 / (m_alpha);
55 const std::vector<double> m_r;
64 std::string
name() const override final {
return "M1nr"; }
65 std::string
units() const override final {
return "|mu_B|"; }
67 double angularF(
const int,
const int)
const override final {
89 inline std::unique_ptr<DiracOperator::TensorOperator>
92 input.
check({{
"",
"No input options"}});
96 return std::make_unique<M1>(wf.
grid(), wf.
alpha(), 0.0);
99 inline std::unique_ptr<DiracOperator::TensorOperator>
102 input.
check({{
"",
"No input options"}});
106 return std::make_unique<M1nr>();
Magnetic dipole operator: <a||M1||b>
Definition: M1.hpp:20
std::string name() const override final
Returns "name" of operator (e.g., 'E1')
Definition: M1.hpp:31
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: M1.hpp:34
std::string units() const override final
Returns units of operator (usually au, may be MHz, etc.)
Definition: M1.hpp:32
void updateFrequency(const double omega) override final
Update frequency for frequency-dependant operators.
Definition: M1.hpp:42
Magnetic dipole operator, in non-relativistic form: M1 = L + 2S.
Definition: M1.hpp:61
std::string name() const override final
Returns "name" of operator (e.g., 'E1')
Definition: M1.hpp:64
DiracSpinor radial_rhs(const int kappa_a, const DiracSpinor &Fb) const override final
radial_int = Fa * radial_rhs(a, Fb) (a needed for angular factor)
Definition: M1.hpp:72
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,...
Definition: M1.hpp:77
std::string units() const override final
Returns units of operator (usually au, may be MHz, etc.)
Definition: M1.hpp:65
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: M1.hpp:67
General operator (virtual base class); operators derive from this.
Definition: TensorOperator.hpp:110
DiracSpinor reduced_rhs(const int ka, const DiracSpinor &Fb) const
<a||h||b> = Fa * reduced_rhs(a, Fb) (a needed for angular factor)
Definition: TensorOperator.cpp:50
l (orbital angular momentum) operator
Definition: jls.hpp:27
s (spin) operator
Definition: jls.hpp:50
Stores radial Dirac spinor: F_nk = (f, g)
Definition: DiracSpinor.hpp:41
Holds grid, including type + Jacobian (dr/du)
Definition: Grid.hpp:31
const std::vector< double > & r() const
Grid points, r.
Definition: Grid.hpp:75
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 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