Exemple #1
0
def derJ(D,d2Ints_dXa,d2Ints_dYa,d2Ints_dZa):
    #modified from Ints.py -> getJ
    "Form the Coulomb operator corresponding to a density matrix D"
    nbf = D.shape[0]
    D1d = reshape(D,(nbf*nbf,)) #1D version of Dens
    dJx = zeros((nbf,nbf),'d')
    dJy = zeros((nbf,nbf),'d')
    dJz = zeros((nbf,nbf),'d')

    for i in xrange(nbf):
        for j in xrange(i+1):
            xtemp = zeros(nbf*nbf,'d')
            ytemp = zeros(nbf*nbf,'d')
            ztemp = zeros(nbf*nbf,'d')
            kl = 0
            for k in xrange(nbf):
                for l in xrange(nbf):
                    index = ijkl2intindex(i,j,k,l)
                    xtemp[kl] = d2Ints_dXa[index]
                    ytemp[kl] = d2Ints_dYa[index]
                    ztemp[kl] = d2Ints_dZa[index]
                    kl += 1
            dJx[i,j] = dot(xtemp,D1d)
            dJx[j,i] = dJx[i,j]
            
            dJy[i,j] = dot(ytemp,D1d)
            dJy[j,i] = dJy[i,j]
            
            dJz[i,j] = dot(ztemp,D1d)
            dJz[j,i] = dJz[i,j]
    return dJx,dJy,dJz
Exemple #2
0
def derK(D,d2Ints_dXa,d2Ints_dYa,d2Ints_dZa):
    #modified from Ints.py -> getK
    "Form the exchange operator corresponding to a density matrix D"
    nbf = D.shape[0]
    D1d = reshape(D,(nbf*nbf,)) #1D version of Dens
    dKx = zeros((nbf,nbf),'d')
    dKy = zeros((nbf,nbf),'d')
    dKz = zeros((nbf,nbf),'d')
    for i in xrange(nbf):
        for j in xrange(i+1):
            xtemp = zeros(nbf*nbf,'d')
            ytemp = zeros(nbf*nbf,'d')
            ztemp = zeros(nbf*nbf,'d')
            kl = 0
            for k in xrange(nbf):
                for l in xrange(nbf):
                    index_k1 = ijkl2intindex(i,k,j,l)
                    index_k2 = ijkl2intindex(i,l,k,j)
                    xtemp[kl] = 0.5*(d2Ints_dXa[index_k1]+d2Ints_dXa[index_k2])
                    ytemp[kl] = 0.5*(d2Ints_dYa[index_k1]+d2Ints_dYa[index_k2])
                    ztemp[kl] = 0.5*(d2Ints_dZa[index_k1]+d2Ints_dZa[index_k2])
                    kl += 1
            dKx[i,j] = dot(xtemp,D1d)
            dKx[j,i] = dKx[i,j]
            
            dKy[i,j] = dot(ytemp,D1d)
            dKy[j,i] = dKy[i,j]
            
            dKz[i,j] = dot(ztemp,D1d)
            dKz[j,i] = dKz[i,j]
    return dKx,dKy,dKz
Exemple #3
0
def derJ(D, d2Ints_dXa, d2Ints_dYa, d2Ints_dZa):
    #modified from Ints.py -> getJ
    "Form the Coulomb operator corresponding to a density matrix D"
    nbf = D.shape[0]
    D1d = reshape(D, (nbf * nbf, ))  #1D version of Dens
    dJx = zeros((nbf, nbf), 'd')
    dJy = zeros((nbf, nbf), 'd')
    dJz = zeros((nbf, nbf), 'd')

    for i in xrange(nbf):
        for j in xrange(i + 1):
            xtemp = zeros(nbf * nbf, 'd')
            ytemp = zeros(nbf * nbf, 'd')
            ztemp = zeros(nbf * nbf, 'd')
            kl = 0
            for k in xrange(nbf):
                for l in xrange(nbf):
                    index = ijkl2intindex(i, j, k, l)
                    xtemp[kl] = d2Ints_dXa[index]
                    ytemp[kl] = d2Ints_dYa[index]
                    ztemp[kl] = d2Ints_dZa[index]
                    kl += 1
            dJx[i, j] = dot(xtemp, D1d)
            dJx[j, i] = dJx[i, j]

            dJy[i, j] = dot(ytemp, D1d)
            dJy[j, i] = dJy[i, j]

            dJz[i, j] = dot(ztemp, D1d)
            dJz[j, i] = dJz[i, j]
    return dJx, dJy, dJz
