예제 #1
0
파일: test_df.py 프로젝트: ncrubin/pyscf
 def test_aux_e2_becke(self):
     cell = pgto.Cell()
     cell.unit = 'B'
     cell.h = np.eye(3) * 3.
     cell.gs = np.array([20,20,20])
     cell.atom = 'He 0 1 1; He 1 1 0'
     cell.basis = { 'He': [[0, (10.8, 1.0)],
                           [0, (300.2, 1.0)]] }
     cell.verbose = 0
     cell.build(0, 0)
     auxcell = df.format_aux_basis(cell)
     auxcell.nimgs = [3,3,3]
     a1 = df.aux_e2(cell, auxcell, 'cint3c1e_sph')
     grids = pdft.gen_grid.BeckeGrids(cell)
     grids.level = 3
     #grids = pdft.gen_grid.UniformGrids(cell)
     grids.build_()
     a2 = df.aux_e2_grid(cell, auxcell, grids)
     self.assertAlmostEqual(np.linalg.norm(a1-a2), 0, 4)
예제 #2
0
 def test_jmod_pw_poisson(self):
     modcell = df.format_aux_basis(cell, {'He': [[0, [3, 1]]]})
     vjmod = poisson.get_jmod_pw_poisson(cell, modcell)
     self.assertAlmostEqual(finger(vjmod), 0.15610007121209812, 6)
예제 #3
0
 def test_nuc_gaussian_mod(self):
     modcell = df.format_aux_basis(cell, {'He': [[0, [3, 1]]]})
     vj = poisson.get_nuc_gaussian_mod(cell, auxcell, modcell)
     self.assertAlmostEqual(finger(vj), -0.076168456359574366, 6)
예제 #4
0
 def test_j_gaussian_mod(self):
     modcell = df.format_aux_basis(cell, {'He': [[0, [3, 1]]]})
     vj = poisson.get_j_gaussian_mod(cell, dm, auxcell, modcell)
     self.assertAlmostEqual(finger(vj), -0.040340371628397542, 6)
예제 #5
0
cell.unit = 'B'
cell.atom = '''He     2.    2.       3.
               He     3.    2.       3.'''
cell.basis = {'He': [[0, (1.0, 1.0)]]}
cell.verbose = 5
cell.output = '/dev/null'
cell.build()
mf = pyscf.dft.RKS(cell)
mf.kernel()
dm = mf.make_rdm1()
mf = pdft.RKS(cell)
mf.xc = 'LDA,VWN'
auxbasis = {'He': pyscf.gto.expand_etbs([[0, 11, .1, 2.],
                                         [1, 3 , .3, 3.],
                                         [2, 3 , .3, 3.]])}
auxcell = df.format_aux_basis(cell, auxbasis)
auxcell.nimgs = [3,3,3]

def finger(a):
    w = numpy.cos(numpy.arange(a.size))
    return numpy.dot(a.ravel(), w)

class KnowValues(unittest.TestCase):
    def test_j_uniform_mod(self):
        vj = poisson.get_j_uniform_mod(cell, dm, auxcell)
        self.assertAlmostEqual(finger(vj), 0.11651805186830155, 6)

    def test_nuc_uniform_mod(self):
        vj = poisson.get_nuc_uniform_mod(cell, auxcell)
        self.assertAlmostEqual(finger(vj), -0.23226970826678728, 6)
예제 #6
0
파일: poisson.py 프로젝트: ncrubin/pyscf
    L = 4.
    n = 30
    cell = pgto.Cell()
    cell.h = np.diag([L,L,L])
    cell.gs = np.array([n,n,n])

    cell.atom = '''He     0.    0.       0.
                   He     1.    1.       1.'''
    cell.basis = '631g'#{'He': [[0, (1.0, 1.0)]]}
    cell.verbose = 5
    cell.build()
    mf = pdft.RKS(cell)
    mf.xc = 'LDA,VWN'
    auxbasis = {'He': genbas(1.8, (100,.05), 0)
                     +genbas(2. , (10,0.1), 1)
                     +genbas(2. , (10,0.1), 2)}
    auxcell = df.format_aux_basis(cell, auxbasis)
    gds = pdft.gen_grid.BeckeGrids(cell)
    gds.level = 3
    gds.build_()
    mf.get_j = lambda cell, dm, *args: get_j_uniform_mod(cell, dm, auxcell, grids=gds)
    mf.get_hcore = lambda cell, *args: get_nuc_uniform_mod(cell, auxcell, grids=gds) + pscf.hf.get_t(cell)
    print mf.scf() # ~ -4.32049313872

    modcell = df.format_aux_basis(cell, {'He': [[0, [3, 1]]]})
    vjmod = get_jmod_pw_poisson(cell, modcell, grids=gds)
    mf.get_j = lambda cell, dm, *args: get_j_gaussian_mod(cell, dm, auxcell, modcell, grids=gds) + vjmod
    mf.get_hcore = lambda cell, *args: get_nuc_gaussian_mod(cell, auxcell, modcell, grids=gds)-vjmod + pscf.hf.get_t(cell)
    print mf.scf() # ~ -4.32049449915