ampsci
High-precision calculations for one- and two-valence atomic systems
GenerateOperator.hpp
1#pragma once
2#include "IO/InputBlock.hpp"
3#include "Operators/include.hpp"
4#include "TensorOperator.hpp"
5#include "Wavefunction/Wavefunction.hpp"
6#include <memory>
7#include <string>
8#include <vector>
9
10namespace DiracOperator {
11
12//! List of avilable operators, and their generator functions
13static const std::vector<
14 std::tuple<std::string,
15 std::unique_ptr<DiracOperator::TensorOperator> (*)(
16 const IO::InputBlock &input, const Wavefunction &wf),
17 std::string>>
18 operator_list{
19 {"E1", &generate_E1, "Electric dipole (moment), length form: -|e|r"},
20 {"E1v", &generate_E1v, "Electric dipole, v-form"},
21 {"E2", &generate_E2, "Electric quadrupole moment operator"},
22 {"Ek", &generate_Ek, "Electric multipole moment operator, in low qr limit"},
23 {"ialpha", &generate_ialpha, "i*alpha (propto E1v)"},
24 {"M1", &generate_M1, "Magnetic dipole (relativistic formula)"},
25 {"M1nr", &generate_M1nr, "Non-relativistic M1"},
26 {"Multipole", &generate_Multipole,
27 "Multipole transition operators (Vector,Axial,Scalar,Pseudoscalar)"},
28 {"hfs", &generate_hfs, "Hyperfine structure k-pole operators"},
29 {"fieldshift", &generate_fieldshift, "Field-shift F(r) operator"},
30 {"r", &generate_r, "radial (scalar) |r|"},
31 {"sigma_r", &generate_sigma_r, "scalar sigma.r operator"},
32 {"pnc", &generate_pnc, "NSI PNC operator"},
33 {"Vrad", &generate_Vrad, "QED Radiative potential"},
34 {"MLVP", &generate_MLVP,
35 "Magnetic-Loop vacuum polarisation vertex correction to HFS"},
36 {"dr", &generate_dr, "Radial scalar derivative"},
37 {"p", &generate_p, "Momentum operator"},
38 {"l", &generate_l, "Orbital L"},
39 {"s", &generate_s, "Spin S (not sigma)"}};
40
41//------------------------------------------------------------------------------
42
43//! Returns a unique_ptr (polymorphic) to the requested operator, with given
44//! properties
45std::unique_ptr<DiracOperator::TensorOperator>
46generate(std::string_view operator_name, const IO::InputBlock &input,
47 const Wavefunction &wf);
48
49//! List available operators
50void list_operators();
51
52} // namespace DiracOperator
Holds list of Options, and a list of other InputBlocks. Can be initialised with a list of options,...
Definition InputBlock.hpp:142
Stores Wavefunction (set of valence orbitals, grid, HF etc.)
Definition Wavefunction.hpp:37
Dirac Operators: General + derived.
Definition GenerateOperator.cpp:3
std::unique_ptr< DiracOperator::TensorOperator > generate(std::string_view operator_name, const IO::InputBlock &input, const Wavefunction &wf)
Returns a unique_ptr (polymorphic) to the requested operator, with given properties.
Definition GenerateOperator.cpp:7
void list_operators()
List available operators.
Definition GenerateOperator.cpp:40