Exemple #4
0
def derK(D, d2Ints_dXa, d2Ints_dYa, d2Ints_dZa):
    #modified from Ints.py -> getK
    "Form the exchange operator corresponding to a density matrix D"
    nbf = D.shape[0]
    D1d = reshape(D, (nbf * nbf, ))  #1D version of Dens
    dKx = zeros((nbf, nbf), 'd')
    dKy = zeros((nbf, nbf), 'd')
    dKz = zeros((nbf, nbf), 'd')
    for i in xrange(nbf):
        for j in xrange(i + 1):
            xtemp = zeros(nbf * nbf, 'd')
            ytemp = zeros(nbf * nbf, 'd')
            ztemp = zeros(nbf * nbf, 'd')
            kl = 0
            for k in xrange(nbf):
                for l in xrange(nbf):
                    index_k1 = ijkl2intindex(i, k, j, l)
                    index_k2 = ijkl2intindex(i, l, k, j)
                    xtemp[kl] = 0.5 * (d2Ints_dXa[index_k1] +
                                       d2Ints_dXa[index_k2])
                    ytemp[kl] = 0.5 * (d2Ints_dYa[index_k1] +
                                       d2Ints_dYa[index_k2])
                    ztemp[kl] = 0.5 * (d2Ints_dZa[index_k1] +
                                       d2Ints_dZa[index_k2])
                    kl += 1
            dKx[i, j] = dot(xtemp, D1d)
            dKx[j, i] = dKx[i, j]

            dKy[i, j] = dot(ytemp, D1d)
            dKy[j, i] = dKy[i, j]

            dKz[i, j] = dot(ztemp, D1d)
            dKz[j, i] = dKz[i, j]
    return dKx, dKy, dKz
Exemple #5
0
 def allbfs(self):
     "Construct a matrix with bfs in columns over the entire grid, "
     " so that R[0] is the first basis function, R[1] is the second..."
     bfs = []
     for agr in self.atomgrids:
         bfs.extend(agr.allbfs())
     bfs = array(bfs)
     npts = self.npts()
     nbf,nrem = divmod(len(bfs),npts)
     if nrem != 0: raise Exception("Remainder in divmod allbfs")
     nbf2 = self.nbf()
     if nbf != nbf2: raise Exception("Wrong # bfns %d %d" % (nbf,nbf2))
     bfs = reshape(bfs,(npts,nbf))
     return bfs
Exemple #6
0
def getK(Ints,D):
    "Form the exchange operator corresponding to a density matrix D"
    nbf = D.shape[0]
    D1d = reshape(D,(nbf*nbf,)) #1D version of Dens
    K = zeros((nbf,nbf),'d')
    for i in xrange(nbf):
        for j in xrange(i+1):
            if sorted:
                temp = kints[i,j]
            else:
                temp = fetch_kints(Ints,i,j,nbf)
            K[i,j] = dot(temp,D1d)
            K[j,i] = K[i,j]
    return K
Exemple #7
0
def get2JmK(Ints,D):
    "Form the 2J-K integrals corresponding to a density matrix D"
    nbf = D.shape[0]
    D1d = reshape(D,(nbf*nbf,)) #1D version of Dens
    G = zeros((nbf,nbf),'d')
    for i in xrange(nbf):
        for j in xrange(i+1):
            if sorted:
                temp = 2*jints[i,j]-kints[i,j]
            else:
                temp = 2*fetch_jints(Ints,i,j,nbf)-fetch_kints(Ints,i,j,nbf)
            G[i,j] = dot(temp,D1d)
            G[j,i] = G[i,j]
    return G
Exemple #8
0
def getK(Ints, D):
    "Form the exchange operator corresponding to a density matrix D"
    nbf = D.shape[0]
    D1d = reshape(D, (nbf * nbf, ))  #1D version of Dens
    K = zeros((nbf, nbf), 'd')
    for i in xrange(nbf):
        for j in xrange(i + 1):
            if sorted:
                temp = kints[i, j]
            else:
                temp = fetch_kints(Ints, i, j, nbf)
            K[i, j] = dot(temp, D1d)
            K[j, i] = K[i, j]
    return K
