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)
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
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)
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)
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
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)