27 #ifndef MAQUIS_DMRG_DM_OP_KRON_H
28 #define MAQUIS_DMRG_DM_OP_KRON_H
34 template<
class Matrix,
class SymmGroup>
45 typedef typename SymmGroup::charge charge;
46 boost::function<charge (charge, charge)> phys_fuse = boost::lambda::bind(
static_cast<charge(*)(charge, charge)
>(
SymmGroup::fuse),
47 boost::lambda::_1, -boost::lambda::_2);
56 Matrix tmp(pb_left.
size(new_left), pb_right.
size(new_right), 0);
69 template<
class Matrix,
class SymmGroup>
81 typedef typename OutSymm::charge charge;
95 C.match_and_add_block(tmp, new_left, new_right);
TrivialGroup::charge group(TrivialGroup::charge c1, TrivialGroup::charge c2)
size_type n_blocks() const
void dm_group_kron(Index< SymmGroup > const &phys_psi, block_matrix< Matrix, SymmGroup > const &A, block_matrix< Matrix, SymmGroup > const &B, block_matrix< Matrix, typename grouped_symmetry< SymmGroup >::type > &C)
void match_and_add_block(Matrix const &, charge, charge)
declaration of block_matrix class
size_t size(charge pc) const
std::size_t size_of_block(charge c) const
include one of the Index class definitions
block_matrix< Matrix, SymmGroup > adjoin(block_matrix< Matrix, SymmGroup > const &m)
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)
Index< SymmGroup > const & right_basis() const
void dm_kron(Index< SymmGroup > const &phys, block_matrix< Matrix, SymmGroup > const &A, block_matrix< Matrix, SymmGroup > const &B, block_matrix< Matrix, SymmGroup > &C)
Index< SymmGroup > const & left_basis() const
T fuse(const A &ind, T d)
Fuse indices n[i] into one p = n[i] d^i.