def MP2(mf, frozen=[], mo_coeff=None, mo_occ=None): __doc__ = mp2.MP2.__doc__ from pyscf import scf mf = scf.addons.convert_to_rhf(mf) if hasattr(mf, 'with_df') and mf.with_df: return dfmp2.MP2(mf, frozen, mo_coeff, mo_occ) else: return mp2.MP2(mf, frozen, mo_coeff, mo_occ)
def ccsd(self, t1=None, t2=None, eris=None, mbpt2=False): '''Ground-state CCSD. Kwargs: mbpt2 : bool Use one-shot MBPT2 approximation to CCSD. ''' if mbpt2: pt = mp2.MP2(self._scf, self.frozen, self.mo_coeff, self.mo_occ) self.e_corr, self.t2 = pt.kernel(eris=eris) nocc, nvir = self.t2.shape[1:3] self.t1 = np.zeros((nocc, nvir)) 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)
Grad = Gradients # Inject to RMP2 class mp2.MP2.Gradients = lib.class_as_method(Gradients) if __name__ == '__main__': from pyscf import gto from pyscf import scf mol = gto.M(atom=[["O", (0., 0., 0.)], [1, (0., -0.757, 0.587)], [1, (0., 0.757, 0.587)]], basis='631g') mf = scf.RHF(mol).run() mp = mp2.MP2(mf).run() g1 = Gradients(mp).kernel() # O -0.0000000000 -0.0000000000 0.0089211366 # H 0.0000000000 0.0222745046 -0.0044605683 # H 0.0000000000 -0.0222745046 -0.0044605683 print(lib.finger(g1) - -0.035681171529705444) mcs = mp.as_scanner() mol.set_geom_([["O", (0., 0., 0.001)], [1, (0., -0.757, 0.587)], [1, (0., 0.757, 0.587)]]) e1 = mcs(mol) mol.set_geom_([["O", (0., 0., -0.001)], [1, (0., -0.757, 0.587)], [1, (0., 0.757, 0.587)]]) e2 = mcs(mol) print(g1[0, 2], (e1 - e2) / 0.002 * lib.param.BOHR)
tmp = numpy.einsum('mknl,kilj->minj', tminj, X) emp2_f12-= numpy.einsum('mn,minj,minj', e_mn, tmp, tminj) * 2 emp2_f12+= numpy.einsum('mn,minj,nimj', e_mn, tmp, tminj) return emp2_f12 if __name__ == '__main__': from pyscf import scf from pyscf import gto mol = gto.Mole() #mol.atom = [ # [8 , (0. , 0. , 0.)], # [1 , (0. , -0.757 , 0.587)], # [1 , (0. , 0.757 , 0.587)]] mol.atom = 'Ne 0 0 0' mol.basis = 'cc-pvdz' mol.build() mf = scf.RHF(mol) print(mf.scf()) e = mp2.MP2(mf).kernel()[0] auxmol = mol.copy() #auxmol.basis = 'cc-pVDZ-F12-OptRI' auxmol.basis = ('ccpvdz-fit', 'cc-pVDZ-F12-OptRI') #auxmol.basis = 'cc-pVTZ' auxmol.build(False, False) print('MP2', e) e+= energy_f12(mf, auxmol, 1.) print('MP2-F12', e) print('e_tot', e+mf.e_tot)
def MP2(mf, frozen=[], mo_coeff=None, mo_occ=None): __doc__ = mp2.MP2.__doc__ if hasattr(mf, 'with_df'): return dfmp2.MP2(mf, frozen, mo_coeff, mo_occ) else: return mp2.MP2(mf, frozen, mo_coeff, mo_occ)
def MP2(mf): if hasattr(mf, 'with_df'): return dfmp2.MP2(mf) else: return mp2.MP2(mf)