def ao2mo(self, mo_coeff=None): nmo = self.nmo mem_incore = nmo**4*2 * 8/1e6 mem_now = lib.current_memory()[0] if (self._scf._eri is not None and (mem_incore+mem_now < self.max_memory) or self.mol.incore_anyway): return gccsd._make_eris_incore(self, mo_coeff) elif getattr(self._scf, 'with_df', None): raise NotImplementedError else: return gccsd._make_eris_outcore(self, mo_coeff)
def test_ERIS(self): gcc = gccsd.GCCSD(mf, frozen=4) numpy.random.seed(9) mo_coeff0 = numpy.random.random(mf.mo_coeff.shape) - .9 nao = mo_coeff0.shape[0] // 2 orbspin = numpy.array([ 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1 ]) mo_coeff0[nao:, orbspin == 0] = 0 mo_coeff0[:nao, orbspin == 1] = 0 mo_coeff1 = mo_coeff0.copy() mo_coeff1[-1, 0] = 1e-12 eris = gccsd._make_eris_incore(gcc, mo_coeff0) self.assertAlmostEqual(lib.finger(eris.oooo), 15.97533838570434, 9) self.assertAlmostEqual(lib.finger(eris.ooov), -80.97666019169982, 9) self.assertAlmostEqual(lib.finger(eris.oovv), 278.00028168381675, 9) self.assertAlmostEqual(lib.finger(eris.ovov), 2.34326750142844, 9) self.assertAlmostEqual(lib.finger(eris.ovvv), 908.61659731634768, 9) self.assertAlmostEqual(lib.finger(eris.vvvv), 756.77383112217694, 9) eris = gccsd._make_eris_outcore(gcc, mo_coeff0) self.assertAlmostEqual(lib.finger(eris.oooo), 15.97533838570434, 9) self.assertAlmostEqual(lib.finger(eris.ooov), -80.97666019169982, 9) self.assertAlmostEqual(lib.finger(eris.oovv), 278.00028168381675, 9) self.assertAlmostEqual(lib.finger(eris.ovov), 2.34326750142844, 9) self.assertAlmostEqual(lib.finger(eris.ovvv), 908.61659731634768, 9) self.assertAlmostEqual(lib.finger(eris.vvvv), 756.77383112217694, 9) eris = gccsd._make_eris_incore(gcc, mo_coeff1) self.assertAlmostEqual(lib.finger(eris.oooo), 15.97533838570434, 9) self.assertAlmostEqual(lib.finger(eris.ooov), -80.97666019169982, 9) self.assertAlmostEqual(lib.finger(eris.oovv), 278.00028168381675, 9) self.assertAlmostEqual(lib.finger(eris.ovov), 2.34326750142844, 9) self.assertAlmostEqual(lib.finger(eris.ovvv), 908.61659731634768, 9) self.assertAlmostEqual(lib.finger(eris.vvvv), 756.77383112217694, 9) gcc.max_memory = 0 eris = gcc.ao2mo(mo_coeff1) self.assertAlmostEqual(lib.finger(eris.oooo), 15.97533838570434, 9) self.assertAlmostEqual(lib.finger(eris.ooov), -80.97666019169982, 9) self.assertAlmostEqual(lib.finger(eris.oovv), 278.00028168381675, 9) self.assertAlmostEqual(lib.finger(eris.ovov), 2.34326750142844, 9) self.assertAlmostEqual(lib.finger(eris.ovvv), 908.61659731634768, 9) self.assertAlmostEqual(lib.finger(eris.vvvv), 756.77383112217694, 9)
def test_ERIS(self): gcc = gccsd.GCCSD(mf, frozen=4) numpy.random.seed(9) mo_coeff0 = numpy.random.random(mf.mo_coeff.shape) - .9 nao = mo_coeff0.shape[0]//2 orbspin = numpy.array([0,1,0,1,0,1,0,0,1,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,0,1]) mo_coeff0[nao:,orbspin==0] = 0 mo_coeff0[:nao,orbspin==1] = 0 mo_coeff1 = mo_coeff0.copy() mo_coeff1[-1,0] = 1e-12 eris = gccsd._make_eris_incore(gcc, mo_coeff0) self.assertAlmostEqual(lib.finger(eris.oooo), 15.97533838570434, 9) self.assertAlmostEqual(lib.finger(eris.ooov), -80.97666019169982, 9) self.assertAlmostEqual(lib.finger(eris.oovv), 278.00028168381675, 9) self.assertAlmostEqual(lib.finger(eris.ovov), 2.34326750142844, 9) self.assertAlmostEqual(lib.finger(eris.ovvv), 908.61659731634768, 9) self.assertAlmostEqual(lib.finger(eris.vvvv), 756.77383112217694, 9) eris = gccsd._make_eris_outcore(gcc, mo_coeff0) self.assertAlmostEqual(lib.finger(eris.oooo), 15.97533838570434, 9) self.assertAlmostEqual(lib.finger(eris.ooov), -80.97666019169982, 9) self.assertAlmostEqual(lib.finger(eris.oovv), 278.00028168381675, 9) self.assertAlmostEqual(lib.finger(eris.ovov), 2.34326750142844, 9) self.assertAlmostEqual(lib.finger(eris.ovvv), 908.61659731634768, 9) self.assertAlmostEqual(lib.finger(eris.vvvv), 756.77383112217694, 9) eris = gccsd._make_eris_incore(gcc, mo_coeff1) self.assertAlmostEqual(lib.finger(eris.oooo), 15.97533838570434, 9) self.assertAlmostEqual(lib.finger(eris.ooov), -80.97666019169982, 9) self.assertAlmostEqual(lib.finger(eris.oovv), 278.00028168381675, 9) self.assertAlmostEqual(lib.finger(eris.ovov), 2.34326750142844, 9) self.assertAlmostEqual(lib.finger(eris.ovvv), 908.61659731634768, 9) self.assertAlmostEqual(lib.finger(eris.vvvv), 756.77383112217694, 9) gcc.max_memory = 0 eris = gcc.ao2mo(mo_coeff1) self.assertAlmostEqual(lib.finger(eris.oooo), 15.97533838570434, 9) self.assertAlmostEqual(lib.finger(eris.ooov), -80.97666019169982, 9) self.assertAlmostEqual(lib.finger(eris.oovv), 278.00028168381675, 9) self.assertAlmostEqual(lib.finger(eris.ovov), 2.34326750142844, 9) self.assertAlmostEqual(lib.finger(eris.ovvv), 908.61659731634768, 9) self.assertAlmostEqual(lib.finger(eris.vvvv), 756.77383112217694, 9)