void SpinAdapted::Csf::applyRowminus(Csf& output, int irrep) { map<Slater, double>::iterator itout, it = det_rep.begin(); map<Slater, double> detsout; for ( ; it!= det_rep.end(); it++) for (int i=0; i<dmrginp.last_site(); i++) { if (SymmetryOfSpatialOrb(i).getirrep() != irrep) continue; int I = dmrginp.spatial_to_spin()[i]; for (int j=0; j<2; j++) { Slater s = (*it).first; int sign = s.getSign(); s.d(I+2+j).c(I+j); s.setSign(sign); //This is a hack. if ( !s.isempty()) { itout = detsout.find(s); if (itout == detsout.end()) detsout[s] = (*it).second; else detsout[s] += (*it).second; } } } output.set_det_rep(detsout, S, IrrepVector(this->irrep.getirrep(), 0)); }
void SpinAdapted::Csf::applySminus(Csf& output) { map<Slater, double>::iterator itout, it = det_rep.begin(); map<Slater, double> detsout; for ( ; it!= det_rep.end(); it++) for (int i=0; i<Slater().size(); i+=2) { Slater s = (*it).first; s.d(i).c(i+1); if ( !s.isempty()) { itout = detsout.find(s); if (itout == detsout.end()) detsout[s] = (*it).second; else detsout[s] += (*it).second; } } output.set_det_rep(detsout, S, irrep); output.set_S(S); output.set_Sz(Sz-2); output.set_n(n); output.normalize(); }