double SpinAdapted::det_energy (const Slater& s) { // energy of a single slater determinant, used in truncation double energy = 0; Slater bra; Slater ket; for (int i = 0; i < s.size (); ++i) { ket = s; bra = s; energy += ket.trace (bra.d(i).c(i)) * v_1 (i,i); } // diagonal for (int i = 0; i < s.size (); ++i) for (int j = 0; j < s.size (); ++j) { ket = s; bra = s; energy += .5 * ket.trace (bra.d(j).d(i).c(j).c(i)) * (v_2 (i,j,j,i) - v_2 (i,j,i,j)); } return energy; }
bool Slater::operator== (const Slater& b) const { if (this->size() != b.size()) { return 0; } for (int i = 0; i < this->size(); ++i) { if ((*this)[i] != b[i]) { return 0; } } return 1; }