ALPS MPS Codes
Reference documentation.
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Functions
maquis::dmrg::detail Namespace Reference

Functions

template<class InputIterator , class OutputIterator , class T >
void iterator_axpy (InputIterator in1, InputIterator in2, OutputIterator out1, T val)
 
void iterator_axpy (double const *in1, double const *in2, double *out1, double val)
 
void iterator_axpy (std::complex< double > const *in1, std::complex< double > const *in2, std::complex< double > *out1, double val)
 
template<class Matrix1 , class Matrix2 >
void op_kron (Matrix2 &out, const Matrix1 &in, const Matrix1 &alfa, size_t out_y_offset, size_t out_x_offset, size_t ldim1, size_t ldim2, size_t rdim1, size_t rdim2)
 
template<typename T , class A >
void reshape_l2b (alps::numeric::matrix< T, A > &out, const alps::numeric::matrix< T, A > &in, size_t in_left_offset, size_t in_phys_offset, size_t out_left_offset, size_t out_right_offset, size_t sdim1, size_t sdim2, size_t ldim, size_t rdim)
 
template<typename T , class A >
void reshape_b2l (alps::numeric::matrix< T, A > &out, const alps::numeric::matrix< T, A > &in, size_t in_left_offset, size_t in_right_offset, size_t out_left_offset, size_t out_phys_offset, size_t sdim1, size_t sdim2, size_t ldim, size_t rdim)
 
template<typename T , class A1 , class A2 >
void reshape_r2l (alps::numeric::matrix< T, A1 > &left, const alps::numeric::matrix< T, A2 > &right, size_t left_offset, size_t right_offset, size_t sdim, size_t ldim, size_t rdim)
 
template<typename T , class A1 , class A2 >
void reshape_l2r (const alps::numeric::matrix< T, A1 > &left, alps::numeric::matrix< T, A2 > &right, size_t left_offset, size_t right_offset, size_t sdim, size_t ldim, size_t rdim)
 
template<typename T1 , class A1 , typename T2 , class A2 , typename T3 , class A3 >
void lb_tensor_mpo (alps::numeric::matrix< T1, A1 > &out, const alps::numeric::matrix< T2, A2 > &in, const alps::numeric::matrix< T3, A3 > &alfa, size_t out_offset, size_t in_offset, size_t sdim1, size_t sdim2, size_t ldim, size_t rdim, T2 alfa_scale)
 
template<typename T1 , class A1 , typename T2 , class A2 , typename T3 , class A3 >
void rb_tensor_mpo (alps::numeric::matrix< T1, A1 > &out, const alps::numeric::matrix< T2, A2 > &in, const alps::numeric::matrix< T3, A3 > &alfa, size_t out_offset, size_t in_offset, size_t sdim1, size_t sdim2, size_t ldim, size_t rdim, T2 alfa_scale)
 
template<typename T1 , class A1 , typename T2 , class A2 , typename T3 , class A3 >
void mwt (alps::numeric::matrix< T1, A1 > &out, const alps::numeric::matrix< T2, A2 > &in, const alps::numeric::matrix< T3, A3 > &alfa, size_t out_y_offset, size_t out_x_offset, size_t in_y_offset, size_t in_x_offset, size_t alfa_y_offset, size_t alfa_x_offset, size_t ldim, size_t rdim, size_t lpdim, size_t rpdim, size_t ilpdim, size_t irpdim)
 
template<class T , class SymmGroup >
std::vector< double > bond_renyi_entropies (const block_matrix< alps::numeric::diagonal_matrix< T >, SymmGroup > &set)
 
template<typename T , class A >
void left_right_boundary_init (alps::numeric::matrix< T, A > &M)
 

Function Documentation

template<class T , class SymmGroup >
std::vector<double> maquis::dmrg::detail::bond_renyi_entropies ( const block_matrix< alps::numeric::diagonal_matrix< T >, SymmGroup > &  set)

Definition at line 198 of file alps_detail.hpp.

198  {
199  std::vector<double> ret;
200  for(std::size_t k = 0; k < set.n_blocks(); ++k){
201  for (typename alps::numeric::diagonal_matrix<T>::const_diagonal_iterator it = diagonal(set[k]).first;
202  it != diagonal(set[k]).second; ++it)
203  {
204  double a = std::abs(*it);
205  if (a > 1e-10)
206  ret.push_back(a*a);
207  }
208  }
209  return ret;
210  }
size_type n_blocks() const
template<class InputIterator , class OutputIterator , class T >
void maquis::dmrg::detail::iterator_axpy ( InputIterator  in1,
InputIterator  in2,
OutputIterator  out1,
val 
)

Definition at line 39 of file alps_detail.hpp.

41  {
42  std::transform(in1, in2, out1, out1, boost::lambda::_1*val+boost::lambda::_2);
43  }
void maquis::dmrg::detail::iterator_axpy ( double const *  in1,
double const *  in2,
double *  out1,
double  val 
)
inline

