def plot_pos_rad_ang(atoms, types, basis, dup=0): Ntypes = len(set(types)) N = len(atoms) cs = ["yellow", "green", "blue", "red", "purple", "orange", "black"] #Periodic Atoms (duplicated, needed for distributions) datoms, dtypes = duplicate26(atoms, types, basis) #Neighbors needed for angular distribution dneighbs = neighbors(datoms, 5.0, style="full") #Radial Distribution [rbins, rdist] = rdf(datoms, inloop=N, cutoff=12.0) #Correlation of Angles [abins, adist] = adf(datoms, dneighbs, inloop=N) #Type sorted atoms lists tatoms = [list() for i in range(Ntypes)] if (dup == 1): for i, j in enumerate(dtypes): tatoms[j].append(datoms[i]) else: for i, j in enumerate(types): tatoms[j].append(atoms[i]) v1, v2, v3 = zip(*basis) #findsymmetry([v1,v2,v3],types,zip(xs,ys,zs)) fig = pl.figure(figsize=(12, 6)) aa = fig.add_subplot(311, projection='3d') aa.set_position([0, 0, 0.5, 1.0]) for i in range(Ntypes): ax, ay, az = zip(*tatoms[i]) aa.scatter(ax, ay, az, c=cs.pop(0), marker="o") aa.plot([0, v1[0]], [0, v1[1]], [0, v1[2]]) aa.plot([0, v2[0]], [0, v2[1]], [0, v2[2]]) aa.plot([0, v3[0]], [0, v3[1]], [0, v3[2]]) bb = fig.add_subplot(312) bb.set_position([0.56, 0.55, 0.4, 0.4]) bb.plot(rbins, rdist) pl.xlabel("Radius (A)") pl.ylabel("Count") cc = fig.add_subplot(313) cc.set_position([0.56, 0.08, 0.4, 0.36]) cc.plot(abins, adist) pl.xlabel("Angle (deg)") pl.ylabel("Count") pl.show()
def plot_pos_rad_ang(atoms,types,basis,dup=0): Ntypes=len(set(types)) N=len(atoms) cs=["yellow","green","blue","red","purple","orange","black"] #Periodic Atoms (duplicated, needed for distributions) datoms,dtypes=duplicate26(atoms,types,basis) #Neighbors needed for angular distribution dneighbs=neighbors(datoms,5.0,style="full") #Radial Distribution [rbins,rdist]=rdf(datoms,inloop=N,cutoff=12.0) #Correlation of Angles [abins,adist]=adf(datoms,dneighbs,inloop=N) #Type sorted atoms lists tatoms=[list() for i in range(Ntypes)] if(dup==1): for i,j in enumerate(dtypes): tatoms[j].append(datoms[i]) else: for i,j in enumerate(types): tatoms[j].append(atoms[i]) v1,v2,v3=zip(*basis) #findsymmetry([v1,v2,v3],types,zip(xs,ys,zs)) fig=pl.figure(figsize=(12,6)) aa = fig.add_subplot(311,projection='3d') aa.set_position([0,0,0.5,1.0]) for i in range(Ntypes): ax,ay,az=zip(*tatoms[i]) aa.scatter(ax,ay,az,c=cs.pop(0),marker="o") aa.plot([0,v1[0]],[0,v1[1]],[0,v1[2]]) aa.plot([0,v2[0]],[0,v2[1]],[0,v2[2]]) aa.plot([0,v3[0]],[0,v3[1]],[0,v3[2]]) bb = fig.add_subplot(312) bb.set_position([0.56,0.55,0.4,0.4]) bb.plot(rbins,rdist) pl.xlabel("Radius (A)") pl.ylabel("Count") cc = fig.add_subplot(313) cc.set_position([0.56,0.08,0.4,0.36]) cc.plot(abins,adist) pl.xlabel("Angle (deg)") pl.ylabel("Count") pl.show()
print "Fitness= %s eV PerAtom Energy= %s eV\nkpoints= %sVolume= %sEnthalpy= %s"%(a,round(float(a)/N,3),kpoints.pop(0),volumes.pop(0),enthalpy.pop(0).strip()) if gencnt >= start: #plot_pos_rad_ang(atoms,types,pdup=pdup) #Periodic Atoms (duplicated) datoms,dtypes,dbasis=duplicate26(atoms,types,basis) #Neighbors needed for angular distribution dneighbs=neighbors(datoms,5.0,style="full") #Radial Distribution [rbins,rdist]=rdf(datoms,inloop=N,cutoff=12.0) #Correlation of Angles [abins,adist]=adf(datoms,dneighbs,inloop=N) #Type sorted atoms lists tatoms=[list() for i in range(Ntypes)] if(pdup==1): for i,j in enumerate(dtypes): tatoms[j].append(datoms[i]) else: for i,j in enumerate(types): tatoms[j].append(atoms[i]) fig=pl.figure(figsize=(12,6)) aa = fig.add_subplot(311,projection='3d') aa.set_position([0,0,0.5,1.0]) for i in range(Ntypes): ax,ay,az=zip(*tatoms[i])
3), kpoints.pop(0), volumes.pop(0), enthalpy.pop(0).strip()) if gencnt >= start: #plot_pos_rad_ang(atoms,types,pdup=pdup) #Periodic Atoms (duplicated) datoms, dtypes, dbasis = duplicate26(atoms, types, basis) #Neighbors needed for angular distribution dneighbs = neighbors(datoms, 5.0, style="full") #Radial Distribution [rbins, rdist] = rdf(datoms, inloop=N, cutoff=12.0) #Correlation of Angles [abins, adist] = adf(datoms, dneighbs, inloop=N) #Type sorted atoms lists tatoms = [list() for i in range(Ntypes)] if (pdup == 1): for i, j in enumerate(dtypes): tatoms[j].append(datoms[i]) else: for i, j in enumerate(types): tatoms[j].append(atoms[i]) fig = pl.figure(figsize=(12, 6)) aa = fig.add_subplot(311, projection='3d') aa.set_position([0, 0, 0.5, 1.0]) for i in range(Ntypes): ax, ay, az = zip(*tatoms[i])
def outcarADF(outcarfile,nbins,bl=-1.0,bw=-1.0): outcar=open(outcarfile,"r") tbinvals=list() #Grab ion types while True: line=outcar.readline() if "ions per type" in line: break atypes=map(int,line.split("=")[1].split()) #Grab basis vectors while True: line=outcar.readline() if "direct lattice vectors" in line: break basis=array([map(float,outcar.readline().split()[:3]) for i in range(3)]) lengths=array([basis[0][0],basis[1][1],basis[2][2]]) #Grab atom positions and perform adf calculation count=0 posit=False for line in outcar: if posit: if "--" in line: if len(atoms)==0: continue else: #Analysis if max(zip(*atoms)[0])<1.01: atoms=dot(array(atoms),basis) else: atoms=array(atoms) neighbs=voronoiNeighbors(atoms,basis,atypes,style='full') if bl!=-1 and bw!=-1: specbonds=[list() for i in range(len(atoms))] for i in range(len(atoms)): ai=atoms[i]#dot(atoms[i],basis) for j in neighbs[i]: aj=atoms[j]#dot(atoms[j],basis) d=dist_periodic(ai,aj,lengths) if fabs(d-bl)<bw: if d<1.0: print d print dist_periodic(ai,aj,lengths) print ai print aj exit(0) specbonds[i].append(j) else: specbonds=neighbs [angs,abins]=adf(atoms,specbonds,basis,nbins=nbins) tbinvals.append(abins) print count posit=False else: atoms.append(map(float,line.split()[:3])) elif "POSITION" in line: atoms=list() posit=True count+=1 return angs,tbinvals
def outcarADF(outcarfile, nbins, bl=-1.0, bw=-1.0): outcar = open(outcarfile, "r") tbinvals = list() #Grab ion types while True: line = outcar.readline() if "ions per type" in line: break atypes = map(int, line.split("=")[1].split()) #Grab basis vectors while True: line = outcar.readline() if "direct lattice vectors" in line: break basis = array( [map(float, outcar.readline().split()[:3]) for i in range(3)]) lengths = array([basis[0][0], basis[1][1], basis[2][2]]) #Grab atom positions and perform adf calculation count = 0 posit = False for line in outcar: if posit: if "--" in line: if len(atoms) == 0: continue else: #Analysis if max(zip(*atoms)[0]) < 1.01: atoms = dot(array(atoms), basis) else: atoms = array(atoms) neighbs = voronoiNeighbors(atoms, basis, atypes, style='full') if bl != -1 and bw != -1: specbonds = [list() for i in range(len(atoms))] for i in range(len(atoms)): ai = atoms[i] #dot(atoms[i],basis) for j in neighbs[i]: aj = atoms[j] #dot(atoms[j],basis) d = dist_periodic(ai, aj, lengths) if fabs(d - bl) < bw: if d < 1.0: print d print dist_periodic(ai, aj, lengths) print ai print aj exit(0) specbonds[i].append(j) else: specbonds = neighbs [angs, abins] = adf(atoms, specbonds, basis, nbins=nbins) tbinvals.append(abins) print count posit = False else: atoms.append(map(float, line.split()[:3])) elif "POSITION" in line: atoms = list() posit = True count += 1 return angs, tbinvals