def test_rsh_omega(self): rho0 = numpy.array([[1., 1., 0.1, 0.1], [0, 0, 0, 0], [0, 0, 0, 0], [.1, .1, 0.01, .01]]).reshape(4, 4, 1) ni = r_numint.RNumInt() ni.omega = 0.4 omega = 0.2 exc, vxc, fxc, kxc = ni.eval_xc_eff('ITYH,', rho0, deriv=1, omega=omega) vxc = xc_deriv.ud2ts(vxc) self.assertAlmostEqual(exc[0], -0.6376259665301467, 7) #self.assertAlmostEqual(float(vxc[0][0,0]), -0.8688965017309331, 7) # libxc-4.3.4 #self.assertAlmostEqual(float(vxc[0][0,1]), -0.04641346660681983, 7) # libxc-4.3.4 self.assertAlmostEqual(vxc[0,0,0], -0.8701119430520298, 7) # libxc-5.1.2 self.assertAlmostEqual(vxc[1,0,0], -0.032830587216387985, 7) # libxc-5.1.2 # vsigma of GGA may be problematic? #?self.assertAlmostEqual(float(vxc[1][0,0]), 0, 7) #?self.assertAlmostEqual(float(vxc[1][0,1]), 0, 7) exc, vxc, fxc, kxc = ni.eval_xc_eff('ITYH,', rho0, deriv=1) vxc = xc_deriv.ud2ts(vxc) self.assertAlmostEqual(exc[0], -0.542221740505985, 7) #self.assertAlmostEqual(float(vxc[0][0,0]), -0.7699824959456474, 7) # libxc-4.3.4 #self.assertAlmostEqual(float(vxc[0][0,1]), -0.04529004028228567, 7) # libxc-4.3.4 self.assertAlmostEqual(vxc[0,0,0], -0.7710640750107329, 7) # libxc-5.1.2 self.assertAlmostEqual(vxc[1,0,0], -0.032344719811289835, 7) # libxc-5.1.2
def test_rsh_omega(self): rho0 = numpy.array([[1., 1., 0.1, 0.1], [.1, .1, 0.01, .01]]).reshape(2, 4, 1) ni = r_numint.RNumInt() ni.omega = 0.4 omega = 0.2 exc, vxc, fxc, kxc = ni.eval_xc('ITYH,', rho0, deriv=1, omega=omega) self.assertAlmostEqual(float(exc), -0.6394181669577297, 7) #self.assertAlmostEqual(float(vxc[0][0,0]), -0.8688965017309331, 7) # libxc-4.3.4 #self.assertAlmostEqual(float(vxc[0][0,1]), -0.04641346660681983, 7) # libxc-4.3.4 self.assertAlmostEqual(float(vxc[0][0, 0]), -0.868874616534556, 7) # libxc-5.1.2 self.assertAlmostEqual(float(vxc[0][0, 1]), -0.0465674503111865, 7) # libxc-5.1.2 # vsigma of GGA may be problematic? #?self.assertAlmostEqual(float(vxc[1][0,0]), 0, 7) #?self.assertAlmostEqual(float(vxc[1][0,1]), 0, 7) exc, vxc, fxc, kxc = ni.eval_xc('ITYH,', rho0, deriv=1) self.assertAlmostEqual(float(exc), -0.5439673757289064, 7) #self.assertAlmostEqual(float(vxc[0][0,0]), -0.7699824959456474, 7) # libxc-4.3.4 #self.assertAlmostEqual(float(vxc[0][0,1]), -0.04529004028228567, 7) # libxc-4.3.4 self.assertAlmostEqual(float(vxc[0][0, 0]), -0.7698921068411966, 7) # libxc-5.1.2 self.assertAlmostEqual(float(vxc[0][0, 1]), -0.04592601580190408, 7) # libxc-5.1.2
def __init__(self, mol): dhf.UHF.__init__(self, mol) self.xc = 'LDA,VWN' self.grids = gen_grid.Grids(self.mol) self.grids.level = getattr(__config__, 'dft_rks_RKS_grids_level', self.grids.level) # Use rho to filter grids self.small_rho_cutoff = getattr(__config__, 'dft_rks_RKS_small_rho_cutoff', 1e-7) ################################################## # don't modify the following attributes, they are not input options self._numint = r_numint.RNumInt() self._keys = self._keys.union(['xc', 'grids', 'small_rho_cutoff'])
def __init__(self, mol): if mol.nelectron.__mod__(2) != 0: raise ValueError('Invalid electron number %i.' % mol.nelectron) X2C_RHF.__init__(self, mol) self.xc = 'LDA,VWN' self.grids = gen_grid.Grids(self.mol) self.grids.level = getattr(__config__, 'dft_rks_RKS_grids_level', self.grids.level) # Use rho to filter grids self.small_rho_cutoff = getattr(__config__, 'dft_rks_RKS_small_rho_cutoff', 1e-7) ################################################## # don't modify the following attributes, they are not input options self._numint = r_numint.RNumInt() self._keys = self._keys.union(['xc', 'grids', 'small_rho_cutoff'])
def test_eval_rho(self): n2c = mol.nao_2c() numpy.random.seed(10) ngrids = 100 coords = numpy.random.random((ngrids,3))*2 coords = coords[70:75] dm = numpy.random.random((n2c,n2c)) dm = dm + dm.T.conj() aoLa, aoLb, aoSa, aoSb = r_numint.eval_ao(mol, coords, deriv=1) rho0a = numpy.einsum('pi,ij,pj->p', aoLa[0], dm, aoLa[0].conj()) rho0b = numpy.einsum('pi,ij,pj->p', aoLb[0], dm, aoLb[0].conj()) rho0 = rho0a + rho0b aoL = numpy.array([aoLa[0],aoLb[0]]) m0 = numpy.einsum('api,ji,bpj,xab->xp', aoL.conj(), dm, aoL, lib.PauliMatrices) ni = r_numint.RNumInt() rho1 = ni.eval_rho(mol, (aoLa[0], aoLb[0]), dm, xctype='LDA') self.assertAlmostEqual(abs(rho1[0].imag).max(), 0, 9) self.assertAlmostEqual(abs(rho0-rho1[0]).max(), 0, 9) self.assertAlmostEqual(abs(m0 - rho1[1:4]).max(), 0, 9)
def __init__(self, mol): X2C_UHF.__init__(self, mol) rks.KohnShamDFT.__init__(self) self._numint = r_numint.RNumInt()
def __init__(self, mol, xc='LDA,VWN'): dhf.UHF.__init__(self, mol) rks.KohnShamDFT.__init__(self, xc) self._numint = r_numint.RNumInt()
def __init__(self, mol): X2C_UHF.__init__(self, mol) rks._dft_common_init_(self) self._numint = r_numint.RNumInt()
def __init__(self, mol, xc='LDA,VWN'): from pyscf.dft import r_numint dhf.DHF.__init__(self, mol) rks.KohnShamDFT.__init__(self, xc) self._numint = r_numint.RNumInt()
def __init__(self, xc='LDA,VWN'): rks.KohnShamDFT.__init__(self, xc) self._numint = r_numint.RNumInt()