def UMP2(mf, frozen=0, mo_coeff=None, mo_occ=None): __doc__ = ump2.UMP2.__doc__ from pyscf.soscf import newton_ah if isinstance(mf, newton_ah._CIAH_SOSCF) or not isinstance(mf, scf.uhf.UHF): mf = mf.to_uhf() if getattr(mf, 'with_df', None): #raise NotImplementedError('DF-UMP2') return ump2.UMP2(mf, frozen, mo_coeff, mo_occ) else: return ump2.UMP2(mf, frozen, mo_coeff, mo_occ)
def UMP2(mf, frozen=0, mo_coeff=None, mo_occ=None): __doc__ = ump2.UMP2.__doc__ from pyscf.soscf import newton_ah if isinstance(mf, newton_ah._CIAH_SOSCF) or not isinstance(mf, scf.uhf.UHF): mf = scf.addons.convert_to_uhf(mf) if hasattr(mf, 'with_df') and mf.with_df: raise NotImplementedError('DF-UMP2') else: return ump2.UMP2(mf, frozen, mo_coeff, mo_occ)
def ccsd(self, t1=None, t2=None, eris=None, mbpt2=False): '''Ground-state unrestricted (U)CCSD. Kwargs: mbpt2 : bool Use one-shot MBPT2 approximation to CCSD. ''' if mbpt2: pt = ump2.UMP2(self._scf, self.frozen, self.mo_coeff, self.mo_occ) self.e_corr, self.t2 = pt.kernel(eris=eris) t2ab = self.t2[1] nocca, noccb, nvira, nvirb = t2ab.shape self.t1 = (np.zeros((nocca, nvira)), np.zeros((noccb, nvirb))) return self.e_corr, self.t1, self.t2 if eris is None: eris = self.ao2mo(self.mo_coeff) return ccsd.CCSD.ccsd(self, t1, t2, eris)
if __name__ == '__main__': from pyscf import gto from pyscf import scf from pyscf.mp import mp2 mol = gto.M( atom = [ ["O" , (0. , 0. , 0.)], [1 , (0. ,-0.757 , 0.587)], [1 , (0. , 0.757 , 0.587)]], basis = '631g', spin = 2, ) mf = scf.UHF(mol).run() mp = ump2.UMP2(mf).run() g1 = Gradients(mp).kernel() # O 0.0000000000 -0.0000000000 0.1436990190 # H -0.0000000000 0.1097329294 -0.0718495095 # H -0.0000000000 -0.1097329294 -0.0718495095 print(lib.finger(g1) - -0.22418090721297307) print('-----------------------------------') mol = gto.M( atom = [ ["O" , (0. , 0. , 0.)], [1 , (0. ,-0.757 , 0.587)], [1 , (0. , 0.757 , 0.587)]], basis = '631g', spin = 2, )