34 rpa_solution =
rpa_.Diagonalize_H2p();
45#pragma omp parallel for schedule(dynamic)
47 Eigen::Map<Eigen::MatrixXd>(
residues_.col(gw_level).data(), B,
S)
48 .noalias() =
Mmn_[gw_level + qpoffset] * modes;
58 double frequency)
const {
65 Index gw_level,
const Eigen::VectorXd& frequencies)
const {
66 for (
Index i = 0; i < frequencies.size(); ++i) {
74 Index gw_level,
double frequency)
const {
82 double frequency2)
const {
84 const Eigen::Vector2d w(frequency1, frequency2);
86 const Eigen::VectorXd r12 =
88 const Eigen::VectorXd sums =
90 return sums(0) + sums(1);
94 const Eigen::VectorXd& frequencies)
const {
102 const Index rpasize = n_occ * n_unocc;
105 Eigen::MatrixXd M(rpasize,
Mmn_.auxsize());
106#pragma omp parallel for schedule(dynamic)
107 for (
Index v = 0; v < n_occ; v++) {
108 M.middleRows(vc.
I(v, 0), n_unocc) =
Mmn_[v].middleRows(n_occ, n_unocc);
110 return M.transpose() * XpY;
Eigen::VectorXd CalcCorrelationDiagElements(Index gw_level, const Eigen::VectorXd &frequencies) const final
Eigen::MatrixXd residues_
Eigen::MatrixXd CalcCorrelationOffDiag(const Eigen::VectorXd &frequencies) const final
All off-diagonal elements as blocked matrix products.
Eigen::MatrixXd ScreeningModes(const Eigen::MatrixXd &XpY) const
const double * Residues(Index gw_level) const
double CalcCorrelationDiagElementDerivative(Index gw_level, double frequency) const final
void PrepareScreening() final
double CalcCorrelationDiagElement(Index gw_level, double frequency) const final
Eigen::VectorXd rpa_omegas_
double CalcCorrelationOffDiagElement(Index gw_level1, Index gw_level2, double frequency1, double frequency2) const final
void CountDiagEval() const
This class transforms a pair of indices v,c into a compound index I, via I=ctotal*v+c the fast dimens...
Index I(Index v, Index c) const
double Value(const ExactPoles &poles, const double *residues, double w)
S_n(w) at one frequency.
double Derivative(const ExactPoles &poles, const double *residues, double w)
dS_n/dw at one frequency
Eigen::MatrixXd OffDiagonal(const ExactPoles &poles, const Eigen::MatrixXd &residues_all, const Eigen::VectorXd &w)
Eigen::VectorXd Values(const ExactPoles &poles, const double *residues, const Eigen::VectorXd &w)
Eigen::VectorXd ValuesDirectWeighted(const ExactPoles &poles, const double *weights, const Eigen::VectorXd &w)
sum_p a_p f(w - z_p) with given weights a_p (e.g. r_n1 r_n2)
Charge transport classes.
Provides a means for comparing floating point numbers.
Pole sums of the exact (RPA spectral) correlation self-energy.