StatMech
Loading...
Searching...
No Matches
ObservableEnsemble Class Reference

#include <Ensemble.hpp>

Collaboration diagram for ObservableEnsemble:
Collaboration graph

Public Types

using MatrixType = ObjectOnGPU< Eigen::MatrixX< Scalar > >
 
using EigenSolver = MatrixUtils::EigenSolver< MatrixType >
 
using StateSpace = ManyBodySpinSpace
 
using OperatorSpace = mBodyOperatorSpace< Scalar >
 
using MatrixType = Eigen::MatrixX< Scalar >
 
using EigenSolver = Eigen::SelfAdjointEigenSolver< MatrixType >
 
using StateSpace = ManyBodySpinSpace
 
using OperatorSpace = mBodyOperatorSpace< Scalar >
 
using MatrixType = Eigen::MatrixX< Scalar >
 
using EigenSolver = Eigen::SelfAdjointEigenSolver< MatrixType >
 
using MatrixType = ObjectOnGPU< Eigen::MatrixX< Scalar > >
 
using EigenSolver = MatrixUtils::EigenSolver< MatrixType >
 
using StateSpace = ManyBodySpinSpace
 
using OperatorSpace = mBodyOperatorSpace< Scalar >
 
using MatrixType = Eigen::MatrixX< Scalar >
 
using EigenSolver = Eigen::SelfAdjointEigenSolver< MatrixType >
 
using StateSpace = ManyBodySpinSpace
 
using OperatorSpace = mBodyOperatorSpace< Scalar >
 
using MatrixType = ObjectOnGPU< Eigen::MatrixX< Scalar > >
 
using EigenSolver = MatrixUtils::EigenSolver< MatrixType >
 
using StateSpace = ManyBodySpinSpace
 
using OperatorSpace = mBodyOperatorSpace< Scalar >
 
using MatrixType = Eigen::MatrixX< Scalar >
 
using EigenSolver = Eigen::SelfAdjointEigenSolver< MatrixType >
 
using StateSpace = ManyBodySpinSpace
 
using OperatorSpace = mBodyOperatorSpace< Scalar >
 

Public Member Functions

 ObservableEnsemble (size_t L, size_t m)
 
 ObservableEnsemble (size_t L, char **CL_argv)
 
 ObservableEnsemble ()=default
 
 ObservableEnsemble (const ObservableEnsemble &)=delete
 
ObservableEnsembleoperator= (const ObservableEnsemble &)=delete
 
 ObservableEnsemble (ObservableEnsemble &&)=default
 
ObservableEnsembleoperator= (ObservableEnsemble &&)=default
 
StateSpacestateSpace ()
 
OperatorSpaceoperatorSpace ()
 
void reset ()
 
void discard (size_t n)
 
MatrixType sample ()
 
 ObservableEnsemble (size_t L, size_t m)
 
 ObservableEnsemble (size_t L, char **CL_argv)
 
 ObservableEnsemble ()=default
 
 ObservableEnsemble (const ObservableEnsemble &)=delete
 
ObservableEnsembleoperator= (const ObservableEnsemble &)=delete
 
 ObservableEnsemble (ObservableEnsemble &&)=default
 
ObservableEnsembleoperator= (ObservableEnsemble &&)=default
 
StateSpacestateSpace ()
 
OperatorSpaceoperatorSpace ()
 
void reset ()
 
void discard (size_t n)
 
MatrixType sample ()
 
 ObservableEnsemble ()=default
 
 ObservableEnsemble (const ObservableEnsemble &)=delete
 
ObservableEnsembleoperator= (const ObservableEnsemble &)=delete
 
 ObservableEnsemble (ObservableEnsemble &&)=default
 
ObservableEnsembleoperator= (ObservableEnsemble &&)=default
 
void reset ()
 
void discard (size_t n)
 
MatrixType sample ()
 
auto & stateSpace ()
 
auto & operatorSpace ()
 
 ObservableEnsemble (size_t L, size_t m)
 
 ObservableEnsemble (size_t L, char **CL_argv)
 
 ObservableEnsemble ()=default
 
 ObservableEnsemble (const ObservableEnsemble &)=delete
 
