SyTen
syten::MPS Namespace Reference

The namespace containing all MPS-related tools, classes and objects. More...

Namespaces

 DMRG
 MP-DMRG specific data structures and classes.
 
 Lat
 Contains all lattice generators.
 
 OperatorApplicators
 OperatorApplicator structs for TDVP and DMRG.
 
 ParseOperator
 Support classes and functions related to matrix product operator parsing.
 
 RandomState
 Generators for random states.
 
 TDVP
 TDVP Implementation.
 
 TEBD
 TEBD implementation, primarily by Felix.
 

Classes

class  Lattice
 Stores a physical lattice and associated operators and bases. More...
 
class  LBOState
 Matrix-product state with local basis optimisation (see Florian Dorfner's thesis). More...
 
class  Operator
 Matrix Product Operator. More...
 
class  State
 Matrix Product State with automatic caching. More...
 

Functions

void addScaled (LBOState &a, LBOState const &b, SDef const &s)
 Adds b, scaled by s, to a. More...
 
SRDef apply_op_itrunc (State &a, Operator const &op, Truncation trunc, bool const relax=true, bool const final_rightnorm=true)
 Applies the MPO op to the MPS a, immediately truncating during the application. More...
 
SRDef apply_op_itrunc (LBOState &a, Operator const &op, Truncation const &trunc, bool const relax=true, bool const final_rightnorm=true)
 Applies the operator op to the state a using a variant of the zip-up algorithm by Stoudenmire et. al. More...
 
SRDef apply_op_itrunc_fit (State &a, Operator const &op, Truncation trunc, SRDef desired_change, Index max_opt_sweeps)
 Applies the operator op onto the state a using the itrunc/zip-up method and then does some additional single-site optimisation sweeps on the result. More...
 
void apply_op_naive (State &a, Operator const &op)
 Applies the MPO op to the MPS a without truncation. More...
 
SRDef apply_op_naive (LBOState &a, Operator const &op)
 Naively applies the operator op to the state a. More...
 
template<typename Iterator = State*>
std::tuple< State, SRDefapply_op_orthogonalise_fit (State const &in, Operator const &op, Truncation const &trunc, SRDef desired_change, Index max_exp_sweeps=12, Index max_opt_sweeps=2, State res=State(), Iterator first=nullptr, Iterator last=nullptr)
 Applies the operator op to the state in while orthogonalising the result against states [first, last) and truncating with trunc. More...
 
template<typename Iterator = int>
std::tuple< LBOState, SRDefapply_op_orthogonalise_fit (LBOState const &, Operator const &, Truncation const &, SRDef, Index=12, Index=2, LBOState=LBOState(), Iterator=0, Iterator=0)
 Dummy implementation to satisfy the compiler, see syten::MPS::apply_op_orthogonalise_fit(). More...
 
MPS::Operator build_exchange_mpo_above (std::vector< Basis > const &lop_basis, Index const sa, Index const sb, Basis const &vac, std::vector< Pair< Index, Index > > const &fermions)
 Constructs a MPO acting from above which switches the two neighbouring sites sa and sb. More...
 
MPS::Operator build_exchange_mpo_below (std::vector< Basis > const &uop_basis, Index const sa, Index const sb, Basis const &vac, std::vector< Pair< Index, Index > > const &fermions)
 Behaves the same as build_exchange_mpo_above(), except that it constructs the MPO for application from below; hence also needs an outgoing basis vector to be supplied. More...
 
Pair< Tensor< 4 >, Tensor< 4 > > build_exchange_tensors_above (Basis const &a, Basis const &b, Basis const &vac, std::vector< Pair< Index, Index > > const &fermions)
 Given two incoming physical bases (upper indices of MPS or MPO), builds two active site tensors switching them around. More...
 
Pair< Tensor< 4 >, Tensor< 4 > > build_exchange_tensors_below (Basis const &a, Basis const &b, Basis const &vac, std::vector< Pair< Index, Index > > const &fermions)
 Behaves the same as build_exchange_tensors_above(), except that it constructs the tensors for application from below; hence also requires outgoing bases a, b to be supplied. More...
 
Operator coarse_grain (Operator const &op, std::ostream &out, bool collapse)
 Coarse-grains the operator op, returning a new operator of half the size. More...
 
Lattice coarse_grain (Lattice const &lat, std::ostream &out, bool collapse)
 Coarse-grains a lattice, returning a new lattice. More...
 
std::size_t distance (int s, int e)
 Overload of distance() for integers, used by apply_op_orthogonalise_fit(). More...
 
Operator dot (Operator const &a, Operator const &b, Sector const &target)
 Scalar product of two operators, i.e. the product of the operators projected on the supplied vacuum sector. More...
 
Operator dot (Operator const &a, Operator const &b)
 Scalar product of two operators. More...
 
void equiscale (Operator &op)
 Rescales all tensors of the MPO such that the 2-norms of no pair of tensors varies more than by a factor of two. More...
 
std::pair< SRDef, SRDeferror_estimate_2svariance (MPS::Operator const &op, MPS::Lattice const &lat, MPS::State &psi)
 Calculates the 2-site approximation of the variance of the operator op with respect to the state psi on the lattice lat. More...
 
bool expand_to_left_lbo (Tensor< 3 > const &right, Tensor< 4 > const &op, LBOState &target, Index const position, SRDef const alpha=0.1, Index const max_blocksize=15, SRDef const ratio=1., Index const min_blocksize=5)
 Expands the LBO leftwards from site position. More...
 
bool expand_to_right_lbo (Tensor< 3 > const &left, Tensor< 4 > const &op, LBOState &target, Index const position, SRDef const alpha=0.1, Index const max_blocksize=15, SRDef const ratio=1., Index const min_blocksize=5)
 Expands the LBO rightwards from site position. More...
 
bool expand_to_top (Tensor< 3 > const &left, Tensor< 3 > const &right, Tensor< 4 > const &op, LBOState &target, Index const position, SRDef const alpha=0.1, Index const max_blocksize=15, SRDef const ratio=1., Index const min_blocksize=5)
 Expands the LBO topwards from site position. More...
 
SDef expectation (State const &a, Operator const &op, State const &b)
 Returns the expectation value of an operator between two states as \(\langle b | \left(\hat O | a \rangle\right)\). More...
 
SDef expectation (State &&a, Operator const &op, State &&b)
 Returns the expectation value of an operator between two states as \(\langle b | \left(\hat O | a \rangle\right)\). More...
 
SDef expectation (State const &a, Operator const &op)
 Returns the expectation value of an MPS::Operator \(\hat O\) w.r.t. a MPS::State \(|a\rangle\), i.e. \(\langle a |\hat O|a \rangle\). More...
 
SDef expectation (LBOState const &a, Operator const &op, LBOState const &b)
 Calculates the expectation value \(\langle b | \left(\hat O | a \rangle\right)\). More...
 
SDef expectation (LBOState const &a, Operator const &op)
 Calculates the expectation value \(\langle a | \left(\hat O | a \rangle\right)\). More...
 
State fine_grain (State const &inp, Lattice const &target, std::ostream &out, bool collapse)
 Fine-grains a state to be compatible with the supplied lattice. More...
 
Tensor< 4 > genMPOId (Basis const &upperBasis, Basis const &rightBasis)
 Generates an identity MPO component. More...
 
Tensor< 3 > lbo_lbo_mps_cmp (Tensor< 3 > const &m, Tensor< 2 > const &v_lower, Tensor< 2 > const &v_upper)
 Contracts the physical indices of the MPS m component with the physical indices of v_lower and the full physical index of herm(v_upper), resulting in a new MPS component in the optimised space. More...
 
Tensor< 4 > lboify_mpo_cmp (Tensor< 4 > const &w, Tensor< 2 > const &v_lower, Tensor< 2 > const &v_upper)
 Contracts the physical indices of the MPO component w with the LBO tensors v_lower and herm(v_upper) to result in a new MPO component in the LBO space. More...
 
Tensor< 3 > left_complement (Tensor< 3 > a, Basis const &local, Basis const &left)
 Constructs the left complement to an existing left-normalised tensor a accessing the remaining parts of the full right space. More...
 
Tensor< 4 > mpo_cmp_prod (Tensor< 4 > const &lower, Tensor< 4 > const &upper, bool const fuse_lhs)
 Builds a new rank-4 MPO component from two rank-4 MPO components lower and upper multiplied over the upper (for lower) and lower (for upper) physical indices. More...
 
SRDef norm (State const &a)
 Returns the norm of a state, i.e. \(\sqrt{\langle a | a \rangle }\). More...
 
SRDef norm (Operator const &a)
 Returns the square root of the overlap of the operator with itself, identical to the Frobenius norm. More...
 
SRDef norm (LBOState const &a)
 Calculates the norm of a state. More...
 
SRDef normSqd (State const &a)
 Returns the squared norm of a state, i.e. \(\langle a | a \rangle \). More...
 
SRDef normSqd (Operator const &a)
 Returns the overlap of the operator with itself, identical to the squared Frobenius norm. More...
 
SRDef normSqd (LBOState const &a)
 Calculates the norm of a state. More...
 
Operator operator* (Operator const &a, SDef const b)
 Scale a MPO by a scalar, \( \hat r = b \hat a \). More...
 
Operator operator* (SDef const b, Operator const &a)
 Scale a MPO by a scalar, \( \hat r = b \hat a \). More...
 
Operator operator* (Operator const &a, Operator const &b)
 Product of two MPO, \( \hat r = \hat b \hat a \), i.e. b is applied after a if r is applied to a state. More...
 
State operator+ (State const &a, State const &b)
 Adds two states together as \(|\phi\rangle = |a\rangle + |b\rangle\). More...
 
LBOState operator+ (LBOState const &a, LBOState const &b)
 Adds two states a and b together. More...
 
Operator operator+ (Operator const &a, Operator const &b)
 Sum of two MPO, \( \hat r = \hat b + \hat a \). More...
 
Operator operator- (Operator const &a, Operator const &b)
 Difference of two MPO, \( \hat r = \hat a - \hat b \). More...
 
std::ostreamoperator<< (std::ostream &out, Lattice const &l)
 Pretty output for a lattice, lists the description and known operators. More...
 
std::ostreamoperator<< (std::ostream &out, LBOState const &s)
 Prints the state to the output stream out More...
 
std::ostreamoperator<< (std::ostream &out, Operator const &op)
 Prints a MPO. More...
 
template<typename Iterator >
void orthogonalise_variational (State &psi, Iterator first, Iterator last)
 variationally orthogonalise a state wrt a set of other states in-place More...
 
template<typename It >
void orthogonalise_variational (LBOState &, It, It)
 Dummy implementation, currently throws. More...
 
template<typename Iterator >
void orthogonalise_variational_two_site (State &psi, Iterator first, Iterator last, Truncation const &trunc)
 variationally orthogonalise a state two sites at a time wrt a set of other states in-place More...
 
template<typename It >
void orthogonalise_variational_two_site (LBOState &, It, It, Truncation const &)
 Dummy implementation, currently throws. More...
 
SDef overlap (State const &b, State const &a)
 Returns the overlap \(\langle b | a \rangle\) between two states. More...
 
SDef overlap (LBOState const &b, LBOState const &a)
 Calculates the overlap of two states. More...
 
SDef overlap (Operator const &a, Operator const &b)
 Returns the overlap of two operators \( \hat A \) and \( \hat B \), equivalent to \(\mathrm{tr}\left(\hat A^\dagger B\right) \). More...
 
Operator parse (Lattice const &lat, std::string const &desc, bool truncate=true)
 Parse an operator description. More...
 
Operator parse (std::string const &desc, bool const truncate=true)
 Parse a lattice:operator description. More...
 
Tensor< 3 > right_complement (Tensor< 3 > b, Basis const &local, Basis const &right)
 Constructs the right complement of a right-normalised tensor B which accesses the remaining parts of the full space to the left. More...
 
void switch_sites (MPS::Operator &op, Index const sa, Index const sb, std::vector< Pair< Index, Index > > const &fermions)
 Given an MPO op, switches neighbouring sites sa and sb with fermionic sectors as specified by fermions where sa+1 == sb. More...
 
Helper Functions for MPS/MPO calculations
Tensor< 3 > mps_mpo_mps_ctr_left (Tensor< 3 > const &left, Tensor< 3 > const &lower, Tensor< 3 > const &upper, Tensor< 4 > const &op)
 Calculates a new left-contraction of an MPO with an MPS. More...
 
Tensor< 3 > mps_mpo_mps_ctr_right (Tensor< 3 > const &right, Tensor< 3 > const &lower, Tensor< 3 > const &upper, Tensor< 4 > const &op)
 Calculates a new right-contraction of an MPO with an MPS. More...
 
Tensor< 3 > mps_mpo_ctr_ctr (Tensor< 3 > const &left, Tensor< 3 > const &right, Tensor< 3 > const &lower, Tensor< 4 > const &op)
 Calculates a local site contraction. More...
 
void expand_to_left (Tensor< 3 > const &right, Tensor< 3 > const &source, Tensor< 4 > const &op, State &target, Index const position, SRDef const alpha=0.1, Index const max_blocksize=15, SRDef const ratio=1., Index const min_blocksize=1)
 Calculates an expansion term according to DMRG3S pointing to the left. More...
 
void expand_to_right (Tensor< 3 > const &left, Tensor< 3 > const &source, Tensor< 4 > const &op, State &target, Index const position, SRDef const alpha=0.1, Index const max_blocksize=15, SRDef const ratio=1., Index const min_blocksize=1)
 Calculates an expansion term according to DMRG3S pointing to the right. More...
 
Helper functions for MPS-MPS calculations
Tensor< 2 > build_ctr_overlap_left (Tensor< 2 > const &left, Tensor< 3 > const &lower, Tensor< 3 > const &upper)
 Combines upper and lower with the existing left-contraction to form a new left contraction. More...
 
Tensor< 2 > build_ctr_overlap_right (Tensor< 2 > const &right, Tensor< 3 > const &lower, Tensor< 3 > const &upper)
 Combines upper and lower with the existing right-contraction to form a new right contraction. More...
 
Tensor< 4 > build_two_site_environment (Tensor< 2 > const &r_cont, Tensor< 2 > const &l_cont, Tensor< 3 > const &local_left, Tensor< 3 > const &local_right)
 Combines two rank-2 overlap environment tensors and a two rank-3 MPS tensors into an environment tensor. More...
 
Tensor< 3 > build_single_site_environment (Tensor< 2 > const &right, Tensor< 2 > const &left, Tensor< 3 > const &local)
 Combines two rank-2 overlap environment tensors and a single rank-3 MPS tensor into an environment tensor in the standard MPS ordering. More...
 
SRDef split_rank_4_into_mps_rnorm (Tensor< 4 > &&r4, Tensor< 3 > &left_site, Tensor< 3 > &right_site, Truncation trunc)
 Splits a rank-4 tensor into two rank-3 tensors in standard MPS ordering, truncating according to trunc. More...
 
SRDef split_rank_4_into_mps_lnorm (Tensor< 4 > &&l4, Tensor< 3 > &left_site, Tensor< 3 > &right_site, Truncation trunc)
 Splits a rank-4 tensor into two rank-3 tensors in standard MPS ordering, truncating according to trunc. More...
 
SRDef split_rank_4_into_mps_cnorm (Tensor< 4 > &&r4, Tensor< 3 > &left_site, Tensor< 2 > &center, Tensor< 3 > &right_site, Truncation trunc)
 Splits a rank-4 tensor into two rank-3 tensors in standard MPS ordering, truncating according to trunc. More...
 
State conj (State const &input)
 Returns a complex-conjugated copy of the input state. More...
 
std::ostreamoperator<< (std::ostream &out, State const &s)
 Outputs all tensors in a MP state. More...
 
void addScaled (State &a, State const &b, SDef const s)
 Adds a MPS b, scaled by the scalar prefactor s to the MPS a, essentially a fused-multiply-add for MPS::State. More...
 
template<typename TR >
void orthogonalise (State &psi, std::vector< TR > const &orts, Truncation const &)
 Orthogonalises the MPS psi in-place against all vectors contained in orts. More...
 

Detailed Description

The namespace containing all MPS-related tools, classes and objects.