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