ObservableEnsembleoperator= (const ObservableEnsemble &)=delete
 
 ObservableEnsemble (ObservableEnsemble &&)=default
 
ObservableEnsembleoperator= (ObservableEnsemble &&)=default
 
StateSpacestateSpace ()
 
OperatorSpaceoperatorSpace ()
 
void reset ()
 
void discard (size_t n)
 
MatrixType sample ()
 
 ObservableEnsemble (size_t L, size_t m)
 
 ObservableEnsemble (size_t L, char **CL_argv)
 
 ObservableEnsemble ()=default
 
 ObservableEnsemble (const ObservableEnsemble &)=delete
 
ObservableEnsembleoperator= (const ObservableEnsemble &)=delete
 
 ObservableEnsemble (ObservableEnsemble &&)=default
 
ObservableEnsembleoperator= (ObservableEnsemble &&)=default
 
StateSpacestateSpace ()
 
OperatorSpaceoperatorSpace ()
 
void reset ()
 
void discard (size_t n)
 
MatrixType sample ()
 
 ObservableEnsemble (size_t L, size_t m)
 
 ObservableEnsemble (size_t L, char **CL_argv)
 
 ObservableEnsemble ()=default
 
 ObservableEnsemble (const ObservableEnsemble &)=delete
 
ObservableEnsembleoperator= (const ObservableEnsemble &)=delete
 
 ObservableEnsemble (ObservableEnsemble &&)=default
 
ObservableEnsembleoperator= (ObservableEnsemble &&)=default
 
StateSpacestateSpace ()
 
OperatorSpaceoperatorSpace ()
 
void reset ()
 
void discard (size_t n)
 
MatrixType sample ()
 
 ObservableEnsemble (size_t L, size_t m)
 
 ObservableEnsemble (size_t L, char **CL_argv)
 
 ObservableEnsemble ()=default
 
 ObservableEnsemble (const ObservableEnsemble &)=delete
 
ObservableEnsembleoperator= (const ObservableEnsemble &)=delete
 
 ObservableEnsemble (ObservableEnsemble &&)=default
 
ObservableEnsembleoperator= (ObservableEnsemble &&)=default
 
StateSpacestateSpace ()
 
OperatorSpaceoperatorSpace ()
 
void reset ()
 
void discard (size_t n)
 
MatrixType sample ()
 

Static Public Member Functions

static std::string dataname (size_t rep)
 
static std::string usage (size_t nargs)
 
static constexpr size_t nargs (void)
 
static std::string dataname (size_t rep)
 
static std::string usage (size_t nargs)
 
static constexpr size_t nargs (void)
 
static std::string dataname (size_t rep)
 
static std::string usage (size_t nargs)
 
static constexpr size_t nargs (void)
 
static std::string dataname (size_t rep)
 
static std::string usage (size_t nargs)
 
static constexpr size_t nargs (void)
 
static std::string dataname (size_t rep)
 
static std::string usage (size_t nargs)
 
static constexpr size_t nargs (void)
 
static std::string dataname (size_t rep)
 
static std::string usage (size_t nargs)
 
static constexpr size_t nargs (void)
 
static std::string dataname (size_t rep)
 
static std::string usage (size_t nargs)
 
static constexpr size_t nargs (void)
 

Static Public Attributes

static size_t class_M = 0
 

Private Attributes

size_t m_L
 
size_t m_M
 
StateSpace m_stateSpace
 
OperatorSpace m_opSpace
 
GaussianRandomMatrixGenerator_GPU< OperatorSpacem_mbGRME
 
GaussianRandomMatrixGenerator< OperatorSpacem_mbGRME
 

Member Typedef Documentation

◆ EigenSolver [1/7]

◆ EigenSolver [2/7]

using ObservableEnsemble::EigenSolver = Eigen::SelfAdjointEigenSolver<MatrixType>

◆ EigenSolver [3/7]

using ObservableEnsemble::EigenSolver = Eigen::SelfAdjointEigenSolver<MatrixType>

◆ EigenSolver [4/7]

◆ EigenSolver [5/7]

using ObservableEnsemble::EigenSolver = Eigen::SelfAdjointEigenSolver<MatrixType>

