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)
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)
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)
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)
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)
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