示例#1
0
    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))
示例#2
0
    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  ))
示例#3
0
文件: test_khf.py 项目: pyscf/pyscf
 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)
示例#4
0
    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))
示例#5
0
    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)
示例#6
0
    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)
示例#7
0
 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)
示例#8
0
    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)