StatMech
Loading...
Searching...
No Matches
GaussianRandomMatrixGenerator< Derived, > Class Template Reference

#include <RandomMatrix.hpp>

Collaboration diagram for GaussianRandomMatrixGenerator< Derived, >:
Collaboration graph

Public Member Functions

 GaussianRandomMatrixGenerator (Derived const &opSpace, int seed=0, RealScalar stddev=1.0)
 
 GaussianRandomMatrixGenerator ()=default
 Default constructor.
 
 GaussianRandomMatrixGenerator (GaussianRandomMatrixGenerator const &other)=delete
 Copy constructor.
 
 GaussianRandomMatrixGenerator (GaussianRandomMatrixGenerator &&other)=default
 Move constructor.
 
 ~GaussianRandomMatrixGenerator ()=default
 Destructor.
 
Operator overloads
__host__ __device__ GaussianRandomMatrixGeneratoroperator= (GaussianRandomMatrixGenerator const &other)=delete
 Copy assignment operator.
 
__host__ __device__ GaussianRandomMatrixGeneratoroperator= (GaussianRandomMatrixGenerator &&other)=default
 Move assignment operator.
 
void reset ()
 
void discard (unsigned long long num)
 Discards random numbers to advance internal states of the random number generator.
 
Eigen::MatrixX< Scalaroperator() ()
 Generates an instance of a random matrix.
 

Private Types

using Scalar = typename Derived::Scalar
 
using RealScalar = typename Eigen::NumTraits< typename Derived::Scalar >::Real
 

Private Attributes

Derived m_opSpace
 
int m_seed
 
std::mt19937 mt
 
std::normal_distribution< double > Gaussian
 
unsigned long long count
 

Member Typedef Documentation

◆ RealScalar

template<class Derived , typename std::enable_if_t< std::is_convertible_v< Derived, OperatorSpaceBase< Derived > > > * = nullptr>
using GaussianRandomMatrixGenerator< Derived, >::RealScalar = typename Eigen::NumTraits<typename Derived::Scalar>::Real
private

◆ Scalar

template<class Derived , typename std::enable_if_t< std::is_convertible_v< Derived, OperatorSpaceBase< Derived > > > * = nullptr>
using GaussianRandomMatrixGenerator< Derived, >::Scalar = typename Derived::Scalar
private

Constructor & Destructor Documentation

◆ GaussianRandomMatrixGenerator() [1/4]

template<class Derived , typename std::enable_if_t< std::is_convertible_v< Derived, OperatorSpaceBase< Derived > > > * = nullptr>
GaussianRandomMatrixGenerator< Derived, >::GaussianRandomMatrixGenerator ( Derived const &  opSpace,
int  seed = 0,
RealScalar  stddev = 1.0 
)
inline
21 : m_opSpace{opSpace}, m_seed(seed), mt(seed), Gaussian{0.0, stddev}, count{0} {}
std::mt19937 mt
Definition RandomMatrix.hpp:15
Derived m_opSpace
Definition RandomMatrix.hpp:13
unsigned long long count
Definition RandomMatrix.hpp:17
int m_seed
Definition RandomMatrix.hpp:14
std::normal_distribution< double > Gaussian
Definition RandomMatrix.hpp:16

◆ GaussianRandomMatrixGenerator() [2/4]

template<class Derived , typename std::enable_if_t< std::is_convertible_v< Derived, OperatorSpaceBase< Derived > > > * = nullptr>
GaussianRandomMatrixGenerator< Derived, >::GaussianRandomMatrixGenerator ( )
default

Default constructor.

◆ GaussianRandomMatrixGenerator() [3/4]

template<class Derived , typename std::enable_if_t< std::is_convertible_v< Derived, OperatorSpaceBase< Derived > > > * = nullptr>
GaussianRandomMatrixGenerator< Derived, >::GaussianRandomMatrixGenerator ( GaussianRandomMatrixGenerator< Derived, > const &  other)
delete

Copy constructor.

Parameters
other

◆ GaussianRandomMatrixGenerator() [4/4]

template<class Derived , typename std::enable_if_t< std::is_convertible_v< Derived, OperatorSpaceBase< Derived > > > * = nullptr>
GaussianRandomMatrixGenerator< Derived, >::GaussianRandomMatrixGenerator ( GaussianRandomMatrixGenerator< Derived, > &&  other)
default

Move constructor.

Parameters
other

◆ ~GaussianRandomMatrixGenerator()

