pomerol  2.1
Data Structures | Public Types | Public Member Functions
Pomerol::HilbertSpace< IndexTypes > Class Template Reference

Hilbert space of a quantum system. More...

#include <HilbertSpace.hpp>

Inheritance diagram for Pomerol::HilbertSpace< IndexTypes >:
Inheritance graph
[legend]
Collaboration diagram for Pomerol::HilbertSpace< IndexTypes >:
Collaboration graph
[legend]

Public Types

using FullHilbertSpaceType = libcommute::hilbert_space< IndexTypes... >
 Type of the full Hilbert space. More...
 
using SpacePartitionType = libcommute::space_partition
 Type of the partition into invariant subspaces. More...
 
- Public Types inherited from Pomerol::ComputableObject
enum  StatusEnum { Constructed, Prepared, Computed }
 Computation status of the object. More...
 

Public Member Functions

template<typename ScalarType >
 HilbertSpace (IndexClassification< IndexTypes... > const &IndexInfo, Operators::expression< ScalarType, IndexTypes... > const &H, unsigned int bits_per_boson=1)
 
template<typename ScalarType >
 HilbertSpace (IndexClassification< IndexTypes... > const &IndexInfo, Operators::expression< ScalarType, IndexTypes... > const &H, std::map< std::tuple< IndexTypes... >, unsigned int > const &bits_per_boson_map)
 
void compute ()
 
IndexClassification< IndexTypes... > const & getIndexInfo () const
 Access the IndexClassification object used to construct this Hilbert space. More...
 
FullHilbertSpaceType const & getFullHilbertSpace () const
 Access the full Hilbert space object. More...
 
SpacePartitionType const & getSpacePartition () const
 
- Public Member Functions inherited from Pomerol::ComputableObject
 ComputableObject ()=default
 
StatusEnum getStatus () const
 Return the current computation status. More...
 
void setStatus (StatusEnum Status_in)
 

Additional Inherited Members

- Protected Attributes inherited from Pomerol::ComputableObject
StatusEnum Status = Constructed
 Current computation status. More...
 

Detailed Description

template<typename... IndexTypes>
class Pomerol::HilbertSpace< IndexTypes >

Hilbert space of a quantum system.

A thin wrapper around libcommute's hilbert_space (information about a finite-dimensional state space) and space_partition (partition of the full state space into invariant subspaces of a Hamiltonian).

Template Parameters
IndexTypesTypes of indices carried by operators acting in this Hilbert space.

Definition at line 49 of file HilbertSpace.hpp.

Member Typedef Documentation

◆ FullHilbertSpaceType

template<typename... IndexTypes>
using Pomerol::HilbertSpace< IndexTypes >::FullHilbertSpaceType = libcommute::hilbert_space<IndexTypes...>

Type of the full Hilbert space.

Definition at line 53 of file HilbertSpace.hpp.

◆ SpacePartitionType

template<typename... IndexTypes>
using Pomerol::HilbertSpace< IndexTypes >::SpacePartitionType = libcommute::space_partition

Type of the partition into invariant subspaces.

Definition at line 55 of file HilbertSpace.hpp.

Constructor & Destructor Documentation

◆ HilbertSpace() [1/2]

template<typename... IndexTypes>
template<typename ScalarType >
Pomerol::HilbertSpace< IndexTypes >::HilbertSpace ( IndexClassification< IndexTypes... > const &  IndexInfo,
Operators::expression< ScalarType, IndexTypes... > const &  H,
unsigned int  bits_per_boson = 1 
)
inline

Construct a full Hilbert space from an IndexClassification object and a polynomial expression of system's Hamiltonian. The Hilbert space is constructed as a direct product of elementary spaces, each associated with a single fermionic or bosonic degree of freedom (an index tuple carried by a boson creation/annihilation operator).

Template Parameters
ScalarTypeCoefficient type of expression H.
Parameters
[in]IndexInfoMap for fermionic operator index tuples.
[in]HHamiltonian of the system.
[in]bits_per_bosonEach bosonic degree of freedom will result in a truncated elementary bosonic space of dimension \(2^\verb|bits_per_boson|\).

Definition at line 110 of file HilbertSpace.hpp.

◆ HilbertSpace() [2/2]

template<typename... IndexTypes>
template<typename ScalarType >
Pomerol::HilbertSpace< IndexTypes >::HilbertSpace ( IndexClassification< IndexTypes... > const &  IndexInfo,
Operators::expression< ScalarType, IndexTypes... > const &  H,
std::map< std::tuple< IndexTypes... >, unsigned int > const &  bits_per_boson_map 
)
inline

Construct a full Hilbert space from an IndexClassification object and a polynomial expression of system's Hamiltonian. The Hilbert space is constructed as a direct product of elementary spaces, each associated with a single fermionic or bosonic degree of freedom (an index tuple carried by a boson creation/annihilation operator).

Template Parameters
ScalarTypeCoefficient type of expression H.
Parameters
[in]IndexInfoMap for fermionic operator index tuples.
[in]HHamiltonian of the system.
[in]bits_per_boson_mapA bosonic degree of freedom with a certain operator index tuple will result in a truncated elementary bosonic space of dimension \(2^b\), where \(b\) is the value in this map corresponding to the index tuple. If the tuple is missing from the map, \(b\) is taken to be 1.

Definition at line 130 of file HilbertSpace.hpp.

Member Function Documentation

◆ compute()

template<typename... IndexTypes>
void Pomerol::HilbertSpace< IndexTypes >::compute ( )
inline

Find a partition of the full Hilbert space into invariant subspaces of the Hamiltonian. The partition fulfills an additional requirement that all fermionic creation/annihilation operators connect one invariant subspace to at most one subspace.

Definition at line 141 of file HilbertSpace.hpp.

◆ getFullHilbertSpace()

template<typename... IndexTypes>
FullHilbertSpaceType const& Pomerol::HilbertSpace< IndexTypes >::getFullHilbertSpace ( ) const
inline

Access the full Hilbert space object.

Definition at line 172 of file HilbertSpace.hpp.

◆ getIndexInfo()

template<typename... IndexTypes>
IndexClassification<IndexTypes...> const& Pomerol::HilbertSpace< IndexTypes >::getIndexInfo ( ) const
inline

Access the IndexClassification object used to construct this Hilbert space.

Definition at line 169 of file HilbertSpace.hpp.

◆ getSpacePartition()

template<typename... IndexTypes>
SpacePartitionType const& Pomerol::HilbertSpace< IndexTypes >::getSpacePartition ( ) const
inline

Access the space partition object.

Precondition
compute() has been called.

Definition at line 176 of file HilbertSpace.hpp.


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