◆ EigenSolver [6/7]

◆ EigenSolver [7/7]

using ObservableEnsemble::EigenSolver = Eigen::SelfAdjointEigenSolver<MatrixType>

◆ MatrixType [1/7]

◆ MatrixType [2/7]

using ObservableEnsemble::MatrixType = Eigen::MatrixX<Scalar>

◆ MatrixType [3/7]

using ObservableEnsemble::MatrixType = Eigen::MatrixX<Scalar>

◆ MatrixType [4/7]

◆ MatrixType [5/7]

using ObservableEnsemble::MatrixType = Eigen::MatrixX<Scalar>

◆ MatrixType [6/7]

◆ MatrixType [7/7]

using ObservableEnsemble::MatrixType = Eigen::MatrixX<Scalar>

◆ OperatorSpace [1/6]

◆ OperatorSpace [2/6]

◆ OperatorSpace [3/6]

◆ OperatorSpace [4/6]

◆ OperatorSpace [5/6]

◆ OperatorSpace [6/6]

◆ StateSpace [1/6]

◆ StateSpace [2/6]

◆ StateSpace [3/6]

◆ StateSpace [4/6]

◆ StateSpace [5/6]

◆ StateSpace [6/6]

Constructor & Destructor Documentation

◆ ObservableEnsemble() [1/33]

ObservableEnsemble::ObservableEnsemble ( size_t  L,
size_t  m 
)
inline
157 : m_L(L), m_M(m) {
158 assert(m_L >= 1);
159 class_M = m_M;
163 }
Definition RandomMatrix.cuh:18
Definition HilbertSpace.hpp:423
size_t m_M
Definition Ensemble.cuh:151
static size_t class_M
Definition Ensemble.cuh:138
OperatorSpace m_opSpace
Definition Ensemble.cuh:153
size_t m_L
Definition Ensemble.cuh:150
GaussianRandomMatrixGenerator_GPU< OperatorSpace > m_mbGRME
Definition Ensemble.cuh:154
StateSpace m_stateSpace
Definition Ensemble.cuh:152
Definition OperatorSpace.hpp:430
int g_dimLoc
Definition Ensemble.hpp:13

◆ ObservableEnsemble() [2/33]

ObservableEnsemble::ObservableEnsemble ( size_t  L,
char **  CL_argv 
)
inline
166 : ObservableEnsemble(L, std::atoi(CL_argv[0])) {}
ObservableEnsemble()=default

◆ ObservableEnsemble() [3/33]

ObservableEnsemble::ObservableEnsemble ( )
default

◆ ObservableEnsemble() [4/33]

ObservableEnsemble::ObservableEnsemble ( const ObservableEnsemble )
delete

◆ ObservableEnsemble() [5/33]

ObservableEnsemble::ObservableEnsemble ( ObservableEnsemble &&  )
default

◆ ObservableEnsemble() [6/33]

ObservableEnsemble::ObservableEnsemble ( size_t  L,
size_t  m 
)
inline

◆ ObservableEnsemble() [7/33]

ObservableEnsemble::ObservableEnsemble ( size_t  L,
char **  CL_argv 
)
inline
160 : ObservableEnsemble(L, std::atoi(CL_argv[0])) {}

◆ ObservableEnsemble() [8/33]

ObservableEnsemble::ObservableEnsemble ( )
default

◆ ObservableEnsemble() [9/33]

ObservableEnsemble::ObservableEnsemble ( const ObservableEnsemble )
delete

◆ ObservableEnsemble() [10/33]

ObservableEnsemble::ObservableEnsemble ( ObservableEnsemble &&  )
default

◆ ObservableEnsemble() [11/33]

ObservableEnsemble::ObservableEnsemble ( )
default

◆ ObservableEnsemble() [12/33]

ObservableEnsemble::ObservableEnsemble ( const ObservableEnsemble )
delete

◆ ObservableEnsemble() [13/33]

ObservableEnsemble::ObservableEnsemble ( ObservableEnsemble &&  )
default

◆ ObservableEnsemble() [14/33]

ObservableEnsemble::ObservableEnsemble ( size_t  L,
size_t  m 
)
inline