template<class Derived , typename std::enable_if_t< std::is_convertible_v< Derived, OperatorSpaceBase< Derived > > > * = nullptr>
GaussianRandomMatrixGenerator< Derived, >::~GaussianRandomMatrixGenerator ( )
default

Destructor.

Member Function Documentation

◆ discard()

template<class Derived , typename std::enable_if_t< std::is_convertible_v< Derived, OperatorSpaceBase< Derived > > > * = nullptr>
void GaussianRandomMatrixGenerator< Derived, >::discard ( unsigned long long  num)
inline

Discards random numbers to advance internal states of the random number generator.

Parameters
numNumber of random numbers to be discarded
76 {
77 for(auto j = 0; j < num * m_opSpace.dim(); ++j) Gaussian(mt);
78 count += num * m_opSpace.dim();
79 }

◆ operator()()

template<class Derived , typename std::enable_if_t< std::is_convertible_v< Derived, OperatorSpaceBase< Derived > > > * = nullptr>
Eigen::MatrixX< Scalar > GaussianRandomMatrixGenerator< Derived, >::operator() ( )
inline

Generates an instance of a random matrix.

Parameters
[out]matMatrix to which the generated matrix is assigned
85 {
86 Eigen::VectorXd coeff;
87 coeff = coeff.NullaryExpr(m_opSpace.dim(), [&]() { return Gaussian(mt); });
88 // std::cout << coeff << std::endl;
89
90 Eigen::MatrixX<Scalar> sample
91 = Eigen::MatrixX<Scalar>::Zero(m_opSpace.baseDim(), m_opSpace.baseDim());
92// #pragma omp declare reduction(+ : Eigen::MatrixX<Scalar> : omp_out=omp_out+omp_in) initializer(omp_priv = omp_orig)
93// #pragma omp parallel for reduction(+ : sample)
94 for(auto j = 0; j < m_opSpace.dim(); ++j) { sample += coeff(j) * m_opSpace.basisOp(j); }
95
96 count += m_opSpace.dim();
97 return sample;
98 }

◆ operator=() [1/2]

template<class Derived , typename std::enable_if_t< std::is_convertible_v< Derived, OperatorSpaceBase< Derived > > > * = nullptr>
__host__ __device__ GaussianRandomMatrixGenerator & GaussianRandomMatrixGenerator< Derived, >::operator= ( GaussianRandomMatrixGenerator< Derived, > &&  other)
default

Move assignment operator.

Parameters
other

◆ operator=() [2/2]

template<class Derived , typename std::enable_if_t< std::is_convertible_v< Derived, OperatorSpaceBase< Derived > > > * = nullptr>
__host__ __device__ GaussianRandomMatrixGenerator & GaussianRandomMatrixGenerator< Derived, >::operator= ( GaussianRandomMatrixGenerator< Derived, > const &  other)
delete

Copy assignment operator.

Parameters
other

◆ reset()

template<class Derived , typename std::enable_if_t< std::is_convertible_v< Derived, OperatorSpaceBase< Derived > > > * = nullptr>
void GaussianRandomMatrixGenerator< Derived, >::reset ( )
inline
69{ mt = std::mt19937(m_seed); }

Member Data Documentation

◆ count

template<class Derived , typename std::enable_if_t< std::is_convertible_v< Derived, OperatorSpaceBase< Derived > > > * = nullptr>
unsigned long long GaussianRandomMatrixGenerator< Derived, >::count
mutableprivate

◆ Gaussian

template<class Derived , typename std::enable_if_t< std::is_convertible_v< Derived, OperatorSpaceBase< Derived > > > * = nullptr>
std::normal_distribution<double> GaussianRandomMatrixGenerator< Derived, >::Gaussian
private

◆ m_opSpace

template<class Derived , typename std::enable_if_t< std::is_convertible_v< Derived, OperatorSpaceBase< Derived > > > * = nullptr>
Derived GaussianRandomMatrixGenerator< Derived, >::m_opSpace
private

◆ m_seed

template<class Derived , typename std::enable_if_t< std::is_convertible_v< Derived, OperatorSpaceBase< Derived > > > * = nullptr>
int GaussianRandomMatrixGenerator< Derived, >::m_seed
private

◆ mt

template<class Derived , typename std::enable_if_t< std::is_convertible_v< Derived, OperatorSpaceBase< Derived > > > * = nullptr>
std::mt19937 GaussianRandomMatrixGenerator< Derived, >::mt
private

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