2 #include "DiracOperator/TensorOperator.hpp"
3 #include "IO/InputBlock.hpp"
4 #include "Wavefunction/Wavefunction.hpp"
33 PNCnsi(
double c,
double t,
const Grid &rgrid,
double factor = 1.0,
34 const std::string &in_units =
"iQw*e-11")
37 {0, -1, +1, 0}, 0, Realness::imaginary),
39 std::string
name() const override final {
return "pnc-nsi"; }
40 std::string
units() const override final {
return m_unit; }
43 const std::string m_unit{
"iQw*e-11"};
46 class PNCnsi_const final :
public ScalarOperator {
48 PNCnsi_const(
double Rnuc_au,
double factor = 1.0,
49 const std::string &in_units =
"iQw*e-11")
50 : ScalarOperator(Parity::odd,
51 (3.0 / (4.0 * M_PI * Rnuc_au * Rnuc_au * Rnuc_au)) *
53 {}, {0, -1, +1, 0}, 0, Realness::imaginary),
55 std::string name() const override final {
return "pnc_const"; }
56 std::string units() const override final {
return m_unit; }
59 const std::string m_unit{
"iQw*e-11"};
63 inline std::unique_ptr<DiracOperator::TensorOperator>
68 "Half-density radius for Fermi rho(r). [defaut: from wavefunction]"},
69 {
"t",
"skin thickness [2.3]"},
70 {
"N",
"Neutron number, for units [default: from wavefunction]"},
71 {
"print",
"Write details to screen [true]"}}});
77 const auto t = input.
get(
"t", Nuclear::default_t);
78 const auto N = input.
get(
"N", wf.
Anuc() - wf.
Znuc());
80 N == 1 ?
"i(-Qw)e-11" :
"i(-Qw/" + std::to_string(N) +
")e-11";
81 if (input.
get(
"print",
true))
82 std::cout <<
"pnc: with c=" <<
c <<
", t=" << t <<
" [" << units <<
"]\n";
83 return std::make_unique<PNCnsi>(c, t, wf.
grid(), -1.0 * N,
"units");
Nuclear-spin independent PNC operator (Qw)
Definition: PNC.hpp:31
std::string name() const override final
Returns "name" of operator (e.g., 'E1')
Definition: PNC.hpp:39
std::string units() const override final
Returns units of operator (usually au, may be MHz, etc.)
Definition: PNC.hpp:40
Speacial case for scalar operator.
Definition: TensorOperator.hpp:233
Holds grid, including type + Jacobian (dr/du)
Definition: Grid.hpp:31
Stores Wavefunction (set of valence orbitals, grid, HF etc.)
Definition: Wavefunction.hpp:36
int Znuc() const
Nuclear charge, Z.
Definition: Wavefunction.hpp:98
int Anuc() const
Nuclear mass number, A.
Definition: Wavefunction.hpp:100
const Grid & grid() const
Returns a const reference to the radial grid.
Definition: Wavefunction.hpp:81
double get_rrms() const
Nuclear rms charge radii, in fm (femptometres)
Definition: Wavefunction.hpp:102
Dirac Operators: General + derived.
Definition: GenerateOperator.cpp:12
double c_hdr_formula_rrms_t(double rrms, double t)
Calculates c from rrms and t.
Definition: NuclearData.cpp:73
std::vector< double > fermiNuclearDensity_tcN(double t, double c, double Z_norm, const Grid &grid)
Fermi charge distribution, rho(r) - normalised to Z_norm.
Definition: NuclearPotentials.cpp:322
Set of commonly-used Physics constants.
Definition: PhysConst_constants.hpp:9
constexpr double GFe11
Fermi weak constant (au). Times 10^{11}.
Definition: PhysConst_constants.hpp:88
constexpr double c
speed of light in a.u. (=1/alpha)
Definition: PhysConst_constants.hpp:17