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);
60 std::vector<double> g0_minus_freqw{}, gi_minus_freqw{};
61 std::vector<double> g0_plus_freqw{}, gi_plus_freqw{};
62 std::vector<double> h0_minus_freqw{}, hi_minus_freqw{};
63 std::vector<double> h0_plus_freqw{}, hi_plus_freqw{};
64 std::vector<double> v1_freqw{}, v2_freqw{}, v3_freqw{}, v4_freqw{};
67struct single_k_n_freq {
73 calculate(Fi, Fj, k, w);
78 std::vector<double>
g{};
81 std::vector<double> gi{};
96 double m_M{1.0}, m_N{1.0}, m_O{1.0}, m_P{1.0};
99 std::vector<Coulomb::meTable<Breit_gb::single_k_mop>> m_gb{};
100 std::vector<Coulomb::meTable<Breit_gb::single_k_n>> m_gb_N{};
146 : m_scale(params.scale),
147 m_lambda_f(params.lambda_f),
169 void update_scale(
double t_scale = 1.0,
double t_M = 1.0,
double t_N = 1.0,
170 double t_O = 1.0,
double t_P = 1.0) {
214 (v.
kappa() + x.kappa() != 0) &&
217 if (!have_mop && have_n && k == 0)
220 return (have_mop || have_n);
245 return {std::max(k1, k3), std::min(k2, k4)};
255 static std::pair<int, int>
k_minmax_tj(
int tja,
int tjb,
int tjc,
int tjd) {
258 return {std::max(k1, k3), std::min(k2, k4)};
285 void fill_gb(
const std::vector<DiracSpinor> &basis,
int t_max_k = 99);
310 const std::vector<DiracSpinor> &core)
const;
538 const std::vector<DiracSpinor> &excited)
const;
556 double de2(
const DiracSpinor &Fv,
const std::vector<DiracSpinor> &holes,
557 const std::vector<DiracSpinor> &excited)
const;
598 const double w)
const;
608 const double w)
const;
618 const double w)
const;
628 const double w)
const;
638 const double w)
const;
649 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:88
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:458
void update_lambda_f(double lambda_f)
Update frequency scaling factor.
Definition Breit.hpp:189
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:488
double p
Scaling for P term (retarded part, default 1.0)
Definition Breit.hpp:124
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:208
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:443
double scale
Overall scaling factor for Breit contributions (default 1.0)
Definition Breit.hpp:116
double m
Scaling for M term (Gaunt part, default 1.0)
Definition Breit.hpp:118
double lambda_f
Scaling factor for frequency in frequency-dependent Breit (default 0.0 = static)
Definition Breit.hpp:126
double o
Scaling for O term (retarded part, default 1.0)
Definition Breit.hpp:122
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:226
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:642
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:169
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:194
Breit()
Constructs Breit with default parameters.
Definition Breit.hpp:134
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:376
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:370
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:255
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:205
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:201
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:400
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:614
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:347
Breit(const Params ¶ms)
Constructs Breit interaction operator from parameters.
Definition Breit.hpp:145
double scale_factor() const
Returns the overall scaling factor.
Definition Breit.hpp:288
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:220
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:214
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:429
double n
Scaling for N term (Gaunt part, default 1.0)
Definition Breit.hpp:120
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:239
Parameters for constructing Breit interaction operator (s,m,n,o,p,f)
Definition Breit.hpp:114
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