template<> void Op_component<CreCreDesComp>::build_iterators(SpinBlock& b) { if (b.get_sites().size () == 0) return; // blank construction (used in unset_initialised() Block copy construction, for use with STL) const double screen_tol = dmrginp.oneindex_screen_tol(); vector< int > screened_cdd_ix = (dmrginp.hamiltonian() == BCS) ? screened_cddcomp_indices(b.get_complementary_sites(), b.get_sites(), v_1, *b.get_twoInt(), v_cc, v_cccc, v_cccd, screen_tol) : screened_cddcomp_indices(b.get_complementary_sites(), b.get_sites(), v_1, *b.get_twoInt(), screen_tol); m_op.set_indices(screened_cdd_ix, dmrginp.last_site()); std::vector<int> orbs(1); for (int i = 0; i < m_op.local_nnz(); ++i) { orbs[0] = m_op.get_local_indices()[i]; m_op.get_local_element(i).resize(1); m_op.get_local_element(i)[0]=boost::shared_ptr<CreCreDesComp>(new CreCreDesComp); SparseMatrix& op = *m_op.get_local_element(i)[0]; op.set_orbs() = orbs; op.set_initialised() = true; op.set_fermion() = true; //op.set_deltaQuantum() = SpinQuantum(1, SpinOf(orbs[0]), SymmetryOfSpatialOrb(orbs[0]) ); if (dmrginp.hamiltonian() == BCS) { op.resize_deltaQuantum(4); SpinQuantum qorb = getSpinQuantum(orbs[0]); op.set_deltaQuantum(0) = qorb; op.set_deltaQuantum(1) = SpinQuantum(3, qorb.get_s(), qorb.get_symm()); op.set_deltaQuantum(2) = SpinQuantum(-1, qorb.get_s(), qorb.get_symm()); op.set_deltaQuantum(3) = SpinQuantum(-3, qorb.get_s(), qorb.get_symm()); } else { op.set_deltaQuantum(1, getSpinQuantum(orbs[0])); } } }
template<> void Op_component<CreCreComp>::build_iterators(SpinBlock& b) { if (b.get_sites().size () == 0) return; // blank construction (used in unset_initialised() Block copy construction, for use with STL) const double screen_tol = dmrginp.twoindex_screen_tol(); vector< pair<int, int> > screened_dd_ix = (dmrginp.hamiltonian() == BCS) ? screened_dd_indices(b.get_complementary_sites(), b.get_sites(), *b.get_twoInt(), v_cc, v_cccc, v_cccd, screen_tol) : screened_dd_indices(b.get_complementary_sites(), b.get_sites(), *b.get_twoInt(), screen_tol); m_op.set_pair_indices(screened_dd_ix, dmrginp.last_site()); std::vector<int> orbs(2); for (int i = 0; i < m_op.local_nnz(); ++i) { orbs = m_op.unmap_local_index(i); std::vector<boost::shared_ptr<CreCreComp> >& vec = m_op.get_local_element(i); SpinQuantum spin1 = getSpinQuantum(orbs[0]); SpinQuantum spin2 = getSpinQuantum(orbs[1]); std::vector<SpinQuantum> spinvec = spin1+spin2; vec.resize(spinvec.size()); for (int j=0; j<spinvec.size(); j++) { vec[j]=boost::shared_ptr<CreCreComp>(new CreCreComp); SparseMatrix& op = *vec[j]; op.set_orbs() = orbs; op.set_initialised() = true; op.set_fermion() = false; op.set_deltaQuantum(1, spinvec[j]); } } }
template<> void Op_component<Des>::build_iterators(SpinBlock& b) { if (b.get_sites().size () == 0) return; // blank construction (used in unset_initialised() Block copy construction, for use with STL) const double screen_tol = dmrginp.oneindex_screen_tol(); std::vector<int> screened_d_ix = screened_d_indices(b.get_sites(), b.get_complementary_sites(), v_1, *b.get_twoInt(), screen_tol); m_op.set_indices(screened_d_ix, dmrginp.last_site()); std::vector<int> orbs(1); for (int i = 0; i < m_op.local_nnz(); ++i) { orbs[0] = m_op.get_local_indices()[i]; m_op.get_local_element(i).resize(1); m_op.get_local_element(i)[0]=boost::shared_ptr<Des>(new Des); SparseMatrix& op = *m_op.get_local_element(i)[0]; op.set_orbs() = orbs; op.set_initialised() = true; op.set_fermion() = true; op.set_deltaQuantum(1, -getSpinQuantum(orbs[0]));//SpinQuantum(1, 1, SymmetryOfSpatialOrb(orbs[0])); op.set_quantum_ladder()["(D)"] = { op.get_deltaQuantum(0) }; } }