コード例 #1
0
ファイル: __init__.py プロジェクト: yfyh2013/pyscf
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)
コード例 #2
0
    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)
コード例 #3
0

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)
コード例 #4
0
ファイル: mp2f12_slow.py プロジェクト: MSwenne/BEP
    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)
コード例 #5
0
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)
コード例 #6
0
ファイル: __init__.py プロジェクト: mattwelborn/pyscf
def MP2(mf):
    if hasattr(mf, 'with_df'):
        return dfmp2.MP2(mf)
    else:
        return mp2.MP2(mf)