281 typedef typename SymmGroup::charge charge;
284 for (
size_t r = 0; r < (*this)[p].row_dim(); ++r)
285 for (
size_t c = 0; c < (*this)[p].col_dim(); ++c)
287 for (
size_t cs = 0; cs < (*this)[p].at(r, c).op.left_basis().size(); ++cs) {
288 std::pair<charge, size_t> sector = (*this)[p].at(r, c).op.left_basis()[cs];
289 if (! phys_i.
has(sector.first))
297 std::size_t count = 0;
298 bond_index_charges[p+1].clear();
301 bond_index_charges[p+1][count++] = (*it).first;
305 bond_indices[p+1].sum_of_sizes());
307 std::map<charge, size_t> visited_c_basis;
308 for (
size_t c = 0; c < (*this)[p].col_dim(); ++c) {
310 for (
size_t r = 0; r < (*this)[p].row_dim(); ++r)
311 for (
size_t ls = 0; ls < phys_i.
size(); ++ls)
312 for (
size_t rs = 0; rs < phys_i.
size(); ++rs)
317 charge rc = bond_index_charges[p+1][c];
324 typename Matrix::value_type val = left(std::make_pair(lc, outr),
325 std::make_pair(rc, visited_c_basis[rc]));
327 if (std::abs(val) > 1e-40) {
329 charge blc = phys_i[ls].first, brc = phys_i[rs].first;
330 if ( (*
this)[p].has(r,c) )
331 block = (*this)[p].at(r,c).op;
333 (*this)[p].set(r, c, block);
341 visited_c_basis[bond_index_charges[p+1][c]]++;
345 (*this)[p+1].col_dim());
347 std::map<charge, size_t> visited_r_basis;
348 for (
size_t r = 0; r < (*this)[p+1].row_dim(); ++r) {
350 for (
size_t c = 0; c < (*this)[p+1].col_dim(); ++c)
351 for (
size_t ls = 0; ls < phys_i.
size(); ++ls)
352 for (
size_t rs = 0; rs < phys_i.
size(); ++rs)
354 charge lc = bond_index_charges[p+1][r];
364 typename Matrix::value_type val = right(std::make_pair(lc, visited_r_basis[lc]),
365 std::make_pair(rc, outc));
367 if (std::abs(val) > 1e-40) {
369 charge blc = phys_i[ls].first, brc = phys_i[rs].first;
370 if ( (*
this)[p+1].has(r,c) )
371 block = (*this)[p+1].at(r,c).op;
373 (*this)[p+1].set(r, c, block);
381 visited_r_basis[bond_index_charges[p+1][r]]++;
size_type insert_block(Matrix const &, charge, charge)
Index< SymmGroup > const & right_basis() const
std::vector< Index< SymmGroup > > bond_indices
std::size_t insert(std::pair< charge, std::size_t > const &x)
Index< SymmGroup > const & left_basis() const
T fuse(const A &ind, T d)
Fuse indices n[i] into one p = n[i] d^i.