Beispiel #1
0
    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
Beispiel #2
0
    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
Beispiel #3
0
 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'])
Beispiel #4
0
 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'])
Beispiel #5
0
    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)
Beispiel #6
0
 def __init__(self, mol):
     X2C_UHF.__init__(self, mol)
     rks.KohnShamDFT.__init__(self)
     self._numint = r_numint.RNumInt()
Beispiel #7
0
 def __init__(self, mol, xc='LDA,VWN'):
     dhf.UHF.__init__(self, mol)
     rks.KohnShamDFT.__init__(self, xc)
     self._numint = r_numint.RNumInt()
Beispiel #8
0
 def __init__(self, mol):
     X2C_UHF.__init__(self, mol)
     rks._dft_common_init_(self)
     self._numint = r_numint.RNumInt()
Beispiel #9
0
 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()
Beispiel #10
0
 def __init__(self, xc='LDA,VWN'):
     rks.KohnShamDFT.__init__(self, xc)
     self._numint = r_numint.RNumInt()