Exemple #1
0
 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
Exemple #2
0
 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))
Exemple #3
0
 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))
Exemple #4
0
    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))
Exemple #5
0
 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))
Exemple #6
0
 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))
Exemple #7
0
    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))
Exemple #8
0
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
Exemple #9
0
    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
Exemple #10
0
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
Exemple #11
0
                 '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)
Exemple #12
0
                 '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)
Exemple #13
0
    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
Exemple #14
0
                 '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)
Exemple #15
0
                 '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)