def test_pre_nao(self): c = nao.prenao(mol, mf.make_rdm1()) self.assertAlmostEqual(numpy.linalg.norm(c), 5.7742626195362039, 9) self.assertAlmostEqual(abs(c).sum(), 33.214804163888289, 6) c = nao.prenao(mol1, mf1.make_rdm1()) self.assertAlmostEqual(numpy.linalg.norm(c), 5.5434134741828105, 9) self.assertAlmostEqual(abs(c).sum(), 31.999905597187052, 6)
# adjust phase for i in range(c_orth.shape[1]): if c_orth[i,i] < 0: c_orth[:,i] *= -1 return c_orth if __name__ == '__main__': from pyscf import gto from pyscf import scf from pyscf.lo import nao mol = gto.Mole() mol.verbose = 1 mol.output = 'out_orth' mol.atom.extend([ ['O' , (0. , 0. , 0.)], [1 , (0. , -0.757 , 0.587)], [1 , (0. , 0.757 , 0.587)] ]) mol.basis = {'H': '6-31g', 'O': '6-31g',} mol.build() mf = scf.RHF(mol) mf.scf() c0 = nao.prenao(mol, mf.make_rdm1()) c = orth_ao(mol, 'meta_lowdin', c0) s = mol.intor_symmetric('cint1e_ovlp_sph') p = reduce(numpy.dot, (s, mf.make_rdm1(), s)) print(reduce(numpy.dot, (c.T, p, c)).diagonal())
for i in range(c_orth.shape[1]): if c_orth[i, i] < 0: c_orth[:, i] *= -1 return c_orth if __name__ == '__main__': from pyscf import gto from pyscf import scf from pyscf.lo import nao mol = gto.Mole() mol.verbose = 1 mol.output = 'out_orth' mol.atom.extend([['O', (0., 0., 0.)], [1, (0., -0.757, 0.587)], [1, (0., 0.757, 0.587)]]) mol.basis = { 'H': '6-31g', 'O': '6-31g', } mol.build() mf = scf.RHF(mol) mf.scf() c0 = nao.prenao(mol, mf.make_rdm1()) c = orth_ao(mol, 'meta_lowdin', c0) s = mol.intor_symmetric('cint1e_ovlp_sph') p = reduce(numpy.dot, (s, mf.make_rdm1(), s)) print(reduce(numpy.dot, (c.T, p, c)).diagonal())
def test_pre_nao(self): c = nao.prenao(mol, mf.make_rdm1()) self.assertAlmostEqual(numpy.linalg.norm(c), 5.7742626195362039, 9) self.assertAlmostEqual(abs(c).sum(), 33.214804163888289, 6)
def test_pre_nao(self): c = nao.prenao(mol, mf.make_rdm1()) self.assertAlmostEqual(numpy.linalg.norm(c), 7.2617698799320358, 9) self.assertAlmostEqual(abs(c).sum(), 40.032576928168687, 8)