◆ ObservableEnsemble() [15/33]

ObservableEnsemble::ObservableEnsemble ( size_t  L,
char **  CL_argv 
)
inline
277 : ObservableEnsemble(L, std::atoi(CL_argv[0])) {}

◆ ObservableEnsemble() [16/33]

ObservableEnsemble::ObservableEnsemble ( )
default

◆ ObservableEnsemble() [17/33]

ObservableEnsemble::ObservableEnsemble ( const ObservableEnsemble )
delete

◆ ObservableEnsemble() [18/33]

ObservableEnsemble::ObservableEnsemble ( ObservableEnsemble &&  )
default

◆ ObservableEnsemble() [19/33]

ObservableEnsemble::ObservableEnsemble ( size_t  L,
size_t  m 
)
inline

◆ ObservableEnsemble() [20/33]

ObservableEnsemble::ObservableEnsemble ( size_t  L,
char **  CL_argv 
)
inline
196 : ObservableEnsemble(L, std::atoi(CL_argv[0])) {}

◆ ObservableEnsemble() [21/33]

ObservableEnsemble::ObservableEnsemble ( )
default

◆ ObservableEnsemble() [22/33]

ObservableEnsemble::ObservableEnsemble ( const ObservableEnsemble )
delete

◆ ObservableEnsemble() [23/33]

ObservableEnsemble::ObservableEnsemble ( ObservableEnsemble &&  )
default

◆ ObservableEnsemble() [24/33]

ObservableEnsemble::ObservableEnsemble ( size_t  L,
size_t  m 
)
inline

◆ ObservableEnsemble() [25/33]

ObservableEnsemble::ObservableEnsemble ( size_t  L,
char **  CL_argv 
)
inline
277 : ObservableEnsemble(L, std::atoi(CL_argv[0])) {}

◆ ObservableEnsemble() [26/33]

ObservableEnsemble::ObservableEnsemble ( )
default

◆ ObservableEnsemble() [27/33]

ObservableEnsemble::ObservableEnsemble ( const ObservableEnsemble )
delete

◆ ObservableEnsemble() [28/33]

ObservableEnsemble::ObservableEnsemble ( ObservableEnsemble &&  )
default

◆ ObservableEnsemble() [29/33]

ObservableEnsemble::ObservableEnsemble ( size_t  L,
size_t  m 
)
inline

◆ ObservableEnsemble() [30/33]

ObservableEnsemble::ObservableEnsemble ( size_t  L,
char **  CL_argv 
)
inline
225 : ObservableEnsemble(L, std::atoi(CL_argv[0])) {}

◆ ObservableEnsemble() [31/33]

ObservableEnsemble::ObservableEnsemble ( )
default

◆ ObservableEnsemble() [32/33]

ObservableEnsemble::ObservableEnsemble ( const ObservableEnsemble )
delete

◆ ObservableEnsemble() [33/33]

ObservableEnsemble::ObservableEnsemble ( ObservableEnsemble &&  )
default

Member Function Documentation

◆ dataname() [1/7]

static std::string ObservableEnsemble::dataname ( size_t  rep)
inlinestatic
139 {
140 return "m" + std::to_string(class_M) + "_Observable" + "_No" + std::to_string(rep);
141 };

◆ dataname() [2/7]

static std::string ObservableEnsemble::dataname ( size_t  rep)
inlinestatic
133 {
134 return "m" + std::to_string(class_M) + "_Observable" + "_No" + std::to_string(rep);
135 };

◆ dataname() [3/7]

static std::string ObservableEnsemble::dataname ( size_t  rep)
inlinestatic
100{ return "Observable_No" + std::to_string(rep); };

◆ dataname() [4/7]

static std::string ObservableEnsemble::dataname ( size_t  rep)
inlinestatic
250 {
251 return "m" + std::to_string(class_M) + "_Observable" + "_No" + std::to_string(rep);
252 };

◆ dataname() [5/7]

static std::string ObservableEnsemble::dataname ( size_t  rep)
inlinestatic
169 {
170 return "m" + std::to_string(class_M) + "_Observable" + "_No" + std::to_string(rep);
171 };

◆ dataname() [6/7]

