21#ifndef VOTCA_XTP_TRAH_H
22#define VOTCA_XTP_TRAH_H
85using HessianProduct = std::function<Eigen::MatrixXd(
const Eigen::MatrixXd&)>;
103StepResult
Step(
const Eigen::VectorXd& g,
const Eigen::VectorXd& diag,
105 const StepOptions& opt = StepOptions(),
106 Subspace* subspace =
nullptr);
115 explicit TrustRadius(
double radius = 0.5,
double max_radius = 1.0)
119 bool Update(
double predicted,
double actual);
125 bool Update(
double predicted,
double actual,
double linear,
double step_norm);
142 const Eigen::VectorXd& x,
Index nocc);
146Eigen::VectorXd
OccVirt(
const Eigen::MatrixXd& M,
Index nocc);
static constexpr double noise_floor
bool Update(double predicted, double actual)
TrustRadius(double radius=0.5, double max_radius=1.0)
Trust-region augmented-Hessian (TRAH) step for orbital rotations, after Helmich-Paris,...
std::function< Eigen::MatrixXd(const Eigen::MatrixXd &)> HessianProduct
Hessian applied to the columns of V (n x k), returning n x k.
StepResult Step(const Eigen::VectorXd &g, const Eigen::VectorXd &diag, const HessianProduct &hessian, double trust_radius, const StepOptions &opt=StepOptions(), Subspace *subspace=nullptr)
Eigen::MatrixXd RotateOrbitals(const Eigen::MatrixXd &C, const Eigen::VectorXd &x, Index nocc)
Eigen::VectorXd OccVirt(const Eigen::MatrixXd &M, Index nocc)
Provides a means for comparing floating point numbers.