Definition at line 45 of file alps_detail.hpp.

47  {
48  fortran_int_t one = 1, diff = in2-in1;
49 #if defined(BIND_FORTRAN_LOWERCASE) || defined(__xlC__)
50  daxpy(&diff, &val, in1, &one, out1, &one);
51 #else
52  daxpy_(&diff, &val, in1, &one, out1, &one);
53 #endif
54  }
void maquis::dmrg::detail::iterator_axpy ( std::complex< double > const *  in1,
std::complex< double > const *  in2,
std::complex< double > *  out1,
double  val 
)
inline

Definition at line 56 of file alps_detail.hpp.

58  {
59  throw std::runtime_error("Not implemented.");
60  }
template<typename T1 , class A1 , typename T2 , class A2 , typename T3 , class A3 >
void maquis::dmrg::detail::lb_tensor_mpo ( alps::numeric::matrix< T1, A1 > &  out,
const alps::numeric::matrix< T2, A2 > &  in,
const alps::numeric::matrix< T3, A3 > &  alfa,
size_t  out_offset,
size_t  in_offset,
size_t  sdim1,
size_t  sdim2,
size_t  ldim,
size_t  rdim,
T2  alfa_scale 
)

Definition at line 141 of file alps_detail.hpp.

144  {
145  for(size_t rr = 0; rr < rdim; ++rr) {
146  for(size_t ss1 = 0; ss1 < sdim1; ++ss1) {
147  for(size_t ss2 = 0; ss2 < sdim2; ++ss2) {
148  T3 alfa_t = alfa(ss1, ss2) * alfa_scale;
149  iterator_axpy(&in(0, in_offset + ss1*rdim + rr),
150  &in(0, in_offset + ss1*rdim + rr) + ldim, // bugbug
151  &out(out_offset + ss2*ldim, rr),
152  alfa_t);
153  }
154  }
155  }
156  }
void iterator_axpy(std::complex< double > const *in1, std::complex< double > const *in2, std::complex< double > *out1, double val)
Definition: alps_detail.hpp:56
template<typename T , class A >
void maquis::dmrg::detail::left_right_boundary_init ( alps::numeric::matrix< T, A > &  M)

Definition at line 213 of file alps_detail.hpp.

213  {
214  // memset((void*)&M(0,0),1,num_rows(M)*num_cols(M)*sizeof(T));
215  for_each(elements(M).first,elements(M).second, boost::lambda::_1 = 1); // boost::lambda ^^' because iterable matrix concept
216  }
template<typename T1 , class A1 , typename T2 , class A2 , typename T3 , class A3 >
void maquis::dmrg::detail::mwt ( alps::numeric::matrix< T1, A1 > &  out,
const alps::numeric::matrix< T2, A2 > &  in,
const alps::numeric::matrix< T3, A3 > &  alfa,
size_t  out_y_offset,
size_t  out_x_offset,
size_t  in_y_offset,
size_t  in_x_offset,
size_t  alfa_y_offset,
size_t  alfa_x_offset,
size_t  ldim,
size_t  rdim,
size_t  lpdim,
size_t  rpdim,
size_t  ilpdim,
size_t  irpdim 
)

Definition at line 178 of file alps_detail.hpp.

185  {
186  for(size_t ll = 0; ll < ldim; ++ll)
187  for(size_t rr = 0; rr < rdim; ++rr)
188  for(size_t lp = 0; lp < lpdim; ++lp)
189  for(size_t rp = 0; rp < rpdim; ++rp)
190  for(size_t ilp = 0; ilp < ilpdim; ++ilp)
191  for(size_t irp = 0; irp < irpdim; ++irp)
192  out(out_y_offset + lp*ldim + ll, out_x_offset + rp*rdim + rr) +=
193  in(in_y_offset + ilp*ldim + ll, in_x_offset + irp*rdim + rr) *
194  alfa(alfa_y_offset + ilp*irpdim + irp, alfa_x_offset + lp*rpdim + rp);
195  }
template<class Matrix1 , class Matrix2 >
void maquis::dmrg::detail::op_kron ( Matrix2 &  out,
const Matrix1 &  in,
const Matrix1 &  alfa,
size_t  out_y_offset,
size_t  out_x_offset,
size_t  ldim1,
size_t  ldim2,
size_t  rdim1,
size_t  rdim2 
)

Definition at line 65 of file alps_detail.hpp.