static std::string ObservableEnsemble::dataname ( size_t  rep)
inlinestatic
250 {
251 return "m" + std::to_string(class_M) + "_Observable" + "_No" + std::to_string(rep);
252 };

◆ dataname() [7/7]

static std::string ObservableEnsemble::dataname ( size_t  rep)
inlinestatic
198 {
199 return "m" + std::to_string(class_M) + "_Observable" + "_No" + std::to_string(rep);
200 };

◆ discard() [1/7]

void ObservableEnsemble::discard ( size_t  n)
inline
180{ m_mbGRME.discard(n); }

◆ discard() [2/7]

void ObservableEnsemble::discard ( size_t  n)
inline
174{ m_mbGRME.discard(n); }

◆ discard() [3/7]

void ObservableEnsemble::discard ( size_t  n)
inline
122 {
123 // Write codes here
124 }

◆ discard() [4/7]

void ObservableEnsemble::discard ( size_t  n)
inline
291{ m_mbGRME.discard(n); }

◆ discard() [5/7]

void ObservableEnsemble::discard ( size_t  n)
inline
210{ m_mbGRME.discard(n); }

◆ discard() [6/7]

void ObservableEnsemble::discard ( size_t  n)
inline
291{ m_mbGRME.discard(n); }

◆ discard() [7/7]

void ObservableEnsemble::discard ( size_t  n)
inline
239{ m_mbGRME.discard(n); }

◆ nargs() [1/7]

static constexpr size_t ObservableEnsemble::nargs ( void  )
inlinestaticconstexpr
147{ return 1; };

◆ nargs() [2/7]

static constexpr size_t ObservableEnsemble::nargs ( void  )
inlinestaticconstexpr
141{ return 1; };

◆ nargs() [3/7]

static constexpr size_t ObservableEnsemble::nargs ( void  )
inlinestaticconstexpr
107{ return 1; };

◆ nargs() [4/7]

static constexpr size_t ObservableEnsemble::nargs ( void  )
inlinestaticconstexpr
258{ return 1; };

◆ nargs() [5/7]

static constexpr size_t ObservableEnsemble::nargs ( void  )
inlinestaticconstexpr
177{ return 1; };

◆ nargs() [6/7]

static constexpr size_t ObservableEnsemble::nargs ( void  )
inlinestaticconstexpr
258{ return 1; };

◆ nargs() [7/7]

static constexpr size_t ObservableEnsemble::nargs ( void  )
inlinestaticconstexpr
206{ return 1; };

◆ operator=() [1/14]

ObservableEnsemble & ObservableEnsemble::operator= ( const ObservableEnsemble )
delete

◆ operator=() [2/14]

ObservableEnsemble & ObservableEnsemble::operator= ( const ObservableEnsemble )
delete

◆ operator=() [3/14]

ObservableEnsemble & ObservableEnsemble::operator= ( const ObservableEnsemble )
delete

◆ operator=() [4/14]

ObservableEnsemble & ObservableEnsemble::operator= ( const ObservableEnsemble )
delete

◆ operator=() [5/14]

ObservableEnsemble & ObservableEnsemble::operator= ( const ObservableEnsemble )
delete

◆ operator=() [6/14]

ObservableEnsemble & ObservableEnsemble::operator= ( const ObservableEnsemble )
delete

◆ operator=() [7/14]

ObservableEnsemble & ObservableEnsemble::operator= ( const ObservableEnsemble )
delete

◆ operator=() [8/14]

ObservableEnsemble & ObservableEnsemble::operator= ( ObservableEnsemble &&  )
default

◆ operator=() [9/14]

ObservableEnsemble & ObservableEnsemble::operator= ( ObservableEnsemble &&  )
default

◆ operator=() [10/14]

ObservableEnsemble & ObservableEnsemble::operator= ( ObservableEnsemble &&  )
default

◆ operator=() [11/14]

ObservableEnsemble & ObservableEnsemble::operator= ( ObservableEnsemble &&  )
default

◆ operator=() [12/14]

ObservableEnsemble & ObservableEnsemble::operator= ( ObservableEnsemble &&  )
default

◆ operator=() [13/14]

