Exemplo n.º 1
0
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;
}
Exemplo n.º 2
0
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;
}