8#ifndef VOTCA_XTP_GW_UKS_H
9#define VOTCA_XTP_GW_UKS_H
53 const Eigen::MatrixXd& vxc_alpha,
const Eigen::MatrixXd& vxc_beta,
54 const Eigen::VectorXd& dft_energies_alpha,
55 const Eigen::VectorXd& dft_energies_beta);
80 std::pair<double, double>
operator()(
double frequency)
const {
81 std::pair<double, double> result;
82 result.first =
value(frequency);
83 result.second =
deriv(frequency);
87 double value(
double frequency)
const {
92 double deriv(
double frequency)
const {
106 const Eigen::MatrixXd&
Vxc(
Spin spin)
const;
109 const Eigen::MatrixXd&
SigmaX(
Spin spin)
const;
110 const Eigen::MatrixXd&
SigmaC(
Spin spin)
const;
122 const Eigen::VectorXd& qp_diag_energies)
const;
123 Eigen::VectorXd
SolveQP(
Spin spin,
const Eigen::VectorXd& frequencies)
const;
125 double frequency0,
Index gw_level)
const;
128 Index gw_level)
const;
131 Index gw_level)
const;
133 double upperbound,
double f_upperbound,
135 bool Converged(
const Eigen::VectorXd& e1,
const Eigen::VectorXd& e2,
136 double epsilon)
const;
std::pair< double, double > operator()(double frequency) const
double deriv(double frequency) const
QPFunc(Index gw_level, const Sigma_base_UKS &sigma, double offset)
const Sigma_base_UKS & sigma_c_func_
double value(double frequency) const
boost::optional< double > SolveQP_FixedPoint(Spin spin, double intercept0, double frequency0, Index gw_level) const
TCMatrix_gwbse_spin & Mmn_
Eigen::SelfAdjointEigenSolver< Eigen::MatrixXd > DiagonalizeQPHamiltonianAlpha() const
bool Converged(const Eigen::VectorXd &e1, const Eigen::VectorXd &e2, double epsilon) const
void PrintQP_Energies(Spin spin, const Eigen::VectorXd &qp_diag_energies) const
Eigen::MatrixXd & SigmaC(Spin spin)
const Eigen::VectorXd & DftEnergies(Spin spin) const
std::unique_ptr< Sigma_base_UKS > sigma_alpha_
std::string LevelLabel(Spin spin, Index level) const
Eigen::MatrixXd Sigma_x_alpha_
std::unique_ptr< Sigma_base_UKS > sigma_beta_
Eigen::MatrixXd Sigma_c_beta_
Eigen::MatrixXd & SigmaX(Spin spin)
Eigen::VectorXd getGWAResultsAlpha() const
const Eigen::MatrixXd & vxc_alpha_
Eigen::VectorXd ScissorShift_DFTlevel(const Eigen::VectorXd &dft_energies, Index homo) const
const Eigen::VectorXd & RPAInputEnergiesAlpha() const
const char * OccupationTag(Spin spin, Index level) const
Sigma_base_UKS & SigmaEvaluator(Spin spin)
Eigen::VectorXd SolveQP(Spin spin, const Eigen::VectorXd &frequencies) const
boost::optional< double > SolveQP_Linearisation(Spin spin, double intercept0, double frequency0, Index gw_level) const
const Eigen::VectorXd & RPAInputEnergiesBeta() const
Eigen::MatrixXd getHQPBeta() const
boost::optional< double > SolveQP_Grid(Spin spin, double intercept0, double frequency0, Index gw_level) const
void PrintGWA_Energies(Spin spin) const
Eigen::VectorXd getGWAResultsBeta() const
Eigen::MatrixXd getHQPAlpha() const
Eigen::MatrixXd Sigma_x_beta_
const char * SpinName(Spin spin) const
GW_UKS(Logger &log, TCMatrix_gwbse_spin &Mmn, const Eigen::MatrixXd &vxc_alpha, const Eigen::MatrixXd &vxc_beta, const Eigen::VectorXd &dft_energies_alpha, const Eigen::VectorXd &dft_energies_beta)
const Eigen::VectorXd & dft_energies_alpha_
double CalcSpinHomoLumoShift(const Eigen::VectorXd &frequencies, Spin spin) const
const Eigen::MatrixXd & vxc_beta_
const Eigen::VectorXd & dft_energies_beta_
Eigen::SelfAdjointEigenSolver< Eigen::MatrixXd > DiagonalizeQPHamiltonianBeta() const
Eigen::MatrixXd Sigma_c_alpha_
const Eigen::MatrixXd & Vxc(Spin spin) const
void configure(const options &opt)
void CalculateGWPerturbation()
Index Homo(Spin spin) const
double SolveQP_Bisection(double lowerbound, double f_lowerbound, double upperbound, double f_upperbound, const QPFunc &f) const
Logger is used for thread-safe output of messages.
Unrestricted RPA helper for spin-resolved GW screening.
Provides a means for comparing floating point numbers.
std::string quadrature_scheme
std::string sigma_integration
Index g_sc_max_iterations
Index gw_sc_max_iterations