ObservableEnsemble & ObservableEnsemble::operator= ( ObservableEnsemble &&  )
default

◆ operator=() [14/14]

ObservableEnsemble & ObservableEnsemble::operator= ( ObservableEnsemble &&  )
default

◆ operatorSpace() [1/7]

OperatorSpace & ObservableEnsemble::operatorSpace ( )
inline
176{ return m_opSpace; }

◆ operatorSpace() [2/7]

OperatorSpace & ObservableEnsemble::operatorSpace ( )
inline
170{ return m_opSpace; }

◆ operatorSpace() [3/7]

auto & ObservableEnsemble::operatorSpace ( )
inline
133{ return; }

◆ operatorSpace() [4/7]

OperatorSpace & ObservableEnsemble::operatorSpace ( )
inline
287{ return m_opSpace; }

◆ operatorSpace() [5/7]

OperatorSpace & ObservableEnsemble::operatorSpace ( )
inline
206{ return m_opSpace; }

◆ operatorSpace() [6/7]

OperatorSpace & ObservableEnsemble::operatorSpace ( )
inline
287{ return m_opSpace; }

◆ operatorSpace() [7/7]

OperatorSpace & ObservableEnsemble::operatorSpace ( )
inline
235{ return m_opSpace; }

◆ reset() [1/7]

void ObservableEnsemble::reset ( )
inline
178{ m_mbGRME.reset(); }

◆ reset() [2/7]

void ObservableEnsemble::reset ( )
inline
172{ m_mbGRME.reset(); }

◆ reset() [3/7]

void ObservableEnsemble::reset ( )
inline
118 {
119 // Write codes here
120 }

◆ reset() [4/7]

void ObservableEnsemble::reset ( )
inline
289{ m_mbGRME.reset(); }

◆ reset() [5/7]

void ObservableEnsemble::reset ( )
inline
208{ m_mbGRME.reset(); }

◆ reset() [6/7]

void ObservableEnsemble::reset ( )
inline
289{ m_mbGRME.reset(); }

◆ reset() [7/7]

void ObservableEnsemble::reset ( )
inline
237{ m_mbGRME.reset(); }

◆ sample() [1/7]

