コード例 #1
0
ファイル: test_moints.py プロジェクト: sunchong137/pyscf_2017
def test_moints():
    # not yet working

    # The molecular calculation
    mol = gto.Mole()
    mol.unit = 'B'
    L = 60
    mol.atom.extend([
        ['He', (L / 2., L / 2., L / 2.)],
    ])
    mol.basis = 'cc-pvdz'
    mol.build()

    # The periodic calculation
    cell = pbcgto.Cell()
    cell.unit = 'B'
    cell.h = np.diag([L, L, L])
    cell.gs = np.array([40, 40, 40])
    cell.nimgs = [1, 1, 1]

    cell.atom = mol.atom
    cell.basis = mol.basis
    cell.build()

    #mf = hf.RHF(mol)
    mf = pbchf.RHF(cell)

    print(mf.scf())

    print "mo coeff shape", mf.mo_coeff.shape
    nmo = mf.mo_coeff.shape[1]
    print mf.mo_coeff

    eri_mo = pbcao2mo.get_mo_eri(cell, [mf.mo_coeff, mf.mo_coeff],
                                 [mf.mo_coeff, mf.mo_coeff])

    eri_ao = pbcao2mo.get_ao_eri(cell)
    eri_mo2 = ao2mo.incore.general(
        np.real(eri_ao), (mf.mo_coeff, mf.mo_coeff, mf.mo_coeff, mf.mo_coeff),
        compact=False)
    print eri_mo.shape
    print eri_mo2.shape
    for i in range(nmo * nmo):
        for j in range(nmo * nmo):
            print i, j, np.real(eri_mo[i, j]), eri_mo2[i, j]

    print("ERI dimension")
    print(eri_mo.shape), nmo
    Ecoul = 0.
    Ecoul2 = 0.
    nocc = 1

    print "diffs"
    for i in range(nocc):
        for j in range(nocc):
            Ecoul += 2 * eri_mo[i * nmo + i, j * nmo + j] - eri_mo[i * nmo + j,
                                                                   i * nmo + j]
            Ecoul2 += 2 * eri_mo2[i * nmo + i, j * nmo +
                                  j] - eri_mo2[i * nmo + j, i * nmo + j]
    print Ecoul, Ecoul2
コード例 #2
0
ファイル: hf.py プロジェクト: ncrubin/pyscf
    def get_jk_incore(self, cell=None, dm=None, hermi=1, verbose=logger.DEBUG, kpt=None):
        '''Get Coulomb (J) and exchange (K) following :func:`scf.hf.RHF.get_jk_`.

        *Incore* version of Coulomb and exchange build only.
        Currently RHF always uses PBC AO integrals (unlike RKS), since
        exchange is currently computed by building PBC AO integrals.
        '''
        if cell is None: cell = self.cell
        if dm is None: dm = self.make_rdm1()
        if kpt is None: kpt = self.kpt

        log = logger.Logger
        if isinstance(verbose, logger.Logger):
            log = verbose
        else:
            log = logger.Logger(cell.stdout, verbose)

        log.debug('JK PBC build: incore only with PBC integrals')

        if self._eri is None:
            log.debug('Building PBC AO integrals')
            if kpt is not None and pyscf.lib.norm(kpt) > 1.e-15:
                raise RuntimeError("Non-zero k points not implemented for exchange")
            self._eri = ao2mo.get_ao_eri(cell)

        if np.iscomplexobj(dm) or np.iscomplexobj(self._eri):
            vj, vk = dot_eri_dm_complex(self._eri, dm, hermi)
        else:
            vj, vk = pyscf.scf.hf.dot_eri_dm(self._eri, dm, hermi)

        return vj, vk
コード例 #3
0
ファイル: test_moints.py プロジェクト: berquist/pyscf
def test_moints():
    # not yet working

    # The molecular calculation
    mol = gto.Mole()
    mol.unit = 'B'
    L = 60
    mol.atom.extend([['He', (L/2.,L/2.,L/2.)], ])
    mol.basis = 'cc-pvdz'
    mol.build()

    # The periodic calculation
    cell = pbcgto.Cell()
    cell.unit = 'B'
    cell.h = np.diag([L,L,L])
    cell.gs = np.array([40,40,40])
    cell.nimgs = [1,1,1]

    cell.atom = mol.atom
    cell.basis = mol.basis
    cell.build()

    #mf = hf.RHF(mol)
    mf = pbchf.RHF(cell)

    print (mf.scf()) 

    print "mo coeff shape", mf.mo_coeff.shape
    nmo = mf.mo_coeff.shape[1]
    print mf.mo_coeff

    eri_mo = pbcao2mo.get_mo_eri(cell, 
             [mf.mo_coeff, mf.mo_coeff], [mf.mo_coeff, mf.mo_coeff])
    
    eri_ao = pbcao2mo.get_ao_eri(cell)
    eri_mo2 = ao2mo.incore.general(np.real(eri_ao), 
              (mf.mo_coeff,mf.mo_coeff,mf.mo_coeff,mf.mo_coeff), compact=False)
    print eri_mo.shape
    print eri_mo2.shape
    for i in range(nmo*nmo):
        for j in range(nmo*nmo):
            print i, j, np.real(eri_mo[i,j]), eri_mo2[i,j]


    print ("ERI dimension")
    print (eri_mo.shape), nmo
    Ecoul = 0.
    Ecoul2 = 0.
    nocc = 1

    print "diffs"
    for i in range(nocc):
        for j in range(nocc):
            Ecoul += 2*eri_mo[i*nmo+i,j*nmo+j] - eri_mo[i*nmo+j,i*nmo+j]
            Ecoul2 += 2*eri_mo2[i*nmo+i,j*nmo+j] - eri_mo2[i*nmo+j,i*nmo+j]
    print Ecoul, Ecoul2