예제 #1
0
    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))
예제 #2
0
    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)
예제 #3
0
    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
예제 #4
0
    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))