MatrixType ObservableEnsemble::sample ( )
inline
182 {
184 auto& subSpace = subSpaces[m_L];
185 int const dim = subSpace.dim();
186 MatrixType res(dim, dim);
187 MatrixType op = m_mbGRME();
188 // std::cout << "observable sample:\n" << op << std::endl;
189
190 constexpr void (*kernel)(
191 Eigen::MatrixBase< std::remove_reference_t<decltype(*res.ptr())> >*,
192 Eigen::MatrixBase< std::remove_reference_t<decltype(*op.ptr())> > const*,
195 struct cudaFuncAttributes attr;
196 cuCHECK(cudaFuncGetAttributes(&attr, kernel));
197 int const nThread = min(dim, (int)sqrt(attr.maxThreadsPerBlock));
198 int const nBlock = (int)(dim % nThread == 0 ? dim / nThread : dim / nThread + 1);
199 debug_print(__func__ << ":\t subSpace.dim()=" << dim << ", nBlock=" << nBlock
200 << ", nThread=" << nThread);
201
203 kernel<<<dim3(nBlock, nBlock, 1), dim3(nThread, nThread, 1)>>>(res.ptr(), op.ptr(),
204 dSubSpace.ptr());
205 cuCHECK(cudaDeviceSynchronize());
206
207 // std::cout << "observable res:\n" << res << std::endl;
208 return res;
209 }
__global__ void ObservableEnsemble_sample_kernel(Eigen::MatrixBase< Derived1 > *resPtr, Eigen::MatrixBase< Derived2 > const *opTotPtr, SubSpace< TotalSpace, typename Derived1::Scalar > const *subSpacePtr)
Definition Ensemble.cuh:214
Definition ObjectOnGPU.cuh:149
ObjectOnGPU< Eigen::MatrixX< Scalar > > MatrixType
Definition Ensemble.cuh:133
Definition HilbertSpace.hpp:568
Definition Ensemble.cuh:17
static SubSpaceManager & get_instance()
Definition Ensemble.cuh:32
cuCHECK(cudaFuncGetAttributes(&attr, MatrixElementsInSector))
debug_print("# Determining GPU configuration.")
struct cudaFuncAttributes attr
Definition getAttributesOfMatrixElementsInSector.cpp:2
Integer_t const nBlock
Definition getAttributesOfMatrixElementsInSector.cpp:5
Integer_t const nThread
Definition getAttributesOfMatrixElementsInSector.cpp:4

◆ sample() [2/7]

MatrixType ObservableEnsemble::sample ( )
inline
176 {
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 }

◆ sample() [3/7]

MatrixType ObservableEnsemble::sample ( )
inline
126 {
127 MatrixType res;
128 // Write codes to construct an observable here
129 return res;
130 }

◆ sample() [4/7]

MatrixType ObservableEnsemble::sample ( )
inline
293 {
295 auto& subSpace = subSpaces[m_L];
296 int const dim = subSpace.dim();
297 MatrixType res(dim, dim);
298 MatrixType op = m_mbGRME();
299 // std::cout << "observable sample:\n" << op << std::endl;
300
301 constexpr void (*kernel)(
302 Eigen::MatrixBase< std::remove_reference_t<decltype(*res.ptr())> >*,
303 Eigen::MatrixBase< std::remove_reference_t<decltype(*op.ptr())> > const*,
306 struct cudaFuncAttributes attr;
307 cuCHECK(cudaFuncGetAttributes(&attr, kernel));
308 int const nThread = min(dim, (int)sqrt(attr.maxThreadsPerBlock));
309 int const nBlock = (int)(dim % nThread == 0 ? dim / nThread : dim / nThread + 1);
310 debug_print(__func__ << ":\t subSpace.dim()=" << dim << ", nBlock=" << nBlock
311 << ", nThread=" << nThread);
312
314 kernel<<<dim3(nBlock, nBlock, 1), dim3(nThread, nThread, 1)>>>(res.ptr(), op.ptr(),
315 dSubSpace.ptr());
316 cuCHECK(cudaDeviceSynchronize());
317
318 // std::cout << "observable res:\n" << res << std::endl;
319 return res;
320 }

◆ sample() [5/7]

MatrixType ObservableEnsemble::sample ( )
inline
212 {
214 auto& subSpaceBase = subSpaces[m_L].basis();
215 auto op = m_mbGRME();
216 // std::cout << "observable sample:\n" << op << std::endl;
217 MatrixType res = subSpaceBase.adjoint() * op * subSpaceBase;
218
219 // std::cout << "observable res:\n" << res << std::endl;
220 return res;
221 }

◆ sample() [6/7]

MatrixType ObservableEnsemble::sample ( )
inline
293 {
295 auto& subSpace = subSpaces[m_L];
296 int const dim = subSpace.dim();
297 MatrixType res(dim, dim);
298 MatrixType op = m_mbGRME();
299 // std::cout << "observable sample:\n" << op << std::endl;
300
301 constexpr void (*kernel)(
302 Eigen::MatrixBase< std::remove_reference_t<decltype(*res.ptr())> >*,
303 Eigen::MatrixBase< std::remove_reference_t<decltype(*op.ptr())> > const*,
306 struct cudaFuncAttributes attr;
307 cuCHECK(cudaFuncGetAttributes(&attr, kernel));
308 int const nThread = min(dim, (int)sqrt(attr.maxThreadsPerBlock));
309 int const nBlock = (int)(dim % nThread == 0 ? dim / nThread : dim / nThread + 1);
310 debug_print(__func__ << ":\t subSpace.dim()=" << dim << ", nBlock=" << nBlock
311 << ", nThread=" << nThread);
312
314 kernel<<<dim3(nBlock, nBlock, 1), dim3(nThread, nThread, 1)>>>(res.ptr(), op.ptr(),
315 dSubSpace.ptr());
316 cuCHECK(cudaDeviceSynchronize());
317
318 // std::cout << "observable res:\n" << res << std::endl;
319 return res;
320 }

◆ sample() [7/7]

MatrixType ObservableEnsemble::sample ( )
inline
241 {
243 auto& subSpaceBase = subSpaces[m_L].basis();
244 auto op = m_mbGRME();
245 // std::cout << "observable sample:\n" << op << std::endl;
246 MatrixType res = subSpaceBase.adjoint() * op * subSpaceBase;
247
248 // std::cout << "observable res:\n" << res << std::endl;
249 return res;
250 }

◆ stateSpace() [1/7]

StateSpace & ObservableEnsemble::stateSpace ( )
inline
174{ return m_stateSpace; }

◆ stateSpace() [2/7]

StateSpace & ObservableEnsemble::stateSpace ( )
inline
168{ return m_stateSpace; }

◆ stateSpace() [3/7]

auto & ObservableEnsemble::stateSpace ( )
inline
132{ return; }

◆ stateSpace() [4/7]

StateSpace & ObservableEnsemble::stateSpace ( )
inline
285{ return m_stateSpace; }

◆ stateSpace() [5/7]

StateSpace & ObservableEnsemble::stateSpace ( )
inline
204{ return m_stateSpace; }

◆ stateSpace() [6/7]

StateSpace & ObservableEnsemble::stateSpace ( )
inline
285{ return m_stateSpace; }

◆ stateSpace() [7/7]

StateSpace & ObservableEnsemble::stateSpace ( )
inline
233{ return m_stateSpace; }

◆ usage() [1/7]

static std::string ObservableEnsemble::usage ( size_t  nargs)
inlinestatic
142 {
143 std::string usage = "ObservableEnsemble Usage: ";
144 usage += std::to_string(nargs + 0) + ".(m) ";
145 return usage;
146 };
static constexpr size_t nargs(void)
Definition Ensemble.cuh:147
static std::string usage(size_t nargs)
Definition Ensemble.cuh:142

◆ usage() [2/7]

static std::string ObservableEnsemble::usage ( size_t  nargs)
inlinestatic
136 {
137 std::string usage = "ObservableEnsemble Usage: ";
138 usage += std::to_string(nargs + 0) + ".(m) ";
139 return usage;
140 };

◆ usage() [3/7]

static std::string ObservableEnsemble::usage ( size_t  nargs)
inlinestatic
101 {
102 std::string usage = "ObservableEnsemble Usage: ";
103 usage += std::to_string(nargs + 0) + ".(...) ";
104 // Add codes here
105 return usage;
106 };

◆ usage() [4/7]

static std::string ObservableEnsemble::usage ( size_t  nargs)
inlinestatic
253 {
254 std::string usage = "ObservableEnsemble Usage: ";
255 usage += std::to_string(nargs + 0) + ".(m) ";
256 return usage;
257 };

◆ usage() [5/7]

static std::string ObservableEnsemble::usage ( size_t  nargs)
inlinestatic
172 {
173 std::string usage = "ObservableEnsemble Usage: ";
174 usage += std::to_string(nargs + 0) + ".(m) ";
175 return usage;
176 };

◆ usage() [6/7]

static std::string ObservableEnsemble::usage ( size_t  nargs)
inlinestatic
253 {
254 std::string usage = "ObservableEnsemble Usage: ";
255 usage += std::to_string(nargs + 0) + ".(m) ";
256 return usage;
257 };

◆ usage() [7/7]

static std::string ObservableEnsemble::usage ( size_t  nargs)
inlinestatic
201 {
202 std::string usage = "ObservableEnsemble Usage: ";
203 usage += std::to_string(nargs + 0) + ".(m) ";
204 return usage;
205 };

Member Data Documentation

◆ class_M

size_t ObservableEnsemble::class_M = 0
static

◆ m_L

size_t ObservableEnsemble::m_L
private

◆ m_M

size_t ObservableEnsemble::m_M
private

◆ m_mbGRME [1/2]

GaussianRandomMatrixGenerator< OperatorSpace > ObservableEnsemble::m_mbGRME
private

◆ m_mbGRME [2/2]

GaussianRandomMatrixGenerator<OperatorSpace> ObservableEnsemble::m_mbGRME
private

◆ m_opSpace

OperatorSpace ObservableEnsemble::m_opSpace
private

◆ m_stateSpace

StateSpace ObservableEnsemble::m_stateSpace
private

The documentation for this class was generated from the following files: