C++QEDCore  v2 Milestone 10
a framework for simulating open quantum dynamics – core
quantumdata::DensityOperator< RANK > Class Template Reference

Density operator of arbitrary arity. More...

#include <DensityOperator.h>

+ Inheritance diagram for quantumdata::DensityOperator< RANK >:
+ Collaboration diagram for quantumdata::DensityOperator< RANK >:

Public Types

typedef LazyDensityOperator< RANK > LDO_Base
 
typedef ArrayBase< 2 *RANK > ABase
 
typedef LDO_Base::Dimensions Dimensions
 
typedef LDO_Base::Idx Idx
 
typedef ABase::ArrayLow DensityOperatorLow
 
typedef linalg::CMatrix CMatrix
 
- Public Types inherited from quantumdata::LazyDensityOperator< RANK >
typedef boost::shared_ptr< const LazyDensityOperatorPtr
 Many class templates in the framework define shared pointers to their own types, in a template-metafunction like manner.
 
typedef DimensionsBookkeeper< RANK, true > Base
 
typedef Base::Dimensions Dimensions
 Inherited from DimensionsBookkeeper.
 
typedef IdxTiny< RANK > Idx
 The type used for indexing the “rows” and the “columns”: a tiny vector of integers (multi-index)
 
- Public Types inherited from DimensionsBookkeeper< RANK, true >
typedef ExtTiny< RANK > Dimensions
 The dimensions as a static vector of size N_RANK.
 

Public Member Functions

 DensityOperator (const DensityOperatorLow &, ByReference)
 Referencing constructor implemented in terms of blitzplusplus::halfCutTiny.
 
 DensityOperator (const Dimensions &, bool init=true)
 
 DensityOperator (const StateVector< RANK > &psi)
 Constructs the class as a dyadic product of psi with itself.
 
 DensityOperator (const DensityOperator &)
 By-value copy constructor (deep copy)
 
DensityOperatoroperator= (const DensityOperator &rho)
 Default assignment doesn't work, because LazyDensityOperator is always purely constant (const DimensionsBookkeeper base)
 
template<typename OTHER >
DensityOperatoroperator= (const OTHER &other)
 
(Multi-)matrix style indexing
const IndexerProxy operator() (const Idx &firstIndex) const
 
IndexerProxy operator() (const Idx &firstIndex)
 
template<typename... SubscriptPack>
const IndexerProxy operator() (int s0, SubscriptPack...subscriptPack) const
 
template<typename... SubscriptPack>
IndexerProxy operator() (int s0, SubscriptPack...subscriptPack)
 
Norm
double norm () const
 returns the trace “norm”
 
double renorm ()
 ” and also renormalises
 
Matrix view
const CMatrix matrixView () const
 returns a two-dimensional view of the underlying data, created on the fly via blitzplusplus::binaryArray
 
CMatrix matrixView ()
 
 
Naive operations for vector space
DensityOperatoroperator+= (const DensityOperator &rho)
 
DensityOperatoroperator-= (const DensityOperator &rho)
 
const DensityOperator operator- () const
 
const DensityOperator operator+ () const
 
template<typename OTHER >
DensityOperatoroperator*= (const OTHER &dc)
 
template<typename OTHER >
DensityOperatoroperator/= (const OTHER &dc)
 
- Public Member Functions inherited from quantumdata::LazyDensityOperator< RANK >
const IndexerProxy operator() (const Idx &firstIndex) const
 Multi-matrix style indexing via Idx type.
 
template<typename... SubscriptPack>
const IndexerProxy operator() (int s0, SubscriptPack...subscriptPack) const
 Multi-matrix style indexing via packs of integers. More...
 
double trace () const
 Returns the trace (redirected to a pure virtual)
 
template<typename V >
const ldo::DiagonalIterator< RANK, V > begin () const
 Return the ldo::DiagonalIterator corresponding to the beginning of the sequence of slices defined by V More...
 
template<typename V >
const ldo::DiagonalIterator< RANK, V > end () const
 ” for the end
 
- Public Member Functions inherited from DimensionsBookkeeper< RANK, true >
 DimensionsBookkeeper (mpl::bool_< IS_CONST >=mpl::false_())
 Constructor usable only in the IS_CONST=false case. More...
 
 DimensionsBookkeeper (const Dimensions &dimensions)
 Standard constructor usable also in the IS_CONST=true case.
 
const DimensionsgetDimensions () const
 Get the Dimensions vector.
 
size_t getTotalDimension () const
 Get the total dimension of a system of arbitrary arity.
 
size_t getDimension (mpl::int_< RANK >=mpl::int_< 1 >()) const
 Get the (single) dimension for a unary system.
 
size_t getDimension (size_t i) const
 
void setDimensions (const Dimensions &dimensions)
 This will work only in the non-const case.
 

Static Public Attributes

static const int N_RANK =RANK
 
- Static Public Attributes inherited from DimensionsBookkeeper< RANK, true >
static const int N_RANK
 Arity of the Hilbert space.
 
static const int DIMESIONS_BOOKKEEPER_RANK
 Ditto (to break ambiguity if a class is derived from another base featuring N_RANK).
 

Friends

class IndexerProxy
 

Additional Inherited Members

- Protected Member Functions inherited from quantumdata::LazyDensityOperator< RANK >
 LazyDensityOperator (const Dimensions &dims)
 

Detailed Description

template<int RANK>
class quantumdata::DensityOperator< RANK >

Density operator of arbitrary arity.

Cf. rationale

Template Parameters
RANKarity of the Hilbert space

The DensityOperator interface is similar to StateVector with obvious differences.

Note
A DensityOperator <RANK> represents a density operator on a Hilbert space of arity RANK. This makes that the number of its indices is actually 2*RANK. This is the reason why it inherits from quantumdata::ArrayBase <2*RANK>.
Todo:
provide a move constructor

Definition at line 54 of file DensityOperator.h.


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