69  {
70  for(int l1 = 0; l1 < ldim1; ++l1)
71  for(int r1 = 0; r1 < rdim1; ++r1)
72  for(int l2 = 0; l2 < ldim2; ++l2)
73  for(int r2 = 0; r2 < rdim2; ++r2)
74  out(out_y_offset + l1*ldim2 + l2, out_x_offset + r1*rdim2 + r2) =
75  in(l2, r2)*alfa(l1, r1);
76  }
template<typename T1 , class A1 , typename T2 , class A2 , typename T3 , class A3 >
void maquis::dmrg::detail::rb_tensor_mpo ( alps::numeric::matrix< T1, A1 > &  out,
const alps::numeric::matrix< T2, A2 > &  in,
const alps::numeric::matrix< T3, A3 > &  alfa,
size_t  out_offset,
size_t  in_offset,
size_t  sdim1,
size_t  sdim2,
size_t  ldim,
size_t  rdim,
T2  alfa_scale 
)

Definition at line 161 of file alps_detail.hpp.

164  {
165  for(size_t ss1 = 0; ss1 < sdim1; ++ss1)
166  for(size_t ss2 = 0; ss2 < sdim2; ++ss2) {
167  T3 alfa_t = alfa(ss1, ss2) * alfa_scale;
168  for(size_t rr = 0; rr < rdim; ++rr)
169  for(size_t ll = 0; ll < ldim; ++ll) {
170  out(ll, out_offset + ss2*rdim+rr) += in(ll + in_offset + ss1*ldim, rr) * alfa_t;
171  }
172  }
173  }
template<typename T , class A >
void maquis::dmrg::detail::reshape_b2l ( alps::numeric::matrix< T, A > &  out,
const alps::numeric::matrix< T, A > &  in,
size_t  in_left_offset,
size_t  in_right_offset,
size_t  out_left_offset,
size_t  out_phys_offset,
size_t  sdim1,
size_t  sdim2,
size_t  ldim,
size_t  rdim 
)

Definition at line 96 of file alps_detail.hpp.

100  {
101  for(size_t ss1 = 0; ss1 < sdim1; ++ss1)
102  for(size_t ss2 = 0; ss2 < sdim2; ++ss2)
103  {
104  size_t ss_out = out_phys_offset + ss1*sdim2 + ss2;
105  for(size_t rr = 0; rr < rdim; ++rr)
106  for(size_t ll = 0; ll < ldim; ++ll)
107  out(out_left_offset + ss_out*ldim + ll, rr) =
108  in(in_left_offset + ss1*ldim+ll, in_right_offset + ss2*rdim+rr);
109  }
110  }
template<typename T , class A >
void maquis::dmrg::detail::reshape_l2b ( alps::numeric::matrix< T, A > &  out,
const alps::numeric::matrix< T, A > &  in,
size_t  in_left_offset,
size_t  in_phys_offset,
size_t  out_left_offset,
size_t  out_right_offset,
size_t  sdim1,
size_t  sdim2,
size_t  ldim,
size_t  rdim 
)

Definition at line 79 of file alps_detail.hpp.

83  {
84  for(size_t ss1 = 0; ss1 < sdim1; ++ss1)
85  for(size_t ss2 = 0; ss2 < sdim2; ++ss2)
86  {
87  size_t ss_out = in_phys_offset + ss1*sdim2 + ss2;
88  for(size_t rr = 0; rr < rdim; ++rr)
89  for(size_t ll = 0; ll < ldim; ++ll)
90  out(out_left_offset + ss1*ldim + ll, out_right_offset + ss2*rdim + rr) =
91  in(in_left_offset + ss_out*ldim + ll, rr);
92  }
93  }
template<typename T , class A1 , class A2 >
void maquis::dmrg::detail::reshape_l2r ( const alps::numeric::matrix< T, A1 > &  left,
alps::numeric::matrix< T, A2 > &  right,
size_t  left_offset,
size_t  right_offset,
size_t  sdim,
size_t  ldim,
size_t  rdim 
)

Definition at line 128 of file alps_detail.hpp.

131  {
132  for (size_t ss = 0; ss < sdim; ++ss)
133  for (size_t rr = 0; rr < rdim; ++rr)
134  for (size_t ll = 0; ll < ldim; ++ll)
135  right(ll, right_offset + ss*rdim+rr) = left(left_offset + ss*ldim+ll, rr);
136  }
template<typename T , class A1 , class A2 >
void maquis::dmrg::detail::reshape_r2l ( alps::numeric::matrix< T, A1 > &  left,
const alps::numeric::matrix< T, A2 > &  right,
size_t  left_offset,
size_t  right_offset,
size_t  sdim,
size_t  ldim,
size_t  rdim 
)

Definition at line 113 of file alps_detail.hpp.

116  {
117  for (size_t ss = 0; ss < sdim; ++ss)
118  for (size_t rr = 0; rr < rdim; ++rr)
119  for(size_t ll = 0; ll < ldim; ++ll)
120  left(left_offset + ss*ldim+ll, rr) =
121  right(ll, right_offset + ss*rdim+rr);
122  // memcpy(&left(left_offset + ss*ldim, rr),
123  // &right(0, right_offset + ss*rdim+rr),
124  // sizeof(T) * ldim);
125  }