32 : energies_(energies), Mmn_(Mmn) {}
35 options opt,
const RPA& rpa,
const Eigen::MatrixXd& kDielMxInv_zero) {
46 const RPA& rpa,
const Eigen::MatrixXd& kDielMxInv_zero) {
49 for (
Index j = 0; j <
gq_->Order(); j++) {
50 double newpoint =
gq_->ScaledPoint(j);
52 eps_inv_j.diagonal().array() -= 1.0;
55 kDielMxInv_zero * std::exp(-std::pow(
opt_.
alpha * newpoint, 2));
62 const std::vector<Eigen::MatrixXd>& dielinv_matrices_r)
66 Eigen::VectorXcd denominator;
67 const std::complex<double> cpoint(0.0, point);
70 (
DeltaE_ + cpoint).cwiseInverse() + (
DeltaE_ - cpoint).cwiseInverse();
72 denominator = (
DeltaE_ + cpoint).cwiseInverse();
76 .cwiseProduct(denominator.asDiagonal() *
Imx_))
82 const Eigen::MatrixXd&
Imx_;
93 const Eigen::MatrixXd& Imx =
Mmn_[gw_level_offset];
94 Eigen::ArrayXcd DeltaE = frequency -
energies_.array();
95 DeltaE.imag().head(occ) = eta;
96 DeltaE.imag().tail(unocc) = -eta;
98 return gq_->Integrate(f);
const std::vector< Eigen::MatrixXd > & dielinv_matrices_r_
double operator()(Index j, double point, bool symmetry) const
FunctionEvaluation(const Eigen::MatrixXd &Imx, const Eigen::ArrayXcd &DeltaE, const std::vector< Eigen::MatrixXd > &dielinv_matrices_r)
const Eigen::MatrixXd & Imx_
const Eigen::ArrayXcd & DeltaE_
double SigmaGQDiag(double frequency, Index gw_level, double eta) const
const Eigen::VectorXd & energies_
void CalcDielInvVector(const RPA &rpa, const Eigen::MatrixXd &kDielMxInv_zero)
std::vector< Eigen::MatrixXd > dielinv_matrices_r_
ImaginaryAxisIntegration(const Eigen::VectorXd &energies, const TCMatrix_gwbse &Mmn)
void configure(options opt, const RPA &rpa, const Eigen::MatrixXd &kDielMxInv_zero)
const TCMatrix_gwbse & Mmn_
std::unique_ptr< GaussianQuadratureBase > gq_
Eigen::MatrixXd calculate_epsilon_i(double frequency) const
base class for all analysis tools
std::string quadrature_scheme