예제 #1
0
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
예제 #2
0
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
예제 #3
0
파일: qlm.py 프로젝트: chrinide/pyaim
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
예제 #4
0
파일: qlm.py 프로젝트: chrinide/pyaim
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