StatMech
Loading...
Searching...
No Matches
RandomMatrix_test.cpp File Reference

Functions

template<class Derived >
double MeanLevelSpacingsRatio (Eigen::DenseBase< Derived > const &eigVals)
 
int main (int argc, char **argv)
 

Function Documentation

◆ main()

int main ( int  argc,
char **  argv 
)
22 {
23 if(argc != 3) {
24 std::cerr << "Usage: 1.(This) 2.(dim) 3.(seed)\n"
25 << "argc = " << argc << std::endl;
26 std::exit(EXIT_FAILURE);
27 }
28 int const dim = std::atoi(argv[1]);
29 int const seed = std::atoi(argv[2]);
30 std::cout << "Input: dim = " << dim << std::endl;
31
32 {
33 // GUE
34 HilbertSpace<> hSpace(dim);
35 OperatorSpace<Complex_t<double>> opSpace(hSpace);
36 GaussianRandomMatrixGenerator< decltype(opSpace) > GRME(opSpace, seed);
37
38 double generationTime = getETtime();
39 Eigen::MatrixX<Complex_t<double>> mat(GRME());
40 generationTime = getETtime() - generationTime;
41 std::cout << "generationTime = " << generationTime << " (sec)" << std::endl;
42
43 double processTime = getETtime();
44 Eigen::SelfAdjointEigenSolver< decltype(mat) > solver(mat, Eigen::EigenvaluesOnly);
45 std::cout << "Mean level spacings ratio = " << MeanLevelSpacingsRatio(solver.eigenvalues())
46 << std::endl;
47 processTime = getETtime() - processTime;
48 std::cout << "processTime = " << processTime << " (sec)" << std::endl;
49 }
50 std::cout << std::endl;
51
52 int L = 6;
53 {
54 std::cout << "L = " << L << ", m = All" << std::endl;
55 ManyBodySpinSpace mbHSpace(L, 2);
56 ManyBodyOperatorSpace<Complex_t<double>> mbOpSpace(mbHSpace);
57 std::cout << "mbHSpace.dim() = " << mbHSpace.dim() << "\n"
58 << "mbOpSpace.dim() = " << mbOpSpace.dim() << std::endl;
59 GaussianRandomMatrixGenerator< decltype(mbOpSpace) > GRME(mbOpSpace, seed);
60
61 double generationTime = getETtime();
62 Eigen::MatrixX<Complex_t<double>> mat(GRME());
63 generationTime = getETtime() - generationTime;
64 std::cout << "generationTime = " << generationTime << " (sec)" << std::endl;
65
66 double processTime = getETtime();
67 Eigen::SelfAdjointEigenSolver< decltype(mat) > solver(mat, Eigen::EigenvaluesOnly);
68 std::cout << "Mean level spacings ratio = " << MeanLevelSpacingsRatio(solver.eigenvalues())
69 << std::endl;
70 processTime = getETtime() - processTime;
71 std::cout << "processTime = " << processTime << " (sec)" << std::endl;
72 }
73 std::cout << std::endl;
74
75 {
76 for(int m = 1; m <= L; ++m) {
77 std::cout << "L = " << L << ", m = " << m << std::endl;
78
79 ManyBodySpinSpace mbHSpace(L, 2);
80 mBodyOperatorSpace<Complex_t<double>> mbOpSpace(m, mbHSpace);
81 std::cout << "mbHSpace.dim() = " << mbHSpace.dim() << "\n"
82 << "mbOpSpace.dim() = " << mbOpSpace.dim() << std::endl;
83 GaussianRandomMatrixGenerator< decltype(mbOpSpace) > GRME(mbOpSpace, seed);
84
85 double generationTime = getETtime();
86 Eigen::MatrixX<Complex_t<double>> mat(GRME());
87 generationTime = getETtime() - generationTime;
88 std::cout << "generationTime = " << generationTime << " (sec)" << std::endl;
89
90 double processTime = getETtime();
91 Eigen::SelfAdjointEigenSolver< decltype(mat) > solver(mat, Eigen::EigenvaluesOnly);
92 std::cout << "Mean level spacings ratio = "
93 << MeanLevelSpacingsRatio(solver.eigenvalues()) << std::endl;
94 processTime = getETtime() - processTime;
95 std::cout << "processTime = " << processTime << " (sec)\n" << std::endl;
96 }
97 }
98
99 return EXIT_SUCCESS;
100}
double getETtime()
Definition EnergySpectrum.c:14
double MeanLevelSpacingsRatio(Eigen::DenseBase< Derived > const &eigVals)
Definition RandomMatrix_test.cpp:11
Definition RandomMatrix.hpp:9
Definition HilbertSpace.hpp:32
Definition OperatorSpace.hpp:290
Definition HilbertSpace.hpp:423
Definition OperatorSpace.hpp:132
Definition OperatorSpace.hpp:430

◆ MeanLevelSpacingsRatio()

template<class Derived >
double MeanLevelSpacingsRatio ( Eigen::DenseBase< Derived > const &  eigVals)
11 {
12 double meanLSR = 0;
13 for(int j = 1; j < eigVals.size() - 1; ++j) {
14 double interval1 = eigVals(j) - eigVals(j - 1);
15 double interval2 = eigVals(j + 1) - eigVals(j);
16 meanLSR += (interval1 > interval2 ? interval2 / interval1 : interval1 / interval2);
17 }
18 meanLSR /= eigVals.size();
19 return meanLSR;
20}