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