23 TEST_CASE(
"solveGeneralizedEigenvalues",
"[drivers]")
39 std::vector<Real> ev(
N);
42 CHECK(ev[0] == Approx(-4.10958));
43 CHECK(ev[1] == Approx(1.00298));
44 app_log() <<
"ev = " << ev[0] <<
" " << ev[1] << std::endl;
46 app_log() <<
" evec " << evec(0, 0) <<
" " << evec(0, 1) << std::endl;
47 app_log() <<
" evec " << evec(1, 0) <<
" " << evec(1, 1) << std::endl;
49 CHECK(evec(0, 0) == Approx(-1.0));
50 CHECK(evec(0, 1) == Approx(0.17935662));
51 CHECK(evec(1, 0) == Approx(0.01992851));
52 CHECK(evec(1, 1) == Approx(1.0));
55 TEST_CASE(
"solveGeneralizedEigenvaluesInv",
"[drivers]")
70 std::vector<Real> ev(
N);
73 CHECK(ev[0] == Approx(-4.10958));
74 CHECK(ev[1] == Approx(1.00298));
75 app_log() <<
"ev = " << ev[0] <<
" " << ev[1] << std::endl;
77 app_log() <<
" evec " << evec(0, 0) <<
" " << evec(0, 1) << std::endl;
78 app_log() <<
" evec " << evec(1, 0) <<
" " << evec(1, 1) << std::endl;
80 CHECK(evec(0, 0) == Approx(-0.98429354));
81 CHECK(evec(0, 1) == Approx(0.17653957));
82 CHECK(evec(1, 0) == Approx(-0.01992456));
83 CHECK(evec(1, 1) == Approx(-0.99980149));
87 TEST_CASE(
"solveGeneralizedEigenvaluesCompare",
"[drivers]")
94 std::uniform_real_distribution<Real> rnd(0.0, 1.0);
97 for (
int i = 0; i <
N; i++)
102 for (
int i = 0; i <
N; i++)
105 for (
int j = 0; j < i; j++)
107 Ovlp(i, j) = rnd(mt);
108 Ovlp(j, i) = Ovlp(i, j) + 0.1;
113 for (
int i = 0; i <
N; i++)
116 for (
int j = 0; j < i; j++)
119 Ham(j, i) = Ham(i, j) - 0.1;
129 std::vector<Real> ev1(
N);
136 std::vector<Real> ev2(
N);
140 for (
int i = 0; i <
N; i++)
142 CHECK(ev1[i] == Approx(ev2[i]));
helper functions for EinsplineSetBuilder
QTBase::RealType RealType
static void solveGeneralizedEigenvalues(Matrix< Real > &A, Matrix< Real > &B, std::vector< Real > &eigenvals, Matrix< Real > &eigenvectors)
Use generalized eigenvalue solver.
TEST_CASE("complex_helper", "[type_traits]")
static void solveGeneralizedEigenvalues_Inv(Matrix< Real > &A, Matrix< Real > &B, std::vector< Real > &eigenvals, Matrix< Real > &eigenvectors)
Solve by explicitly inverting the overlap matrix.
CHECK(log_values[0]==ComplexApprox(std::complex< double >{ 5.603777579195571, -6.1586603331188225 }))