def auxmol_set(self, auxbas="weigend"): print "GENERATING INTEGRALS" auxmol = gto.Mole() auxmol.atom = self.mol.atom auxmol.basis = auxbas auxmol.build() mol = self.mol nao = self.n_ao = mol.nao_nr() naux = self.n_aux = auxmol.nao_nr() #print nao #print naux atm, bas, env = gto.conc_env(mol._atm, mol._bas, mol._env, auxmol._atm, auxmol._bas, auxmol._env) eri3c = np.empty((nao, nao, naux)) pi = 0 for i in range(mol.nbas): pj = 0 for j in range(mol.nbas): pk = 0 for k in range(mol.nbas, mol.nbas + auxmol.nbas): shls = (i, j, k) buf = gto.getints_by_shell('cint3c2e_sph', shls, atm, bas, env) di, dj, dk = buf.shape eri3c[pi:pi + di, pj:pj + dj, pk:pk + dk] = buf pk += dk pj += dj pi += di print "ERI3C INTEGRALS GENERATED" eri2c = np.empty((naux, naux)) pk = 0 for k in range(mol.nbas, mol.nbas + auxmol.nbas): pl = 0 for l in range(mol.nbas, mol.nbas + auxmol.nbas): shls = (k, l) buf = gto.getints_by_shell('cint2c2e_sph', shls, atm, bas, env) dk, dl = buf.shape eri2c[pk:pk + dk, pl:pl + dl] = buf pl += dl pk += dk print "ERI2C INTEGRALS GENERATED" self.eri3c = eri3c self.eri2c = eri2c RSinv = MatrixPower(eri2c, -0.5) with sess.as_default(): self.B = tf.einsum( 'ijp,pq->ijq', self.toTF(eri3c), self.toTF(RSinv) ).eval( ) #self.B = np.einsum('ijp,pq->ijq', self.eri3c, RSinv) # (AO,AO,n_aux) return
def test_rdirect_mapdm(self): numpy.random.seed(1) n2c = nao * 2 dm = numpy.random.random((n2c,n2c)) + \ numpy.random.random((n2c,n2c)) * 1j eri0 = numpy.zeros((3, n2c, n2c, n2c, n2c), dtype=numpy.complex) c_atm = numpy.array(mol._atm, dtype=numpy.int32) c_bas = numpy.array(mol._bas, dtype=numpy.int32) c_env = numpy.array(mol._env) i0 = 0 for i in range(mol.nbas): j0 = 0 for j in range(mol.nbas): k0 = 0 for k in range(mol.nbas): l0 = 0 for l in range(mol.nbas): buf = gto.getints_by_shell('int2e_g1_spinor', (i, j, k, l), c_atm, c_bas, c_env, 3) di, dj, dk, dl = buf.shape[1:] eri0[:, i0:i0 + di, j0:j0 + dj, k0:k0 + dk, l0:l0 + dl] = buf l0 += dl k0 += dk j0 += dj i0 += di vk0 = numpy.einsum('nijkl,jk->nil', eri0, dm) vj1, vk1 = _vhf.rdirect_mapdm('int2e_g1_spinor', 'a4ij', ('lk->s2ij', 'jk->s1il'), dm, 3, mol._atm, mol._bas, mol._env) self.assertTrue(numpy.allclose(vk0, vk1))
def test_direct_mapdm(self): numpy.random.seed(1) dm = numpy.random.random((nao, nao)) eri0 = numpy.zeros((3, nmo, nmo, nmo, nmo)) c_atm = numpy.array(mol._atm, dtype=numpy.int32) c_bas = numpy.array(mol._bas, dtype=numpy.int32) c_env = numpy.array(mol._env) i0 = 0 for i in range(mol.nbas): j0 = 0 for j in range(mol.nbas): k0 = 0 for k in range(mol.nbas): l0 = 0 for l in range(mol.nbas): buf = gto.getints_by_shell('int2e_ip1_sph', (i, j, k, l), c_atm, c_bas, c_env, 3) di, dj, dk, dl = buf.shape[1:] eri0[:, i0:i0 + di, j0:j0 + dj, k0:k0 + dk, l0:l0 + dl] = buf l0 += dl k0 += dk j0 += dj i0 += di vj0 = numpy.einsum('nijkl,lk->nij', eri0, dm) vk0 = numpy.einsum('nijkl,jk->nil', eri0, dm) vj1, vk1 = _vhf.direct_mapdm('int2e_ip1_sph', 's2kl', ('lk->s1ij', 'jk->s1il'), dm, 3, mol._atm, mol._bas, mol._env) self.assertTrue(numpy.allclose(vj0, vj1)) self.assertTrue(numpy.allclose(vk0, vk1))
def test_rdirect_bindm(self): n2c = nao * 2 eri0 = numpy.zeros((n2c, n2c, n2c, n2c), dtype=numpy.complex) mfr = scf.DHF(mol) mfr.scf() dm = mfr.make_rdm1()[:n2c, :n2c].copy() c_atm = numpy.array(mol._atm, dtype=numpy.int32) c_bas = numpy.array(mol._bas, dtype=numpy.int32) c_env = numpy.array(mol._env) i0 = 0 for i in range(mol.nbas): j0 = 0 for j in range(mol.nbas): k0 = 0 for k in range(mol.nbas): l0 = 0 for l in range(mol.nbas): buf = gto.getints_by_shell('int2e_spsp1_spinor', (i, j, k, l), c_atm, c_bas, c_env, 1) di, dj, dk, dl = buf.shape eri0[i0:i0 + di, j0:j0 + dj, k0:k0 + dk, l0:l0 + dl] = buf l0 += dl k0 += dk j0 += dj i0 += di vk0 = numpy.einsum('ijkl,jk->il', eri0, dm) vk1 = _vhf.rdirect_bindm('int2e_spsp1_spinor', 's4', ('jk->s1il', ), (dm, ), 1, mol._atm, mol._bas, mol._env) self.assertTrue(numpy.allclose(vk0, vk1))
def test_rdirect_mapdm(self): numpy.random.seed(1) n2c = nao*2 dm = numpy.random.random((n2c,n2c)) + \ numpy.random.random((n2c,n2c)) * 1j eri0 = numpy.zeros((3,n2c,n2c,n2c,n2c),dtype=numpy.complex) c_atm = numpy.array(mol._atm, dtype=numpy.int32) c_bas = numpy.array(mol._bas, dtype=numpy.int32) c_env = numpy.array(mol._env) i0 = 0 for i in range(mol.nbas): j0 = 0 for j in range(mol.nbas): k0 = 0 for k in range(mol.nbas): l0 = 0 for l in range(mol.nbas): buf = gto.getints_by_shell('cint2e_g1', (i,j,k,l), c_atm, c_bas, c_env, 3) di,dj,dk,dl = buf.shape[1:] eri0[:,i0:i0+di,j0:j0+dj,k0:k0+dk,l0:l0+dl] = buf l0 += dl k0 += dk j0 += dj i0 += di vk0 = numpy.einsum('nijkl,jk->nil', eri0, dm) vj1, vk1 = _vhf.rdirect_mapdm('cint2e_g1', 'a4ij', ('lk->s2ij', 'jk->s1il'), dm, 3, mol._atm, mol._bas, mol._env) self.assertTrue(numpy.allclose(vk0,vk1))
def test_direct_mapdm(self): numpy.random.seed(1) dm = numpy.random.random((nao,nao)) eri0 = numpy.zeros((3,nmo,nmo,nmo,nmo)) c_atm = numpy.array(mol._atm, dtype=numpy.int32) c_bas = numpy.array(mol._bas, dtype=numpy.int32) c_env = numpy.array(mol._env) i0 = 0 for i in range(mol.nbas): j0 = 0 for j in range(mol.nbas): k0 = 0 for k in range(mol.nbas): l0 = 0 for l in range(mol.nbas): buf = gto.getints_by_shell('cint2e_ip1_sph', (i,j,k,l), c_atm, c_bas, c_env, 3) di,dj,dk,dl = buf.shape[1:] eri0[:,i0:i0+di,j0:j0+dj,k0:k0+dk,l0:l0+dl] = buf l0 += dl k0 += dk j0 += dj i0 += di vj0 = numpy.einsum('nijkl,lk->nij', eri0, dm) vk0 = numpy.einsum('nijkl,jk->nil', eri0, dm) vj1, vk1 = _vhf.direct_mapdm('cint2e_ip1_sph', 's2kl', ('lk->s1ij', 'jk->s1il'), dm, 3, mol._atm, mol._bas, mol._env) self.assertTrue(numpy.allclose(vj0,vj1)) self.assertTrue(numpy.allclose(vk0,vk1))
def test_rdirect_bindm(self): n2c = nao*2 eri0 = numpy.zeros((n2c,n2c,n2c,n2c),dtype=numpy.complex) mfr = scf.DHF(mol) mfr.scf() dm = mfr.make_rdm1()[:n2c,:n2c].copy() c_atm = numpy.array(mol._atm, dtype=numpy.int32) c_bas = numpy.array(mol._bas, dtype=numpy.int32) c_env = numpy.array(mol._env) i0 = 0 for i in range(mol.nbas): j0 = 0 for j in range(mol.nbas): k0 = 0 for k in range(mol.nbas): l0 = 0 for l in range(mol.nbas): buf = gto.getints_by_shell('cint2e_spsp1', (i,j,k,l), c_atm, c_bas, c_env, 1) di,dj,dk,dl = buf.shape eri0[i0:i0+di,j0:j0+dj,k0:k0+dk,l0:l0+dl] = buf l0 += dl k0 += dk j0 += dj i0 += di vk0 = numpy.einsum('ijkl,jk->il', eri0, dm) vk1 = _vhf.rdirect_bindm('cint2e_spsp1', 's4', ('jk->s1il',), (dm,), 1, mol._atm, mol._bas, mol._env) self.assertTrue(numpy.allclose(vk0,vk1))
def calc_eri2c(mol, auxmol, Ikl): nao = mol.nao_nr() naux = auxmol.nao_nr() # Merging M1 and M2 to compute the integrals. atm, bas, env = gto.conc_env(mol._atm, mol._bas, mol._env, auxmol._atm, auxmol._bas, auxmol._env) eri2c = np.empty((naux, naux)) pk = 0 for k in range(mol.nbas, mol.nbas + auxmol.nbas): pl = 0 for l in range(mol.nbas, mol.nbas + auxmol.nbas): shls = (k, l) buf = gto.getints_by_shell(Ikl, shls, atm, bas, env) dk, dl = buf.shape eri2c[pk:pk + dk, pl:pl + dl] = buf pl += dl pk += dk return eri2c
def auxmol_set(self, auxbas="weigend"): print "GENERATING INTEGRALS" auxmol = gto.Mole() auxmol.atom = self.mol.atom auxmol.basis = auxbas auxmol.build() mol = self.mol nao = self.n_ao = mol.nao_nr() naux = self.n_aux = auxmol.nao_nr() atm, bas, env = gto.conc_env(mol._atm, mol._bas, mol._env, auxmol._atm, auxmol._bas, auxmol._env) eri3c = df.incore.aux_e1(mol, auxmol, intor='cint3c2e_sph', aosym='s1', comp=1) eri3c = eri3c.reshape(naux, nao, nao).T print "ERI3C INTEGRALS GENERATED" eri2c = np.empty((naux, naux)) pk = 0 for k in range(mol.nbas, mol.nbas + auxmol.nbas): pl = 0 for l in range(mol.nbas, mol.nbas + auxmol.nbas): shls = (k, l) buf = gto.getints_by_shell('cint2c2e_sph', shls, atm, bas, env) dk, dl = buf.shape eri2c[pk:pk + dk, pl:pl + dl] = buf pl += dl pk += dk print "ERI2C INTEGRALS GENERATED" self.eri3c = eri3c self.eri2c = eri2c RSinv = MatrixPower(eri2c, -0.5) self.B = np.einsum('ijp,pq->ijq', self.eri3c, RSinv) # (AO,AO,n_aux) # change to (LAO,LAO,n_aux) BpqR self.S = self.the_scf.get_ovlp() # (ao X ao) self.X = MatrixPower(self.S, -1. / 2.) # AO, LAO print "BpqR GENERATED" return
def calc_eri3c(mol, auxmol, IklM): nao = mol.nao_nr() naux = auxmol.nao_nr() # Merging M1 and M2 to compute the integrals. atm, bas, env = gto.conc_env(mol._atm, mol._bas, mol._env, auxmol._atm, auxmol._bas, auxmol._env) eri3c = np.empty((nao, nao, naux)) pi = 0 for i in range(mol.nbas): pj = 0 for j in range(mol.nbas): pk = 0 for k in range(mol.nbas, mol.nbas + auxmol.nbas): shls = (i, j, k) buf = gto.getints_by_shell(IklM, shls, atm, bas, env) di, dj, dk = buf.shape eri3c[pi:pi + di, pj:pj + dj, pk:pk + dk] = buf pk += dk pj += dj pi += di return eri3c
'O': 'cc-pvdz',} mol.build() n2c = mol.nao_2c() numpy.random.seed(1) mo = numpy.random.random((n2c,n2c)) + numpy.random.random((n2c,n2c))*1j eri0 = numpy.empty((n2c,n2c,n2c,n2c), dtype=numpy.complex) pi = 0 for i in range(mol.nbas): pj = 0 for j in range(mol.nbas): pk = 0 for k in range(mol.nbas): pl = 0 for l in range(mol.nbas): buf = gto.getints_by_shell('int2e_spinor', (i,j,k,l), mol._atm, mol._bas, mol._env) di, dj, dk, dl = buf.shape eri0[pi:pi+di,pj:pj+dj,pk:pk+dk,pl:pl+dl] = buf pl += dl pk += dk pj += dj pi += di nao, nmo = mo.shape eri0 = numpy.dot(mo.T.conj(), eri0.reshape(nao,-1)) eri0 = numpy.dot(eri0.reshape(-1,nao), mo) eri0 = eri0.reshape(nmo,nao,nao,nmo).transpose(2,3,0,1).copy() eri0 = numpy.dot(mo.T.conj(), eri0.reshape(nao,-1)) eri0 = numpy.dot(eri0.reshape(-1,nao), mo) eri0 = eri0.reshape((nmo,)*4)
'O': 'cc-pvdz',} mol.build() n2c = mol.nao_2c() numpy.random.seed(1) mo = numpy.random.random((n2c,n2c)) + numpy.random.random((n2c,n2c))*1j eri0 = numpy.empty((n2c,n2c,n2c,n2c), dtype=numpy.complex) pi = 0 for i in range(mol.nbas): pj = 0 for j in range(mol.nbas): pk = 0 for k in range(mol.nbas): pl = 0 for l in range(mol.nbas): buf = gto.getints_by_shell('cint2e', (i,j,k,l), mol._atm, mol._bas, mol._env) di, dj, dk, dl = buf.shape eri0[pi:pi+di,pj:pj+dj,pk:pk+dk,pl:pl+dl] = buf pl += dl pk += dk pj += dj pi += di nao, nmo = mo.shape eri0 = numpy.dot(mo.T.conj(), eri0.reshape(nao,-1)) eri0 = numpy.dot(eri0.reshape(-1,nao), mo) eri0 = eri0.reshape(nmo,nao,nao,nmo).transpose(2,3,0,1).copy() eri0 = numpy.dot(mo.T.conj(), eri0.reshape(nao,-1)) eri0 = numpy.dot(eri0.reshape(-1,nao), mo) eri0 = eri0.reshape((nmo,)*4)
def auxmol_set(self,auxbas = "weigend"): print "====================" print "GENERATING INTEGRALS" print "====================" auxmol = gto.Mole() auxmol.atom = self.hf1.mol.atom auxmol.basis = auxbas auxmol.build() mol = self.hf1.mol nao = self.n_ao[0] = int(mol.nao_nr()) naux = self.n_aux[0] = auxmol.nao_nr() atm, bas, env = gto.conc_env(mol._atm, mol._bas, mol._env, auxmol._atm, auxmol._bas, auxmol._env) eri3c = np.empty((nao,nao,naux)) pi = 0 for i in range(mol.nbas): pj = 0 for j in range(mol.nbas): pk = 0 for k in range(mol.nbas, mol.nbas+auxmol.nbas): shls = (i, j, k) buf = gto.getints_by_shell('cint3c2e_sph', shls, atm, bas, env) di, dj, dk = buf.shape eri3c[pi:pi+di,pj:pj+dj,pk:pk+dk] = buf pk += dk pj += dj pi += di eri2c = np.empty((naux,naux)) pk = 0 for k in range(mol.nbas, mol.nbas+auxmol.nbas): pl = 0 for l in range(mol.nbas, mol.nbas+auxmol.nbas): shls = (k, l) buf = gto.getints_by_shell('cint2c2e_sph', shls, atm, bas, env) dk, dl = buf.shape eri2c[pk:pk+dk,pl:pl+dl] = buf pl += dl pk += dk self.eri3c.append(eri3c) self.eri2c.append(eri2c) print "\nAA INT GENERATED" self.eri3c.append(eri3c) self.eri2c.append(eri2c) RSinv = MatrixPower(eri2c,-0.5) self.B0 = np.einsum('ijp,pq->ijq', eri3c, RSinv) auxmol = mol = nao = naux = None auxmol = gto.Mole() auxmol.atom = self.hf3.mol.atom auxmol.basis = auxbas auxmol.build() mol = self.hf3.mol nao = self.n_ao[2] = int(mol.nao_nr()) naux = self.n_aux[2] = auxmol.nao_nr() atm, bas, env = gto.conc_env(mol._atm, mol._bas, mol._env, auxmol._atm, auxmol._bas, auxmol._env) eri3c = np.empty((nao,nao,naux)) pi = 0 for i in range(mol.nbas): pj = 0 for j in range(mol.nbas): pk = 0 for k in range(mol.nbas, mol.nbas+auxmol.nbas): shls = (i, j, k) buf = gto.getints_by_shell('cint3c2e_sph', shls, atm, bas, env) di, dj, dk = buf.shape eri3c[pi:pi+di,pj:pj+dj,pk:pk+dk] = buf pk += dk pj += dj pi += di eri2c = np.empty((naux,naux)) pk = 0 for k in range(mol.nbas, mol.nbas+auxmol.nbas): pl = 0 for l in range(mol.nbas, mol.nbas+auxmol.nbas): shls = (k, l) buf = gto.getints_by_shell('cint2c2e_sph', shls, atm, bas, env) dk, dl = buf.shape eri2c[pk:pk+dk,pl:pl+dl] = buf pl += dl pk += dk # if(self.hyb[0] > 0.01): # eri3cBO = np.zeros((nao,nao,naux)) # for i in range(naux): # eri3cBO[:,:,i] = TransMat(eri3c[:,:,i],self.U) # eri3c = eri3cBO.copy() print "\nWHOLE INT GENERATED" self.eri3c.append(eri3c) self.eri2c.append(eri2c) RSinv = MatrixPower(eri2c,-0.5) self.B1 = np.einsum('ijp,pq->ijq', eri3c, RSinv) auxmol = mol = nao = naux = None return