MADNESS 0.10.1
madness::SVDTensor< T > Class Template Reference

#include <SVDTensor.h>

Inheritance diagram for madness::SVDTensor< T >:
Collaboration diagram for madness::SVDTensor< T >:

Public Member Functions

 SVDTensor ()
 SVDTensor (const long ndims, const long *dims)
 SVDTensor (const SRConf< T > &rhs)
 SVDTensor (const std::vector< long > &dims)
 SVDTensor (const SVDTensor< T > &rhs)=default
 SVDTensor (const Tensor< double > &weights, const Tensor< T > &vector1, const Tensor< T > &vector2, const long &ndim, const long *dims)
 SVDTensor (const Tensor< T > &rhs, const double eps)
void divide_and_conquer_reduce (const double &thresh)
 reduce the rank using a divide-and-conquer approach
SVDTensor< T > & emul (const SVDTensor< T > &other)
SVDTensor< T > & gaxpy (T alpha, const SVDTensor< T > &rhs, T beta)
long nCoeff () const
SVDTensor & operator= (const T &number)
void orthonormalize (const double &thresh)
void orthonormalize_random (const double &thresh)
long rank () const
void recompute_from_range (const Tensor< T > &range)
 compute an SVD from a given matrix and its range
void truncate_svd (const double &thresh)
Public Member Functions inherited from madness::SRConf< T >
 SRConf ()
 default ctor
 SRConf (const long &ndim, const long *dimensions, const long nci)
 SRConf (const long &ndim, const std::array< long, TENSOR_MAXDIM > &dimensions, const long nci)
 SRConf (const SRConf &rhs)=default
 copy ctor (tested); shallow copy
 SRConf (const Tensor< double > &weights, const std::vector< Tensor< T > > &vectors, const long &ndim, const long &dims, const long nci)
 ctor with provided weights and effective vectors; shallow copy
 SRConf (const Tensor< double > &weights, const tensorT &vector1, const tensorT &vector2, const long &ndim, const long *dims, const long nci)
 explicit ctor with two vectors (aka SVD), shallow
 ~SRConf ()
 dtor
void add_SVD (const SRConf< T > &rhs, const double &thresh)
 add two orthonormal configurations, yielding an optimal SVD decomposition
void append (const SRConf< T > &rhs, const double fac=1.0)
 append configurations of rhs to this
void append (const SRConf< T > &rhs, const double_complex fac=1.0)
const std::vector< Slice > & c0 (const int idim) const
 return a Slice that corresponds the that part of vector_ that holds coefficients
void clear ()
SRConf< T > copy_slice (const std::array< Slice, TENSOR_MAXDIM > &s) const
 return a slice of this (deep copy)
int dim_per_vector (int idim) const
 return the number of physical dimensions
SRConf< T > & emul (const SRConf< T > &other)
 perform elementwise Hadamard product
Tensor< T > flat_vector (const unsigned int &idim)
 return shallow copy of a slice of one of the vectors, flattened to (r,kVec)
const Tensor< T > flat_vector (const unsigned int &idim) const
 return shallow copy of a slice of one of the vectors, flattened to (r,kVec)
Tensor< T > flat_vector_with_weights (const int dim) const
 return flat (r,i) view of the tensor with the weights multiplied in
template<typename Q>
SRConf< TENSOR_RESULT_TYPE(T, Q)> general_transform (const Tensor< Q > c[]) const
const SRConf get_configs (const int &start, const int &end) const
bool has_data () const
 does this have any data?
bool has_no_data () const
 does this have any data?
bool has_structure () const
 return if this has a tensor structure (has not been flattened)
long kVec (const int idim) const
void make_empty_vectors_and_weights (const long rank)
std::array< std::array< long, TENSOR_MAXDIM >, 2 > make_vector_dimensions (const long rank) const
 deduce the dimensions of the left and right singular vectors from the tensor dimensions
Tensor< T > make_vector_with_weights (const int dim) const
SRConf & operator= (const SRConf &rhs)
 assignment operator (tested), shallow copy of vectors
SRConf & operator= (const T &number)
 assign a number to this;
long rank () const
 return the logicalrank
Tensor< T > reconstruct () const
 reconstruct this to return a full tensor
Tensor< T > & ref_vector (const unsigned int &idim)
 return reference to one of the vectors F
const Tensor< T > & ref_vector (const unsigned int &idim) const
 return reference to one of the vectors F
template<typename Archive>
void serialize (Archive &ar)
void set_size_and_dim (long ndim, long k)
void set_vectors_and_weights (const Tensor< typename Tensor< T >::scalar_type > &weights, const Tensor< T > &vector1, const Tensor< T > &vector2)
SRConf< T > transform_dir (const Tensor< T > &c, const int &axis) const
double weights (const unsigned int &i) const
 return the weight
Public Member Functions inherited from madness::BaseTensor
 BaseTensor ()
virtual ~BaseTensor ()
bool conforms (const BaseTensor *t) const
 Returns true if this and *t are the same shape and size.
long dim (int i) const
 Returns the size of dimension i.
const long * dims () const
 Returns the array of tensor dimensions.
long id () const
 Returns the typeid of the tensor (c.f., TensorTypeData<T> ).
bool iscontiguous () const
 Returns true if the tensor refers to contiguous memory locations.
long ndim () const
 Returns the number of dimensions in the tensor.
long size () const
 Returns the number of elements in the tensor.
long stride (int i) const
 Returns the stride associated with dimension i.
const long * strides () const
 Returns the array of tensor strides.

Static Public Member Functions

static SVDTensor compute_randomized_svd (const Tensor< T > &tensor, const double &eps, std::array< long, 2 > vectordim={0, 0})
 reduce the rank using SVD
static SVDTensor compute_svd (const Tensor< T > &tensor, const double &eps, std::array< long, 2 > vectordim={0, 0})
 reduce the rank using SVD
static SVDTensor compute_svd_from_range (const Tensor< T > &range, const Tensor< T > &matrix)
 compute an SVD from a given matrix and its range
static SVDTensor< T > concatenate (const std::list< SVDTensor< T > > &addends)
 concatenate all arguments into a single SRConf (i.e. adding them all up)
static std::string reduction_algorithm ()
static void set_reduction_algorithm (const std::string alg)
Static Public Member Functions inherited from madness::SRConf< T >
static int max_sigma (const double &thresh, const long &rank, const Tensor< double > &w)
Static Public Member Functions inherited from madness::BaseTensor
static int get_instance_count ()
 Returns the count of all current instances of tensors & slice tensors of all types.

Friends

SVDTensor< T > copy (const SVDTensor< T > &rhs)
template<typename R, typename Q>
SVDTensor< TENSOR_RESULT_TYPE(R, Q)> general_transform (const SVDTensor< R > &t, const Tensor< Q > c[])
template<typename R, typename Q>
SVDTensor< TENSOR_RESULT_TYPE(R, Q)> outer (const SVDTensor< R > &t1, const SVDTensor< Q > &t2)
SVDTensor< T > reduce (std::list< SVDTensor< T > > &addends, double eps)
template<typename R, typename Q>
SVDTensor< TENSOR_RESULT_TYPE(R, Q)> transform (const SVDTensor< R > &t, const Tensor< Q > &c)
template<typename R, typename Q>
SVDTensor< TENSOR_RESULT_TYPE(R, Q)> transform_dir (const SVDTensor< R > &t, const Tensor< Q > &c, const int axis)

Additional Inherited Members

Public Types inherited from madness::SRConf< T >
typedef Tensor< T > tensorT
Public Attributes inherited from madness::SRConf< T >
long nci_left = -1
 separation dimensions: A(n,m) -> A(r,n) B(r,m), with n={k1,k2},m={k3,k4,k5..) multi-indices
std::vector< Slice > s0
std::vector< Slice > s1
std::array< Tensor< T >, 2 > vector_
Tensor< typename Tensor< T >::scalar_type > weights_
 for each configuration the weight; length should be r
Static Public Attributes inherited from madness::SRConf< T >
static const long check_orthonormality_frequency = 100000
 check orthonormality at low rank additions at every xth addition
Protected Member Functions inherited from madness::SRConf< T >
bool check_dimensions () const
bool check_vector_orthonormality (const int ivec) const
 check if the terms are orthogonal
void inplace_add (const SRConf< T > &rhs, std::array< Slice, TENSOR_MAXDIM > lhs_s, std::array< Slice, TENSOR_MAXDIM > rhs_s, const double alpha, const double beta)
 alpha * this(lhs_s) + beta * rhs(rhs_s)
bool is_flat () const
 return if this has only one additional dimension (apart from rank)
Tensor< T > make_left_vector_with_weights () const
void make_slices ()
 redo the Slices for getting direct access to the configurations
std::array< std::vector< Slice >, 2 > make_slices (const std::array< Slice, TENSOR_MAXDIM > &s) const
void make_structure (bool force=false)
unsigned int nCoeff () const
 return the number of coefficients
void normalize ()
 normalize the vectors (tested)
TensorTypeData< T >::float_scalar_type normf () const
 calculate the Frobenius norm
size_t real_size () const
 return the real size of this
void scale (const double &fac)
 scale this by a number
void scale (const double_complex &fac)
TensorTypeData< T >::float_scalar_type svd_normf () const
 calculate the Frobenius norm, if this is in SVD form
template<typename Q>
std::enable_if<!(TensorTypeData< T >::iscomplexorTensorTypeData< Q >::iscomplex), TENSOR_RESULT_TYPE(T, Q)>::type friend trace (const SRConf< T > &rhs, const SRConf< Q > &lhs)
 calculate the Frobenius inner product (tested)
template<typename Q>
std::enable_if<(TensorTypeData< T >::iscomplexorTensorTypeData< Q >::iscomplex), TENSOR_RESULT_TYPE(T, Q)>::type friend trace (const SRConf< T > &rhs, const SRConf< Q > &lhs)
SRConf< T > transform (const Tensor< T > &c) const
Protected Member Functions inherited from madness::BaseTensor
void cycledim_inplace (long shift, long start, long end)
 Cyclic shift of dimensions.
void flat_inplace ()
 Reshapes the tensor inplace into 1D.
void fusedim_inplace (long i)
 Fuses dimensions i and i+1.
void mapdim_inplace (const std::vector< long > &map)
 General permutation of dimensions.
void reshape_inplace (const std::vector< long > &d)
 Reshapes the tensor inplace.
void reshape_inplace (int ndimnew, const long *d)
 Reshapes the tensor inplace.
void set_dims_and_size (long nd, const long d[])
void splitdim_inplace (long i, long dimi0, long dimi1)
 Splits dimension i.
void swapdim_inplace (long i, long j)
 Swaps the dimensions.
Protected Attributes inherited from madness::BaseTensor
long _dim [TENSOR_MAXDIM]
 Size of each dimension.
long _id
 Id from TensorTypeData<T> in type_data.h.
long _ndim
 Number of dimensions (-1=invalid; 0=no supported; >0=tensor).
long _size
 Number of elements in the tensor.
long _stride [TENSOR_MAXDIM]
 Increment between elements in each dimension.

Constructor & Destructor Documentation

◆ SVDTensor() [1/7]

◆ SVDTensor() [2/7]

template<typename T>
madness::SVDTensor< T >::SVDTensor ( const Tensor< T > & rhs,
const double eps )
inline

◆ SVDTensor() [3/7]

template<typename T>
madness::SVDTensor< T >::SVDTensor ( const SVDTensor< T > & rhs)
default

