37 const Eigen::VectorXd& dft_energies)
80 Eigen::MatrixXd
getHQP()
const;
87 std::string states)
const;
101 std::unique_ptr<Sigma_base>
sigma_ =
nullptr;
115 std::pair<double, double>
operator()(
double frequency)
const {
116 std::pair<double, double> result;
117 result.first =
value(frequency);
118 result.second =
deriv(frequency);
122 double value(
double frequency)
const {
126 double deriv(
double frequency)
const {
139 double upperbound,
double f_upperbound,
143 const Eigen::VectorXd& dft_energies)
const;
147 Eigen::VectorXd
SolveQP(
const Eigen::VectorXd& frequencies)
const;
148 boost::optional<double>
SolveQP_Grid(
double intercept0,
double frequency0,
149 Index gw_level)
const;
152 Index gw_level)
const;
155 Index gw_level)
const;
156 bool Converged(
const Eigen::VectorXd& e1,
const Eigen::VectorXd& e2,
157 double epsilon)
const;
const Sigma_base & sigma_c_func_
QPFunc(Index gw_level, const Sigma_base &sigma, double offset)
double deriv(double frequency) const
std::pair< double, double > operator()(double frequency) const
double value(double frequency) const
void PlotSigma(std::string filename, Index steps, double spacing, std::string states) const
Eigen::SelfAdjointEigenSolver< Eigen::MatrixXd > DiagonalizeQPHamiltonian() const
void PrintGWA_Energies() const
double SolveQP_Bisection(double lowerbound, double f_lowerbound, double upperbound, double f_upperbound, const QPFunc &f) const
boost::optional< double > SolveQP_FixedPoint(double intercept0, double frequency0, Index gw_level) const
bool Converged(const Eigen::VectorXd &e1, const Eigen::VectorXd &e2, double epsilon) const
void configure(const options &opt)
Eigen::MatrixXd getHQP() const
Eigen::VectorXd SolveQP(const Eigen::VectorXd &frequencies) const
boost::optional< double > SolveQP_Grid(double intercept0, double frequency0, Index gw_level) const
const Eigen::VectorXd & dft_energies_
std::unique_ptr< Sigma_base > sigma_
Eigen::VectorXd getGWAResults() const
Eigen::VectorXd RPAInputEnergies() const
double CalcHomoLumoShift(Eigen::VectorXd frequencies) const
const Eigen::MatrixXd & vxc_
void PrintQP_Energies(const Eigen::VectorXd &qp_diag_energies) const
boost::optional< double > SolveQP_Linearisation(double intercept0, double frequency0, Index gw_level) const
Eigen::VectorXd ScissorShift_DFTlevel(const Eigen::VectorXd &dft_energies) const
GW(Logger &log, TCMatrix_gwbse &Mmn, const Eigen::MatrixXd &vxc, const Eigen::VectorXd &dft_energies)
void CalculateGWPerturbation()
Logger is used for thread-safe output of messages.
const Eigen::VectorXd & getRPAInputEnergies() const
virtual double CalcCorrelationDiagElementDerivative(Index gw_level, double frequency) const =0
virtual double CalcCorrelationDiagElement(Index gw_level, double frequency) const =0
base class for all analysis tools
Index gw_sc_max_iterations
std::string quadrature_scheme
Index g_sc_max_iterations
std::string sigma_integration