29 Eigen::SelfAdjointEigenSolver<Eigen::MatrixXd> es(
aomatrix_);
31 Eigen::VectorXd diagonal = Eigen::VectorXd::Zero(es.eigenvalues().size());
33 for (
Index i = 0; i < diagonal.size(); ++i) {
34 if (es.eigenvalues()(i) < etol) {
37 diagonal(i) = 1.0 / std::sqrt(es.eigenvalues()(i));
41 return es.eigenvectors() * diagonal.asDiagonal() *
42 es.eigenvectors().transpose();
56 Eigen::SelfAdjointEigenSolver<Eigen::MatrixXd> eo(auxoverlap.
Matrix());
58 Eigen::VectorXd diagonal_overlap =
59 Eigen::VectorXd::Zero(eo.eigenvalues().size());
60 for (
Index i = 0; i < diagonal_overlap.size(); ++i) {
61 if (eo.eigenvalues()(i) < etol) {
64 diagonal_overlap(i) = 1.0 / std::sqrt(eo.eigenvalues()(i));
67 Eigen::MatrixXd Ssqrt = eo.eigenvectors() * diagonal_overlap.asDiagonal() *
68 eo.eigenvectors().transpose();
70 Eigen::MatrixXd ortho = Ssqrt *
aomatrix_ * Ssqrt;
71 Eigen::SelfAdjointEigenSolver<Eigen::MatrixXd> es(ortho);
72 Eigen::VectorXd diagonal = Eigen::VectorXd::Zero(es.eigenvalues().size());
74 for (
Index i = 0; i < diagonal.size(); ++i) {
75 if (es.eigenvalues()(i) < etol) {
78 diagonal(i) = 1.0 / std::sqrt(es.eigenvalues()(i));
83 es.eigenvectors() * diagonal.asDiagonal() * es.eigenvectors().transpose();
84 Eigen::MatrixXd result = (Vm1 * Ssqrt).transpose();
89 Eigen::SelfAdjointEigenSolver<Eigen::MatrixXd> es(
aomatrix_);
90 Eigen::VectorXd diagonal = Eigen::VectorXd::Zero(es.eigenvalues().size());
92 for (
Index i = 0; i < diagonal.size(); ++i) {
93 if (es.eigenvalues()(i) < etol) {
96 diagonal(i) = 1.0 / std::sqrt(es.eigenvalues()(i));
100 return es.eigenvectors() * diagonal.asDiagonal() *
101 es.eigenvectors().transpose();