ALPS MPS Codes
Reference documentation.
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Public Member Functions | List of all members
coherent_mps_init< Matrix, SymmGroup > Class Template Reference

#include <mps_initializers.h>

Inheritance diagram for coherent_mps_init< Matrix, SymmGroup >:
mps_initializer< Matrix, SymmGroup >

Public Member Functions

 coherent_mps_init (BaseParameters &params, std::vector< Index< SymmGroup > > const &phys_dims_, std::vector< int > const &site_type_)
 
void operator() (MPS< Matrix, SymmGroup > &mps)
 

Detailed Description

template<class Matrix, class SymmGroup>
class coherent_mps_init< Matrix, SymmGroup >

Definition at line 276 of file mps_initializers.h.

Constructor & Destructor Documentation

template<class Matrix , class SymmGroup >
coherent_mps_init< Matrix, SymmGroup >::coherent_mps_init ( BaseParameters params,
std::vector< Index< SymmGroup > > const &  phys_dims_,
std::vector< int > const &  site_type_ 
)
inline

Definition at line 279 of file mps_initializers.h.

282  : coeff(params["init_coeff"].as<std::vector<double> >())
283  , phys_dims(phys_dims_)
284  , site_type(site_type_)
285  { }

Member Function Documentation

template<class Matrix , class SymmGroup >
void coherent_mps_init< Matrix, SymmGroup >::operator() ( MPS< Matrix, SymmGroup > &  mps)
inlinevirtual

Implements mps_initializer< Matrix, SymmGroup >.

Definition at line 287 of file mps_initializers.h.

288  {
289  assert(coeff.size() == mps.length());
290  if (phys_dims[0].size() != 1) throw std::runtime_error("coherent_mps_init only for TrivialGroup.");
291 
292  typedef typename SymmGroup::charge charge;
293 
294  using std::exp; using std::sqrt; using std::pow;
295  using boost::math::factorial;
296 
297  size_t L = coeff.size();
298 
299  Index<SymmGroup> trivial_i;
300  trivial_i.insert(std::make_pair(SymmGroup::IdentityCharge, 1));
301 
302  for (int p=0; p<L; ++p) {
303  int s=0;
304  Matrix m(phys_dims[site_type[p]][s].second, 1, 0.);
305  for (int ss=0; ss<phys_dims[site_type[p]][s].second; ++ss) {
306  m(ss, 0) = pow(coeff[p], ss) * sqrt(factorial<double>(ss)) / factorial<double>(ss);
307  }
309  block.insert_block(m, SymmGroup::IdentityCharge, SymmGroup::IdentityCharge);
310 
311  MPSTensor<Matrix, SymmGroup> t(phys_dims[site_type[p]], trivial_i, trivial_i);
312  t.data() = block;
313 
314  swap(mps[p], t);
315  }
316  }
void swap(MPSTensor< Matrix, SymmGroup > &x, MPSTensor< Matrix, SymmGroup > &y)
size_type insert_block(Matrix const &, charge, charge)
block_matrix< Matrix, SymmGroup > sqrt(block_matrix< Matrix, SymmGroup > m)
size_t length() const
Definition: mps.h:58
std::size_t insert(std::pair< charge, std::size_t > const &x)

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