def int_beta(self): logger.info(self, '* Go with inside betasphere') xcoor = numpy.zeros(3) npang = self.bnpang coords = numpy.empty((npang, 3)) nrad = self.bnrad iqudr = self.biqudr mapr = self.bmapr r0 = 0 rfar = self.brad rad = self.rad t0 = time.time() rmesh, rwei, dvol, dvoln = grid.rquad(nrad, r0, rfar, rad, iqudr, mapr) coordsang = grid.lebgrid(npang) nocc = self.nocc * 1 NPROPS = nocc * (nocc + 1) // 2 rprops = numpy.zeros(NPROPS, dtype=numpy.complex128) for n in range(nrad): r = rmesh[n] for j in range(npang): # j-loop can be changed to map cost = coordsang[j, 0] sintcosp = coordsang[j, 1] * coordsang[j, 2] sintsinp = coordsang[j, 1] * coordsang[j, 3] xcoor[0] = r * sintcosp xcoor[1] = r * sintsinp xcoor[2] = r * cost p = self.xnuc + xcoor coords[j] = p val = mos(self, coords) props = numpy.einsum('pi,i->p', val, coordsang[:, 4]) rprops += props * dvol[n] * rwei[n] logger.info(self, 'Time in Bsphere %.3f (sec)' % (time.time() - t0)) return rprops
def out_beta(self): logger.info(self, '* Go outside betasphere') xcoor = numpy.zeros(3) nrad = self.nrad npang = self.npang iqudr = self.iqudr mapr = self.mapr r0 = self.brad rfar = self.rmax rad = self.rad t0 = time.time() rmesh, rwei, dvol, dvoln = grid.rquad(nrad, r0, rfar, rad, iqudr, mapr) coordsang = self.agrids if (self.full): nocc = self.nmo else: nocc = self.nocc NPROPS = nocc * (nocc + 1) // 2 rprops = numpy.zeros(NPROPS) for n in range(nrad): r = rmesh[n] coords = [] weigths = [] for j in range(npang): inside = True inside = inbasin(self, r, j) if (inside == True): cost = coordsang[j, 0] sintcosp = coordsang[j, 1] * coordsang[j, 2] sintsinp = coordsang[j, 1] * coordsang[j, 3] xcoor[0] = r * sintcosp xcoor[1] = r * sintsinp xcoor[2] = r * cost p = self.xnuc + xcoor coords.append(p) weigths.append(coordsang[j, 4]) coords = numpy.array(coords) weigths = numpy.array(weigths) val = mos(self, coords) props = numpy.einsum('pi,i->p', val, weigths) rprops += props * dvol[n] * rwei[n] logger.info(self, 'Time out Bsphere %.3f (sec)' % (time.time() - t0)) return rprops
def out_beta(self): logger.info(self, '* Go outside betasphere') xcoor = numpy.zeros(3) nrad = self.nrad npang = self.npang iqudr = self.iqudr mapr = self.mapr r0 = self.brad rfar = self.rmax rad = self.rad t0 = time.time() rmesh, rwei, dvol, dvoln = grid.rquad(nrad, r0, rfar, rad, iqudr, mapr) coordsang = self.agrids lmax = self.lmax NPROPS = lmax * (lmax + 2) + 1 t1 = time.time() ct_ = numpy.asarray(coordsang[:, 0], order='C') st_ = numpy.asarray(coordsang[:, 1], order='C') cp_ = numpy.asarray(coordsang[:, 2], order='C') sp_ = numpy.asarray(coordsang[:, 3], order='C') slm = numpy.zeros((npang, NPROPS)) feval = 'eval_rsh' drv = getattr(libaim, feval) drv(ctypes.c_int(lmax), ctypes.c_int(npang), ct_.ctypes.data_as(ctypes.c_void_p), st_.ctypes.data_as(ctypes.c_void_p), cp_.ctypes.data_as(ctypes.c_void_p), sp_.ctypes.data_as(ctypes.c_void_p), slm.ctypes.data_as(ctypes.c_void_p)) logger.debug(self, 'Time finding outside RSH %.3f (sec)' % (time.time() - t1)) rprops = numpy.zeros(NPROPS) for n in range(nrad): r = rmesh[n] coords = [] weigths = [] rslm = [] for j in range(self.npang): inside = True inside = inbasin(self, r, j) if (inside == True): cost = coordsang[j, 0] sintcosp = coordsang[j, 1] * coordsang[j, 2] sintsinp = coordsang[j, 1] * coordsang[j, 3] xcoor[0] = r * sintcosp xcoor[1] = r * sintsinp xcoor[2] = r * cost p = self.xnuc + xcoor coords.append(p) rslm.append(slm[j, :]) weigths.append(coordsang[j, 4]) coords = numpy.array(coords) weigths = numpy.array(weigths) rslm = numpy.array(rslm) val = numpy.einsum('i,ip->ip', rho(self, coords), rslm) props = numpy.einsum('ip,i->p', val, weigths) for l in range(lmax + 1): ll = l * (l + 1) for m in range(-l, l + 1, 1): lm = ll + m props[lm] *= r**l rprops += props * dvol[n] * rwei[n] logger.info(self, '*--> Qlm(0,0) (s) outside bsphere %f', rprops[0]) logger.info(self, '*--> Qlm(1,-1) (py) outside bsphere %f', rprops[1]) logger.info(self, '*--> Qlm(1,0) (pz) outside bsphere %f', rprops[2]) logger.info(self, '*--> Qlm(1,1) (px) outside bsphere %f', rprops[3]) logger.info(self, '*--> Qlm(2,-2) (dxy) outside bsphere %f', rprops[4]) logger.info(self, '*--> Qlm(2,-1) (dyz) outside bsphere %f', rprops[5]) logger.info(self, '*--> Qlm(2,0) (dz2) outside bsphere %f', rprops[6]) logger.info(self, '*--> Qlm(2,1) (dxz) outside bsphere %f', rprops[7]) logger.info(self, '*--> Qlm(2,2) (dx2-y2) outside bsphere %f', rprops[8]) logger.info(self, 'Time out Bsphere %.3f (sec)' % (time.time() - t0)) return rprops
def int_beta(self): logger.info(self, '* Go with inside betasphere') xcoor = numpy.zeros(3) npang = self.bnpang coords = numpy.empty((npang, 3)) nrad = self.bnrad iqudr = self.biqudr mapr = self.bmapr r0 = 0 rfar = self.brad rad = self.rad t0 = time.time() rmesh, rwei, dvol, dvoln = grid.rquad(nrad, r0, rfar, rad, iqudr, mapr) coordsang = grid.lebgrid(npang) lmax = self.blmax NPROPS = lmax * (lmax + 2) + 1 t1 = time.time() ct_ = numpy.asarray(coordsang[:, 0], order='C') st_ = numpy.asarray(coordsang[:, 1], order='C') cp_ = numpy.asarray(coordsang[:, 2], order='C') sp_ = numpy.asarray(coordsang[:, 3], order='C') slm = numpy.zeros((npang, NPROPS)) feval = 'eval_rsh' drv = getattr(libaim, feval) drv(ctypes.c_int(lmax), ctypes.c_int(npang), ct_.ctypes.data_as(ctypes.c_void_p), st_.ctypes.data_as(ctypes.c_void_p), cp_.ctypes.data_as(ctypes.c_void_p), sp_.ctypes.data_as(ctypes.c_void_p), slm.ctypes.data_as(ctypes.c_void_p)) logger.debug(self, 'Time finding inside RSH %.3f (sec)' % (time.time() - t1)) rprops = numpy.zeros(NPROPS) for n in range(nrad): r = rmesh[n] for j in range(npang): # j-loop can be changed to map cost = coordsang[j, 0] sintcosp = coordsang[j, 1] * coordsang[j, 2] sintsinp = coordsang[j, 1] * coordsang[j, 3] xcoor[0] = r * sintcosp xcoor[1] = r * sintsinp xcoor[2] = r * cost p = self.xnuc + xcoor coords[j] = p val = numpy.einsum('i,ip->ip', rho(self, coords), slm) props = numpy.einsum('ip,i->p', val, coordsang[:, 4]) for l in range(lmax + 1): ll = l * (l + 1) for m in range(-l, l + 1, 1): lm = ll + m props[lm] *= r**l rprops += props * dvol[n] * rwei[n] logger.info(self, '*--> Qlm(0,0) (s) inside bsphere %f', rprops[0]) logger.info(self, '*--> Qlm(1,-1) (py) inside bsphere %f', rprops[1]) logger.info(self, '*--> Qlm(1,0) (pz) inside bsphere %f', rprops[2]) logger.info(self, '*--> Qlm(1,1) (px) inside bsphere %f', rprops[3]) logger.info(self, '*--> Qlm(2,-2) (dxy) inside bsphere %f', rprops[4]) logger.info(self, '*--> Qlm(2,-1) (dyz) inside bsphere %f', rprops[5]) logger.info(self, '*--> Qlm(2,0) (dz2) inside bsphere %f', rprops[6]) logger.info(self, '*--> Qlm(2,1) (dxz) inside bsphere %f', rprops[7]) logger.info(self, '*--> Qlm(2,2) (dx2-y2) inside bsphere %f', rprops[8]) logger.info(self, 'Time in Bsphere %.3f (sec)' % (time.time() - t0)) return rprops