|
ampsci
High-precision calculations for one- and two-valence atomic systems
|
Breit potentials for one- (Hartree-Fock Breit) and two-body Breit integrals.
#include <Breit.hpp>
Classes | |
| struct | Params |
| Parameters for constructing Breit interaction operator (s,m,n,o,p,f) More... | |
Public Member Functions | |
| Breit () | |
| Constructs Breit with default parameters. | |
| Breit (const Params ¶ms) | |
| Constructs Breit interaction operator from parameters. | |
| 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. | |
| void | update_lambda_f (double lambda_f) |
| Update frequency scaling factor. | |
| void | fill_gb (const std::vector< DiracSpinor > &basis, int t_max_k=99) |
| Precompute Breit integral lookup tables for rapid evaluation. | |
| double | scale_factor () const |
| Returns the overall scaling factor. | |
| DiracSpinor | VbrFa (const DiracSpinor &Fa, const std::vector< DiracSpinor > &core) const |
| Calculates Breit contribution with automatic frequency dependence. | |
| 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. | |
| 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". | |
| 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". | |
| 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". | |
| 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. | |
| 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. | |
| 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. | |
| 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) | |
| 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) | |
| 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) | |
| 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. | |
| 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. | |
| 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. | |
| 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. | |
| 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. | |
| double | Bk_abcd_freqw (int k, const DiracSpinor &Fa, const DiracSpinor &Fb, const DiracSpinor &Fc, const DiracSpinor &Fd, const double w) const |
| Frequency-dependent reduced Breit two-body matrix element (explicit frequency) | |
| double | BPk_abcd_freqw (int k, const DiracSpinor &Fa, const DiracSpinor &Fb, const DiracSpinor &Fc, const DiracSpinor &Fd, const double w) const |
| Frequency-dependent reduced exchange Breit two-body matrix element (explicit frequency) | |
| double | BWk_abcd_freqw (int k, const DiracSpinor &Fa, const DiracSpinor &Fb, const DiracSpinor &Fc, const DiracSpinor &Fd, const double w) const |
| Frequency-dependent reduced anti-symmetrised Breit two-body matrix element (explicit frequency) | |
| 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". | |
| 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". | |
| 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". | |
Static Public Member Functions | |
| static bool | Bk_SR (int k, const DiracSpinor &v, const DiracSpinor &w, const DiracSpinor &x, const DiracSpinor &y) |
| Selection rule check for Breit integrals. | |
| 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. | |
| 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. | |
| struct HF::Breit::Params |
|
inline |
Constructs Breit with default parameters.
Equivalent to Breit(Params{}). See Breit::Params for default values.
|
inlineexplicit |
|
inline |
Update all scaling factors.
Updates the overall scaling factor, individual term scaling factors (M, N, O, P), and the frequency scaling factor for frequency-dependent Breit calculations.
| t_scale | Overall scaling factor (default 1.0) |
| t_M | Scaling for M term (Gaunt part, default 1.0) |
| t_N | Scaling for N term (Gaunt part, default 1.0) |
| t_O | Scaling for O term (retarded part, default 1.0) |
| t_P | Scaling for P term (retarded part, default 1.0) |
|
inline |
Update frequency scaling factor.
Sets the scaling factor for the frequency in frequency-dependent Breit calculations. The frequency used in the integrals is multiplied by this factor.
| lambda_f | Frequency scaling factor (should be > 0; default 1.0) |
|
inlinestatic |
Selection rule check for Breit integrals.
Tests whether the four-body Breit integral B^k_{vwxy} is nonzero based on angular momentum selection rules.
| k | Multipolarity (angular momentum rank of the interaction) |
| v | (w,x,y): electron states |
|
inlinestatic |
Determine valid multipolarity range for Breit integrals.
Minimum and maximum allowed multipolarity k for a four-body Breit integral.
| a | (b,c,d) electron states |
|
inlinestatic |
Determine valid multipolarity range for Breit integrals from quantum numbers.
As k_minmax but for 2*j (doesn't require DiracSpinors)
| void HF::Breit::fill_gb | ( | const std::vector< DiracSpinor > & | basis, |
| int | t_max_k = 99 |
||
| ) |
Precompute Breit integral lookup tables for rapid evaluation.
Pre-calculates and stores reduced Breit integrals for all unique pairs of basis orbitals and all multipolarity values k, enabling much faster integral lookups via the Bk_abcd_2() family of functions. This trades memory for speed, allowing rapid evaluation in HF iterations.
| basis | The set of basis orbitals to use |
| t_max_k | Maximum multipolarity k to compute (default 99). Actual maximum used is the minimum of this value and the physical constraint k_minmax() for the given basis. |
|
inline |
Returns the overall scaling factor.
| DiracSpinor HF::Breit::VbrFa | ( | const DiracSpinor & | Fa, |
| const std::vector< DiracSpinor > & | core | ||
| ) | const |
Calculates Breit contribution with automatic frequency dependence.
Computes the Hartree-Fock Breit interaction V_br*Fa for a valence electron interacting with the core. This is the direct Breit contribution from all core electrons.
Will be static version is lambda = 0, otherwise, frequency-dependent.
| Fa | Valence electron state |
| core | Core electron states |
| DiracSpinor HF::Breit::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.
Calculates the Breit correction to the TDHF potential, dV. This represents the response of the Breit field to the core electron perturbations.
| kappa | Dirac quantum number of the resulting state/projection |
| K | Multipolarity (rank) of the RPA operator |
| Fa | Electron state (acting on this) |
| Fb | Core state undergoing perturbation |
| Xbeta | X perturbation to core state: from ExternalField::TDHF |
| Ybeta | Y perturbation to core state: from ExternalField::TDHF |
| DiracSpinor HF::Breit::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".
Computes the radial function of the direct part of the reduced Breit operator acting on an orbital with quantum number kappa_v. This is defined such that the two-body matrix element factorises as:
\[ B^k_{abcd} = \langle a | B^k_v(b,c,d) \rangle \]
See Bk_abcd()
| DiracSpinor HF::Breit::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".
See Bkv_bcd() and BPk_abcd()
| DiracSpinor HF::Breit::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".
See Bkv_bcd() and BWk_abcd()
| double HF::Breit::Bk_abcd | ( | int | k, |
| const DiracSpinor & | Fa, | ||
| const DiracSpinor & | Fb, | ||
| const DiracSpinor & | Fc, | ||
| const DiracSpinor & | Fd | ||
| ) | const |
Reduced static Breit two-body matrix element.
Calculates the static (frequency-independent) reduced two-body Breit matrix element B^k_{abcd}, the Breit analogue of the Coulomb Q^k integral.
| k | Multipolarity (angular momentum rank of the interaction) |
| Fa | (Fb,Fc,Fd) electron states |
| double HF::Breit::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.
Calculates the static reduced exchange Breit matrix element P(B)^k_{abcd}, the Breit analogue of the Coulomb P^k integral.
| double HF::Breit::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.
Calculates the static reduced anti-symmetrised Breit matrix element W(B)^k_{abcd} = B^k_{abcd} + P(B)^k_{abcd}.
| double HF::Breit::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)
A faster implementation of Bk_abcd() that looks up pre-tabulated integrals computed by fill_gb(). Reduces computational cost, at significant memory cost.
The result is the same as Bk_abcd() for the same inputs, provided fill_gb() has been called at least once on a basis containing Fa, Fb, Fc, Fd.
| k | Multipolarity (angular momentum rank of the interaction) |
| Fa | (Fb,Fc,Fd) electron states |
| double HF::Breit::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)
A much faster implementation of BPk_abcd() that looks up pre-tabulated exchange integrals computed by fill_gb(). Reduces computational cost from O(radial grid size) per call to O(1) lookup.
The result is identical to BPk_abcd() for the same inputs, provided fill_gb() has been called at least once on a basis containing all four electron states.
| k | Multipolarity (angular momentum rank of the interaction) |
| Fa | (Fb,Fc,Fd) electron states |
| double HF::Breit::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)
A much faster implementation of BWk_abcd() that looks up pre-tabulated integrals computed by fill_gb(). Combines the tabulated direct and exchange terms for O(1) evaluation.
The result is identical to BWk_abcd() for the same inputs, provided fill_gb() has been called at least once on a basis containing all four electron states.
| k | Multipolarity (angular momentum rank of the interaction) |
| Fa | (Fb,Fc,Fd) electron states |
| double HF::Breit::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.
Calculates the one-body Breit (Breit-Hartree-Fock) correction to second-order energy for a single-valence atom. This is included automatically if Breit is included into Hartree-Fock. (The lowest-order Breit correction <v|V_Br|v> not included.)
| Fv | The valence electron state of interest |
| holes | Occupied core electron states |
| excited | Virtual excited electron states |
| double HF::Breit::de2 | ( | const DiracSpinor & | Fv, |
| const std::vector< DiracSpinor > & | holes, | ||
| const std::vector< DiracSpinor > & | excited | ||
| ) | const |
The two-body Breit correction to second-order energy.
Calculates the two-body Breit correction to second-order energy for a single-valence atom. This is not included automatically if Breit is included into Hartree-Fock, since it requires modification of two-body Coulomb integals.
| double HF::Breit::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.
| double HF::Breit::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.
| double HF::Breit::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.
| double HF::Breit::Bk_abcd_freqw | ( | int | k, |
| const DiracSpinor & | Fa, | ||
| const DiracSpinor & | Fb, | ||
| const DiracSpinor & | Fc, | ||
| const DiracSpinor & | Fd, | ||
| const double | w | ||
| ) | const |
Frequency-dependent reduced Breit two-body matrix element (explicit frequency)
Frequency-dependent analogue of Bk_abcd(). See Bkv_bcd_freqw().
| double HF::Breit::BPk_abcd_freqw | ( | int | k, |
| const DiracSpinor & | Fa, | ||
| const DiracSpinor & | Fb, | ||
| const DiracSpinor & | Fc, | ||
| const DiracSpinor & | Fd, | ||
| const double | w | ||
| ) | const |
Frequency-dependent reduced exchange Breit two-body matrix element (explicit frequency)
Frequency-dependent analogue of BPk_abcd(). See Bkv_bcd_freqw().
| double HF::Breit::BWk_abcd_freqw | ( | int | k, |
| const DiracSpinor & | Fa, | ||
| const DiracSpinor & | Fb, | ||
| const DiracSpinor & | Fc, | ||
| const DiracSpinor & | Fd, | ||
| const double | w | ||
| ) | const |
Frequency-dependent reduced anti-symmetrised Breit two-body matrix element (explicit frequency)
Frequency-dependent analogue of BWk_abcd(). See Bkv_bcd_freqw().
| DiracSpinor HF::Breit::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".
Frequency-dependent breit analogue of Bkv_bcd()
| DiracSpinor HF::Breit::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".
Frequency-dependent version of BPkv_bcd(). See Bkv_bcd_freqw().
| DiracSpinor HF::Breit::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".
Frequency-dependent version of BWkv_bcd(). See Bkv_bcd_freqw().