def test_mdf_jk_rsh(self): L = 4. cell = pgto.Cell() cell.verbose = 0 cell.a = numpy.eye(3)*L cell.atom =[['He' , ( L/2+0., L/2+0. , L/2+1.)],] cell.basis = {'He': [[0, (4.0, 1.0)], [0, (1.0, 1.0)]]} cell.build() nao = cell.nao kpts = [[0.2, 0.2, 0.4]] numpy.random.seed(1) dm = numpy.random.random((nao,nao)) + .2j*numpy.random.random((nao,nao)) dm = dm.dot(dm.conj().T).reshape(1,nao,nao) vj0, vk0 = pbcdf.FFTDF(cell, kpts).get_jk(dm, hermi=0, kpts=kpts, omega=0.3, exxdiv='ewald') vj1, vk1 = pbcdf.GDF(cell, kpts).get_jk(dm, hermi=0, kpts=kpts, omega=0.3, exxdiv='ewald') vj2, vk2 = pbcdf.MDF(cell, kpts).get_jk(dm, hermi=0, kpts=kpts, omega=0.3, exxdiv='ewald') vj3, vk3 = pbcdf.AFTDF(cell, kpts).get_jk(dm, hermi=0, kpts=kpts, omega=0.3, exxdiv='ewald') self.assertAlmostEqual(lib.fp(vj0), 0.007500219791944259, 9) self.assertAlmostEqual(lib.fp(vk0), 0.0007724337759304424+0.00018842136513478529j, 9) self.assertAlmostEqual(abs(vj0-vj1).max(), 0, 8) self.assertAlmostEqual(abs(vj0-vj2).max(), 0, 8) self.assertAlmostEqual(abs(vj0-vj3).max(), 0, 8) self.assertAlmostEqual(abs(vk0-vk1).max(), 0, 8) self.assertAlmostEqual(abs(vk0-vk2).max(), 0, 8) self.assertAlmostEqual(abs(vk0-vk3).max(), 0, 8)
def test_mdf_band(self): mf = scf.RHF(cell) mf.with_df = df.MDF(cell).set(auxbasis='weigend') mf.with_df.kpts_band = kband[0] mf.kernel() self.assertAlmostEqual(lib.fp(mf.get_bands(kband[0])[0]), 1.9966027693492583, 6)
def test_mdf_jk_0d(self): L = 4. cell = pgto.Cell() cell.verbose = 0 cell.a = numpy.eye(3)*L cell.atom =[['He' , ( L/2+0., L/2+0. , L/2+1.)],] cell.basis = {'He': [[0, (4.0, 1.0)], [0, (1.0, 1.0)]]} cell.dimension = 0 cell.mesh = [60]*3 cell.build() nao = cell.nao numpy.random.seed(1) dm = numpy.random.random((nao,nao)) dm = dm.dot(dm.conj().T).reshape(1,nao,nao) vj0, vk0 = scf.hf.get_jk(cell, dm, hermi=0, omega=0.5) self.assertAlmostEqual(lib.fp(vj0), 0.08265798268352553, 9) self.assertAlmostEqual(lib.fp(vk0), 0.2375705823780625 , 9) vj1, vk1 = pbcdf.GDF(cell).get_jk(dm, hermi=0, omega=0.5, exxdiv=None) vj2, vk2 = pbcdf.MDF(cell).get_jk(dm, hermi=0, omega=0.5, exxdiv=None) vj3, vk3 = pbcdf.AFTDF(cell).get_jk(dm, hermi=0, omega=0.5, exxdiv=None) self.assertAlmostEqual(abs(vj0-vj1).max(), 0, 3) self.assertAlmostEqual(abs(vj0-vj2).max(), 0, 3) self.assertAlmostEqual(abs(vj0-vj3).max(), 0, 3) self.assertAlmostEqual(abs(vk0-vk1).max(), 0, 3) self.assertAlmostEqual(abs(vk0-vk2).max(), 0, 3) self.assertAlmostEqual(abs(vk0-vk3).max(), 0, 3)
def test_mdf_band(self): mf = scf.RHF(cell) mf.with_df = df.MDF(cell) mf.with_df.kpts_band = kband[0] mf.kernel() self.assertAlmostEqual(finger(mf.get_bands(kband[0])[0]), -0.093705179440648712, 9)
def test_mdf_band(self): mf = scf.RHF(cell) mf.with_df = df.MDF(cell).set(auxbasis='weigend') mf.with_df.kpts_band = kband[0] mf.kernel() self.assertAlmostEqual(finger(mf.get_bands(kband[0])[0]), -0.093705179423150875, 6)
def test_mdf_bands_high_cost(self): mf = scf.KRHF(cell) mf.with_df = df.MDF(cell).set(auxbasis='weigend') mf.with_df.kpts_band = kband mf.kpts = cell.make_kpts([2,1,1]) mf.kernel() self.assertAlmostEqual(finger(mf.get_bands(kband[0])[0]), 1.9685060546389677, 7) self.assertAlmostEqual(finger(mf.get_bands(kband)[0]), 1.0538585514926302, 8)
def test_mdf_bands(self): mf = scf.KRHF(cell) mf.with_df = df.MDF(cell) mf.with_df.kpts_band = kband mf.kpts = cell.make_kpts([2]*3) mf.kernel() self.assertAlmostEqual(finger(mf.get_bands(kband[0])[0]), -0.32205954835271078, 9) self.assertAlmostEqual(finger(mf.get_bands(kband)[0]), -0.64209375063268592, 9)
def test_mdf_bands(self): mf = scf.KRHF(cell) mf.with_df = df.MDF(cell).set(auxbasis='weigend') mf.with_df.kpts_band = kband mf.kpts = cell.make_kpts([2] * 3) mf.kernel() self.assertAlmostEqual(finger(mf.get_bands(kband[0])[0]), -0.32205949082575414, 7) self.assertAlmostEqual(finger(mf.get_bands(kband)[0]), -0.6420939191777898, 8)
################################################## # # 2D PBC with GDF # ################################################## t0 = time.time() mf = pbchf.KRHF(cell) mf.with_df = pdf.GDF(cell) mf.kpts = cell.make_kpts(kpts) mf.conv_tol = 1e-6 e.append(mf.kernel()) t.append(time.time() - t0) ################################################## # # 2D PBC with MDF # ################################################## t0 = time.time() mf = pbchf.KRHF(cell) mf.with_df = pdf.MDF(cell) mf.kpts = cell.make_kpts(kpts) mf.conv_tol = 1e-6 e.append(mf.kernel()) t.append(time.time() - t0) print('Energy (AFTDF) (FFTDF) (GDF) (MDF)') print(e) print('Timing (AFTDF) (FFTDF) (GDF) (MDF)') print(t)
# 2e-integrals. Permutation symmetry is not considered # mydf = df.FFTDF(cell) eri = mydf.get_eri() print('ERI shape (%d,%d)' % eri.shape) kpts = numpy.array(( (-.5, .5, .5), (.5, -.5, .5), (.5, .5, -.5), (.5, .5, .5), )) # # Note certain translational symmetry is required: # kj-ki+kl-kk = 2n\pi # ki, kj, kk = kpts[:3] kl = kk + ki - kj mydf.kpts = kpts eri = mydf.get_eri((ki, kj, kk, kl)) print('ERI shape (%d,%d)' % eri.shape) # # Use MDF method to get better accuracy. # mydf = df.MDF(cell, kpts) mydf.auxbasis = 'weigend' eri = mydf.get_eri((ki, kj, kk, kl)) print('ERI shape (%d,%d)' % eri.shape)
C 0.8917 2.6751 2.6751''', basis='6-31g', gs=[10] * 3, verbose=4, ) # # Switch on incore_anyway flag to ensure that all 2e-integrals are held in # memory. These integrals are needed by the post-HF methods. # # Note the "incore" version of molecule code is applied here. This limits the # system size. # cell.incore_anyway = True mydf = df.MDF(cell) mydf.auxbasis = 'weigend' mf = scf.RHF(cell) mf.with_df = mydf mf.kernel() # # Import CC, TDDFT moduel from the molecular implementations # from pyscf import cc, tddft mycc = cc.CCSD(mf) mycc.kernel() mytd = tddft.TDHF(mf) mytd.nstates = 5 mytd.kernel()