def test_init(self): hf = scf.RHF(mol) ks = scf.RKS(mol) kshf = scf.RKS(mol).set(xc='HF') self.assertTrue(isinstance(tdscf.TDA(hf), tdscf.rhf.TDA)) self.assertTrue(isinstance(tdscf.TDA(ks), tdscf.rks.TDA)) self.assertTrue(isinstance(tdscf.TDA(kshf), tdscf.rks.TDA)) self.assertTrue(isinstance(tdscf.RPA(hf), tdscf.rhf.TDHF)) self.assertTrue(isinstance(tdscf.RPA(ks), tdscf.rks.TDDFTNoHybrid)) self.assertTrue(isinstance(tdscf.RPA(kshf), tdscf.rks.TDDFT)) self.assertTrue(isinstance(tdscf.TDDFT(hf), tdscf.rhf.TDHF)) self.assertTrue(isinstance(tdscf.TDDFT(ks), tdscf.rks.TDDFTNoHybrid)) self.assertTrue(isinstance(tdscf.TDDFT(kshf), tdscf.rks.TDDFT)) self.assertRaises(RuntimeError, tdscf.dRPA, hf) self.assertTrue(isinstance(tdscf.dRPA(kshf), tdscf.rks.dRPA)) self.assertTrue(isinstance(tdscf.dRPA(ks), tdscf.rks.dRPA)) self.assertRaises(RuntimeError, tdscf.dTDA, hf) self.assertTrue(isinstance(tdscf.dTDA(kshf), tdscf.rks.dTDA)) self.assertTrue(isinstance(tdscf.dTDA(ks), tdscf.rks.dTDA)) kshf.xc = '' self.assertTrue(isinstance(tdscf.dTDA(kshf), tdscf.rks.dTDA)) self.assertTrue(isinstance(tdscf.dRPA(kshf), tdscf.rks.dRPA))
def test_gw_exact(self): mol = gto.Mole() mol.verbose = 7 mol.output = '/dev/null' mol.atom = [['O', (0., 0., 0.)], ['H', (0., -0.757, 0.587)], ['H', (0., 0.757, 0.587)]] mol.basis = 'cc-pvdz' mol.build() mf = dft.RKS(mol) mf.xc = 'hf' mf.kernel() nocc = mol.nelectron // 2 nvir = mf.mo_energy.size - nocc td = tdscf.dRPA(mf) td.nstates = min(100, nocc * nvir) td.kernel() gw_obj = gw.GW(mf, freq_int='exact', frozen=0) gw_obj.kernel() gw_obj.linearized = True gw_obj.kernel(orbs=[nocc - 1, nocc]) self.assertAlmostEqual(gw_obj.mo_energy[nocc - 1], -0.44684106, 7) self.assertAlmostEqual(gw_obj.mo_energy[nocc], 0.17292032, 7)
def kernel(self, mo_energy=None, mo_coeff=None, td_e=None, td_xy=None, eris=None, orbs=None): if mo_coeff is None: mo_coeff = self._scf.mo_coeff if mo_energy is None: mo_energy = self._scf.mo_energy if self._tdscf is None: from pyscf import tdscf self._tdscf = tdscf.dRPA(self._scf) nocc, nvir = self.nocc, self.nmo - self.nocc self._tdscf.nstates = nocc * nvir self._tdscf.verbose = 0 self._tdscf.kernel() if td_e is None: td_e = self._tdscf.e if td_xy is None: td_xy = self._tdscf.xy cput0 = (logger.process_clock(), logger.perf_counter()) self.dump_flags() self.converged, self.mo_energy, self.mo_coeff = \ kernel(self, mo_energy, mo_coeff, td_e, td_xy, eris=eris, orbs=orbs, verbose=self.verbose) logger.timer(self, 'GW', *cput0) return self.mo_energy
def test_init(self): hf = scf.RHF(mol) ks = scf.RKS(mol) kshf = scf.RKS(mol).set(xc='HF') self.assertTrue(isinstance(tdscf.TDA(hf), tdscf.rhf.TDA)) self.assertTrue(isinstance(tdscf.TDA(ks), tdscf.rks.TDA)) self.assertTrue(isinstance(tdscf.TDA(kshf), tdscf.rks.TDA)) self.assertTrue(isinstance(tdscf.RPA(hf), tdscf.rhf.TDHF)) self.assertTrue(isinstance(tdscf.RPA(ks), tdscf.rks.TDDFTNoHybrid)) self.assertTrue(isinstance(tdscf.RPA(kshf), tdscf.rks.TDDFT)) self.assertTrue(isinstance(tdscf.TDDFT(hf), tdscf.rhf.TDHF)) self.assertTrue(isinstance(tdscf.TDDFT(ks), tdscf.rks.TDDFTNoHybrid)) self.assertTrue(isinstance(tdscf.TDDFT(kshf), tdscf.rks.TDDFT)) self.assertRaises(RuntimeError, tdscf.dRPA, hf) self.assertTrue(isinstance(tdscf.dRPA(kshf), tdscf.rks.dRPA)) self.assertTrue(isinstance(tdscf.dRPA(ks), tdscf.rks.dRPA)) self.assertRaises(RuntimeError, tdscf.dTDA, hf) self.assertTrue(isinstance(tdscf.dTDA(kshf), tdscf.rks.dTDA)) self.assertTrue(isinstance(tdscf.dTDA(ks), tdscf.rks.dTDA))