def test_dmd_high_cost(self): cell = gto.Cell() cell.atom = ''' C 0.000000000000 0.000000000000 0.000000000000 C 1.685068664391 1.685068664391 1.685068664391 ''' cell.basis = {'C': [[0, (0.8, 1.0)], [1, (1.0, 1.0)]]} cell.pseudo = 'gth-pade' cell.a = ''' 0.000000000, 3.370137329, 3.370137329 3.370137329, 0.000000000, 3.370137329 3.370137329, 3.370137329, 0.000000000''' cell.unit = 'B' cell.verbose = 5 cell.build() nmp = [1, 1, 2] # treating 1*1*2 supercell at gamma point supcell = super_cell(cell, nmp) gmf = scf.GHF(supcell, exxdiv=None) ehf = gmf.kernel() gcc = cc.GCCSD(gmf) gcc.conv_tol = 1e-12 gcc.conv_tol_normt = 1e-10 gcc.max_cycle = 250 ecc, t1, t2 = gcc.kernel() print('GHF energy (supercell) %.7f \n' % (float(ehf) / 2.)) print('GCCSD correlation energy (supercell) %.7f \n' % (float(ecc) / 2.)) eom = eom_gccsd.EOMIP(gcc) e1, v = eom.ipccsd(nroots=2) eom = eom_gccsd.EOMEA(gcc) e2, v = eom.eaccsd(nroots=2, koopmans=True) # Running HF and CCSD with 1x1x2 Monkhorst-Pack k-point mesh kmf = scf.KGHF(cell, kpts=cell.make_kpts(nmp), exxdiv=None) ehf2 = kmf.kernel() mycc = cc.KGCCSD(kmf) mycc.conv_tol = 1e-12 mycc.conv_tol_normt = 1e-10 mycc.max_cycle = 250 ecc2, t1, t2 = mycc.kernel() print('GHF energy %.7f \n' % (float(ehf2))) print('GCCSD correlation energy %.7f \n' % (float(ecc2))) kptlist = cell.make_kpts(nmp) eom = EOMIP(mycc) e1_obt, v = eom.ipccsd(nroots=2, kptlist=[0]) eom = EOMEA(mycc) e2_obt, v = eom.eaccsd(nroots=2, koopmans=True, kptlist=[0]) assert (ehf / 2 - ehf2 < 1e-10) assert (ecc / 2 - ecc2 < 1e-10) assert (e1[0] - (e1_obt[0][0]) < 1e-7) assert (e2[0] - (e2_obt[0][0]) < 1e-7)
def test_ipccsd(self): e, v = mycc.ipccsd(nroots=1) self.assertAlmostEqual(e, 0.42789089871467728, 6) myeom = eom_gccsd.EOMIP(mycc) e, v = myeom.ipccsd(nroots=3) self.assertAlmostEqual(e[0], 0.42789089871467728, 5) self.assertAlmostEqual(e[1], 0.42789089871467728, 5) self.assertAlmostEqual(e[2], 0.50226873136932748, 5)
def ipccsd(self, nroots=1, left=False, koopmans=False, guess=None, partition=None, eris=None): from pyscf.cc import eom_gccsd return eom_gccsd.EOMIP(self).kernel(nroots, left, koopmans, guess, partition, eris)
def setUpClass(cls): """ Oxygen atom test vs ORCA-MRCC data. ORCA version 3.0.3 Input example: ! cc-pvdz UHF TightSCF %mrcc method "CCSDT" ETol 10 end %pal nprocs 4 end * xyzfile 0 1 initial.xyz ORCA reference energies: HF -74.6652538779 CCS -74.841686696943 CCSD -74.819248718982 CCSDT -74.829163218204 """ cls.mol = gto.Mole() cls.mol.verbose = 0 cls.mol.atom = "O 0 0 0" cls.mol.basis = 'cc-pvdz' cls.mol.build() cls.mf = scf.RHF(cls.mol) cls.mf.conv_tol = 1e-11 cls.mf.kernel() testing.assert_allclose(cls.mf.e_tot, -74.6652538779, atol=1e-4) cls.mf = scf.addons.convert_to_ghf(cls.mf) cls.ccsd = gccsd.GCCSD(cls.mf, frozen=2) cls.ccsd.kernel() cls.ccsd.conv_tol_normt = 1e-8 cls.ccsd.solve_lambda() cls.nroots = 2 cls.eomip = eom_gccsd.EOMIP(cls.ccsd) cls.eomip.conv_tol = 1e-12 cls.eomip.kernel(nroots=cls.nroots, koopmans=True) cls.eomea = eom_gccsd.EOMEA(cls.ccsd) cls.eomea.conv_tol = 1e-12 cls.eomea.kernel(nroots=cls.nroots, koopmans=True)
def test_ipccsd(self): e, v = mycc.ipccsd(nroots=1) self.assertAlmostEqual(e, 0.42789089871467728, 6) myeom = eom_gccsd.EOMIP(mycc) e, v = myeom.ipccsd(nroots=3) self.assertAlmostEqual(e[0], 0.42789089871467728, 5) self.assertAlmostEqual(e[1], 0.42789089871467728, 5) self.assertAlmostEqual(e[2], 0.50226873136932748, 5) e, lv = myeom.ipccsd(nroots=3, left=True) self.assertAlmostEqual(e[0], 0.4278908208680458, 5) self.assertAlmostEqual(e[1], 0.4278908208680482, 5) self.assertAlmostEqual(e[2], 0.5022686041399118, 5) # Sometimes these tests can fail due to left and right evecs # having small (~zero) overlap, causing numerical error. FIXME e = myeom.ipccsd_star_contract(e, v, lv) self.assertAlmostEqual(e[0], 0.4358615224789573, 5) self.assertAlmostEqual(e[1], 0.4358615224789594, 5)
def test_h2o_star(self): mol_h2o = gto.Mole() mol_h2o.atom = [ [8, [0.000000000000000, -0.000000000000000, -0.124143731294022]], [1, [0.000000000000000, -1.430522735894536, 0.985125550040314]], [1, [0.000000000000000, 1.430522735894536, 0.985125550040314]] ] mol_h2o.unit = 'B' mol_h2o.basis = { 'H': [[0, [5.4471780, 0.156285], [0.8245472, 0.904691]], [0, [0.1831916, 1.0]]], 'O': '3-21G' } mol_h2o.verbose = 9 mol_h2o.output = '/dev/null' mol_h2o.build() mf_h2o = scf.RHF(mol_h2o) mf_h2o.conv_tol_grad = 1e-12 mf_h2o.conv_tol = 1e-12 mf_h2o.kernel() mycc_h2o = cc.GCCSD(mf_h2o).run() mycc_h2o.conv_tol_normt = 1e-12 mycc_h2o.conv_tol = 1e-12 mycc_h2o.kernel() myeom = eom_gccsd.EOMIP(mycc_h2o) e = myeom.ipccsd_star(nroots=3) self.assertAlmostEqual(e[0], 0.410661965883, 6) myeom = eom_gccsd.EOMIP_Ta(mycc_h2o) e = myeom.ipccsd_star(nroots=3) self.assertAlmostEqual(e[0], 0.411695647736, 6) myeom = eom_gccsd.EOMEA(mycc_h2o) e = myeom.eaccsd_star(nroots=3) self.assertAlmostEqual(e[0], 0.250589854185, 6) myeom = eom_gccsd.EOMEA_Ta(mycc_h2o) e = myeom.eaccsd_star(nroots=3) self.assertAlmostEqual(e[0], 0.250720295150, 6)
def test_ip_matvec(self): numpy.random.seed(12) r1 = numpy.random.random((nocc)) - .9 + numpy.random.random( (nocc)) * .2j r2 = (numpy.random.random( (nocc, nocc, nvir)) - .9 + numpy.random.random( (nocc, nocc, nvir)) * .2j) myeom = eom_gccsd.EOMIP(mycc1) vec = myeom.amplitudes_to_vector(r1, r2) r1, r2 = myeom.vector_to_amplitudes(vec) self.assertAlmostEqual(lib.finger(r1), -0.27326789353857561 + 0.066555317833114358j, 12) self.assertAlmostEqual(lib.finger(r2), -4.6531653660668413 + 2.8855141740871528j, 12) imds = myeom.make_imds(eris1) vec1 = myeom.matvec(vec, imds) self.assertAlmostEqual(lib.finger(vec1), -3582.8270590959773 + 999.42924221648195j, 9) self.assertAlmostEqual(lib.finger(myeom.get_diag()), 430.02008558030951 + 815.74607152866815j, 9)
def setUpClass(cls): cls.mol = gto.Mole() cls.mol.verbose = 0 cls.mol.atom = "H 0 0 0; H 0.74 0 0" cls.mol.basis = 'ccpvdz' cls.mol.build() cls.mf = scf.GHF(cls.mol) cls.mf.kernel() cls.ccsd = gccsd.GCCSD(cls.mf) cls.ccsd.kernel() cls.ccsd.conv_tol_normt = 1e-8 cls.ccsd.solve_lambda() cls.nroots = 2 cls.eomip = eom_gccsd.EOMIP(cls.ccsd) cls.eomip.conv_tol = 1e-12 cls.eomip.kernel(nroots=cls.nroots) cls.eomea = eom_gccsd.EOMEA(cls.ccsd) cls.eomea.conv_tol = 1e-12 cls.eomea.kernel(nroots=cls.nroots)
def setUpClass(cls): """ H20 molecule test vs ORCA-MRCC data. ORCA reference energies: HF -75.97354725 CCS -- CCSD -76.185805898396 CCSDT -76.189327633478 """ cls.mol = gto.Mole() cls.mol.verbose = 0 cls.mol.atom = "O 0 0 0; H 0.758602 0.000000 0.504284; H 0.758602 0.000000 -0.504284" cls.mol.unit = "angstrom" cls.mol.basis = 'cc-pvdz' cls.mol.build() cls.mf = scf.GHF(cls.mol) cls.mf.conv_tol = 1e-11 cls.mf.kernel() testing.assert_allclose(cls.mf.e_tot, -75.97354725, atol=1e-4) cls.ccsd = gccsd.GCCSD(cls.mf, frozen=2) cls.ccsd.kernel() cls.ccsd.conv_tol_normt = 1e-8 cls.ccsd.solve_lambda() cls.nroots = 4 cls.eomip = eom_gccsd.EOMIP(cls.ccsd) cls.eomip.conv_tol = 1e-12 cls.eomip.kernel(nroots=cls.nroots) cls.eomea = eom_gccsd.EOMEA(cls.ccsd) cls.eomea.conv_tol = 1e-12 cls.eomea.kernel(nroots=cls.nroots)
def eomip_method(self): from pyscf.cc import eom_gccsd return eom_gccsd.EOMIP(self)