StatMech
Loading...
Searching...
No Matches
Ensemble.hpp
Go to the documentation of this file.
1#pragma once
2#ifdef GPU
3 #include "Ensemble.cuh"
4#else
5 #include "Headers/mytypes.hpp"
9 #include <Eigen/Dense>
10 #include <Eigen/Sparse>
11
12int g_dimLoc = 2;
13int g_momentum = 0;
14
17
18class SubSpaceManager {
19 public:
22
23 private:
24 std::vector<SubHilbertSpace> m_sectors;
25 std::vector<bool> m_isConstructed;
26 SubSpaceManager() = default;
27
28 public:
34 static SubSpaceManager instance;
35 return instance;
36 }
37
39 SubSpaceManager& instance = this->get_instance();
40 if(instance.m_sectors.size() <= L) {
41 instance.m_sectors.resize(L + 1);
42 instance.m_isConstructed.resize(L + 1, false);
43
44 if(!instance.m_isConstructed[L]) {
45 instance.m_sectors[L]
47 instance.m_isConstructed[L] = true;
48 }
49 }
50 return instance.m_sectors[L];
51 }
52};
53
54namespace Ensemble::internal {
55 template<class MatrixType>
56 class ScalableOperator {
57 private:
58 using Scalar = typename MatrixType::Scalar;
60 = std::vector< GaussianRandomMatrixGenerator<OperatorSpace<Scalar>> >;
62 std::vector<bool>& m_isConstructed;
63
64 public:
65 ScalableOperator(RandomMatrixGenerators& GRME, std::vector<bool>& isConstructed)
66 : m_GRME{GRME}, m_isConstructed{isConstructed} {}
67
68 MatrixType construct_globalOp(size_t L) {
69 auto currentSize = m_GRME.size();
70 if(m_isConstructed.size() < L || !m_isConstructed[L]) {
71 m_GRME.resize(L + 1);
72 m_isConstructed.resize(L + 1, false);
74 auto dim = subSpaces[L].dim();
75 auto HSpace = HilbertSpace<int>(dim);
76 auto OpSpace = OperatorSpace<Scalar>(HSpace);
78 m_isConstructed[L] = true;
79 }
80 return m_GRME[L]();
81 };
82 };
83} // namespace Ensemble::internal
84
86 public:
87 using MatrixType = Eigen::MatrixX<Scalar>;
88 using EigenSolver = Eigen::SelfAdjointEigenSolver<MatrixType>;
91
92 static std::string dataname(size_t rep) { return "Hamiltonian_No" + std::to_string(rep); };
93 static std::string usage(size_t nargs) {
94 std::string usage = "HamiltonianEnsemble Usage: ";
95 return usage;
96 };
97 static constexpr size_t nargs(void) { return 0; };
98
99 static StateSpace& stateSpace(size_t L) {
101 return subSpaces[L];
102 }
103
104 private:
105 std::vector< GaussianRandomMatrixGenerator<OperatorSpace<Scalar>> > m_GRME;
106 std::vector<bool> m_isConstructed;
107
108 HamiltonianEnsemble(char** CL_argv) {}
109
110 public:
115 static HamiltonianEnsemble& get_instance(char** CL_argv) {
116 static HamiltonianEnsemble instance(CL_argv);
117 return instance;
118 }
119
120 void discard(size_t n) {}
121
123};
124
125class ObservableEnsemble {
126 public:
127 using MatrixType = Eigen::MatrixX<Scalar>;
128 using EigenSolver = Eigen::SelfAdjointEigenSolver<MatrixType>;
131
132 static size_t class_M;
133 static std::string dataname(size_t rep) {
134 return "m" + std::to_string(class_M) + "_Observable" + "_No" + std::to_string(rep);
135 };
136 static std::string usage(size_t nargs) {
137 std::string usage = "ObservableEnsemble Usage: ";
138 usage += std::to_string(nargs + 0) + ".(m) ";
139 return usage;
140 };
141 static constexpr size_t nargs(void) { return 1; };
142
143 private:
144 size_t m_L;
145 size_t m_M;
149
150 public:
151 ObservableEnsemble(size_t L, size_t m) : m_L(L), m_M(m) {
152 assert(m_L >= 1);
153 class_M = m_M;
157 }
158
159 ObservableEnsemble(size_t L, char** CL_argv)
160 : ObservableEnsemble(L, std::atoi(CL_argv[0])) {}
161
167
169
171
172 void reset() { m_mbGRME.reset(); }
173
174 void discard(size_t n) { m_mbGRME.discard(n); }
175
178 auto& subSpaceBase = subSpaces[m_L].basis();
179 auto op = m_mbGRME();
180 // std::cout << "observable sample:\n" << op << std::endl;
181 MatrixType res = subSpaceBase.adjoint() * op * subSpaceBase;
182
183 // std::cout << "observable res:\n" << res << std::endl;
184 return res;
185 }
186};
188#endif
int g_momentum
Definition Ensemble.cuh:12
Real_t RealScalar
Definition Ensemble.cuh:14
int g_momentum
Definition Ensemble.hpp:13
int g_dimLoc
Definition Ensemble.hpp:12
Definition mytypes.hpp:147
Definition Ensemble.cuh:55
std::vector< bool > & m_isConstructed
Definition Ensemble.cuh:61
RandomMatrixGenerators & m_GRME
Definition Ensemble.cuh:60
typename MatrixType::Scalar Scalar
Definition Ensemble.cuh:57
ScalableOperator(RandomMatrixGenerators &GRME, std::vector< bool > &isConstructed)
Definition Ensemble.hpp:65
std::vector< GaussianRandomMatrixGenerator< OperatorSpace< Scalar > > > RandomMatrixGenerators
Definition Ensemble.cuh:59
MatrixType construct_globalOp(size_t L)
Definition Ensemble.hpp:68
Definition RandomMatrix.hpp:9
Definition Ensemble.cuh:84
HamiltonianEnsemble(const HamiltonianEnsemble &)=delete
typename SubSpaceManager::SubHilbertSpace StateSpace
Definition Ensemble.cuh:89
Ensemble::internal::ScalableOperator< MatrixType > ScalableOperator
Definition Ensemble.cuh:90
ScalableOperator sample()
Definition Ensemble.hpp:122
HamiltonianEnsemble(char **CL_argv)
Definition Ensemble.hpp:108
HamiltonianEnsemble & operator=(HamiltonianEnsemble &&)=delete
HamiltonianEnsemble & operator=(const HamiltonianEnsemble &)=delete
static HamiltonianEnsemble & get_instance(char **CL_argv)
Definition Ensemble.hpp:115
std::vector< bool > m_isConstructed
Definition Ensemble.cuh:106
static constexpr size_t nargs(void)
Definition Ensemble.cuh:97
HamiltonianEnsemble(HamiltonianEnsemble &&)=delete
static std::string dataname(size_t rep)
Definition Ensemble.hpp:92
static StateSpace & stateSpace(size_t L)
Definition Ensemble.hpp:99
void discard(size_t n)
Definition Ensemble.hpp:120
static std::string usage(size_t nargs)
Definition Ensemble.hpp:93
std::vector< GaussianRandomMatrixGenerator< OperatorSpace< Scalar > > > m_GRME
Definition Ensemble.cuh:105
Definition HilbertSpace.hpp:32
Definition HilbertSpace.hpp:423
Definition MatrixUtils.hpp:20
Definition Ensemble.cuh:131
size_t m_M
Definition Ensemble.cuh:151
static std::string dataname(size_t rep)
Definition Ensemble.hpp:133
StateSpace & stateSpace()
Definition Ensemble.hpp:168
ObservableEnsemble & operator=(const ObservableEnsemble &)=delete
static size_t class_M
Definition Ensemble.cuh:138
OperatorSpace m_opSpace
Definition Ensemble.cuh:153
static constexpr size_t nargs(void)
Definition Ensemble.cuh:147
size_t m_L
Definition Ensemble.cuh:150
GaussianRandomMatrixGenerator_GPU< OperatorSpace > m_mbGRME
Definition Ensemble.cuh:154
ManyBodySpinSpace StateSpace
Definition Ensemble.cuh:135
ObservableEnsemble(const ObservableEnsemble &)=delete
ObservableEnsemble(ObservableEnsemble &&)=default
static std::string usage(size_t nargs)
Definition Ensemble.hpp:136
StateSpace m_stateSpace
Definition Ensemble.cuh:152
ObservableEnsemble & operator=(ObservableEnsemble &&)=default
OperatorSpace & operatorSpace()
Definition Ensemble.hpp:170
ObservableEnsemble(size_t L, size_t m)
Definition Ensemble.hpp:151
void reset()
Definition Ensemble.hpp:172
ObservableEnsemble()=default
GaussianRandomMatrixGenerator< OperatorSpace > m_mbGRME
Definition Ensemble.hpp:148
ObservableEnsemble(size_t L, char **CL_argv)
Definition Ensemble.hpp:159
MatrixType sample()
Definition Ensemble.hpp:176
void discard(size_t n)
Definition Ensemble.hpp:174
Definition OperatorSpace.hpp:132
Definition Ensemble.cuh:112
Definition Ensemble.cuh:17
SubSpaceManager(SubSpaceManager &&)=delete
std::vector< SubHilbertSpace > m_sectors
Definition Ensemble.cuh:23
std::vector< bool > m_isConstructed
Definition Ensemble.cuh:24
SubSpaceManager(const SubSpaceManager &)=delete
SubHilbertSpace & operator[](size_t L)
Definition Ensemble.hpp:38
SubSpaceManager()=default
SubSpaceManager & operator=(const SubSpaceManager &)=delete
TransSector< RealScalar > SubHilbertSpace
Definition Ensemble.cuh:19
static SubSpaceManager & get_instance()
Definition Ensemble.hpp:33
typename SubHilbertSpace::TotalSpace TotalSpace
Definition Ensemble.cuh:20
SubSpaceManager & operator=(SubSpaceManager &&)=delete
Translation invariant sector of a many-body Hilbert space.
Definition TransSector.hpp:19
ManyBodySpinSpace TotalSpace
Definition TransSector.hpp:24
double Real_t
Definition mytypes.hpp:37
Definition Ensemble.cuh:53
int g_dimLoc
Definition Ensemble.hpp:13