References SVDTensor().

◆ SVDTensor() [4/7]

template<typename T>
madness::SVDTensor< T >::SVDTensor ( const SRConf< T > & rhs)
inline

◆ SVDTensor() [5/7]

template<typename T>
madness::SVDTensor< T >::SVDTensor ( const std::vector< long > & dims)
inline

◆ SVDTensor() [6/7]

template<typename T>
madness::SVDTensor< T >::SVDTensor ( const long ndims,
const long * dims )
inline

◆ SVDTensor() [7/7]

template<typename T>
madness::SVDTensor< T >::SVDTensor ( const Tensor< double > & weights,
const Tensor< T > & vector1,
const Tensor< T > & vector2,
const long & ndim,
const long * dims )
inline

Member Function Documentation

◆ compute_randomized_svd()

◆ compute_svd()

◆ compute_svd_from_range()

template<typename T>
SVDTensor< T > madness::SVDTensor< T >::compute_svd_from_range ( const Tensor< T > & range,
const Tensor< T > & matrix )
static

◆ concatenate()

◆ divide_and_conquer_reduce()

◆ emul()

template<typename T>
SVDTensor< T > & madness::SVDTensor< T >::emul ( const SVDTensor< T > & other)
inline

◆ gaxpy()

template<typename T>
SVDTensor< T > & madness::SVDTensor< T >::gaxpy ( T alpha,
const SVDTensor< T > & rhs,
T beta )
inline

◆ nCoeff()

template<typename T>
long madness::SVDTensor< T >::nCoeff ( ) const
inline

◆ operator=()

template<typename T>
SVDTensor & madness::SVDTensor< T >::operator= ( const T & number)
inline

◆ orthonormalize()

◆ orthonormalize_random()

◆ rank()

◆ recompute_from_range()

template<typename T>
void madness::SVDTensor< T >::recompute_from_range ( const Tensor< T > & range)

◆ reduction_algorithm()

template<typename T>
std::string madness::SVDTensor< T >::reduction_algorithm ( )
static

References madness::reduction_alg.

Referenced by reduce.

◆ set_reduction_algorithm()

template<typename T>
void madness::SVDTensor< T >::set_reduction_algorithm ( const std::string alg)
static

◆ truncate_svd()

◆ copy

template<typename T>
SVDTensor< T > copy ( const SVDTensor< T > & rhs)
friend

References madness::SRConf< T >::SRConf(), SVDTensor(), and copy.

Referenced by copy.

◆ general_transform

template<typename T>
template<typename R, typename Q>
SVDTensor< TENSOR_RESULT_TYPE(R, Q)> general_transform ( const SVDTensor< R > & t,
const Tensor< Q > c[] )
friend

References SVDTensor(), c, general_transform, Q(), and R.

Referenced by general_transform.

◆ outer

template<typename T>
template<typename R, typename Q>
SVDTensor< TENSOR_RESULT_TYPE(R, Q)> outer ( const SVDTensor< R > & t1,
const SVDTensor< Q > & t2 )
friend

References SVDTensor(), Q(), and R.

◆ reduce

template<typename T>
SVDTensor< T > reduce ( std::list< SVDTensor< T > > & addends,
double eps )
friend

◆ transform

template<typename T>
template<typename R, typename Q>
SVDTensor< TENSOR_RESULT_TYPE(R, Q)> transform ( const SVDTensor< R > & t,
const Tensor< Q > & c )
friend

References SVDTensor(), c, Q(), R, and transform.

Referenced by transform.

◆ transform_dir

template<typename T>
template<typename R, typename Q>
SVDTensor< TENSOR_RESULT_TYPE(R, Q)> transform_dir ( const SVDTensor< R > & t,
const Tensor< Q > & c,
const int axis )
friend

References SVDTensor(), axis, c, Q(), R, and transform_dir.

Referenced by transform_dir.


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