def test_ghf_exx_ewald(self): mf = pscf.GHF(cell, exxdiv='ewald') mf.init_guess = 'hcore' e1 = mf.kernel() self.assertAlmostEqual(e1, -4.3511582287379111, 8) self.assertTrue(mf.mo_coeff.dtype == numpy.double) kmf = pscf.KGHF(cell, [[0,0,0]], exxdiv='ewald') kmf.init_guess = 'hcore' e0 = kmf.kernel() self.assertTrue(numpy.allclose(e0,e1)) # # test bands # numpy.random.seed(1) # kpts_band = numpy.random.random((2,3)) # e1, c1 = mf.get_bands(kpts_band) # e0, c0 = kmf.get_bands(kpts_band) # self.assertAlmostEqual(abs(e0[0]-e1[0]).max(), 0, 7) # self.assertAlmostEqual(abs(e0[1]-e1[1]).max(), 0, 7) # self.assertAlmostEqual(lib.finger(e1[0]), -6.2986775452228283, 7) # self.assertAlmostEqual(lib.finger(e1[1]), -7.6616273746782362, 7) numpy.random.seed(1) k = numpy.random.random(3) mf = pscf.GHF(cell, k, exxdiv='ewald') e1 = mf.kernel() self.assertAlmostEqual(e1, -4.2048655827967139, 8) self.assertTrue(mf.mo_coeff.dtype == numpy.complex128) kmf = pscf.KGHF(cell, k, exxdiv='ewald') e0 = kmf.kernel() self.assertTrue(numpy.allclose(e0,e1))
def test_init(self): from pyscf.pbc import dft cell_u = cell.copy() cell_u.spin = 2 self.assertTrue(isinstance(pscf.RKS (cell ), dft.rks.RKS )) self.assertTrue(isinstance(pscf.RKS (cell_u), dft.roks.ROKS )) self.assertTrue(isinstance(pscf.UKS (cell ), dft.uks.UKS )) self.assertTrue(isinstance(pscf.ROKS (cell ), dft.roks.ROKS )) self.assertTrue(isinstance(pscf.KS (cell ), dft.rks.RKS )) self.assertTrue(isinstance(pscf.KS (cell_u), dft.uks.UKS )) self.assertTrue(isinstance(pscf.KRKS (cell ), dft.krks.KRKS )) self.assertTrue(isinstance(pscf.KRKS (cell_u), dft.krks.KRKS )) self.assertTrue(isinstance(pscf.KUKS (cell ), dft.kuks.KUKS )) self.assertTrue(isinstance(pscf.KROKS(cell ), dft.kroks.KROKS)) self.assertTrue(isinstance(pscf.KKS (cell ), dft.krks.KRKS )) self.assertTrue(isinstance(pscf.KKS (cell_u), dft.kuks.KUKS )) self.assertTrue(isinstance(pscf.RHF (cell ), pscf.hf.RHF )) self.assertTrue(isinstance(pscf.RHF (cell_u), pscf.rohf.ROHF )) self.assertTrue(isinstance(pscf.KRHF (cell ), pscf.khf.KRHF )) self.assertTrue(isinstance(pscf.KRHF (cell_u), pscf.khf.KRHF )) self.assertTrue(isinstance(pscf.UHF (cell ), pscf.uhf.UHF )) self.assertTrue(isinstance(pscf.KUHF (cell_u), pscf.kuhf.KUHF )) self.assertTrue(isinstance(pscf.GHF (cell ), pscf.ghf.GHF )) self.assertTrue(isinstance(pscf.KGHF (cell_u), pscf.kghf.KGHF )) self.assertTrue(isinstance(pscf.ROHF (cell ), pscf.rohf.ROHF )) self.assertTrue(isinstance(pscf.ROHF (cell_u), pscf.rohf.ROHF )) self.assertTrue(isinstance(pscf.KROHF(cell ), pscf.krohf.KROHF)) self.assertTrue(isinstance(pscf.KROHF(cell_u), pscf.krohf.KROHF)) self.assertTrue(isinstance(pscf.HF (cell ), pscf.hf.RHF )) self.assertTrue(isinstance(pscf.HF (cell_u), pscf.uhf.UHF )) self.assertTrue(isinstance(pscf.KHF (cell ), pscf.khf.KRHF )) self.assertTrue(isinstance(pscf.KHF (cell_u), pscf.kuhf.KUHF ))
def test_kghf_1d(self): L = 4 cell = pbcgto.Cell() cell.build( unit='B', a=np.eye(3) * 4, mesh=[8, 20, 20], atom='''He 2 0 0; He 3 0 0''', dimension=1, low_dim_ft_type='inf_vacuum', verbose=0, rcut=7.427535697575829, basis={ 'He': [ [0, (0.8, 1.0)], #[0, (1.0, 1.0)], [0, (1.2, 1.0)] ] }) mf = pscf.KGHF(cell) mf.with_df = df.AFTDF(cell) mf.with_df.eta = 0.2 mf.init_guess = 'hcore' mf.kpts = cell.make_kpts([2, 1, 1]) e1 = mf.kernel() self.assertAlmostEqual(e1, -3.5112358424228809, 4)
def test_convert_to_kscf(self): from pyscf.pbc import df from pyscf.soscf import newton_ah cell1 = cell.copy() cell1.verbose = 0 pscf.addons.convert_to_rhf(pscf.KRHF(cell1)) pscf.addons.convert_to_uhf(pscf.KRHF(cell1)) pscf.addons.convert_to_ghf(pscf.KRHF(cell1)) pscf.addons.convert_to_rhf(pscf.KROHF(cell1)) pscf.addons.convert_to_uhf(pscf.KROHF(cell1)) pscf.addons.convert_to_ghf(pscf.KROHF(cell1)) pscf.addons.convert_to_rhf(pscf.KUHF(cell1)) pscf.addons.convert_to_uhf(pscf.KUHF(cell1)) pscf.addons.convert_to_ghf(pscf.KUHF(cell1)) #pscf.addons.convert_to_rhf(pscf.KGHF(cell1)) #pscf.addons.convert_to_uhf(pscf.KGHF(cell1)) pscf.addons.convert_to_ghf(pscf.KGHF(cell1)) self.assertTrue (isinstance(pscf.addons.convert_to_rhf(pscf.KRHF(cell1).newton().density_fit().x2c()), newton_ah._CIAH_SOSCF)) self.assertFalse(isinstance(pscf.addons.convert_to_uhf(pscf.KRHF(cell1).newton().density_fit().x2c()), newton_ah._CIAH_SOSCF)) self.assertFalse(isinstance(pscf.addons.convert_to_ghf(pscf.KRHF(cell1).newton().density_fit().x2c()), newton_ah._CIAH_SOSCF)) self.assertFalse(isinstance(pscf.addons.convert_to_rhf(pscf.KUHF(cell1).newton().density_fit().x2c()), newton_ah._CIAH_SOSCF)) self.assertTrue (isinstance(pscf.addons.convert_to_uhf(pscf.KUHF(cell1).newton().density_fit().x2c()), newton_ah._CIAH_SOSCF)) self.assertFalse(isinstance(pscf.addons.convert_to_ghf(pscf.KUHF(cell1).newton().density_fit().x2c()), newton_ah._CIAH_SOSCF)) #self.assertFalse(isinstance(pscf.addons.convert_to_rhf(pscf.KGHF(cell1).newton().density_fit().x2c()), newton_ah._CIAH_SOSCF)) #self.assertFalse(isinstance(pscf.addons.convert_to_uhf(pscf.KGHF(cell1).newton().density_fit().x2c()), newton_ah._CIAH_SOSCF)) #self.assertTrue (isinstance(pscf.addons.convert_to_ghf(pscf.KGHF(cell1).newton().density_fit().x2c()), newton_ah._CIAH_SOSCF)) mf1 = pscf.khf.KRHF(cell1) cell2 = cell1.copy() cell2.spin = 2 mf2 = mf1.convert_from_(kmf_u) self.assertEqual(kmf_u.kpts.shape, (2, 3)) self.assertEqual(mf2.kpts.shape, (2, 3)) self.assertTrue (isinstance(mf2, pscf.khf.KRHF)) self.assertTrue (isinstance(mf1.convert_from_(pscf.KUHF(cell2)), pscf.khf.KRHF)) self.assertFalse(isinstance(mf1.convert_from_(pscf.KUHF(cell2)), pscf.krohf.KROHF)) self.assertFalse(isinstance(mf1.convert_from_(kmf_u.newton()), newton_ah._CIAH_SOSCF)) self.assertTrue (isinstance(mf1.convert_from_(pscf.KUHF(cell2).density_fit()).with_df, df.df.GDF)) self.assertTrue (isinstance(mf1.convert_from_(pscf.KUHF(cell2).mix_density_fit()).with_df, df.mdf.MDF)) self.assertFalse(isinstance(mf1.convert_from_(pscf.KROHF(cell2)), pscf.krohf.KROHF)) self.assertRaises(AssertionError, mf1.convert_from_, pscf.UHF(cell1)) mf1 = pscf.krohf.KROHF(cell1) self.assertTrue (isinstance(mf1.convert_from_(kmf_u), pscf.krohf.KROHF)) self.assertTrue (isinstance(mf1.convert_from_(pscf.KUHF(cell2)), pscf.krohf.KROHF)) self.assertFalse(isinstance(mf1.convert_from_(kmf_u.newton()), newton_ah._CIAH_SOSCF)) self.assertTrue (isinstance(mf1.convert_from_(pscf.KUHF(cell2).density_fit()).with_df, df.df.GDF)) self.assertTrue (isinstance(mf1.convert_from_(pscf.KUHF(cell2).mix_density_fit()).with_df, df.mdf.MDF)) self.assertTrue (isinstance(mf1.convert_from_(kmf_r), pscf.krohf.KROHF)) self.assertRaises(AssertionError, mf1.convert_from_, pscf.UHF(cell1)) self.assertTrue(isinstance(pscf.addons.convert_to_rhf(pscf.KROHF(cell2)), pscf.krohf.KROHF)) #self.assertTrue(isinstance(pscf.addons.convert_to_rhf(pscf.KROHF(cell2).newton()), pscf.krohf.KROHF)) mf1 = pscf.kuhf.KUHF(cell1) self.assertTrue (isinstance(mf1.convert_from_(kmf_r), pscf.kuhf.KUHF)) self.assertFalse(isinstance(mf1.convert_from_(kmf_r.newton()), newton_ah._CIAH_SOSCF)) self.assertTrue (isinstance(mf1.convert_from_(kmf_r.density_fit()).with_df, df.df.GDF)) self.assertTrue (isinstance(mf1.convert_from_(kmf_ro.mix_density_fit()).with_df, df.mdf.MDF)) self.assertRaises(AssertionError, mf1.convert_from_, pscf.UHF(cell1))
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_he_112_diag(self): kpts = cell.make_kpts([1, 1, 2]) kmf = pbcscf.KGHF(cell, kpts, exxdiv=None) Escf = kmf.scf() cc = kccsd.KGCCSD(kmf) Ecc = cc.kernel()[0] self._test_ip_diag(cc) self._test_ea_diag(cc)
def test_supercell_vs_kpt(self): # Running HF and CCSD with 1x1x2 Monkhorst-Pack k-point mesh kmf = pbcscf.KGHF(cell, kpts=cell.make_kpts(nmp), exxdiv=None) kmf.kernel() mycc = pbcc.KGCCSD(kmf) mycc.conv_tol = 1e-12 mycc.conv_tol_normt = 1e-10 ecc2, t1, t2 = mycc.kernel() ecc_ref = -0.01044680113334205 print(ecc2) self.assertAlmostEqual(abs(ecc_ref - ecc2), 0, 10)
def test_211_n3(self): cell = make_test_cell.test_cell_n3_diffuse() nk = (2, 1, 1) abs_kpts = cell.make_kpts(nk, wrap_around=True) # GHF calculation kmf = pbcscf.KGHF(cell, abs_kpts, exxdiv=None) kmf.conv_tol = 1e-14 escf = kmf.scf() self.assertAlmostEqual(escf, -6.1870676561726574, 9) # GCCSD calculation cc = pbcc.kccsd.CCSD(kmf) cc.conv_tol = 1e-8 ecc, t1, t2 = cc.kernel() self.assertAlmostEqual(ecc, -0.067648363303697334, 6)