3 #include "Ensemble.cuh"
10 #include <Eigen/Sparse>
11 #include <unsupported/Eigen/KroneckerProduct>
56 template<
class MatrixType>
59 using Scalar =
typename MatrixType::Scalar;
68 std::cerr <<
"Error at [" << __FILE__ <<
":" << __LINE__ <<
"]\n\t"
69 << __PRETTY_FUNCTION__ <<
"\nMessage:\t locOp.rows()("
70 <<
m_locOp.rows() <<
") != locOp.cols()(" << locOp.cols() <<
"): "
71 <<
"local operator must be a square matrix" << std::endl;
72 std::exit(EXIT_FAILURE);
76 if(dim % dimLoc != 0) {
77 std::cerr <<
"Error at [" << __FILE__ <<
":" << __LINE__ <<
"]\n\t"
78 << __PRETTY_FUNCTION__ <<
"\nMessage:\t locOp.rows()("
79 <<
m_locOp.rows() <<
") must be a power of dimLoc(" << dimLoc
81 std::exit(EXIT_FAILURE);
89 std::cerr <<
"Error at [" << __FILE__ <<
":" << __LINE__ <<
"]\n\t"
90 << __PRETTY_FUNCTION__ <<
"\n\t L(" << L
91 <<
") must not be smaller than m_Locality(" <<
m_Locality <<
")."
93 std::exit(EXIT_FAILURE);
99 auto Identity = MatrixType::Identity(dimCompl, dimCompl);
101 auto& subSpaceBase = subSpaces[L].basis();
102 MatrixType res = subSpaceBase.adjoint() * Eigen::kroneckerProduct(Identity,
m_locOp)
117 std::stringstream
buff(
"");
118 buff << std::setprecision(3);
123 std::string
usage =
"HamiltonianEnsemble Usage: ";
124 usage += std::to_string(
nargs + 0) +
".(Transverse field) ";
125 usage += std::to_string(
nargs + 1) +
".(Longitudinal field) ";
128 static constexpr size_t nargs(
void) {
return 2; };
141 class_B = std::atof(CL_argv[0]);
142 class_h = std::atof(CL_argv[1]);
149 for(
auto j = 0; j !=
g_dimLoc - 1; ++j) {
152 sX(j, j + 1) = std::sqrt((s - m + 1) * (s + m));
153 sY(j + 1, j) = std::sqrt((s + m) * (s - m + 1));
156 sX = (sX + sY).eval() / 2.0;
157 sY =
Scalar(0, 1) * (sY - sX).eval();
161 m_locMat = Eigen::kroneckerProduct(sZ, sZ);
164 * (Eigen::kroneckerProduct(sX, Identity) + Eigen::kroneckerProduct(Identity, sX))
168 * (Eigen::kroneckerProduct(sZ, Identity) + Eigen::kroneckerProduct(Identity, sZ))
199 return "m" + std::to_string(
class_M) +
"_Observable" +
"_No" + std::to_string(rep);
202 std::string
usage =
"ObservableEnsemble Usage: ";
206 static constexpr size_t nargs(
void) {
return 1; };
243 auto& subSpaceBase = subSpaces[
m_L].basis();
246 MatrixType res = subSpaceBase.adjoint() * op * subSpaceBase;
Real_t RealScalar
Definition Ensemble.cuh:14
int g_dimLoc
Definition Ensemble.cuh:11
int g_dimLoc
Definition Ensemble.hpp:12
Definition mytypes.hpp:147
Definition Ensemble.cuh:55
ScalableOperator(MatrixType const &locOp, size_t dimLoc)
Definition Ensemble.hpp:65
typename MatrixType::Scalar Scalar
Definition Ensemble.cuh:57
size_t m_Locality
Definition Ensemble.hpp:62
size_t m_dimLoc
Definition Ensemble.hpp:61
MatrixType construct_globalOp(size_t L)
Definition Ensemble.hpp:87
MatrixType m_locOp
Definition Ensemble.template.hpp:39
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:185
HamiltonianEnsemble(char **CL_argv)
Definition Ensemble.hpp:140
HamiltonianEnsemble & operator=(HamiltonianEnsemble &&)=delete
HamiltonianEnsemble & operator=(const HamiltonianEnsemble &)=delete
static HamiltonianEnsemble & get_instance(char **CL_argv)
Definition Ensemble.hpp:178
static double class_h
Definition Ensemble.hpp:137
static constexpr size_t nargs(void)
Definition Ensemble.cuh:97
HamiltonianEnsemble(HamiltonianEnsemble &&)=delete
static std::string dataname(size_t rep)
Definition Ensemble.hpp:116
static StateSpace & stateSpace(size_t L)
Definition Ensemble.hpp:130
MatrixType m_locMat
Definition Ensemble.hpp:138
void discard(size_t n)
Definition Ensemble.hpp:183
static std::string usage(size_t nargs)
Definition Ensemble.hpp:122
static double class_B
Definition Ensemble.hpp:136
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:198
StateSpace & stateSpace()
Definition Ensemble.hpp:233
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:201
StateSpace m_stateSpace
Definition Ensemble.cuh:152
ObservableEnsemble & operator=(ObservableEnsemble &&)=default
OperatorSpace & operatorSpace()
Definition Ensemble.hpp:235
ObservableEnsemble(size_t L, size_t m)
Definition Ensemble.hpp:216
void reset()
Definition Ensemble.hpp:237
ObservableEnsemble()=default
ObservableEnsemble(size_t L, char **CL_argv)
Definition Ensemble.hpp:224
MatrixType sample()
Definition Ensemble.hpp:241
void discard(size_t n)
Definition Ensemble.hpp:239
Definition OperatorSpace.hpp:132
Translation invariant sector of a many-body Hilbert space.
Definition ParityTransSector.hpp:19
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:39
SubSpaceManager()=default
SubSpaceManager & operator=(const SubSpaceManager &)=delete
TransSector< RealScalar > SubHilbertSpace
Definition Ensemble.cuh:19
static SubSpaceManager & get_instance()
Definition Ensemble.hpp:34
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_parity
Definition Ensemble.hpp:14
int g_dimLoc
Definition Ensemble.hpp:13
Complex_t< RealScalar > Scalar
Definition Ensemble.hpp:17
std::stringstream buff("")