예제 #1
0
파일: __init__.py 프로젝트: wmizukami/pyscf
def RCCSD(mf, frozen=None, mo_coeff=None, mo_occ=None):
    __doc__ = ccsd.CCSD.__doc__
    import numpy
    from pyscf import lib
    from pyscf.soscf import newton_ah
    from pyscf.cc import dfccsd

    if isinstance(mf, scf.uhf.UHF):
        raise RuntimeError('RCCSD cannot be used with UHF method.')
    elif isinstance(mf, scf.rohf.ROHF):
        lib.logger.warn(mf, 'RCCSD method does not support ROHF method. ROHF object '
                        'is converted to UHF object and UCCSD method is called.')
        mf = scf.addons.convert_to_uhf(mf)
        return UCCSD(mf, frozen, mo_coeff, mo_occ)

    if isinstance(mf, newton_ah._CIAH_SOSCF) or not isinstance(mf, scf.hf.RHF):
        mf = scf.addons.convert_to_rhf(mf)

    if getattr(mf, 'with_df', None):
        return dfccsd.RCCSD(mf, frozen, mo_coeff, mo_occ)

    elif numpy.iscomplexobj(mo_coeff) or numpy.iscomplexobj(mf.mo_coeff):
        return rccsd.RCCSD(mf, frozen, mo_coeff, mo_occ)

    else:
        return ccsd.CCSD(mf, frozen, mo_coeff, mo_occ)
예제 #2
0
def make_mycc1():
    mf1 = copy.copy(mf)
    no = mol.nelectron // 2
    n = mol.nao_nr()
    nv = n - no
    mf1.mo_occ = numpy.zeros(mol.nao_nr())
    mf1.mo_occ[:no] = 2
    numpy.random.seed(12)
    mf1.mo_coeff = numpy.random.random((n, n))
    dm = mf1.make_rdm1(mf1.mo_coeff, mf1.mo_occ)
    fockao = mf1.get_hcore() + mf1.get_veff(mol, dm)
    mf1.mo_energy = numpy.einsum('pi,pq,qi->i', mf1.mo_coeff, fockao,
                                 mf1.mo_coeff)
    idx = numpy.hstack(
        [mf1.mo_energy[:no].argsort(), no + mf1.mo_energy[no:].argsort()])
    mf1.mo_coeff = mf1.mo_coeff[:, idx]
    mycc1 = dfccsd.RCCSD(mf1)
    eris1 = mycc1.ao2mo()
    numpy.random.seed(12)
    r1 = numpy.random.random((no, nv)) - .9
    r2 = numpy.random.random((no, no, nv, nv)) - .9
    r2 = r2 + r2.transpose(1, 0, 3, 2)
    mycc1.t1 = r1 * 1e-5
    mycc1.t2 = r2 * 1e-5
    return mf1, mycc1, eris1
예제 #3
0
def RCCSD(mf, frozen=0, mo_coeff=None, mo_occ=None):
    from pyscf import lib
    from pyscf import scf
    from pyscf.cc import rccsd
    from pyscf.cc import dfccsd
    if isinstance(mf, scf.uhf.UHF):
        raise RuntimeError('RCCSD cannot be used with UHF method.')
    elif isinstance(mf, scf.rohf.ROHF):
        lib.logger.warn(
            mf, 'RCCSD method does not support ROHF method. ROHF object '
            'is converted to UHF object and UCCSD method is called.')
        return UCCSD(mf, frozen, mo_coeff, mo_occ)

    mf = scf.addons.convert_to_rhf(mf)
    if hasattr(mf, 'with_df') and mf.with_df:
        return dfccsd.RCCSD(mf, frozen, mo_coeff, mo_occ)

    else:
        return rccsd.RCCSD(mf, frozen, mo_coeff, mo_occ)
예제 #4
0
def CCSD(mf, frozen=0, mo_coeff=None, mo_occ=None):
    __doc__ = ccsd.CCSD.__doc__
    import sys
    from pyscf import scf
    from pyscf.cc import dfccsd

    if isinstance(mf, scf.uhf.UHF) or mf.mol.spin != 0:
        return UCCSD(mf, frozen, mo_coeff, mo_occ)

    if 'dft' in str(mf.__module__):
        sys.stderr.write(
            'CCSD Warning: The first argument mf is a DFT object. '
            'CCSD calculation should be used with HF object')

    mf = scf.addons.convert_to_rhf(mf)
    if hasattr(mf, 'with_df') and mf.with_df:
        return dfccsd.RCCSD(mf, frozen, mo_coeff, mo_occ)
    else:
        return ccsd.CCSD(mf, frozen, mo_coeff, mo_occ)
예제 #5
0
파일: test_dfccsd.py 프로젝트: pyscf/pyscf
def setUpModule():
    global mol, mf, cc1, mycc, mf1, mycc1, eris1, no, nv
    mol = gto.Mole()
    mol.verbose = 7
    mol.output = '/dev/null'
    mol.atom = [
        [8 , (0. , 0.     , 0.)],
        [1 , (0. , -0.757 , 0.587)],
        [1 , (0. , 0.757  , 0.587)]]

    mol.basis = '631g'
    mol.build()
    mf = scf.RHF(mol).density_fit(auxbasis='weigend')
    mf.conv_tol_grad = 1e-8
    mf.kernel()

    cc1 = dfccsd.RCCSD(mf).run(conv_tol=1e-10)
    mycc = cc.ccsd.CCSD(mf).density_fit().set(max_memory=0)
    mycc.__dict__.update(cc1.__dict__)

    mf1, mycc1, eris1 = make_mycc1()
    no, nv = mycc1.t1.shape
예제 #6
0
from pyscf import cc
from pyscf.cc import dfccsd, eom_rccsd

mol = gto.Mole()
mol.verbose = 7
mol.output = '/dev/null'
mol.atom = [[8, (0., 0., 0.)], [1, (0., -0.757, 0.587)],
            [1, (0., 0.757, 0.587)]]

mol.basis = '631g'
mol.build()
mf = scf.RHF(mol).density_fit(auxbasis='weigend')
mf.conv_tol_grad = 1e-8
mf.kernel()

cc1 = dfccsd.RCCSD(mf).run(conv_tol=1e-10)
mycc = cc.ccsd.CCSD(mf).density_fit().set(max_memory=0)
mycc.__dict__.update(cc1.__dict__)


def make_mycc1():
    mf1 = copy.copy(mf)
    no = mol.nelectron // 2
    n = mol.nao_nr()
    nv = n - no
    mf1.mo_occ = numpy.zeros(mol.nao_nr())
    mf1.mo_occ[:no] = 2
    numpy.random.seed(12)
    mf1.mo_coeff = numpy.random.random((n, n))
    dm = mf1.make_rdm1(mf1.mo_coeff, mf1.mo_occ)
    fockao = mf1.get_hcore() + mf1.get_veff(mol, dm)