Exemple #1
0
def vanHoveTotal(atoms,basis,steps,cutr=10.0,nBin=1000,norm=False):
    atoms = array(atoms)
    basis = array(basis)
    
    if type(steps) != type(list()): #handle the case where steps is just a single step
        steps = list(steps)
    steps = array(steps)

    nTime = atoms.shape[0]
    nAtom = atoms.shape[1]
    nStep = steps.shape[0]

    atoms = atoms.ravel()
    b = basis.ravel()

    dr = cutr/nBin
    rbins = [i*dr for i in range(nBin)]
    bins = zeros(nStep*nBin)
    weave.inline(vhTotalRefCode,['atoms','nTime','nAtom','steps','nStep','b','bins','nBin','dr'])

    bins.shape = [nStep,nBin]
    atoms.shape = [nTime,nAtom,3]

    if norm:
        Ndensity=nAtom/volume(basis)
        for i,r in enumerate(rbins):
            if i==0:
                vol=4.0*pi*dr*dr*dr/3.0
            else:
                vol=4.0*pi*r*r*dr
            for k in range(nStep):
                bins[k][i] /= vol*Ndensity

    return rbins,bins
Exemple #2
0
def rdf_periodic(atoms,basis,cutoff=10.0,nbins=1000):
    #atoms: list of atoms[N][3]
    #cutoff: float, max radius to measure radial distro out to
    #nbins: number of bins to store in radial distro
    basis=array(basis)
    atoms=array(atoms)

    bt=basis.T

    rdist=zeros(nbins)
    dr=float(cutoff)/nbins
    N=len(atoms)
    rdist=rdfperHelper(atoms,rdist,cutoff,basis)
    rbins=[i*dr for i in range(nbins)] #the central point of each bin (x-axis on plot)

    Ndensity=N/volume(basis)
    for i,r in enumerate(rbins):
        if i==0:
            vol=4.0*pi*dr*dr*dr/3.0
        else:
            vol=4.0*pi*r*r*dr
        rdist[i]/=vol*(Ndensity*N)

    return [rbins,rdist]
Exemple #3
0
    open(posfile,"w").writelines(posdata)

if __name__=="__main__":
    def usage():
        print "Usage:"
        print "%s <POSCAR> //prints volume and atomic volume"
        print "%s <POSCAR> <frac/unfrac>"%sys.argv[0].split("/")[-1]
        print "%s <POSCAR> <ratio value>"%sys.argv[0].split("/")[-1]

    if len(sys.argv) not in [2,3]:
        usage()
        exit(0)

    if len(sys.argv)==2:
        [basis,atypes,atoms,head,poscar] = poscarIO.read(open(sys.argv[1],"r").readlines())
        v = volume(basis)
        print "Total Volume in AA^3 = %f"%v
        print "Atomic Volume in AA^3 = %f"%(v/len(atoms))
    elif sys.argv[2]=="frac":
        fractional(sys.argv[1])
    elif sys.argv[2]=="unfrac":
        unFractional(sys.argv[1])
    else:
        try:
            r=float(sys.argv[2])
            ratio(sys.argv[1],r)
        except:
            print "Error, unrecognized volume arguement: %s"%sys.argv[2]
            usage()
            exit(0)
Exemple #4
0
if __name__ == "__main__":

    def usage():
        print "Usage:"
        print "%s <POSCAR> //prints volume and atomic volume"
        print "%s <POSCAR> <frac/unfrac>" % sys.argv[0].split("/")[-1]
        print "%s <POSCAR> <ratio value>" % sys.argv[0].split("/")[-1]

    if len(sys.argv) not in [2, 3]:
        usage()
        exit(0)

    if len(sys.argv) == 2:
        [basis, atypes, atoms, head,
         poscar] = poscarIO.read(open(sys.argv[1], "r").readlines())
        v = volume(basis)
        print "Total Volume in AA^3 = %f" % v
        print "Atomic Volume in AA^3 = %f" % (v / len(atoms))
    elif sys.argv[2] == "frac":
        fractional(sys.argv[1])
    elif sys.argv[2] == "unfrac":
        unFractional(sys.argv[1])
    else:
        try:
            r = float(sys.argv[2])
            ratio(sys.argv[1], r)
        except:
            print "Error, unrecognized volume arguement: %s" % sys.argv[2]
            usage()
            exit(0)