コード例 #1
0
    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)
コード例 #2
0
 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)
コード例 #3
0
    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)
コード例 #4
0
 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)
コード例 #5
0
 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)
コード例 #6
0
ファイル: test_band.py プロジェクト: zzy2014/pyscf
 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)
コード例 #7
0
 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)
コード例 #8
0
 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)
コード例 #9
0
##################################################
#
# 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)
コード例 #10
0
# 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)
コード例 #11
0
              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()