2#include "Coulomb/meTable.hpp"
3#include "Wavefunction/DiracSpinor.hpp"
4#include "qip/Vector.hpp"
23 std::vector<double> b0_minus{}, bi_minus{};
24 std::vector<double> b0_plus{}, bi_plus{};
25 std::vector<double> g0_minus{}, gi_minus{};
26 std::vector<double> g0_plus{}, gi_plus{};
38 std::vector<double>
g{};
41 std::vector<double> gi{};
46namespace Breit_gh_freqdep {
48struct single_k_mop_freq {
51 single_k_mop_freq() {}
54 calculate(Fi, Fj, k, w);
59 std::vector<double> g0_minus_freqw{}, gi_minus_freqw{};
60 std::vector<double> g0_plus_freqw{}, gi_plus_freqw{};
61 std::vector<double> h0_minus_freqw{}, hi_minus_freqw{};
62 std::vector<double> h0_plus_freqw{}, hi_plus_freqw{};
63 std::vector<double> v1_freqw{}, v2_freqw{}, v3_freqw{}, v4_freqw{};
66struct single_k_n_freq {
72 calculate(Fi, Fj, k, w);
77 std::vector<double>
g{};
80 std::vector<double> gi{};
95 double m_M{1.0}, m_N{1.0}, m_O{1.0}, m_P{1.0};
98 std::vector<Coulomb::meTable<Breit_gb::single_k_mop>> m_gb{};
99 std::vector<Coulomb::meTable<Breit_gb::single_k_n>> m_gb_N{};
145 : m_scale(params.scale),
146 m_lambda_f(params.lambda_f),
168 void update_scale(
double t_scale = 1.0,
double t_M = 1.0,
double t_N = 1.0,
169 double t_O = 1.0,
double t_P = 1.0) {
213 (v.
kappa() + x.kappa() != 0) &&
216 return (have_mop || have_n);
241 return {std::max(k1, k3), std::min(k2, k4)};
251 static std::pair<int, int>
k_minmax_tj(
int tja,
int tjb,
int tjc,
int tjd) {
254 return {std::max(k1, k3), std::min(k2, k4)};
281 void fill_gb(
const std::vector<DiracSpinor> &basis,
int t_max_k = 99);
306 const std::vector<DiracSpinor> &core)
const;
534 const std::vector<DiracSpinor> &excited)
const;
552 double de2(
const DiracSpinor &Fv,
const std::vector<DiracSpinor> &holes,
553 const std::vector<DiracSpinor> &excited)
const;
594 const double w)
const;
604 const double w)
const;
614 const double w)
const;
624 const double w)
const;
634 const double w)
const;
645 const double w)
const;
Stores radial Dirac spinor: F_nk = (f, g)
Definition DiracSpinor.hpp:42
int kappa() const
Dirac quantum number, kappa.
Definition DiracSpinor.hpp:88
Breit potentials for one- (Hartree-Fock Breit) and two-body Breit integrals.
Definition Breit.hpp:87
double BWk_abcd_freqw(int k, const DiracSpinor &Fa, const DiracSpinor &Fb, const DiracSpinor &Fc, const DiracSpinor &Fd) const
Frequency-dependent reduced anti-symmetrised Breit two-body matrix element.
Definition Breit.cpp:441
void update_lambda_f(double lambda_f)
Update frequency scaling factor.
Definition Breit.hpp:188
DiracSpinor Bkv_bcd(int k, int kappa_v, const DiracSpinor &Fb, const DiracSpinor &Fc, const DiracSpinor &Fd) const
Direct Breit two-body integral "right-hand-side".
Definition Breit.cpp:75
DiracSpinor Bkv_bcd_freqw(int k, int kappa_v, const DiracSpinor &Fb, const DiracSpinor &Fc, const DiracSpinor &Fd, const double w) const
Frequency-dependent Breit two-body integral "right-hand-side".
Definition Breit.cpp:471
double p
Scaling for P term (retarded part, default 1.0)
Definition Breit.hpp:123
double Bk_abcd(int k, const DiracSpinor &Fa, const DiracSpinor &Fb, const DiracSpinor &Fc, const DiracSpinor &Fd) const
Reduced static Breit two-body matrix element.
Definition Breit.cpp:197
void fill_gb(const std::vector< DiracSpinor > &basis, int t_max_k=99)
Precompute Breit integral lookup tables for rapid evaluation.
Definition Breit.cpp:12
double BPk_abcd_freqw(int k, const DiracSpinor &Fa, const DiracSpinor &Fb, const DiracSpinor &Fc, const DiracSpinor &Fd) const
Frequency-dependent reduced exchange Breit two-body matrix element.
Definition Breit.cpp:426
double scale
Overall scaling factor for Breit contributions (default 1.0)
Definition Breit.hpp:115
double m
Scaling for M term (Gaunt part, default 1.0)
Definition Breit.hpp:117
double lambda_f
Scaling factor for frequency in frequency-dependent Breit (default 0.0 = static)
Definition Breit.hpp:125
double o
Scaling for O term (retarded part, default 1.0)
Definition Breit.hpp:121
double Bk_abcd_2(int k, const DiracSpinor &Fa, const DiracSpinor &Fb, const DiracSpinor &Fc, const DiracSpinor &Fd) const
Reduced static Breit matrix element (tabulated, fast lookup)
Definition Breit.cpp:215
DiracSpinor BWkv_bcd_freqw(int k, int kappa_v, const DiracSpinor &Fb, const DiracSpinor &Fc, const DiracSpinor &Fd, const double w) const
Frequency-dependent anti-symmetrised Breit two-body integral "right-hand-side".
Definition Breit.cpp:614
void update_scale(double t_scale=1.0, double t_M=1.0, double t_N=1.0, double t_O=1.0, double t_P=1.0)
Update all scaling factors.
Definition Breit.hpp:168
DiracSpinor BPkv_bcd(int k, int kappa_v, const DiracSpinor &Fb, const DiracSpinor &Fc, const DiracSpinor &Fd) const
Exchange Breit two-body integral "right-hand-side".
Definition Breit.cpp:183
Breit()
Constructs Breit with default parameters.
Definition Breit.hpp:133
double de2_HF(const DiracSpinor &Fv, const std::vector< DiracSpinor > &holes, const std::vector< DiracSpinor > &excited) const
The one-body Breit (Breit-Hartree-Fock) correction to second-order energy.
Definition Breit.cpp:359
double BWk_abcd_2(int k, const DiracSpinor &Fa, const DiracSpinor &Fb, const DiracSpinor &Fc, const DiracSpinor &Fd) const
Reduced anti-symmetrised Breit matrix element (tabulated, fast lookup)
Definition Breit.cpp:353
static std::pair< int, int > k_minmax_tj(int tja, int tjb, int tjc, int tjd)
Determine valid multipolarity range for Breit integrals from quantum numbers.
Definition Breit.hpp:251
static bool Bk_SR(int k, const DiracSpinor &v, const DiracSpinor &w, const DiracSpinor &x, const DiracSpinor &y)
Selection rule check for Breit integrals.
Definition Breit.hpp:204
DiracSpinor VbrFa(const DiracSpinor &Fa, const std::vector< DiracSpinor > &core) const
Calculates Breit contribution with automatic frequency dependence.
Definition Breit.cpp:41
DiracSpinor BWkv_bcd(int k, int kappa_v, const DiracSpinor &Fb, const DiracSpinor &Fc, const DiracSpinor &Fd) const
Anti-symmetrised Breit two-body integral "right-hand-side".
Definition Breit.cpp:190
double de2(const DiracSpinor &Fv, const std::vector< DiracSpinor > &holes, const std::vector< DiracSpinor > &excited) const
The two-body Breit correction to second-order energy.
Definition Breit.cpp:383
DiracSpinor BPkv_bcd_freqw(int k, int kappa_v, const DiracSpinor &Fb, const DiracSpinor &Fc, const DiracSpinor &Fd, const double w) const
Frequency-dependent exchange Breit two-body integral "right-hand-side".
Definition Breit.cpp:586
double BPk_abcd_2(int k, const DiracSpinor &Fa, const DiracSpinor &Fb, const DiracSpinor &Fc, const DiracSpinor &Fd) const
Reduced exchange Breit matrix element (tabulated, fast lookup)
Definition Breit.cpp:330
Breit(const Params ¶ms)
Constructs Breit interaction operator from parameters.
Definition Breit.hpp:144
double scale_factor() const
Returns the overall scaling factor.
Definition Breit.hpp:284
double BWk_abcd(int k, const DiracSpinor &Fa, const DiracSpinor &Fb, const DiracSpinor &Fc, const DiracSpinor &Fd) const
Reduced static anti-symmetrised Breit two-body matrix element.
Definition Breit.cpp:209
double BPk_abcd(int k, const DiracSpinor &Fa, const DiracSpinor &Fb, const DiracSpinor &Fc, const DiracSpinor &Fd) const
Reduced static exchange Breit two-body matrix element.
Definition Breit.cpp:203
double Bk_abcd_freqw(int k, const DiracSpinor &Fa, const DiracSpinor &Fb, const DiracSpinor &Fc, const DiracSpinor &Fd) const
Frequency-dependent reduced Breit two-body matrix element.
Definition Breit.cpp:412
double n
Scaling for N term (Gaunt part, default 1.0)
Definition Breit.hpp:119
DiracSpinor dV_Br(int kappa, int K, const DiracSpinor &Fa, const DiracSpinor &Fb, const DiracSpinor &Xbeta, const DiracSpinor &Ybeta) const
Breit-TDHF: Breit correction to the TDHF correction to Hartree-Fock.
Definition Breit.cpp:63
static std::pair< int, int > k_minmax(const DiracSpinor &a, const DiracSpinor &b, const DiracSpinor &c, const DiracSpinor &d)
Determine valid multipolarity range for Breit integrals.
Definition Breit.hpp:235
Parameters for constructing Breit interaction operator (s,m,n,o,p,f)
Definition Breit.hpp:113
bool Ck_kk_SR(int k, int ka, int kb)
Selection rule check for C^k: returns true if <ka||C^k||kb> may be non-zero.
Definition Wigner369j.hpp:537
std::pair< int, int > k_minmax_tj(int tja, int tjb)
Returns min and max k (multipolarity) allowed for Triangle(k,a,b), NOT accounting for parity (2j only...
Definition CoulombIntegrals.cpp:491
double g(RaB r, PrincipalQN n, DiracQN k, Zeff z, AlphaFS a)
Lower (small) radial component.
Definition DiracHydrogen.cpp:83
Functions and classes for Hartree-Fock.
Definition CI_Integrals.hpp:13