Exemple #9
0
def getJ(Ints,D):
    "Form the Coulomb operator corresponding to a density matrix D"
    nbf = D.shape[0]
    D1d = reshape(D,(nbf*nbf,)) #1D version of Dens
    J = zeros((nbf,nbf),'d')
    for i in xrange(nbf):
        for j in xrange(i+1):
            if sorted:
                temp = jints[i,j]
            else:
                temp = fetch_jints(Ints,i,j,nbf)
            J[i,j] = dot(temp,D1d)
            J[j,i] = J[i,j]
    return J
Exemple #10
0
def getJ(Ints, D):
    "Form the Coulomb operator corresponding to a density matrix D"
    nbf = D.shape[0]
    D1d = reshape(D, (nbf * nbf, ))  #1D version of Dens
    J = zeros((nbf, nbf), 'd')
    for i in xrange(nbf):
        for j in xrange(i + 1):
            if sorted:
                temp = jints[i, j]
            else:
                temp = fetch_jints(Ints, i, j, nbf)
            J[i, j] = dot(temp, D1d)
            J[j, i] = J[i, j]
    return J
Exemple #11
0
 def make_bfgrid(self):
     "Construct a matrix with bfs in columns over the entire grid, "
     " so that R[0] is the first basis function, R[1] is the second..."
     bfs = []
     for agr in self.atomgrids:
         bfs.extend(agr.make_bfgrid())
     self.bfgrid = array(bfs)
     npts = self.npts()
     nbf, nrem = divmod(len(self.bfgrid), npts)
     if nrem != 0: raise Exception("Remainder in divmod make_bfgrid")
     nbf2 = self.get_nbf()
     if nbf != nbf2: raise Exception("Wrong # bfns %d %d" % (nbf, nbf2))
     self.bfgrid = reshape(bfs, (npts, nbf))
     return
Exemple #12
0
def get2JmK(Ints, D):
    "Form the 2J-K integrals corresponding to a density matrix D"
    nbf = D.shape[0]
    D1d = reshape(D, (nbf * nbf, ))  #1D version of Dens
    G = zeros((nbf, nbf), 'd')
    for i in xrange(nbf):
        for j in xrange(i + 1):
            if sorted:
                temp = 2 * jints[i, j] - kints[i, j]
            else:
                temp = 2 * fetch_jints(Ints, i, j, nbf) - fetch_kints(
                    Ints, i, j, nbf)
            G[i, j] = dot(temp, D1d)
            G[j, i] = G[i, j]
    return G
Exemple #13
0
def getK_BTF(Ints, D, nbf1, nbf2, frag_number):
    if frag_number == 1:
        D1d = reshape(D, (nbf2 * nbf2, ))  #1D version of Dens
        K = zeros((nbf1, nbf1), 'd')
        for i in xrange(nbf1):
            for j in xrange(i + 1):
                if sorted:
                    temp = kintsBTF_12[i, j]
                else:
                    temp = fetch_kintsBTF_12(Ints, i, j, nbf1, nbf2)
                K[i, j] = dot(temp, D1d)
                K[j, i] = K[i, j]
    elif frag_number == 2:
        D1d = reshape(D, (nbf1 * nbf1, ))  #1D version of Dens
        K = zeros((nbf2, nbf2), 'd')
        for i in xrange(nbf2):
            for j in xrange(i + 1):
                if sorted:
                    temp = kintsBTF_21[i, j]
                else:
                    temp = fetch_kintsBTF_21(Ints, i, j, nbf1, nbf2)
                K[i, j] = dot(temp, D1d)
                K[j, i] = K[i, j]
    return K
Exemple #14
0
def getK_BTF(Ints,D,nbf1,nbf2,frag_number):
    if frag_number == 1:
       D1d = reshape(D,(nbf2*nbf2,)) #1D version of Dens
       K = zeros((nbf1,nbf1),'d')
       for i in xrange(nbf1):
           for j in xrange(i+1):
               if sorted:
                  temp = kintsBTF_12[i,j]
               else:
                  temp = fetch_kintsBTF_12(Ints,i,j,nbf1,nbf2)
               K[i,j] = dot(temp,D1d)
               K[j,i] = K[i,j]
    elif frag_number == 2:
       D1d = reshape(D,(nbf1*nbf1,)) #1D version of Dens
       K = zeros((nbf2,nbf2),'d')
       for i in xrange(nbf2):
           for j in xrange(i+1):
               if sorted:
                  temp = kintsBTF_21[i,j]
               else:
                  temp = fetch_kintsBTF_21(Ints,i,j,nbf1,nbf2)
               K[i,j] = dot(temp,D1d)
               K[j,i] = K[i,j]
    return K
