pomerol  2.1
Data Structures | Typedefs | Functions | Variables
Exact diagonalization: Hilbert space, Hamiltonian, monomial operators and density matrix

Data Structures

class  Pomerol::DensityMatrix
 Many-body Gibbs density matrix. More...
 
class  Pomerol::DensityMatrixPart
 Part of a many-body Gibbs density matrix. More...
 
class  Pomerol::FieldOperatorContainer
 Container for instances of CreationOperator and AnnihilationOperator. More...
 
class  Pomerol::Hamiltonian
 Hamiltonian of a quantum system. More...
 
class  Pomerol::HamiltonianPart
 Part of a Hamiltonian of a quantum system. More...
 
class  Pomerol::HilbertSpace< IndexTypes >
 Hilbert space of a quantum system. More...
 
class  Pomerol::IndexClassification< IndexTypes >
 Contiguous list of operator index tuples. More...
 
class  Pomerol::MonomialOperator
 Monomial quantum operator. More...
 
class  Pomerol::CreationOperator
 A special case of a monomial operator: A single fermion creation operator \(c^\dagger_i\). More...
 
class  Pomerol::AnnihilationOperator
 A special case of a monomial operator: A single fermion annihilation operator \(c_i\). More...
 
class  Pomerol::QuadraticOperator
 
class  Pomerol::MonomialOperatorPart
 Part of a monomial quantum operator. More...
 
class  Pomerol::StatesClassification
 Classification of many-body basis states into bases of invariant subspaces. More...
 

Typedefs

using Pomerol::BlockMapping = std::pair< BlockNumber, BlockNumber >
 A pair of invariant subspace indices. More...
 
using Pomerol::BlockNumber = int
 Index of a subspace (block) within a full many-body Hilbert space. More...
 
using Pomerol::InnerQuantumState = libcommute::sv_index_type
 Index of a state within a block. More...
 

Functions

template<typename ScalarType , typename... IndexTypes>
HilbertSpace< IndexTypes... > Pomerol::MakeHilbertSpace (IndexClassification< IndexTypes... > const &IndexInfo, Operators::expression< ScalarType, IndexTypes... > const &H, unsigned int bits_per_boson=1)
 
template<typename ScalarType , typename... IndexTypes>
HilbertSpace< IndexTypes... > Pomerol::MakeHilbertSpace (IndexClassification< IndexTypes... > const &IndexInfo, Operators::expression< ScalarType, IndexTypes... > const &H, std::map< std::tuple< IndexTypes... >, unsigned int > const &bits_per_boson_map)
 
template<typename ScalarType , typename... IndexTypes>
IndexClassification< IndexTypes... > Pomerol::MakeIndexClassification (Operators::expression< ScalarType, IndexTypes... > const &H)
 
template<typename ScalarType , typename... IndexTypes>
void Pomerol::Hamiltonian::prepare (Operators::expression< ScalarType, IndexTypes... > const &H, HilbertSpace< IndexTypes... > const &HS, MPI_Comm const &comm=MPI_COMM_WORLD)
 

Variables

constexpr BlockNumber Pomerol::INVALID_BLOCK_NUMBER = -1
 A special value that stands for a non-existent subspace (block). More...
 

Detailed Description

Typedef Documentation

◆ BlockMapping

using Pomerol::BlockMapping = typedef std::pair<BlockNumber, BlockNumber>

A pair of invariant subspace indices.

Definition at line 48 of file MonomialOperator.hpp.

◆ BlockNumber

using Pomerol::BlockNumber = typedef int

Index of a subspace (block) within a full many-body Hilbert space.

Definition at line 32 of file StatesClassification.hpp.

◆ InnerQuantumState

using Pomerol::InnerQuantumState = typedef libcommute::sv_index_type

Index of a state within a block.

Definition at line 37 of file StatesClassification.hpp.

Function Documentation

◆ MakeHilbertSpace() [1/2]

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

A factory function for HilbertSpace that constructs it 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 212 of file HilbertSpace.hpp.

◆ MakeHilbertSpace() [2/2]

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

A factory function for HilbertSpace that constructs it 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 193 of file HilbertSpace.hpp.

◆ MakeIndexClassification()

template<typename ScalarType , typename... IndexTypes>
IndexClassification<IndexTypes...> Pomerol::MakeIndexClassification ( Operators::expression< ScalarType, IndexTypes... > const &  H)

A factory function for IndexClassification, which populates the index map by extracting all index tuples from a given polynomial expression.

Template Parameters
ScalarTypeCoefficient type of expression H.
IndexTypesTypes of indices carried by a single creation/annihilation operator.
Parameters
[in]HExpression to be analyzed.

Definition at line 150 of file IndexClassification.hpp.

◆ prepare()

template<typename ScalarType , typename... IndexTypes>
void Pomerol::Hamiltonian::prepare ( Operators::expression< ScalarType, IndexTypes... > const &  H,
HilbertSpace< IndexTypes... > const &  HS,
MPI_Comm const &  comm = MPI_COMM_WORLD 
)

Fill matrices of all diagonal blocks in parallel.

Template Parameters
ScalarTypeScalar type (either double or std::complex<double>) of the expression H.
IndexTypesTypes of indices carried by operators in the expression H.
Parameters
[in]HExpression of the Hamiltonian.
[in]HSHilbert space.
[in]commMPI communicator used to parallelize the computation.

Definition at line 125 of file Hamiltonian.hpp.

Variable Documentation

◆ INVALID_BLOCK_NUMBER

constexpr BlockNumber Pomerol::INVALID_BLOCK_NUMBER = -1
constexpr

A special value that stands for a non-existent subspace (block).

Definition at line 34 of file StatesClassification.hpp.