ALPS MPS Codes
Reference documentation.
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Functions
state_mps.h File Reference
#include "dmrg/mp_tensors/mps.h"
#include <boost/tuple/tuple.hpp>

Go to the source code of this file.

Functions

template<class Matrix , class SymmGroup >
MPS< Matrix, SymmGroup > state_mps (std::vector< boost::tuple< typename SymmGroup::charge, size_t > > const &state, std::vector< Index< SymmGroup > > const &phys_dims, std::vector< int > const &site_type)
 

Function Documentation

template<class Matrix , class SymmGroup >
MPS<Matrix, SymmGroup> state_mps ( std::vector< boost::tuple< typename SymmGroup::charge, size_t > > const &  state,
std::vector< Index< SymmGroup > > const &  phys_dims,
std::vector< int > const &  site_type 
)

Definition at line 35 of file state_mps.h.

37 {
38  typedef typename SymmGroup::charge charge;
39  typedef boost::tuple<charge, size_t> local_state;
40 
41  MPS<Matrix, SymmGroup> mps(state.size());
42 
43  Index<SymmGroup> curr_i;
44  curr_i.insert(std::make_pair(SymmGroup::IdentityCharge, 1));
45  size_t curr_b = 0;
46  for (int i=0; i<state.size(); ++i)
47  {
48  charge newc = SymmGroup::fuse(curr_i[0].first, boost::get<0>(state[i]));
49  size_t news = 1;
50  Index<SymmGroup> new_i;
51  new_i.insert(std::make_pair(newc, news));
52  ProductBasis<SymmGroup> left(phys_dims[site_type[i]], curr_i);
53  mps[i] = MPSTensor<Matrix, SymmGroup>(phys_dims[site_type[i]], curr_i, new_i, false, 0);
54  size_t b_in = left(boost::get<0>(state[i]), curr_i[0].first) + boost::get<1>(state[i]) * curr_i[0].second + curr_b;
55  size_t b_out = 0;
56 
57  mps[i].make_left_paired();
58  block_matrix<Matrix, SymmGroup> & block = mps[i].data();
59  Matrix & m = block(SymmGroup::fuse(curr_i[0].first, boost::get<0>(state[i])), new_i[0].first);
60  m(b_in, b_out) = 1.;
61 
62  curr_i = new_i;
63  curr_b = b_out;
64  }
65  return mps;
66 }
void make_left_paired() const
Definition: mpstensor.hpp:173
Definition: mps.h:40
std::size_t insert(std::pair< charge, std::size_t > const &x)
T fuse(const A &ind, T d)
Fuse indices n[i] into one p = n[i] d^i.