Exemple #15
0
def der2JmK(D,d2Ints_dXa,d2Ints_dYa,d2Ints_dZa):
    #modified from Ints.py -> get2Jmk
    "Form the 2J-K integrals corresponding to a density matrix D"
    nbf = D.shape[0]
    D1d = reshape(D,(nbf*nbf,)) #1D version of Dens
    Gx = zeros((nbf,nbf),'d')
    Gy = zeros((nbf,nbf),'d')
    Gz = zeros((nbf,nbf),'d')
    
    for i in xrange(nbf):
        for j in xrange(i+1):
            xtemp = zeros(nbf*nbf,'d')
            ytemp = zeros(nbf*nbf,'d')
            ztemp = zeros(nbf*nbf,'d')
            kl = 0
            for k in xrange(nbf):
                for l in xrange(nbf):
                    index_j = ijkl2intindex(i,j,k,l)
                    index_k1 = ijkl2intindex(i,k,j,l)
                    index_k2 = ijkl2intindex(i,l,k,j)
                    xtemp[kl] = 2.*d2Ints_dXa[index_j]-0.5*d2Ints_dXa[index_k1]\
                               -0.5*d2Ints_dXa[index_k2]
                               
                    ytemp[kl] = 2.*d2Ints_dYa[index_j]-0.5*d2Ints_dYa[index_k1]\
                               -0.5*d2Ints_dYa[index_k2]
                               
                    ztemp[kl] = 2.*d2Ints_dZa[index_j]-0.5*d2Ints_dZa[index_k1]\
                               -0.5*d2Ints_dZa[index_k2]                    
                    kl += 1

            Gx[i,j] = dot(xtemp,D1d)
            Gx[j,i] = Gx[i,j]
            
            Gy[i,j] = dot(ytemp,D1d)
            Gy[j,i] = Gy[i,j]            
            
            Gz[i,j] = dot(ztemp,D1d)
            Gz[j,i] = Gz[i,j]

    return Gx,Gy,Gz
Exemple #16
0
def der2JmK(D, d2Ints_dXa, d2Ints_dYa, d2Ints_dZa):
    #modified from Ints.py -> get2Jmk
    "Form the 2J-K integrals corresponding to a density matrix D"
    nbf = D.shape[0]
    D1d = reshape(D, (nbf * nbf, ))  #1D version of Dens
    Gx = zeros((nbf, nbf), 'd')
    Gy = zeros((nbf, nbf), 'd')
    Gz = zeros((nbf, nbf), 'd')

    for i in xrange(nbf):
        for j in xrange(i + 1):
            xtemp = zeros(nbf * nbf, 'd')
            ytemp = zeros(nbf * nbf, 'd')
            ztemp = zeros(nbf * nbf, 'd')
            kl = 0
            for k in xrange(nbf):
                for l in xrange(nbf):
                    index_j = ijkl2intindex(i, j, k, l)
                    index_k1 = ijkl2intindex(i, k, j, l)
                    index_k2 = ijkl2intindex(i, l, k, j)
                    xtemp[kl] = 2.*d2Ints_dXa[index_j]-0.5*d2Ints_dXa[index_k1]\
                               -0.5*d2Ints_dXa[index_k2]

                    ytemp[kl] = 2.*d2Ints_dYa[index_j]-0.5*d2Ints_dYa[index_k1]\
                               -0.5*d2Ints_dYa[index_k2]

                    ztemp[kl] = 2.*d2Ints_dZa[index_j]-0.5*d2Ints_dZa[index_k1]\
                               -0.5*d2Ints_dZa[index_k2]
                    kl += 1

            Gx[i, j] = dot(xtemp, D1d)
            Gx[j, i] = Gx[i, j]

            Gy[i, j] = dot(ytemp, D1d)
            Gy[j, i] = Gy[i, j]

            Gz[i, j] = dot(ztemp, D1d)
            Gz[j, i] = Gz[i, j]

    return Gx, Gy, Gz