def rhf(atoms,**opts):
"General wrapper for restricted closed-shell hartree fock"
ConvCriteria = opts.get('ConvCriteria',1e-5)
MaxIter = opts.get('MaxIter',20)
basis = opts.get('basis',None)
bfs = getbasis(atoms,basis)
S,h,Ints = getints(bfs,atoms)
orbs = get_guess(h,S)
nel = atoms.get_nel()
enuke = atoms.get_enuke()
nclosed,nopen = divmod(nel,2)
eold = 0.
for i in range(MaxIter):
D = mkdens(evecs,0,nocc)
G = get2JmK(Ints,D)
F = h+G
evals,evecs = GHeigenvectors(F,S)
energy = get_energy(h,F,D,enuke)
print energy
if abs(energy-eold) < ConvCriteria: break
eold = energy
return energy