template<typename Tile, typename Policy, typename Gradient, typename Mat>
class mpqc::lcao::pbc::NonLinearConjGradient< Tile, Policy, Gradient, Mat >
Implements non-linear conjugate gradient for a given gradient expression.
|
virtual | ~NonLinearConjGradient ()=default |
|
| NonLinearConjGradient (const KeyVal &kv) |
|
double | inner_product (Mat const &bra_mat, Mat const &ket_mat) const |
|
std::vector< Mat > | rotate_W (const int nkpts, double mu, std::vector< Mat > const &Hn, std::vector< Mat > const &Wn) const |
|
int | find_max_idx (Eigen::VectorXd const &list, double const max_value) const |
|
Eigen::VectorXd | fit_data (Eigen::VectorXd const &mu_list, Eigen::VectorXd const &P_list) const |
|
void | evaluate_P_on_range (Eigen::VectorXd &mu_list, Eigen::VectorXd &P_list, const double lower_bound, const double upper_bound, const int p, const int nkpts, Eigen::Vector3i const &nk, std::vector< Mat > const &Hn, std::vector< Mat > const &Wn, std::vector< std::vector< Mat >> const &Q_list) const |
|
double | get_upper_bound (double const &lower_bound, double const &upper_bound, Eigen::VectorXd &mu_list, Eigen::VectorXd &P_list, const int p, const double P_initial, Eigen::Vector3i const &nk, std::vector< Mat > const &Hn, std::vector< Mat > const &Wn, std::vector< std::vector< Mat >> const &Q_list, const int nkpts) const |
|
double | solve_root (const double &lower_bound, double &upper_bound, const int p, const double P_initial, const int nkpts, Eigen::Vector3i const &nk, std::vector< Mat > const &Hn, std::vector< Mat > const &Wn, std::vector< std::vector< Mat >> const &Q_list) const |
|
std::vector< Mat > | update_W_fit_functional (const int nkpts, const int p, double const &lower_bound, double &upper_bound, double &P_initial, Eigen::Vector3i const &nk, std::vector< Mat > const &Hn, std::vector< Mat > const &Wn, std::vector< std::vector< Mat >> const &Q_list) const |
|
std::vector< Mat > | compute (std::vector< Mat > const &C, std::vector< Mat > &C_rotated, Eigen::Vector3i const &nk, int64_t nocc, size_t ncols_of_C_to_skip=0) const final |
|
virtual | ~zOrbitalLocalizer ()=default |
|
template<typename Tile , typename Policy , typename Gradient , typename Mat >
std::vector<Mat> mpqc::lcao::pbc::NonLinearConjGradient< Tile, Policy, Gradient, Mat >::compute |
( |
std::vector< Mat > const & |
C, |
|
|
std::vector< Mat > & |
C_rotated, |
|
|
Eigen::Vector3i const & |
nk, |
|
|
int64_t |
nocc, |
|
|
size_t |
ncols_of_C_to_skip = 0 |
|
) |
| const |
|
inlinefinalvirtual |
- Parameters
-
| C | input LCAOs |
[in] | ncols_of_C_to_skip | the number of columns of C to keep non-localized, presumably because they are already localized |
- Returns
- transformation matrix
U
that converts C
to localized LCAOs, i.e. computes the AO coefficients of localized MOs from the AO coefficients of input MOs";
Step 1: Get the maximum of all omega_k
Step 2: Determine the order q of the cost function
Step 3: Determine the value of Tmu = 2 pi / (q * max_omega)
Step 1: Get the maximum of all omega_k
Step 2: Determine the order q of the cost function
Step 3: Determine the value of Tmu = 2 pi / (q * max_omega)
Implements mpqc::lcao::zOrbitalLocalizer< Tile, Policy, Mat >.
template<typename Tile , typename Policy , typename Gradient , typename Mat >
void mpqc::lcao::pbc::NonLinearConjGradient< Tile, Policy, Gradient, Mat >::evaluate_P_on_range |
( |
Eigen::VectorXd & |
mu_list, |
|
|
Eigen::VectorXd & |
P_list, |
|
|
const double |
lower_bound, |
|
|
const double |
upper_bound, |
|
|
const int |
p, |
|
|
const int |
nkpts, |
|
|
Eigen::Vector3i const & |
nk, |
|
|
std::vector< Mat > const & |
Hn, |
|
|
std::vector< Mat > const & |
Wn, |
|
|
std::vector< std::vector< Mat >> const & |
Q_list |
|
) |
| const |
|
inline |
Step 5: Evaluate R(mu) at each mu_i
Step 6: For each R(mu), evaluate the PM functional