High-precision calculations for one- and two-valence atomic systems
SecondOrderCI.hpp
1#pragma once
2#include "CI/CSF.hpp"
3#include "Coulomb/meTable.hpp"
4#include <cstddef>
5#include <iostream>
6#include <vector>
7namespace DiracOperator {
8class TensorOperator;
9}
10
11namespace Amplitudes {
12
13/*!
14 @brief Second-order amplitude \f$ A^K \f$ between two CI states, by
15 sum-over-states over the solved CI levels.
16 @details
17 Evaluates \f$ A^K \f$ (see CI::A_K_coefs) directly,
18
19 \f[
20 A^K = \sum_n \left[
21 c_1(J_n)\,
22 \frac{\redmatel{b}{t}{n}\redmatel{n}{s}{a}}{E_a + \omega_s - E_n}
23 + c_2(J_n)\,
24 \frac{\redmatel{b}{s}{n}\redmatel{n}{t}{a}}{E_a + \omega - E_n}
25 \right],
26 \f]
27
28 the sum running over the solutions of each allowed intermediate
29 (J, parity). This is the sum-over-states analogue of CI::A_K (the
30 generalisation of the CI_Pol module): only the levels actually solved in
31 the CI{} block are available, so the sum is truncated - both to the
32 (J, parity) blocks that were solved (a note is printed for any that are
33 missing) and to num_solutions levels within each. CI::A_K, by contrast,
34 is complete; the comparison shows how much of the amplitude the low
35 levels carry.
36
37 The reduced matrix elements are the CI contractions of the
38 single-particle tables (CI::ReducedME). Corrections to the matrix
39 elements (RPA, structure radiation, normalisation of states) enter
40 through those tables.
41
42 @param K Rank of the amplitude.
43 @param Psi_b,ib Final CI state (solution @p ib of @p Psi_b).
44 @param Psi_a,ia Initial CI state.
45 @param t,t_me The \f$ t \f$ operator, and its table of single-particle
46 reduced matrix elements (which may include RPA, structure
47 radiation, normalisation), formed at @p omega.
48 @param s,s_me The \f$ s \f$ operator, and its table (formed at
49 @p omega_s).
50 @param omega,omega_s Frequency of each operator; see CI::A_K.
51 @param ciwfs The solved CI blocks, e.g., Wavefunction::CIwfs(): the
52 intermediate states of the sum.
53 @param levels_to_remove CI levels skipped in the sum, so that they may be
54 treated separately - e.g., with experimental energies.
55 @param outstream Stream for the per-(J, parity) contributions.
56 @return \f$ A^K \f$ (valence part).
57
58 @note The polarisation of the closed core and the core-valence terms lie
59 outside the CI space: see CI::A_K_core and CI::A_K_cv.
60
61 @note A level degenerate with a denominator (\f$ E_a + \omega_s \f$ or
62 \f$ E_a + \omega \f$) makes its term diverge, and nothing is skipped
63 here: remove the offending level (@p levels_to_remove) and treat it
64 separately.
65*/
66[[nodiscard]] double sos_ci(int K, const CI::PsiJPi &Psi_b, std::size_t ib,
67 const CI::PsiJPi &Psi_a, std::size_t ia,
69 const Coulomb::meTable<double> &t_me,
71 const Coulomb::meTable<double> &s_me, double omega,
72 double omega_s,
73 const std::vector<CI::PsiJPi> &ciwfs,
74 const std::vector<CI::Level> &levels_to_remove = {},
75 std::ostream &outstream = std::cout);
76
77} // namespace Amplitudes
Container for CI solutions in a single (J, parity) block.
Definition CSF.hpp:248
Look-up table for matrix elements. Note: does not assume any symmetry: (a,b) is stored independantly ...
Definition meTable.hpp:17
General tensor operator (virtual base class); all single-particle (one-body) tenosor operators derive...
Definition TensorOperator.hpp:198
Physical amplitudes and observables (matrix elements, second-order amplitudes); testable functions,...
Definition MatrixElements.cpp:15
double sos_ci(int K, const CI::PsiJPi &Psi_b, std::size_t ib, const CI::PsiJPi &Psi_a, std::size_t ia, const DiracOperator::TensorOperator *t, const Coulomb::meTable< double > &t_me, const DiracOperator::TensorOperator *s, const Coulomb::meTable< double > &s_me, double omega, double omega_s, const std::vector< CI::PsiJPi > &ciwfs, const std::vector< CI::Level > &levels_to_remove, std::ostream &outstream)
Second-order amplitude between two CI states, by sum-over-states over the solved CI levels.
Definition SecondOrderCI.cpp:14
Dirac operators: TensorOperator base class and derived implementations for single-particle (one-body)...
Definition SecondOrder.hpp:7